イチモク・クラウドに基づく量子取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-12 14:20:43
タグ:

img

概要

この戦略は,イチモク・クラウド指標に基づいて定量的な取引システムを設計し,主に良いトレンドを持つ資産についてです.この戦略は,安定した利益を達成するために,ストップ・ロスト,テイク・プロフィート,トライリング・ストップ・ロストなどの機能を統合しています.

戦略原則

イチモク・クラウドは,変換線,ベースライン,リード・スパン1,リード・スパン2,クラウド・チャートで構成される.この戦略の取引信号は,価格とクラウド・チャートの関係から生じる.具体的には,価格がリード・スパン1を超えると買い信号が生成され,価格がリード・スパン1を下回ると売り信号が生成される.さらに,リード・スパン2は補助判断指標としても機能する.

この戦略は,ATR指標に基づいてストップロストとテイクプロフィートを設定する.ATR指標は,市場の変動の程度を効果的に把握することができます.ストップロスはATRの2倍に設定され,テイクプロフィートはATRの4倍に設定されています.これは単一の損失を効果的に制御し,いくつかの利益をロックすることができます.

最後に,この戦略は後続ストップ損失メカニズムを採用している.特に,ロングポジションでは,ストップ損失ラインをリアルタイムで調整するためにコールバック幅としてATRの2倍を使用し,ショートポジションでは,利益をロックするためにストップ損失ラインをリアルタイムで調整するためにコールバック幅としてATRの2倍を使用する.

利点分析

  1. イチモク・クラウド・チャートの指標をベースに 動向を効果的に把握できる
  2. ATR ベースのストップ・ロストと 利益を取ることで リスクをコントロールできます
  3. 利回りを確保するためのストップ・ロスのメカニズムを採用する.
  4. 戦略の論理は シンプルで明瞭で 理解し検証しやすい
  5. パラメータ化が可能で,パラメータは異なる市場に応じて調整することができます

リスク分析

  1. イチモククラウドマップはパラメータ設定に非常に敏感で,不適切な設定は取引機会を逃すか,間違った信号を生成する可能性があります
  2. 遅延ストップ損失幅が大きすぎると,ストップ損失が早すぎる可能性があります.
  3. 強い株は,ATR指標が示すストップ損失線またはストップ損失線を突破する可能性があります.
  4. トランザクションコストも収益性に影響する

対応するリスクに対する解決策:

  1. 最も適切な設定を見つけるために Ichimoku クラウドマップのパラメータを最適化
  2. 合理的な後続ストップ損失幅を評価し,大きすぎたり小さすぎたりしない
  3. 強い株の場合,ストップ・ロスの範囲を適度に緩和する.
  4. 低手数料のブローカーを選ぶ

オプティマイゼーションの方向性

  1. 誤った取引を減らすため,シグナルフィルタリングのための他の技術指標を組み合わせる
  2. 過去データ/バックテストに基づくパラメータを最適化
  3. 異なる品種のパラメータは別々に最適化できます
  4. ストップ損失幅を動的に調整することを検討する
  5. より信頼性の高い取引信号を構築するために機能エンジニアリングを行うアルゴリズムを組み合わせます

概要

一般的には,この戦略は安定したトレンド追跡戦略である.イチモク雲指標に基づいてトレンド方向を判断する.ATR指標を使用してストップ損失を設定し,利益を得ること.利益をロックするためにトライリングストップ損失を使用する.利点はシンプルな論理であり,理解しやすい.単一の損失を制御できる;トレンドを効果的に追跡できる.しかし,パラメータの敏感性とストップ損失が破られるリスクもあります.パラメータと戦略そのものを継続的に最適化することで,より良いパフォーマンスを得ることができます.


/*backtest
start: 2023-01-05 00:00:00
end: 2024-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Ichimoku Cloud Strategy with SL, TP, and Trailing Stop", overlay=true)

conversionPeriods = input(9, "Conversion Line Length")
basePeriods = input(26, "Base Line Length")
laggingSpan2Periods = input(52, "Leading Span B Length")
displacement = input(26, "Lagging Span")
atrLength = input(14, title="ATR Length")

donchian(len) => math.avg(ta.lowest(len), ta.highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = math.avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

// Plot the Ichimoku Cloud components
plot(conversionLine, color=color.blue, title="Conversion Line")
plot(baseLine, color=color.red, title="Base Line")
plot(leadLine1, color=color.green, title="Leading Span A")
plot(leadLine2, color=color.orange, title="Leading Span B")
plot(leadLine1 > leadLine2 ? leadLine1 : leadLine2, color=color.green, title="Kumo Cloud Upper Line")
plot(leadLine1 < leadLine2 ? leadLine1 : leadLine2, color=color.red, title="Kumo Cloud Lower Line")

// ATR for stop loss and take profit
atrValue = ta.atr(atrLength)
stopLoss = atrValue * 2
takeProfit = atrValue * 4

// Strategy entry and exit conditions
longCondition = ta.crossover(close, leadLine1) and close > leadLine2
shortCondition = ta.crossunder(close, leadLine1) and close < leadLine2

// Plot buy and sell signals
plotshape(series=longCondition ? leadLine1 : na, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(series=shortCondition ? leadLine1 : na, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)

// Execute strategy orders with stop loss and take profit
strategy.entry("Buy", strategy.long, when=longCondition)
strategy.close("Buy", when=shortCondition) // Close buy position when sell condition is met
strategy.entry("Sell", strategy.short, when=shortCondition)
strategy.close("Sell", when=longCondition) // Close sell position when buy condition is met

// Trailing stop
strategy.cancel("Trailing Stop")
var float trailingStopPrice = na
if (longCondition)
    trailingStopPrice := math.max(trailingStopPrice, close - atrValue * 2)
    strategy.exit("Trailing Stop", from_entry="Buy", trail_offset=atrValue * 2, trail_price=trailingStopPrice)
else if (shortCondition)
    trailingStopPrice := math.min(trailingStopPrice, close + atrValue * 2)
    strategy.exit("Trailing Stop", from_entry="Sell", trail_offset=atrValue * 2, trail_price=trailingStopPrice)


もっと