Strategi ini adalah sistem perdagangan automatik berdasarkan isyarat crossover purata bergerak, yang dioptimumkan melalui nisbah risiko-balasan tetap.
Logik teras bergantung pada isyarat silang yang dihasilkan oleh dua purata bergerak (10 tempoh dan 30 tempoh). Sistem menghasilkan isyarat panjang apabila MA pantas melintasi di atas MA perlahan, dan isyarat pendek apabila MA pantas melintasi di bawah. Selepas setiap kemasukan, sistem secara automatik mengira tahap stop-loss berdasarkan peratusan kerugian 2% yang telah ditetapkan dan menetapkan sasaran mengambil keuntungan mengikut nisbah risiko-balasan 2.5. Pendekatan ini memastikan setiap perdagangan mempunyai ciri risiko-balasan yang konsisten.
Strategi ini menggabungkan kaedah analisis teknikal klasik dengan konsep pengurusan risiko moden untuk membina sistem dagangan yang lengkap. Walaupun ia mempunyai batasan tertentu, pengoptimuman dan penambahbaikan berterusan membolehkan strategi untuk mengekalkan prestasi yang stabil dalam keadaan pasaran yang berbeza. Kuncinya terletak pada sentiasa menyesuaikan tetapan parameter berdasarkan hasil dagangan sebenar untuk mencari konfigurasi yang paling sesuai untuk persekitaran pasaran semasa.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-25 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("SOL 15m 2.5 R:R Strategy", overlay=true, margin_long=100, margin_short=100, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.1) //--------------------------------------------------- // User Inputs //--------------------------------------------------- // sym = input.symbol("swap", "Symbol") timeframe = input.timeframe("15", "Timeframe") fastLength = input.int(10, "Fast MA Length") slowLength = input.int(30, "Slow MA Length") stopLossPerc = input.float(2.0, "Stop Loss %", step=0.1) // This is an example; adjust to achieve ~45% win rate RR = input.float(2.5, "Risk to Reward Ratio", step=0.1) //--------------------------------------------------- // Data Sources //--------------------------------------------------- price = request.security("swap", timeframe, close) // Compute moving averages fastMA = ta.sma(price, fastLength) slowMA = ta.sma(price, slowLength) // Entry Conditions longCondition = ta.crossover(fastMA, slowMA) shortCondition = ta.crossunder(fastMA, slowMA) //--------------------------------------------------- // Stop Loss and Take Profit Calculation //--------------------------------------------------- var entryPrice = 0.0 if (strategy.position_size == 0) // not in a position if longCondition // Long entry entryPrice := price strategy.entry("Long", strategy.long) if shortCondition // Short entry entryPrice := price strategy.entry("Short", strategy.short) if strategy.position_size > 0 // We are in a long position if strategy.position_avg_price > 0 and strategy.position_size > 0 longStop = strategy.position_avg_price * (1 - stopLossPerc/100) longTarget = strategy.position_avg_price * (1 + (stopLossPerc/100)*RR) strategy.exit("Long Exit", "Long", stop=longStop, limit=longTarget) if strategy.position_size < 0 // We are in a short position if strategy.position_avg_price > 0 and strategy.position_size < 0 shortStop = strategy.position_avg_price * (1 + stopLossPerc/100) shortTarget = strategy.position_avg_price * (1 - (stopLossPerc/100)*RR) strategy.exit("Short Exit", "Short", stop=shortStop, limit=shortTarget) //--------------------------------------------------- // Plotting //--------------------------------------------------- plot(fastMA, color=color.new(color.teal, 0), title="Fast MA") plot(slowMA, color=color.new(color.orange, 0), title="Slow MA")