该策略是一个结合了自适应动量和马丁格尔仓位管理的全自动交易系统。它采用多层技术指标进行市场分析,包括自编码器平滑处理、CNN模拟动量特征提取以及基于波动率的交易信号过滤。系统通过马丁格尔方法动态调整仓位大小,在固定止盈止损的基础上实现风险收益的平衡。
策略运作基于三个核心模块: 1. 数据预处理模块 - 使用SMA实现类自编码器的价格平滑,过滤市场噪音。 2. 信号生成模块 - 通过计算价格与长期均线差值模拟CNN特征提取,结合波动率阈值筛选高概率交易机会。 3. 仓位管理模块 - 实现马丁格尔式的仓位调整,在连续亏损时按比例增加仓位,盈利后恢复基准仓位。
该策略通过结合现代量化交易技术和经典的马丁格尔方法,构建了一个兼具理论基础和实用性的交易系统。虽然存在一定风险,但通过合理的参数设置和严格的风险控制,该策略有望在数字货币市场中获得稳定收益。
/*backtest
start: 2024-12-06 00:00:00
end: 2025-01-04 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Adaptive Crypto Trading Strategy with Martingale", shorttitle = "ACTS_w_MG_V1",overlay=true)
// Inputs
smoothing_length = input.int(14, title="Smoothing Length (Autoencoder)")
momentum_window = input.int(21, title="Momentum Window (CNN)")
volatility_threshold = input.float(0.02, title="Volatility Threshold (GAN Simulation)")
take_profit = input.float(0.05, title="Take Profit (%)")
stop_loss = input.float(0.02, title="Stop Loss (%)")
// Martingale Inputs
base_lot_size = input.float(1, title="Base Lot Size") // Initial trade size
multiplier = input.float(2, title="Martingale Multiplier") // Lot size multiplier after a loss
max_lot_size = input.float(2, title="Maximum Lot Size") // Cap on lot size
var float lot_size = base_lot_size // Initialize the lot size
// Step 1: Data Smoothing (Autoencoder)
smoothed_price = ta.sma(close, smoothing_length)
// Step 2: Feature Extraction (Momentum - CNN Simulation)
momentum = ta.sma(close, momentum_window) - close
volatility = ta.stdev(close, momentum_window)
// Step 3: Entry Conditions (GAN-Inspired Pattern Detection)
long_condition = (momentum > 0 and volatility > volatility_threshold)
short_condition = (momentum < 0 and volatility > volatility_threshold)
// Martingale Logic
if (strategy.closedtrades > 0)
if (strategy.closedtrades.profit(strategy.closedtrades - 1) < 0)
lot_size := math.min(lot_size * multiplier, max_lot_size) // Increase lot size after a loss, but cap it
else
lot_size := base_lot_size // Reset lot size after a win or on the first trade
// Step 4: Take Profit and Stop Loss Management
long_take_profit = close * (1 + take_profit)
long_stop_loss = close * (1 - stop_loss)
short_take_profit = close * (1 - take_profit)
short_stop_loss = close * (1 + stop_loss)
// Execute Trades
if (long_condition)
strategy.entry("Long", strategy.long, qty=lot_size, stop=long_stop_loss, limit=long_take_profit)
if (short_condition)
strategy.entry("Short", strategy.short, qty=lot_size, stop=short_stop_loss, limit=short_take_profit)