🚀 Initial commit: Diamond Hands Trading Bot
This commit is contained in:
167
app.py
Normal file
167
app.py
Normal file
@@ -0,0 +1,167 @@
|
||||
"""
|
||||
🚀💎 DIAMOND HANDS TRADING BOT 💎🚀
|
||||
A WSB-inspired crypto trading bot - TO THE MOON!
|
||||
"""
|
||||
import random
|
||||
from datetime import datetime
|
||||
from flask import Flask, render_template, jsonify
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
# Simulated portfolio
|
||||
portfolio = {
|
||||
"balance": 10000.00,
|
||||
"holdings": {},
|
||||
"total_gains": 0.0,
|
||||
"trades": []
|
||||
}
|
||||
|
||||
# Meme-worthy crypto symbols
|
||||
CRYPTO_TICKERS = ["BTC", "ETH", "DOGE", "SHIB", "PEPE", "BONK", "WIF", "FLOKI"]
|
||||
|
||||
# WSB-style messages
|
||||
BULL_MESSAGES = [
|
||||
"🚀 TO THE MOON! 🌙",
|
||||
"💎🙌 DIAMOND HANDS BABY! 💎🙌",
|
||||
"🦍 APES TOGETHER STRONG! 🦍",
|
||||
"TENDIES INCOMING! 🍗🍗🍗",
|
||||
"BUY THE DIP, RETARD! 📈",
|
||||
"HODL! NEVER SELL! 💪",
|
||||
"THIS IS THE WAY 🎯",
|
||||
"STONKS ONLY GO UP! 📊",
|
||||
]
|
||||
|
||||
BEAR_MESSAGES = [
|
||||
"💀 GUH... 💀",
|
||||
"📉 BAGS ARE HEAVY...",
|
||||
"🤡 I'M FINANCIALLY RUINED 🤡",
|
||||
"WIFE'S BOYFRIEND IS MAD 😤",
|
||||
"BEHIND WENDY'S DUMPSTER TIME 🍔",
|
||||
"LOSS PORN INCOMING 📸",
|
||||
]
|
||||
|
||||
|
||||
def get_random_price(ticker: str) -> float:
|
||||
"""Generate a random price for a ticker."""
|
||||
base_prices = {
|
||||
"BTC": 42000, "ETH": 2200, "DOGE": 0.08,
|
||||
"SHIB": 0.000009, "PEPE": 0.0000012,
|
||||
"BONK": 0.000015, "WIF": 2.50, "FLOKI": 0.00003
|
||||
}
|
||||
base = base_prices.get(ticker, 100)
|
||||
variance = base * 0.1 # 10% variance
|
||||
return round(base + random.uniform(-variance, variance), 8)
|
||||
|
||||
|
||||
def execute_trade() -> dict:
|
||||
"""Execute a random trade like a true degen."""
|
||||
global portfolio
|
||||
|
||||
ticker = random.choice(CRYPTO_TICKERS)
|
||||
action = random.choice(["BUY", "SELL"])
|
||||
price = get_random_price(ticker)
|
||||
|
||||
# Random quantity based on price
|
||||
if price > 100:
|
||||
quantity = round(random.uniform(0.001, 0.1), 6)
|
||||
elif price > 1:
|
||||
quantity = round(random.uniform(1, 100), 4)
|
||||
else:
|
||||
quantity = round(random.uniform(10000, 1000000), 0)
|
||||
|
||||
trade_value = price * quantity
|
||||
pnl = 0.0
|
||||
|
||||
if action == "BUY":
|
||||
if portfolio["balance"] >= trade_value:
|
||||
portfolio["balance"] -= trade_value
|
||||
if ticker in portfolio["holdings"]:
|
||||
portfolio["holdings"][ticker]["quantity"] += quantity
|
||||
portfolio["holdings"][ticker]["avg_price"] = (
|
||||
portfolio["holdings"][ticker]["avg_price"] + price
|
||||
) / 2
|
||||
else:
|
||||
portfolio["holdings"][ticker] = {
|
||||
"quantity": quantity,
|
||||
"avg_price": price
|
||||
}
|
||||
message = random.choice(BULL_MESSAGES)
|
||||
else:
|
||||
return {"error": "NOT ENOUGH TENDIES! 💸"}
|
||||
else: # SELL
|
||||
if ticker in portfolio["holdings"] and portfolio["holdings"][ticker]["quantity"] >= quantity:
|
||||
avg_price = portfolio["holdings"][ticker]["avg_price"]
|
||||
pnl = (price - avg_price) * quantity
|
||||
portfolio["balance"] += trade_value
|
||||
portfolio["total_gains"] += pnl
|
||||
portfolio["holdings"][ticker]["quantity"] -= quantity
|
||||
|
||||
if portfolio["holdings"][ticker]["quantity"] <= 0:
|
||||
del portfolio["holdings"][ticker]
|
||||
|
||||
message = random.choice(BULL_MESSAGES if pnl >= 0 else BEAR_MESSAGES)
|
||||
else:
|
||||
return {"error": "CAN'T SELL WHAT YOU DON'T HAVE, RETARD! 🤡"}
|
||||
|
||||
trade = {
|
||||
"timestamp": datetime.now().strftime("%H:%M:%S"),
|
||||
"action": action,
|
||||
"ticker": ticker,
|
||||
"quantity": quantity,
|
||||
"price": price,
|
||||
"value": round(trade_value, 2),
|
||||
"pnl": round(pnl, 2),
|
||||
"message": message
|
||||
}
|
||||
|
||||
portfolio["trades"].insert(0, trade)
|
||||
portfolio["trades"] = portfolio["trades"][:20] # Keep last 20 trades
|
||||
|
||||
return trade
|
||||
|
||||
|
||||
@app.route("/")
|
||||
def index():
|
||||
"""Render the main trading dashboard."""
|
||||
return render_template("index.html")
|
||||
|
||||
|
||||
@app.route("/api/portfolio")
|
||||
def get_portfolio():
|
||||
"""Get current portfolio state."""
|
||||
# Calculate current holdings value
|
||||
holdings_value = sum(
|
||||
get_random_price(ticker) * data["quantity"]
|
||||
for ticker, data in portfolio["holdings"].items()
|
||||
)
|
||||
|
||||
return jsonify({
|
||||
"balance": round(portfolio["balance"], 2),
|
||||
"holdings": portfolio["holdings"],
|
||||
"holdings_value": round(holdings_value, 2),
|
||||
"total_value": round(portfolio["balance"] + holdings_value, 2),
|
||||
"total_gains": round(portfolio["total_gains"], 2),
|
||||
"trades": portfolio["trades"]
|
||||
})
|
||||
|
||||
|
||||
@app.route("/api/trade", methods=["POST"])
|
||||
def trade():
|
||||
"""Execute a random trade."""
|
||||
result = execute_trade()
|
||||
return jsonify(result)
|
||||
|
||||
|
||||
@app.route("/api/prices")
|
||||
def get_prices():
|
||||
"""Get current prices for all tickers."""
|
||||
prices = {ticker: get_random_price(ticker) for ticker in CRYPTO_TICKERS}
|
||||
return jsonify(prices)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("\n" + "="*60)
|
||||
print("🚀💎 DIAMOND HANDS TRADING BOT ACTIVATED 💎🚀")
|
||||
print("="*60)
|
||||
print("\n🦍 APES TOGETHER STRONG! Starting server...\n")
|
||||
app.run(debug=True, port=6969, host="0.0.0.0")
|
||||
Reference in New Issue
Block a user