唐
この戦略の核心ロジックは,
速経路を計算する:最近のfast root K線の最高価格を経路上線,最低価格を経路下線とする.経路の中間線を経路上線の平均値とする.
遅い通道を計算する: 最近のスロールーツK線の最高価格を通路上,最低価格を通路下とする.
持っていないとき,多信号で価格がスローパネルに触れる.空信号で価格がスローパネルに触れる.
取引開始後,急通路の中央線を停止線として使用します.
持股の過程で,取引信号と開場信号が逆のとき,平衡は終了します.
この戦略には以下のような利点があります.
ルールがシンプルで実行が簡単である.唐
カスタマイズ可能なパラメータ. ユーザーは取引品種や時間周期に応じてパラメータを調整し,異なる市場環境に対応できます.
衝突する取引信号は少ない. 価格が通路を突破して上下を走るだけで,一般的な指標が誤った信号を生む状況を回避する.
自動ストップ管理リスク.高速通路の中央線移動ストップ,単一のストップを制限する.
この戦略は,次のリスクに直面しています:
価格波動の傾向がはっきりしない場合,ストップ損失が増える.これは戦略的収益性に影響を与える.
逆転は大きくなる.トレンドが転換する時,前向きの浮出損失は実際の損失に変換される.
パラメータの設定が不適切である場合,極端または保守的になりかねない.これは,繰り返しテストによって適切な値を得ることが必要である.
自動化取引の依存度が高い.サーバーの安定性を確保し,異常が正常な自動化取引を妨げないようにする必要があります.
上記のリスクを軽減するために,パラメータ設定を最適化し,倉庫のサイズを適切に制限し,風力制御モジュールを追加することによって改善することができます.
この戦略は,以下の方向から最適化することができます:
トレンドインデックスなどの指標を組み合わせて判断する傾向分析など.
パラメータ設定を最適化して,異なる取引種に適するようにします.例えば,高速な通路周期,ポジションサイズなど.
風制御モジュールを追加します.例えば最大撤回,日中の損失制限など.リスクイベントが大きな損失を引き起こすのを避ける.
トレーリングストップなどのダイナミックストップを活用して,ストップを市場傾向に合わせる.
唐
/*backtest start: 2024-01-26 00:00:00 end: 2024-02-15 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2020 //@version=4 strategy("Noro's SimpleTurtle Strategy", shorttitle = "SimpleTurtle str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") sizelong = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot long, %") sizeshort = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot short, %") fast = input(20, minval=1) slow = input(50, minval=1) showof = input(true, defval = true, title = "Show offset") showll = input(true, defval = true, title = "Show lines") showdd = input(false, defval = true, title = "Show label (drawdown)") showbg = input(true, defval = true, title = "Show background") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Donchian price channel fast hf = highest(high, fast) lf = lowest(low, fast) center = (hf + lf) / 2 //Donchian price chennal slow hs = highest(high, slow) ls = lowest(low, slow) //Lines colorpc = showll ? color.blue : na colorsl = showll ? color.red : na offset = showof ? 1 : 0 plot(hs, offset = offset, color = colorpc) plot(ls, offset = offset, color = colorpc) plot(center, offset = offset, color = colorsl) //Background size = strategy.position_size colorbg = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na bgcolor(colorbg, transp = 70) //Orders truetime = true lotlong = 0.0 lotshort = 0.0 lotlong := size != size[1] ? strategy.equity / close * sizelong / 100 : lotlong[1] lotshort := size != size[1] ? strategy.equity / close * sizeshort / 100 : lotshort[1] //Orders strategy.entry("Long", strategy.long, lotlong, stop = hs, when = needlong and strategy.position_size == 0 and truetime) strategy.entry("Short", strategy.short, lotshort, stop = ls, when = needshort and strategy.position_size == 0 and truetime) strategy.exit("Long", stop = center, when = needlong and strategy.position_size > 0) strategy.exit("Short", stop = center, when = needshort and strategy.position_size < 0) if true strategy.close_all() strategy.cancel("fast L") strategy.cancel("fast S") strategy.cancel("slow L") strategy.cancel("slow S") if showdd //Drawdown max = 0.0 max := max(strategy.equity, nz(max[1])) dd = (strategy.equity / max - 1) * 100 min = 100.0 min := min(dd, nz(min[1])) //Label min := round(min * 100) / 100 labeltext = "Drawdown: " + tostring(min) + "%" var label la = na label.delete(la) tc = min > -100 ? color.white : color.red osx = timenow + round(change(time)*10) osy = highest(100) la := label.new(x = osx, y = osy, text = labeltext, xloc = xloc.bar_time, yloc = yloc.price, color = color.black, style = label.style_labelup, textcolor = tc)