この戦略は均線取引に基づい,多頭と空頭の3つの入場ラインを設定することによって,多空の双方向開場を実現し,トレンド追跡戦略の1つである.価格が均線を破るとき,順次開場して多空を行い,吊り掛ける表によって,入場場を分けて実現する.
この戦略は,平均線を突破した上でトレンドの方向を判断する.具体的には,開場価格,閉場価格,最高価格,最低価格などの算術平均を計算して,平均線指標を得する.そして,平均線の上部に多頭入場線を設定し,平均線下部に空頭入場線を設定する.価格が平均線を下部から突破すると,順番に複数注文をトリガーし,価格が平均線上部から突破すると,順番に空き注文をトリガーする.
余分な空白の注文の数が順番に増加し,吊り掛けるリストを設定することで,分量開仓を実現する.例えば,入場ライン1が1手多/空を起動し,入場ライン2が1手保有庫を起動し,入場ライン3が1手保有庫を追加する.このようにして入場コストを分散させ,単一注文のリスクを低減する.
この戦略は,還元メカニズムも設定している. ポジションの量が0未満であるとき,平均線価格に基づいてトラッキングストップ・ロードを設定し,価格が再び平均線を下回れば平仓を停止する. これは,利益の一部をロックし,資金を保護する.
全体として,この戦略は,均線指標を十分に活用してトレンドの方向性を判断し,多層のエントリーラインを通じて利益区画を最大化し,同時にストップ・ローズ・シングル・コントロールのリスクを設定し,典型的なトレンド・フォロー戦略に属します.
この戦略の利点は以下の通りです.
平均線を用いてトレンドの方向を明確に判断できる.平均線は,市場騒音を効果的にフィルターし,主要トレンドの方向を判断できる.
多層の入場ライン,トレンドの走行区間を充分利用する. 多層の入場ラインによって,トレンドの走行区間全体を最大限に捉え,利得スペースを拡大することができる.
単一のリスクを低減する. 複数の入場によって,注文のリスクを分散させ,ポジションの平均保有コストを低減する.
戻り補償の仕組みを設定し,リスクを効果的に制御する. 戻り補償の止まり令状により,価格が再び平均線を下回ったときに迅速に止まり,過大な損失を回避することができる.
戦略は明確でわかりやすく,パラメータ設定は柔軟で,異なる市場向けに最適化できます.
この戦略にはいくつかのリスクがあります.
平均線が誤信号を発する確率.平均線は,トレンドが遅れていると判断し,誤信号を発する可能性がある.
トレンドの逆転による損失リスク.戦略はトレンドを前提として,トレンドの逆転が起こった場合,より大きな損失が生じます.
進出ラインは密集し,取引頻度やスライドポイントコストを増加させる.
分量開設は,ポジション集中のリスクを増加させる.
停止点は不合理に設定され,早期に停止したり,小すぎたりする可能性がある.
対応するリスク管理策:
平均線パラメータを最適化し,適切な周期平均線を選択する.
重要な技術指標に注目し,トレンドの逆転の信号を判断し,時宜に止めてください.
フィールドラインの設定距離を調整し,取引の頻度を下げます.
ポジションのサイズと割合を最適化し,集中リスクを制御する.
ストップ・ポイントのテストと最適化,ストップ・リスクの低減
この戦略は以下の点で最適化できます.
異なる平均線パラメータとデータソースをテストし,トレンド効果を判断するのに最適な平均線指標を選択します.
多空進球線の距離間隔とポジション数の比率を最適化して,最適なパラメータを見つけること.
他の指標をフィルター条件として組み合わせて,均線が誤信号を発さないようにする.例えばMACD,RSIなど.
ストップラインの位置を最適化したり,ATRの動的な設定に基づいてストップポイントの位置を設定することもできます.
傾向の逆転に対する判断を高め,全保有の閉鎖条件を設定する.
市場が変化する時期に合わせて戦略を最適化するパラメータ.
ポジション数を動的に調整する機能を追加し,資金使用率に応じて開設したポジションの数を決定します.
この戦略は全体的に均線でトレンドの方向を判断し,トレンドの動作を主要収益源とする.多層の入場と分量開設により,トレンドを効果的に把握し,収益区間を拡大することができる.同時に,リスクを制御するストップ・ロス・メカニズムを設定することができる.この戦略は,初心者の学習にも適し,深層の最適化にも適し,シンプルで明快で,典型的なトレンド追跡戦略である.
/*backtest
start: 2022-09-19 00:00:00
end: 2023-09-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2019
//@version=4
strategy(title = "Robot WhiteBox Iceberg", shorttitle = "Robot WhiteBox Iceberg", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)
//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
s = input(defval = "7. OHLC4", options = ["1. Open", "2. High", "3. Low", "4. Close", "5. HL2", "6. HLC3", "7. OHLC4", "8. OC2", "9. PCMA"], title = "Data")
short3 = input(true, title = "short 3")
short2 = input(true, title = "short 2")
short1 = input(true, title = "short 1")
long1 = input(true, title = "long 1")
long2 = input(true, title = "long 2")
long3 = input(true, title = "long 3")
shortlevel3 = input(15.0, title = "Short line 3")
shortlevel2 = input(10.0, title = "Short line 2")
shortlevel1 = input(5.0, title = "Short line 1")
longlevel1 = input(-5.0, title = "Long line 1")
longlevel2 = input(-10.0, title = "Long line 2")
longlevel3 = input(-15.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
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")
//Variables
lots = 0.0
size = strategy.position_size
mult = 1 / syminfo.mintick
needtime = true
//MA
oc2 = (open + close) / 2
pcma = (highest(high, len) + lowest(low, len)) / 2
src = s == "1. Open" ? open : s == "2. High" ? high : s == "3. Low" ? low : s == "4. Close" ? close : s == "5. HL2" ? hl2 : s == "6. HLC3" ? hlc3 : s == "7. OHLC4" ? ohlc4 : s == "8. OC2" ? oc2: close
sma = sma(src, len)
ma = s == "9. PCMA" ? round(pcma * mult) / mult : round(sma * mult) / mult
//Levels
longline1 = 0.0
longline2 = 0.0
longline3 = 0.0
shortline1 = 0.0
shortline2 = 0.0
shortline3 = 0.0
longline1 := long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 := lots[1] == 0 ? long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close : longline2[1]
longline3 := lots[1] == 0 ? long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close : longline3[1]
shortline1 := short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 := lots[1] == 0 ? short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close : shortline2[1]
shortline3 := lots[1] == 0 ? short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close : shortline3[1]
//Lines
colorlong1 = long1 ? color.lime : na
colorlong2 = long2 ? color.lime : na
colorlong3 = long3 ? color.lime : na
colorshort1 = short1 ? color.red : na
colorshort2 = short2 ? color.red : na
colorshort3 = short3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort3, title = "Short line 3")
plot(shortline2, offset = offset, color = colorshort2, title = "Short line 2")
plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1")
plot(ma, offset = offset, color = color.blue, title = "MA line")
plot(longline1, offset = offset, color = colorlong1, title = "Long line 1")
plot(longline2, offset = offset, color = colorlong2, title = "Long line 2")
plot(longline3, offset = offset, color = colorlong3, title = "Long line 3")
//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if ma > 0
lots := round(size / lot)
strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long1 and needtime))
lots := round(size / lot)
strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long2 and needtime))
lots := round(size / lot)
strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long3 and needtime))
lots := round(size / lot)
strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short1 and needtime))
lots := round(size / lot)
strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short2 and needtime))
lots := round(size / lot)
strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short3 and needtime))
if size > 0
strategy.entry("TPL", strategy.short, 0, limit = ma, when = needtime)
if size < 0
strategy.entry("TPS", strategy.long, 0, limit = ma, when = needtime)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()
strategy.cancel("L1")
strategy.cancel("L2")
strategy.cancel("L3")
strategy.cancel("S1")
strategy.cancel("S2")
strategy.cancel("S3")
strategy.cancel("TPL")
strategy.cancel("TPS")