この戦略は,トレンド方向を決定するために長期RMAと短期EMAクロスオーバーを使用する.ストップ損失のために最近の最高高値または最低低値を追いかける.また,RMAの周りに偽のブレイクを避けるためのノートレードゾーンがあります.
トレンドを決定するために,長期RMAと短期EMAを使用します.長期RMAを下回る傾向を示します.上回る傾向を示します.
価格が最近の最高値を超えると,ストップ・ロスのように最高値を追います.価格が最近の最低値を下回ると,ストップ・ロスのように最低値を追います.
RMAの周りに取引禁止ゾーンを設定する.価格がゾーン内にあるときにポジションを開かないようにする.ゾーン範囲は,RMA値の特定のパーセントに基づいています.
入場後に利益のパーセントで出口ポジションに利益を取る価格を設定します.
二重移動平均のクロスオーバーは,トレンド方向を確実に決定します.
ストップ・ロスはトレンドに沿って動きます
貿易禁止区域は 偽の脱出信号をフィルターします
利潤を取ることで 戦略が積極的に 収益性の高い取引を締めくくることができます
移動平均のクロスオーバーの遅延は損失を増やす可能性があります.
ストップ・ロスは価格に近づいてすぎるとノイズで停止する可能性があります
貿易禁止地帯が広すぎると 機会が失われるかもしれません
間に合わないと 損失が増える
解決 できる 方法:
遅延を減らすために移動平均パラメータを最適化します
過敏を防ぐためにストップロスを少し広げます
取引を逃すのを防ぐために,取引禁止区域範囲を調整するテスト.
最大損失を制限するために他のストップ損失メカニズムを追加します.
他の移動平均の組み合わせをテストして 適性を見付けます
安定性を高めるためにスプレッド,MACDなどを追加します.
マシン学習を使って パーマータをスマートに最適化します
逆トレンドの取引を避けるためにトレンド強さを組み込む.
金銭管理を最適化して 勝率を上げます
この戦略は,トレンド方向を決定するために二重移動平均クロスオーバーを使用し,トレンド利益をロックするためにトライリングストップとノートレードゾーンを組み合わせます.このフレームワークはシンプルで拡張可能です.パラメータ範囲を調整し,出口を最適化し,追加のフィルターとシグナルを組み込み,異なる市場で堅牢なものにすることができます.
/*backtest start: 2023-08-24 00:00:00 end: 2023-09-12 00:00:00 period: 3h 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/ // © PatrickGwynBuckley //@version=5 //var initialCapital = strategy.equity strategy("PB Trend Scalper", "PB Trend Scalper", overlay = true) shortma = input.int(55, title="quick ma's") longma = input.int(100, title="long ma's") ema55h = ta.ema(high, shortma) ema55l = ta.ema(low, shortma) ema200h = ta.rma(high, longma) ema200l = ta.rma(low, longma) stock = ta.stoch(close, high, low, 14) lev = input.int(3, title="leverage") hhVal = input.int(170, title="Highest high period") llVal = input.int(170, title="Lowest low period") hh = ta.highest(high, hhVal) ll = ta.lowest(low, llVal) //plot(stock) plot(hh, color=color.new(color.green, 50)) plot(ll, color=color.new(color.red, 50)) var float downtrade = 0 p = input.float(3.0, title="no trade zone") l = 3 emadistlong = ema200h + ((ema200h/100)*p) emadistshort = ema200l - ((ema200h/100)*p) plot(ema55h) plot(ema55l) ntl = plot(emadistlong, color=color.new(color.red, 10)) nts = plot(emadistshort, color=color.new(color.red, 10)) fill(ntl, nts, color=color.new(color.red, 90)) //position size EntryPrice = close //positionValue = initialCapital positionSize = (strategy.equity*lev) / EntryPrice //plot(strategy.equity) //standard short if ema55h < ema200l and close[2] < ema55l and close[1] > ema55l and high[1] < ema55h and close < ema55h and ema55h < emadistshort and strategy.opentrades == 0// and stock > 85 strategy.entry("short", strategy.short, qty=positionSize, comment="short") downtrade := 1 //reset count if (ta.crossunder(ema55h, ema200l)) and downtrade == 1 downtrade := 0 //standard long if ema55l > ema200h and close[2] > ema55h and close[1] < ema55h and low[1] > ema55l and close > ema55l and ema55l > emadistlong and strategy.opentrades <= 1// and stock < 15 strategy.entry("long", strategy.long, qty=positionSize, comment="long") downtrade := 0 //RESET COUNT ON MA CROSS if (ta.crossover(ema55l, ema200h)) and downtrade == 0 downtrade := 1 longclose2 = low < ll[1] or low < emadistshort //close < open and open<open[1] and open[2] < open[3] and open[3] < emadistshort//close < ta.lowest(low, 20)// shortclose2 = high > hh[1] or high>emadistlong//close > open and open>open[1] and open[2]>open[3] and open[3] > emadistlong//high > emadistlong//close > ta.highest(high, 20)// sl = 3.5 tp = input.float(6.9, title="take profit %") tp2 = 10 strategy.exit("long exit", "long", profit = (strategy.position_avg_price*(tp)))//, loss = (strategy.position_avg_price*(sl))) strategy.close("long", when = longclose2, comment = "long exit") //strategy.close("long", when = (downtrade == 1), comment = "long exit") //strategy.exit("long exit", "long2", profit = (strategy.position_avg_price*(tp2)))//, loss = (strategy.position_avg_price*(sl))) //strategy.close ("long2", when = longclose2, comment = "long exit") //strategy.close("long", when = (downtrade == 1), comment = "long exit") strategy.exit("short exit", "short", profit = (strategy.position_avg_price*(tp)))//, loss = (strategy.position_avg_price*(sl)))//, loss = 300) strategy.close("short", when = shortclose2, comment = "short exit") //strategy.close("short", when = (downtrade == 0), comment = "short exit") //strategy.exit("short exit", "short2", profit = (strategy.position_avg_price*(tp2)))//, loss = (strategy.position_avg_price*(sl))) //strategy.close ("short2", when = shortclose2, comment = "short exit") //strategy.close("short2", when = (downtrade == 0), comment = "short exit") //if (strategy.exit("long exit", "long")) //downtrade := 1 //else // downtrade := 0