
この戦略は,多頭だけのイチモク雲取引戦略である. 変換線上での基準線を横切るときに多頭開き,基準線下での変換線を横切るときに平仓する. さらに,開きと平仓の際にも滞りSpanを検出し,滞りSpanが雲より高い場合は開き,雲より低い場合は平仓する.
この戦略は,イチモク技術指標のいくつかの線を用いています.
変換線:過去9日の最高値と最低値の平均値で,周期間におけるトレンド変換を表します.
基準線:過去26日の最高値と最低値の平均値で,定期間の平均価格変動を表します.
前線A:変換線と基準線の平均値
前線B:過去52日間の最高値と最低値の平均値で,中長期のトレンドを先導する指標である.
遅滞Span:現在の閉盤価格,遅滞の推移26日。トレンドの力を表す。
ポジションを開く際には,変換線で基準線を横切る条件と,雲層より遅れたSpanを同時に満たす必要があります.これは,短期および中長期のトレンドは,上向きの信号であることを意味します.
均等なポジションでは,基準線の下の変換線を横切る条件と,雲層より低い遅滞のSpanを同時に満たす必要があります. これは,トレンドが逆転したことを示し,ポジションを退出すべきである.
イチモク雲の指標を用いてトレンドを判断し,高い精度で判断する.
誤った信号を発生させないように,複数の線で判断する.
デジタル通貨の多くでは,長線で上昇する傾向に合致している.
条件のフィルタリングは比較的厳格で,高品質の信号を実現する.
ポジションは,満仓または空仓のみで,ポジションの規模を調整することはできません.
牛市では上位だが,熊市ではリスクが高い.
パラメータのデフォルトは暗号通貨に設定されており,他の品種に対応するために調整する必要があります.
取引の信号が少ないので 機会を逃すのが簡単です
ポジション調整機能を追加し,損失が一定比率に達したときに部分的なポジションを閉鎖する.
売り込みシグナルを追加し,キーサポートの下を平準化して,損失を減らす.
パラメータの設定を最適化して,より多くの品種に適応し,安定性を向上させる.
損失が値に達したときに止まる機能が追加された.
この戦略は,単一の多頭 Ichimoku クラウド取引戦略として,トレンド判断において高い正確性を持っています.それは同時に,複数の Ichimoku 線をフィルター条件として組み合わせて,トレンドの転換点を比較的に信頼して判断することができます.この戦略は,暗号通貨などの長線で上昇する品種に特に適しています.さらに,止損,調節などの機能を完善することにより,この戦略のリスク制御能力を向上させ,より多くの品種とより広範な市場環境に適応させることができます.
/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// Simple long-only Ichimoku Cloud Strategy
// Enter position when conversion line crosses base line up, and close it when the opposite happens.
// Additional condition for open / close the trade is lagging span, it should be higher than cloud to open position and below - to close it.
//@version=4
strategy("Ichimoku Cloud Strategy Long Only", shorttitle="Ichimoku Cloud Strategy (long only)", overlay=true )
conversion_length = input(9, minval=1, title="Conversion Line Periods"),
base_length = input(26, minval=1, title="Base Line Periods")
lagging_length = input(52, minval=1, title="Lagging Span 2 Periods"),
delta = input(26, minval=1, title="Delta")
average(len) => avg(lowest(len), highest(len))
conversion_line = average(conversion_length) // tenkan sen - trend
base_line = average(base_length) // kijun sen - movement
lead_line_a = avg(conversion_line, base_line) // senkou span A
lead_line_b = average(lagging_length) // senkou span B
lagging_span = close // chikou span - trend / move power
plot(conversion_line, color=color.blue, linewidth=2, title="Conversion Line")
plot(base_line, color=color.white, linewidth=2, title="Base Line")
plot(lagging_span, offset = -delta, color=color.purple, linewidth=2, title="Lagging Span")
lead_line_a_plot = plot(lead_line_a, offset = delta, color=color.green, title="Lead 1")
lead_line_b_plot = plot(lead_line_b, offset = delta, color=color.red, title="Lead 2")
fill(lead_line_a_plot, lead_line_b_plot, color = lead_line_a > lead_line_b ? color.green : color.red)
// Strategy logic
long_signal = crossover(conversion_line,base_line) and ((lagging_span) > (lead_line_a)) and ((lagging_span) > (lead_line_b))
short_signal = crossover(base_line, conversion_line) and ((lagging_span) < (lead_line_a)) and ((lagging_span) < (lead_line_b))
strategy.entry("LONG", strategy.long, when=strategy.opentrades == 0 and long_signal, alert_message='BUY')
strategy.close("LONG", when=strategy.opentrades > 0 and short_signal, alert_message='SELL')
// === Backtesting Dates === thanks to Trost
testPeriodSwitch = input(true, "Custom Backtesting Dates")
testStartYear = input(2021, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, testStartHour, 0)
testStopYear = input(2021, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(1, "Backtest Stop Day")
testStopHour = input(0, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, testStopHour, 0)
testPeriod() => true
testPeriod_1 = testPeriod()
isPeriod = testPeriodSwitch == true ? testPeriod_1 : true
// === /END
if not isPeriod
strategy.cancel_all()
strategy.close_all()