イチモク・クモ・ツイスト戦略

作者: リン・ハーンチャオチャン,日付: 2023年10月27日 16時36分59秒
タグ:

img

概要

イチモク・クモ・ツイスト戦略は,イチモク指標の変換線,ベースライン,およびリード・スパンラインを使用して,トレンドフォロー戦略として取引信号を構築する.低リスクブレイクアウトポイントと過剰購入/過剰販売の機会を見つけるためにイチモク雲の曲線を観察することによって,短期および中期トレンド逆転点を特定する.この戦略は,日中取引および多週間の中間期取引に使用することができます.

戦略の論理

この戦略は主に3つのイチモク線変換線,ベースライン,およびリードスパン1を,上下雲の境界を計算するためにキャンドルスタイルの高値と低値とともに使用する.変換線は,過去9個のキャンドルの高値と低値の真ん中点を計算し,短期平均を表す.ベースラインは,過去26個のキャンドルの高値と低値の真ん中点を長期平均として計算する.リードスパン1は変換線とベースラインの平均値である.リードスパン2は過去52個のキャンドルの真ん中値である.

買取信号は,リードスパン1がリードスパン2を横切ると生成され,リードスパン1がリードスパン2を横切るとセールス信号は生成されます. 取引戦略は,短期および中期間のトレンド変化を捕捉するために,単に上昇と下落の交差を追跡します.

利点分析

  • イチモク・クラウド・ツイスト戦略は短期的・中期的トレンドを組み合わせて,トレンド逆転点を効果的に特定することができます.

  • 騒音をフィルタリングするために 遅延が組み込まれています

  • 雲を使ってトレンド強さを測定することで 進出が改善されます

  • パラメータ最適化は必要ありません - 標準のイチモクパラメータはうまく機能します.

リスク分析

  • イチモクにはかなり複雑な内部があり,パラメータの調整に敏感ではないため過度に最適化することが困難です.

  • レンジ・バインド市場では 複数の誤った信号がある可能性があります

  • 短期・中期トレンドの差異は戦略の崩壊を引き起こす可能性があります.

  • ストップ・ロスはリスクをコントロールするために不可欠です そうでなければ大きな引き下げが可能です

改善 の 機会

  • 最適なバランスを出すために,変換とベースラインの異なる組み合わせをテストする.

  • 不良な形状でシグナルを受け取らないように,他の指標とフィルターを追加します.

  • ダイナミックストップやトライリングストップのようなストップ・ロスの戦略を組み込む

  • 市場状況に基づいてポジションのサイズを最適化する.

  • バックテストで取引手数料を追加して より現実的な結果を得ます

概要

イチモク・クラウド・ツイスト戦略は,全体的に見ると,中程度のトレンドフォロー戦略である.トレンドの転換を効果的に特定し,トレンド方向に沿ったポジションを取ることができる.しかし,長期間の使用にはモニタリングが必要であり,厳格なリスク制御が必要である.パラメータチューニング,エントリーフィルター,ストップ損失メカニズムなどの継続的な改善により,この戦略の安定性と収益性がさらに向上する.


/*backtest
start: 2022-10-20 00:00:00
end: 2023-10-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="Ichimoku Kumo Twist Strategy (Presets)", shorttitle="Kumo Twist Strategy", overlay=true)

xlowest_(src, len) =>
    x = src
    for i = 1 to len - 1
        v = src[i]
        if (na(v))
            break
        x := min(x, v)
    x

xlowest(src, len) =>
    na(src[len]) ? xlowest_(src, len) : lowest(src, len)

xhighest_(src, len) =>
    x = src
    for i = 1 to len - 1
        v = src[i]
        if (na(v))
            break
        x := max(x, v)
    x

xhighest(src, len) =>
    na(src[len]) ? xhighest_(src, len) : highest(src, len)

dropn(src, n) =>
    na(src[n]) ? na : src

ichiConversionPeriods(presets) =>
    if presets == "Crypto Doubled"
        20
    else
        if presets == "Crypto Singled"
            10
        else
            if presets == "Standard Doubled"
                18
            else
                9

ichiBasePeriods(presets) =>
    if presets == "Crypto Doubled"
        60
    else
        if presets == "Crypto Singled"
            30
        else
            if presets == "Standard Doubled"
                52
            else
                26

ichiLaggingSpan2Periods(presets) =>
    if presets == "Crypto Doubled"
        120
    else
        if presets == "Crypto Singled"
            60
        else
            if presets == "Standard Doubled"
                104
            else
                52

ichiDisplacement(presets) =>
    if presets == "Crypto Doubled"
        30
    else
        if presets == "Crypto Singled"
            30
        else
            if presets == "Standard Doubled"
                26
            else
                26

scaling = input(title="Scaling", options=["Linear", "Log"], defval="Linear")
presets = input(title="Presets",  options=["Crypto Doubled", "Crypto Singled", "Standard Doubled", "Standard Singled"], defval="Crypto Doubled")
dropCandles = input(1, minval=0, title="Drop first N candles")
showClouds = input(false, "Show Clouds")
stoploss = input(true, title="Stop Loss")

conversionPeriods = ichiConversionPeriods(presets)
basePeriods = ichiBasePeriods(presets)
laggingSpan2Periods = ichiLaggingSpan2Periods(presets)
displacement = ichiDisplacement(presets)
logScaling = scaling == "Log"

lows = dropn(low, dropCandles)
highs = dropn(high, dropCandles)

lowsp = logScaling ? log(lows) : lows
highsp = logScaling ? log(highs) : highs

donchian(len) =>
    avg(xlowest(lowsp, len), xhighest(highsp, len))

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

golong = crossover(leadLine1, leadLine2)
goshort = crossunder(leadLine1, leadLine2)

strategy.entry("Buy", strategy.long, when=golong, stop=(stoploss ? high+syminfo.mintick : na))
strategy.entry("Sell", strategy.short, when=goshort, stop=(stoploss ? low-syminfo.mintick : na))

conversionLinep = logScaling ? exp(conversionLine) : conversionLine
baseLinep = logScaling ? exp(baseLine) : baseLine
leadLine1p = logScaling ? exp(leadLine1) : leadLine1
leadLine2p = logScaling ? exp(leadLine2) : leadLine2

plot(showClouds ? conversionLinep : na, color=#0496ff, title="Conversion Line")
plot(showClouds ? baseLinep : na, color=#991515, title="Base Line")

p1 = plot(showClouds ? leadLine1p : na, offset = displacement, color=green, title="Lead 1")
p2 = plot(showClouds ? leadLine2p : na, offset = displacement, color=red, title="Lead 2")
fill(p1, p2, color = showClouds ? (leadLine1p > leadLine2p ? green : red) : na)


もっと