この戦略は,主に二重移動平均をトレンド逆転から利益を得るための買い売り信号として使用する.短期移動平均が長期移動平均を超えると長引く.短期移動平均が長期移動平均を下回ると短引く.これは一般的なトレーリングストップ損失戦略に属している.
戦略はまず2つの移動平均を設定し,短期の20日間MAと長期の60日間MAを設定し,両MAsの交差状況を判断し,エントリーを決定します.
短期MAが長期MAを超えると上昇傾向を示し,長期MAを下回る傾向を示し,短期MAがダウン傾向を示します.
ストップ・ロスは,最大利益を得るため,最高価格と最低価格をベースにストップ・ストップをします.
このコードの主な論理は
この戦略の利点は次のとおりです.
リスクもあります:
リスクに対処するには
この戦略は,次の分野においてさらに最適化できます.
多条件入力のための RSI のような他のフィルターを追加します 偽ブレイクを避けるためです
最適なパラメータミックスを見つけるためにMA期間を最適化します. 漸進的な前進で異なる期間をテストできます.
バックテストの計算を通じて最適な範囲を見つけるためにストップ損失範囲を最適化します. ダイナミックストップ損失も使用できます.
ストップ・ロスの出口後に再入口ロジックを設定し,取引頻度を減らす.
トレンドが不透明なときに取引を一時停止するためにトレンドインジケーターと組み合わせます
ポジションのサイズと市場状況に基づいて動的なストップロスを追加します.
概要すると,ダブルMA逆転戦略は,ダブルMAクロスオーバーを通じてトレンドターニングポイントを特定し,全体的にシンプルで実用的です.しかし,パラメータ調整,ストップ損失最適化,戦略の有効性を最大化するためにフィルターを追加する必要があるリスクがあります.細心の最適化と規律的なリスク管理により,安定した利益をもたらすスウィング取引戦略になることができます.
/*backtest start: 2023-09-23 00:00:00 end: 2023-10-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Noro's Bands Scalper Strategy v1.4", shorttitle = "Scalper str 1.4", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %") needbe = input(true, defval = true, title = "Bands Entry") needct = input(false, defval = false, title = "Counter-trend entry") needdb = input(true, defval = true, title = "Double Body") len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period") needbb = input(true, defval = true, title = "Show Bands") needbg = input(true, defval = true, title = "Show Background") src = close //PriceChannel 1 lasthigh = highest(src, len) lastlow = lowest(src, len) center = (lasthigh + lastlow) / 2 //Distance dist = abs(src - center) distsma = sma(dist, len) hd = center + distsma ld = center - distsma hd2 = center + distsma * 2 ld2 = center - distsma * 2 //Trend trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1] //Lines colo = needbb == false ? na : black plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2") plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1") plot(center, color = colo, linewidth = 1, transp = 0, title = "center") plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1") plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2") //Background col = needbg == false ? na : trend == 1 ? lime : red bgcolor(col, transp = 80) //Body body = abs(close - open) smabody = needdb == false ? ema(body, 30) : ema(body, 30) * 2 candle = high - low //Signals bar = close > open ? 1 : close < open ? -1 : 0 up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0 dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0 up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0 dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0 if up7 == 1 or up8 == 1 strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na) if dn7 == 1 or dn8 == 1 strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)