マルチ移動平均制限取引戦略


作成日: 2023-09-22 14:16:20 最終変更日: 2023-09-22 14:16:20
コピー: 0 クリック数: 641
1
フォロー
1617
フォロワー

概要

この戦略は,複数の均線を設定した制限価格をベースに取引する戦略である.これは,価格が異なる均線を突破するごとに,異なる数の多行または空の制限価格を設定し,ピラミッド型の複数単位のポジションを形成する.価格が再び均線を突破すると,逆の制限価格開設が行われます.ポジションがある場合,価格が中軸均線を突破すると,逆の市場価格平準ポジションが行われます.

戦略原則

この戦略は,平均線指数を使用してトレンドの方向を判断する.具体的には,価格が上行3行平均線を破るか否かによって,多限価格を設定する注文の数を判断する.価格が下行3行平均線を破るか否かによって,空白制限価格を設定する注文の数を判断する.

このように,価格トレンドが強くなるほど,より同方向の限値注文が設定される.価格が反転シグナルが発生すると,反転開設が行われる.中軸均線は,ポジションの突破を判断するために使用され,平仓シグナルを発する.

戦略全体は,ピラミッド式開場と突破式平場を組み合わせた取引方法を形成する. 多単位の平均価格開場を目的として,コストを削減し,中軸均線の損失を停止し,リスクを制御する.

優位分析

この戦略の利点は以下の通りです.

  1. 平均線で判断し,操作は簡単で直感的です.

  2. トレンドの初期に,ピラミッド式で取引をすることで,よりよいコストを得ることができます.

  3. 中軸均線止損は,タイミングで止めてリスクをコントロールする.

  4. 価格制限を設けるのは滑り場を避けるためだ.

  5. パーテムをカスタマイズし,異なる品種に適応する.

  6. 構造は明確で,理解しやすく拡張できます.

リスク分析

この戦略には以下のリスクもあります.

  1. 平均線指標が遅れているため,誤判が起こりうる.

  2. 制限チケットの失敗は,入場時間を逃す可能性があります.

  3. 中軸均線止損は,突破に耐えられないほど粗放している可能性がある. 判断する

  4. パラメータの設定を間違えた場合,ピラミッドのポジションが大きすぎる可能性があります.

  5. 検出時間範囲が不十分である場合,曲線が過適合する可能性があります.

  6. 費用は考慮されていません.

リスクに対応する解決策は以下の通りです.

  1. 他の指標と組み合わせて確認,最適化パラメータ.

  2. 期限を設定し,価格を調整する.

  3. 中軸均線で停止を設定するか,突破判断ロジックを追加する.

  4. 収益と損失の比率を評価する最適化パラメータ.

  5. 追及期間を拡大し,多市場追及を行う.

  6. 追加手数料とスライドポイントの論理

最適化の方向

この戦略は以下の点で最適化できます.

  1. パラメータを最適化して,より多くの品種に適合する. 機械学習の方法を使用できます.

  2. MACD,KDJなどの他の指標のフィルター確認を追加します.

  3. 中軸均線に止止ロジックを追加する。

  4. ポジション開設比率とストップポジションを動的に調整する

  5. 制限価格の設定を最適化し,コストを改善する.例えば,変動範囲による価格設定.

  6. 費用の管理を高め,過剰な追及を防止する.

  7. 異なる品種のパラメータの効果をテストし,パラメータプールを構築する.

要約する

この戦略は,均線を設定し,制限価格をピラミッドを形成し,有利なコストを得るためにポジションを開きます. 中軸均線のストップを使用してリスクを制御します. 戦略の構造は単純で明確で,理解しやすく,拡張できます. しかし,他の指標,最適化パラメータ,制限価格の論理の改善などの導入によって戦略を改良することができ,戦略をより強なものにすることができます. 全体として,この戦略は,簡単な実用的な制限価格取引思考を提供し,一定の参照参照参照価値を持っています.

ストラテジーソースコード
/*backtest
start: 2022-09-15 00:00:00
end: 2023-09-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Robot WhiteBox MultiMA", shorttitle = "Robot WhiteBox MultiMA", 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
size = strategy.position_size
mult = 1 / syminfo.mintick
needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)

//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 = long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 = long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close
longline3 = long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close
shortline1 = short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 = short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close
shortline3 = short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close

//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]
lots = 0.0
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)
if size < 0
    strategy.entry("TPS", strategy.long, 0, limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()