
この戦略は,移動ストップの思想に基づいて,距離クローズバーズ ((DCB) の指標を使用して価格の動きを判断し,急速RSI指標と組み合わせてフィルタリングを行い,移動ストップとトラッキングストップを実現します.戦略は,マーティンガルの増量原理を使用すると同時に,中長線トレンドの取引に適しています.
lastgとlastrを計算し,それぞれ最後の上昇K線の収束価格と最後の減少K線の収束価格を表します.
dist は lastg と lastr の価格差である.
adist を dist の 30 周期単調移動平均として計算する.
dist が adist の2倍になると取引シグナルを生成する.
RSIのフィルタリング信号は,偽の突破を防ぐため,高速で動作します.
シグナルがあるが,ポジションを持っていない場合は,固定パーセントで入場してポジションを開きます.
マーチンゲル原理で 負債のあとで加算する
価格がストップ・ローズまたはストップ・ストップ後の平仓を触発する.
DCB指数でトレンドの方向を判断し,中長線トレンドを効果的に捉える.
RSIの素早いフィルタリングにより,偽ブレークを回避し,損失を防ぐことができます.
モバイル・ストップ・ストップ・メカニズムは,収益をロックし,リスクを効果的に制御する.
マチンゲル原理は,負債の後にポジションを拡大して,より高い利益を追求する.
戦略パラメータの設定は合理的で,異なる市場環境に適しています.
DCB指標は誤信号を発し,他の指標と組み合わせたフィルタリングが必要である.
マチンゲル・ギャンブルは損失を増加させ,資金管理を厳格にする必要があります.
不合理なストップポイント設定は,予想以上の損失を招く可能性があります.
資金調達能力を超えないように,ポジションを厳密に管理する必要があります.
取引契約の誤った設定は,極端な状況では大きな損失を招く可能性があります.
DCBパラメータを最適化して,最適なパラメータの組み合わせを探します.
RSIのフィルタリングは,他の指標に代わって行われます.
ストップダストストップパラメータを最適化し,戦略の勝利率を向上させる.
マチンゲルパラメータを最適化し,加仓リスクを低減する.
試作品種をテストし,最適の品種を選択する.
機械学習などの技術動態最適化戦略のパラメータ.
この戦略は Overall は,より成熟したトレンド追跡戦略である。 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()