Strategi ini menggabungkan RSI dinamis, CCI dan beberapa MA moving average untuk menerapkan strategi perdagangan kuantitatif yang didorong oleh banyak faktor.
Sinyal beli: MA12 melintasi MA26, CCI di bawah 100 (terlalu laris), Stoch KDJ di bawah 80 (terlalu laris)
Sinyal jual: RSI melintasi bawah ambang dinamis, Stoch KDJ di atas 80 (terlalu banyak dibeli)
Strategi ini menggabungkan beberapa indikator teknis dan penilaian yang didorong multi-faktor dengan penyesuaian parameter dan validasi statistik untuk mencapai hasil yang baik. Tetapi kompleksitas yang lebih tinggi, perlu untuk mencegah overfit, dan ukuran posisi kontrol dan stop loss untuk mengurangi penarikan maksimum.
/*backtest start: 2023-11-19 00:00:00 end: 2023-11-26 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="ATOM2.0", shorttitle="ATOM V2.0", overlay=false, default_qty_type=strategy.cash, currency=currency.USD, initial_capital=200, default_qty_type=strategy.cash, default_qty_value=100, pyramiding=10) // Set Parameter MA12 len12 = input(12, minval=1, title="Length") src12 = input(close, title="Source") ma12 = sma(src12, len12) //plot(ma12, color=color.blue, title="MA12") // Set Parameter MA26 len26 = input(26, minval=1, title="Length") src26 = input(close, title="Source") ma26 = sma(src26, len26) //plot(ma26, color=color.orange, title="MA12") //Stochastic RSI 14,3,3 smoothK_1 = input(3, minval=1) smoothD_1 = input(3, minval=1) lengthRSI = input(14, minval=1) lengthStoch = input(14, minval=1) src_1 = input(close, title="RSI Source_1") rsi1 = rsi(src_1, lengthRSI) k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK_1) d = sma(k, smoothD_1) //plot(k, color=color.red) //plot(d, color=color.yellow) //Stochastic RSI 5,4,3 smoothK_2 = input(4, minval=1) smoothD_2 = input(3, minval=1) lengthRSI_2 = input(5, minval=1) lengthStoch_2 = input(5, minval=1) src_2 = input(close, title="RSI Source_2") rsi2 = rsi(src_2, lengthRSI_2) k_2 = sma(stoch(rsi2, rsi2, rsi2, lengthStoch_2), smoothK_2) d_2 = sma(k_2, smoothD_2) //plot(k_2, color=color.white) //plot(d_2, color=color.green) // CCI cci = cci(close,26) //plot(cci,color=color.blue) // Dynamic RSI DZbuy = 0.1 DZsell = 0.1 Period = 14 Lb = 60 RSILine = rsi(close,Period) jh = highest(RSILine, Lb) jl = lowest(RSILine, Lb) jc = (wma((jh-jl)*0.5,Period) + wma(jl,Period)) Hiline = jh - jc * DZbuy Loline = jl + jc * DZsell R = (4 * RSILine + 3 * RSILine[1] + 2 * RSILine[2] + RSILine[3] ) / 10 plot(R, title='R', color=color.white, linewidth=1, transp=0) plot(Hiline, title='Hiline', color=color.yellow, linewidth=1, transp=0) plot(Loline, title='Loline', color=color.yellow, linewidth=1, transp=0) plot(jc, title='Jc', color=color.purple, linewidth=1, transp=50) col_1 = R > Hiline ? color.red:na col_2 = R < Loline ? color.green:na fill(plot(R, title='R', color=color.white, linewidth=1, transp=0), plot(Hiline, title='Hiline', color=color.yellow, linewidth=1, transp=0), color=col_1,transp=0) fill(plot(R, title='R', color=color.white, linewidth=1, transp=0), plot(Loline, title='Loline', color=color.yellow, linewidth=1, transp=0), color=col_2,transp=0) //------------------------------------------------------------------------------ // Calculate qty // Parameter fund = 10 // Fund per Contract in USD leverage = 100 // Leverage // Buy Condition buyCondition = (ma12>ma26 and cci<100 and k<80 and d<80 and k_2<80 and d_2<80 and crossover(k_2, d_2)) buy = (buyCondition == input(1)) alertcondition(buy, title='time to Long', message='Long!!!') //closeBuy = (cci>100 and cci<cci[1] and cci<cci[2]) closeBuy = (crossunder(R, Hiline) and k>80) alertcondition(closeBuy, title='Time to Close', message='Close Long') // Submit Orders strategy.entry(id="Long", qty=(fund*leverage)/close, long=true, when=buyCondition) strategy.close(id="Long", when=closeBuy)