v0.4 Hybrid: MIN $12 + 7% Position Sizing (optimal volume + safety)
This commit is contained in:
parent
567de3ecf8
commit
49bd77c112
|
|
@ -20,8 +20,8 @@ if not API_KEY or not API_SECRET:
|
||||||
# CONSTANTS - DYNAMIC SIZING
|
# CONSTANTS - DYNAMIC SIZING
|
||||||
SYMBOLS = ['BTCUSDT', 'ETHUSDT', 'BNBUSDT', 'XRPUSDT', 'SOLUSDT']
|
SYMBOLS = ['BTCUSDT', 'ETHUSDT', 'BNBUSDT', 'XRPUSDT', 'SOLUSDT']
|
||||||
TRACKED_COINS = ['BTC', 'ETH', 'BNB', 'XRP', 'SOL']
|
TRACKED_COINS = ['BTC', 'ETH', 'BNB', 'XRP', 'SOL']
|
||||||
MIN_USDT = 5.00
|
MIN_TRADE_USDT = 12.00 # Hybrid minimum
|
||||||
MAX_POSITION_PCT = 0.05
|
MAX_POSITION_PCT = 0.07 # Hybrid 7%
|
||||||
TAKE_PROFIT_PCT = 0.015
|
TAKE_PROFIT_PCT = 0.015
|
||||||
STOP_LOSS_PCT = -0.008
|
STOP_LOSS_PCT = -0.008
|
||||||
CYCLE_SEC = 60
|
CYCLE_SEC = 60
|
||||||
|
|
@ -65,7 +65,7 @@ class TradingBotV04:
|
||||||
)
|
)
|
||||||
|
|
||||||
self.portfolio_value = portfolio_value
|
self.portfolio_value = portfolio_value
|
||||||
self.max_trade_usdt = max(MIN_USDT, portfolio_value * MAX_POSITION_PCT)
|
self.max_trade_usdt = max(MIN_TRADE_USDT, portfolio_value * MAX_POSITION_PCT)
|
||||||
|
|
||||||
logger.info(f"[v0.4] USDT=${usdt_available:.2f} | Portfolio=${portfolio_value:.2f} | MaxTrade=${self.max_trade_usdt:.2f}")
|
logger.info(f"[v0.4] USDT=${usdt_available:.2f} | Portfolio=${portfolio_value:.2f} | MaxTrade=${self.max_trade_usdt:.2f}")
|
||||||
return usdt_available, portfolio_value
|
return usdt_available, portfolio_value
|
||||||
|
|
@ -184,7 +184,7 @@ class TradingBotV04:
|
||||||
|
|
||||||
usdt_free, portfolio_val = self.get_fresh_balance()
|
usdt_free, portfolio_val = self.get_fresh_balance()
|
||||||
|
|
||||||
if usdt_free < MIN_USDT:
|
if usdt_free < MIN_TRADE_USDT:
|
||||||
logger.warning(f"Insufficient capital: ${usdt_free:.2f} < ${MIN_USDT}")
|
logger.warning(f"Insufficient capital: ${usdt_free:.2f} < ${MIN_USDT}")
|
||||||
logger.info("=" * 70)
|
logger.info("=" * 70)
|
||||||
return
|
return
|
||||||
|
|
@ -204,8 +204,8 @@ class TradingBotV04:
|
||||||
best_signal = symbol
|
best_signal = symbol
|
||||||
break
|
break
|
||||||
|
|
||||||
if best_signal and usdt_free >= MIN_USDT:
|
if best_signal and usdt_free >= MIN_TRADE_USDT:
|
||||||
trade_amount = min(self.max_trade_usdt, usdt_free * 0.5)
|
trade_amount = min(max(MIN_TRADE_USDT, self.max_trade_usdt), usdt_free * 0.5)
|
||||||
self.place_buy_order(best_signal, trade_amount)
|
self.place_buy_order(best_signal, trade_amount)
|
||||||
|
|
||||||
logger.info(f"[CYCLE-END] Trades: {len(self.active_trades)} | USDT: ${usdt_free:.2f} | Portfolio: ${portfolio_val:.2f} [v0.4]")
|
logger.info(f"[CYCLE-END] Trades: {len(self.active_trades)} | USDT: ${usdt_free:.2f} | Portfolio: ${portfolio_val:.2f} [v0.4]")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue