この戦略は,MACD,RSI,ADXおよび他のモメント技術指標を組み合わせて,価格逆転のシグナルを特定し,強いトレンドが逆転したときに入るために逆転戦略を採用します.また,戦略は,利益をロックし,リスクを制御するためにストップロストと利益を設定します.
この戦略は,まず,価格動向を判断するためにMACD指標の高速および遅い移動平均クロスオーバーを組み合わせ,その後,RSI指標を使用して偽のブレイクアウトをフィルタリングし,実際の価格逆転が起きた後にのみ取引信号が生成されることを確保します.最後に,ADX指標を使用して,価格がトレンド状態に入ったかどうかを再び確認します.上記のすべての条件が同時に満たされた場合にのみ取引信号が生成されます.
具体的には,MACDの速い線がスローラインを横切ると,RSIは50を超えて上昇し,ADXは20を超えると,それは買い信号です.MACDの速い線がスローラインを下回ると,RSIは50を下回り,ADXは20を超えると,それは売り信号です.
この戦略の最大の利点は,複数の指標を組み合わせて,効果的にウィップソーと誤った信号をフィルタリングし,トレンド逆転の転換点を本当にロックし,より高い勝利率を得ることです.また,利益にストップロストと収益ロックを設定し,リスクを制御し,予想外の出来事の影響を効果的にヘッジすることができます.
この戦略の最大のリスクは,トレンド逆転の誤った判断である.例えば,価格が誤った判断に繋がる深遠な引き下げを行うこと.また,逆転後の新しいトレンドの持続可能性は十分な利益を得るのに十分ではない可能性があります.
解決策は,パラメータをさらに最適化し,ストップ損失率を調整したり,信号フィルタリングのためのより多くの補助指標を組み込むことです.
この戦略は,次の方向でさらに最適化できます.
MACDとRSIの組み合わせを最適化し,価格逆転判断の精度を向上させる.
KD,BOLLなど,より多くの指標のフィルタリングを増やして,相互を取り巻く指標の効果を形成する.
ストップロスの利差を異なる市場状況に応じて動的に調整する.
逆転後,実際の傾向に応じてリアルタイムで利益ポジションを変更します.
この戦略は,潜在的な価格逆転の機会を特定するために複数のモメントインジケーターを組み合わせます.パラメータ最適化,より多くの補助指標を組み込む,ストップ損失と利益戦略を動的に調整することで,市場のさまざまな取引機会をロックするために戦略の安定性と信頼性がさらに向上できます.
/*backtest start: 2023-11-28 00:00:00 end: 2023-12-28 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © AHMEDABDELAZIZZIZO //@version=5 strategy("Ta Strategy", overlay=true ) // inputs inversestrategy = input.bool(false, title = "Inverse Strategy",tooltip = "This option makes you reverse the strategy so that long signals become where to short ") direction = input.string(defval = "Both" , options = ["Both" , "Short" , "Long"] ) leftbars= input(6,title = " Left Bars" , group = "Support and resistance") rightbars = input(6, title = " Right Bars", group = "Support and resistance") macdfast = input(12, title = "MACD Fast", group = "MACD") macdslow = input(26, title = "MACD Slow",group = "MACD") macdsignal = input(7, "MACD Signal",group = "MACD") sellqty = input(50, title = "QTY to sell at TP 1") len = input(14, title="ADX Length" , group = "ADX") // sup and res res = fixnan(ta.pivothigh(high,leftbars,rightbars)) sup = fixnan(ta.pivotlow(low , leftbars,rightbars)) // macd macd =ta.ema(close,macdfast) - ta.ema(close,macdslow) signal=ta.ema(macd,macdsignal) //adx up = ta.change(high) down = -ta.change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = ta.rma(ta.tr,len) plusDI = 100 * ta.rma(plusDM, len) / truerange minusDI = 100 * ta.rma(minusDM, len) / truerange dx = 100 * ta.rma(math.abs(plusDI - minusDI) / (plusDI + minusDI), len) adx = ta.sma(dx, len) // start deal condition longcondition = ta.crossover(macd,signal) and close > res and ta.rsi(close,14) > 50 and plusDI > minusDI and adx > 20 shortcondition = ta.crossunder(macd,signal) and close < sup and ta.rsi(close,14) < 50 and plusDI < minusDI and adx > 20 //tp longtp1 = input.float(6, "Long TP 1", minval = 0.0, step = 0.25, group = "Exit LONG Orders") /100 longtp2 = input.float(12, "Long TP 2", minval = 0.0, step = 0.25, group = "Exit LONG Orders") /100 longsl1 = input.float(3.0, "Long SL", minval = 0.0, step = 0.25, group = "Exit LONG Orders") /100 longtakeprofit1 = (strategy.position_avg_price * (1 + longtp1)) longstoploss1 = (strategy.position_avg_price * (1 - longsl1)) longtakeprofit2 = (strategy.position_avg_price * (1 + longtp2)) //sl shorttp1 = input.float(6.0, "Short TP 1 ", minval = 0.0, step = 0.25, group = "Exit SHORT Orders")/100 shorttp2 = input.float(12.0, "Short TP 2", minval = 0.0, step = 0.25, group = "Exit SHORT Orders")/100 shortsl1 = input.float(3.0, "Short SL", minval = 0.0, step = 0.25, group = "Exit SHORT Orders")/100 shorttakeprofit1 = (strategy.position_avg_price * (1- shorttp1)) shortstoploss1 = (strategy.position_avg_price * (1 + shortsl1)) shorttakeprofit2 = (strategy.position_avg_price * (1- shorttp2)) //placeorders if inversestrategy == false if direction == "Both" if longcondition and strategy.opentrades == 0 strategy.entry("long" , strategy.long ) strategy.exit("exit long 1","long",qty_percent = sellqty ,limit = longtakeprofit1,stop = longstoploss1) strategy.exit("exit long 2","long",qty_percent = 100 ,limit = longtakeprofit2,stop = longstoploss1) if high >= longtakeprofit1 strategy.cancel("exit long 2") strategy.exit("exit long 3","long",qty_percent = 100 ,limit = longtakeprofit2,stop = strategy.position_avg_price) if shortcondition and strategy.opentrades == 0 strategy.entry("short",strategy.short) strategy.exit("exit short 1","short",qty_percent = sellqty ,limit = shorttakeprofit1,stop = shortstoploss1) strategy.exit("exit short 2","short",qty_percent = 100 ,limit = shorttakeprofit2,stop = shortstoploss1) if low <= shorttakeprofit1 strategy.cancel("exit short 2") strategy.exit("exit short 3","short",qty_percent = 100 ,limit = shorttakeprofit2,stop = strategy.position_avg_price) else if direction == "Long" if longcondition and strategy.opentrades == 0 strategy.entry("long" , strategy.long ) strategy.exit("exit long 1","long",qty_percent = sellqty ,limit = longtakeprofit1,stop = longstoploss1) strategy.exit("exit long 2","long",qty_percent = 100 ,limit = longtakeprofit2,stop = longstoploss1) if high >= longtakeprofit1 strategy.cancel("exit long 2") strategy.exit("exit long 3","long",qty_percent = 100 ,limit = longtakeprofit2,stop = strategy.position_avg_price) else if direction == "Short" if shortcondition and strategy.opentrades == 0 strategy.entry("short",strategy.short) strategy.exit("exit short 1","short",qty_percent = sellqty ,limit = shorttakeprofit1,stop = shortstoploss1) strategy.exit("exit short 2","short",qty_percent = 100 ,limit = shorttakeprofit2,stop = shortstoploss1) if low <= shorttakeprofit1 strategy.cancel("exit short 2") strategy.exit("exit short 3","short",qty_percent = 100 ,limit = shorttakeprofit2,stop = strategy.position_avg_price) else if direction == "Both" if shortcondition and strategy.opentrades == 0 strategy.entry("long" , strategy.long ) strategy.exit("exit long 1","long",qty_percent = sellqty ,limit = longtakeprofit1,stop = longstoploss1) strategy.exit("exit long 2","long",qty_percent = 100 ,limit = longtakeprofit2,stop = longstoploss1) if high >= longtakeprofit1 strategy.cancel("exit long 2") strategy.exit("exit long 3","long",qty_percent = 100 ,limit = longtakeprofit2,stop = strategy.position_avg_price) if longcondition and strategy.opentrades == 0 strategy.entry("short",strategy.short) strategy.exit("exit short 1","short",qty_percent = sellqty ,limit = shorttakeprofit1,stop = shortstoploss1) strategy.exit("exit short 2","short",qty_percent = 100 ,limit = shorttakeprofit2,stop = shortstoploss1) if low <= shorttakeprofit1 strategy.cancel("exit short 2") strategy.exit("exit short 3","short",qty_percent = 100 ,limit = shorttakeprofit2,stop = strategy.position_avg_price) else if direction == "Long" if shortcondition and strategy.opentrades == 0 strategy.entry("long" , strategy.long ) strategy.exit("exit long 1","long",qty_percent = sellqty ,limit = longtakeprofit1,stop = longstoploss1) strategy.exit("exit long 2","long",qty_percent = 100 ,limit = longtakeprofit2,stop = longstoploss1) if high >= longtakeprofit1 strategy.cancel("exit long 2") strategy.exit("exit long 3","long",qty_percent = 100 ,limit = longtakeprofit2,stop = strategy.position_avg_price) else if direction == "Short" if longcondition and strategy.opentrades == 0 strategy.entry("short",strategy.short) strategy.exit("exit short 1","short",qty_percent = sellqty ,limit = shorttakeprofit1,stop = shortstoploss1) strategy.exit("exit short 2","short",qty_percent = 100 ,limit = shorttakeprofit2,stop = shortstoploss1) if low <= shorttakeprofit1 strategy.cancel("exit short 2") strategy.exit("exit short 3","short",qty_percent = 100 ,limit = shorttakeprofit2,stop = strategy.position_avg_price) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// lsl1 = plot(strategy.position_size <= 0 ? na : longstoploss1, color=color.rgb(124, 11, 11), style=plot.style_linebr, linewidth=1) ltp1 = plot(strategy.position_size <= 0 ? na : longtakeprofit1, color=color.rgb(15, 116, 18), style=plot.style_linebr, linewidth=1) ltp2 = plot(strategy.position_size <= 0 ? na : longtakeprofit2, color=color.rgb(15, 116, 18), style=plot.style_linebr, linewidth=1) avg = plot(strategy.position_avg_price, color=color.rgb(255, 153, 0, 47), style=plot.style_linebr, linewidth=1) fill(ltp1,avg , color =strategy.position_size <= 0 ? na : color.rgb(82, 255, 97, 90)) fill(ltp2,ltp1 , color =strategy.position_size <= 0 ? na : color.rgb(82, 255, 97, 90)) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ssl1 = plot(strategy.position_size >= 0 ? na : shortstoploss1, color=color.red, style=plot.style_linebr, linewidth=1) stp1 = plot(strategy.position_size >= 0 ? na : shorttakeprofit2, color=color.green, style=plot.style_linebr, linewidth=1) stp2 = plot(strategy.position_size >= 0 ? na : shorttakeprofit1, color=color.green, style=plot.style_linebr, linewidth=1) fill(stp1,avg , color =strategy.position_size >= 0 ? na : color.rgb(30, 92, 35, 90)) fill(stp2,stp1 , color =strategy.position_size >= 0 ? na : color.rgb(30, 92, 35, 90)) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// resplot = plot(res, color=ta.change(res) ? na : #bf141446, linewidth=3, offset=-(rightbars+1), title="res") supplot = plot(sup, color=ta.change(sup) ? na : #118f113a, linewidth=3, offset=-(rightbars+1), title="sup")