Strategi ini menggabungkan penunjuk purata bergerak dan penunjuk indeks pergerakan arah (DMI) untuk menjana isyarat beli dan jual berdasarkan silang dua penunjuk.
Strategi ini menggabungkan kekuatan purata bergerak dan penunjuk momentum untuk pengesahan isyarat berganda, saling melengkapi untuk meningkatkan keuntungan. Sementara itu, penghentian kerugian yang dinamis secara berkesan mengawal risiko. Pengoptimuman parameter dan penyempurnaan strategi yang lebih lanjut dapat meningkatkan keuntungan dan kestabilan.
/*backtest start: 2023-02-22 00:00:00 end: 2024-02-28 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Combined EMA and DMI Strategy with Enhanced Table", overlay=true) // Input parameters for EMA shortTermEMA = input.int(9, title="Short-Term EMA Period") longTermEMA = input.int(21, title="Long-Term EMA Period") riskPercentageEMA = input.float(1, title="Risk Percentage EMA", minval=0.1, maxval=5, step=0.1) // Calculate EMAs emaShort = ta.ema(close, shortTermEMA) emaLong = ta.ema(close, longTermEMA) // EMA Crossover Strategy longConditionEMA = emaShort > emaLong and emaShort[1] <= emaLong[1] shortConditionEMA = emaShort < emaLong and emaShort[1] >= emaLong[1] // Input parameters for DMI adxlen = input(17, title="ADX Smoothing") dilen = input(17, title="DI Length") // DMI Logic dirmov(len) => up = ta.change(high) down = -ta.change(low) truerange = ta.tr plus = fixnan(100 * ta.rma(up > down and up > 0 ? up : 0, len) / truerange) minus = fixnan(100 * ta.rma(down > up and down > 0 ? down : 0, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adxValue = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) [adxValue, plus, minus] [adxValue, up, down] = adx(dilen, adxlen) // DMI Conditions buyConditionDMI = up > down or (up and adxValue > down) sellConditionDMI = down > up or (down and adxValue > up) // Combined Conditions for Entry longEntryCondition = longConditionEMA and buyConditionDMI shortEntryCondition = shortConditionEMA and sellConditionDMI // Combined Conditions for Exit longExitCondition = shortConditionEMA shortExitCondition = longConditionEMA // Enter long trade based on combined conditions if (longEntryCondition) strategy.entry("Long", strategy.long) // Enter short trade based on combined conditions if (shortEntryCondition) strategy.entry("Short", strategy.short) // Exit trades if (longExitCondition) strategy.close("Long") if (shortExitCondition) strategy.close("Short") // Plot EMAs plot(emaShort, color=color.blue, title="Short-Term EMA") plot(emaLong, color=color.red, title="Long-Term EMA") // Create and fill the enhanced table var tbl = table.new(position.top_right, 4, 1) if (barstate.islast) table.cell(tbl, 0, 0, "ADX: " + str.tostring(adxValue), bgcolor=color.new(color.red, 90), width=15, height=4) table.cell(tbl, 1, 0, "+DI: " + str.tostring(up), bgcolor=color.new(color.blue, 90), width=15, height=4) table.cell(tbl, 2, 0, "-DI: " + str.tostring(down), bgcolor=color.new(color.orange, 90), width=15, height=4)