
Ichimoku Kumo Twist戦略は,Ichimoku指標の変換線,基準線,導線を利用して取引信号を構築し,トレンド追跡戦略に属している.これは,Ichimoku雲帯の反転を通じて,短期および中期トレンドの反転点を探し,より低いリスクの突破点と超買い超売の機会を得るための戦略である.この戦略は,日内取引にも,数週間ポジションを保持する中長期線取引にも使用できる.
この戦略は,主にイチモク指標の3つの平均線 - 変換線,基準線,導線1,およびK線の最高値と最低値の計算の上下線を使用する. 変換線は,過去9K線の最高値と最低価格の中間値を計算し,一目均衡図の短期平均値を表示する. 基準線は,過去26K線の最高値と最低価格の中間値を計算し,長期平均値を表示する. 導線1は,変換線と基準線の平均値であり,導線2は過去52K線の中間値である.
導線1が導線2を貫くとき,買いの信号が生じ,導線1が導線2を貫くとき,売りの信号が生じます.この取引戦略は,短期および中期平均線の金叉死叉を追跡し,トレンドの変化を捕捉することです.
イチモク雲帯の逆転戦略は,短期と中期のトレンドを組み合わせて,トレンドの逆転点を効果的に識別することができる.
平均線に基づいた戦略で,ある程度の遅滞があり,一部のノイズをフィルターすることができます.
雲帯は,強弱なトレンドの明瞭な程度を判断し,より優れたエントリーとエグジットを実現します.
パラメータの最適化は不要で,Ichimoku標準のパラメータを使用できます.
Ichimoku原理は複雑で,パラメータ調整に無感であり,過度に最適化することは容易ではない.
市場を整合する際には,誤った信号が複数回出ることがあります.
短期および中期トレンドが逆転すると,戦略の失敗が起こります.
リスクのコントロールには,ストップ・ロスの付属が必要で,そうでなければ,大きな損失が引き起こされる可能性がある.
変換線と基準線の異なるパラメータの組み合わせをテストして,最適なバランスポイントを見つけることができます.
他の指標と組み合わせて,入場信号をフィルタリングし,明らかに不利な形状でギャンブルを避ける.
ストップ・ストラトジーを追加し,ダイナミック・ストップ・ストラトジーを設定します.
ポジション管理の最適化,市場状況に応じてポジションの規模調整
取引手数料を反測に追加することで,反測結果がより正確になります.
イチモク雲帯逆転戦略は,全体的に中程度のトレンド戦略である.それは,トレンドのターニングポイントを効果的に識別し,トレンドに沿った方向でポジションを開くことができる.しかし,この戦略には一定の監視コストも存在し,厳格なリスク管理措置を伴って長期にわたって使用する必要があります.パラメータ設定,入場フィルター,止損方法などの継続的な最適化によって,この戦略の安定性と収益性を向上させることができます.
/*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)