この戦略は,価格トレンドを決定するためにディスタンス・クローズ・バーズ (DCB) インジケーターとフィルターとして急速なRSIインジケーターを使用し,取引後のトレンドのためにストップロスを実行します.また,ポジションサイズ化のためにマルチンゲール原理を使用します.中長期トレンド取引に適しています.
最後の緑色のバーの閉じると最後の赤いバーの閉じるを表すlastgとlastrを計算します.
lastg と lastr の差としてdist を計算する.
30 期間の SMA の dist として計算します.
Dist は 2 倍以上の時 取引信号を生成します
信号をフィルタリングするために 速度のRSIインジケータを使用し 誤ったブレイクを回避します
シグナルがポジションがない場合,株式の固定パーセントで取引を行う.
マルティンゲルは敗戦後 拡大する
ストップ・ロストまたは/または/または/または/または/または/または/または/または/または/または/または/または/または/または
DCB指標は 中長期の傾向を効果的に把握しています
RSIフィルターで 誤ったブレイクによる損失を回避します
利潤を抑え リスクをコントロールします
マルティンゲルは損失後にポジションを増やして 利益を増やします
合理的なパラメータ設定は 異なる市場環境に適しています
DCBは間違った信号を生成するかもしれない 他のフィルターが必要です
マルティンゲルは損失を拡大し 厳格なリスク管理が必要です
誤ったストップ損失設定は過度の損失につながる可能性があります.
過剰なレバレッジを防ぐために,ポジションのサイズ化が制限されるべきです.
不適切な契約設定は 極端な市場では大きな損失をもたらす可能性があります
DCBのパラメータを最適化して
速度のRSIフィルターを他の指標で交換してみてください.
ストップ・ロスを最適化し 利益を得て 勝率を上げます
マルティンゲールのパラメータを最適化して リスクを減らす
最適な資産配分のために異なる製品でテストする.
マシン学習を使って パーマータを動的に最適化します
DCBは,トレンドの方向性を決定し,誤ったエントリを避けるためにRSIをフィルタリングする.ストップ・ロストとテイク・プロフィートは,単一のトレード損失を効果的に制御する.しかし,リスクは依然として存在し,リスクを軽減し,安定性を向上させるためにパラメータはさらに最適化する必要があります.論理は明確で理解しやすいため,中長期トレンドトレーダーに適しています.
/*backtest start: 2023-11-07 00:00:00 end: 2023-11-14 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Distance Strategy v1.0", shorttitle = "Distance str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") usemar = input(true, defval = true, title = "Use Martingale") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") usersi = input(true, defval = true, title = "Use RSI-Filter") periodrsi = input(7, defval = 7, minval = 2, maxval = 50, title = "RSI Period") limitrsi = input(30, defval = 30, minval = 1, maxval = 50, title = "RSI Limit") fromyear = input(2018, defval = 2018, 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") //Fast RSI fastup = rma(max(change(close), 0), periodrsi) fastdown = rma(-min(change(close), 0), periodrsi) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //Distance bar = close > open ? 1 : close < open ? -1 : 0 lastg = bar == 1 ? close : lastg[1] lastr = bar == -1 ? close : lastr[1] dist = lastg - lastr adist = sma(dist, 30) plot(lastg, linewidth = 3, color = lime) plot(lastr, linewidth = 3, color = red) up = bar == -1 and dist > adist * 2 dn = bar == 1 and dist > adist * 2 //RSI Filter rsidn = fastrsi < limitrsi or usersi == false rsiup = fastrsi > 100 - limitrsi or usersi == false //Signals up1 = up and rsidn dn1 = dn and rsiup exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) //Arrows plotarrow(up1 ? 1 : na, colorup = blue, colordown = blue) plotarrow(dn1 ? -1 : na, colorup = blue, colordown = blue) //Trading profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1] mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1 lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1] signalup = up1 if signalup if strategy.position_size < 0 strategy.close_all() strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) signaldn = dn1 if signaldn if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()