一目均衡表 定量短期戦略


作成日: 2023-12-21 11:13:15 最終変更日: 2023-12-21 11:13:15
コピー: 1 クリック数: 614
1
フォロー
1166
フォロワー

一目均衡表 定量短期戦略

概要

Ichimoku Cloud Quant Scalping Strategyは,一目均衡表と平均方向インデックスを組み合わせたショートラインの量化戦略である.この戦略は,Ichimoku Cloud指標を活用してトレンドの方向を判断し,ADX指標と連携して非トレンド市場をフィルターし,トレンドの状況でショートライン操作を行う.

戦略原則

この戦略は主に2つの部分から構成されています.

  1. イチモク雲の指数はトレンドの方向を判断する

    • Conversion Line: 最新7サイクルの中位線
    • ベースライン:最近26サイクルの中央線
    • Leading Span A:変換ラインとベースラインのミッドポイント
    • Leading Span B: 最新52サイクルの中央線

価格が雲端の上部で多頭トレンドで,下部で空頭トレンドである. 戦略は,変換線の突破でトレンドの転換を判断する.

  1. ADX指数は非トレンド市場をフィルターする

ADXが20より大きい時はトレンド状態を示し,この時に戦略が取引信号を生む.20より小さい時は収束を示し,この時に戦略は取引しない.

取引のルール:

  • 多頭入り:価格がコンバーションラインを突破し,ADXが20を超えた
  • 空頭入場:価格が変換線を下回り,ADXが20を超えた
  • ストップダスト:150ポイント
  • ストップ: 200点

優位分析

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

  1. トレンドを乗算して,収束を避ける。イチモク雲指標は,トレンドの方向と転換点を正確に判断し,ADX指標のフィルターと連携して,市場を収束し,偽突破を避ける。

  2. 撤回制御 止損設定は150点で,単一損失を効果的に制御する.

  3. 利回り比が高い. 止損は200点,止損は150点,利回り比は1.33まで高く,利回りやすい.

  4. 取引頻度は中等. 取引はトレンド時にのみ行われ,高頻度での入場は行われません.

リスク分析

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

  1. トレンド判断の失敗リスク。イチモク雲指標は,トレンド判断が失敗に転じるときに誤信号を生じます。パラメータ周期を適切に延長して最適化することができます。

  2. 止損は追突されるリスク。速行状態の止損は突破される可能性がある。移動止損を設定するか,止損範囲を拡大することを考慮することができる。

  3. 夜盤と前盤の取引リスク. 戦略のデフォルトは日盤のみで,夜盤と前盤の判断は失効する可能性がある. 24時間取引を設定するか,前盤後に単独で取引戦略を策定することができる.

最適化の方向

この戦略は以下の方向から最適化できます.

  1. Ichimoku クラウド指標パラメータ最適化。異なる変換線,基準線,選択線パラメータをテストして最適なパラメータ組み合わせを見つけることができる。

  2. ADXパラメータと値の最適化。ADXの周期パラメータと波値をテストして最適なパラメータを見つけることができる。

  3. ストップストラストの最適化. ストップストラストの最適化点は,歴史データによる再測によって決定できる.

  4. 移動ストップ戦略 移動ストップを設定して,トレンドをうまく追跡して利益を得る.

  5. トレンド判断補助指標。MACD,KDなどの指標がトレンド判断補助に加えられ,信号の精度が向上する。

  6. 適応性最適化. 異なる品種に対して取引戦略のパラメータを個別に設定する.

要約する

Ichimoku Cloudの量化ショートライン戦略は,Ichimoku Cloud指標とADX指標の優位性を統合し,トレンドの転換点を正確に判断できるだけでなく,市場整合を効率的に除し,偽信号を回避することができる.この戦略は,高利回り,逆戻り制御が可能で,トレンドを追跡するショートライン操作に適している.パラメータ最適化,ストップロス最適化,補助指標などの手段によって,戦略の安定性と収益率をさらに向上させることができる.

ストラテジーソースコード
/*backtest
start: 2023-12-13 00:00:00
end: 2023-12-20 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='[STRATEGY][RS]Spot/Binary Scalper V0', shorttitle='IC', overlay=true, initial_capital=100000, currency=currency.USD)
//  ||  Adapted from:
//  ||      http://www.binaryoptionsedge.com/topic/1414-ta-spot-scalping-it-works-damn-good/?hl=singh

//  ||  Ichimoku cloud:
conversionPeriods = input(title='Conversion Periods:',  defval=7, minval=1),
basePeriods = 26//input(title='Base Periods',  defval=26, minval=1)
laggingSpan2Periods = 52//input(title='Lagging Span:',  defval=52, minval=1),
displacement = 26//input(title='Displacement:',  defval=26, minval=1)

f_donchian(_len) => avg(lowest(_len), highest(_len))

f_ichimoku_cloud(_conversion_periods, _base_periods, _lagging_span)=>
    _conversion_line = f_donchian(_conversion_periods)
    _base_line = f_donchian(_base_periods)
    _lead_line1 = avg(_conversion_line, _base_line)
    _lead_line2 = f_donchian(_lagging_span)
    [_conversion_line, _base_line, _lead_line1, _lead_line2]

[conversionLine, baseLine, leadLine1, leadLine2] = f_ichimoku_cloud(conversionPeriods, basePeriods, laggingSpan2Periods)

//ps0 = plot(title='A', series=leadLine1, color=green, linewidth=2)
//ps1 = plot(title='B', series=leadLine2, color=red, linewidth=2)
//fill(title='AB', plot1=ps0, plot2=ps1, color=blue, transp=80)
//plot(title='Base', series=baseLine, color=blue, linewidth=1, offset=displacement)
plot(title='Conversion', series=conversionLine, color=blue, linewidth=1)
//  ||----------------------------------------------------------------------------------------------------------------------------------------------||
//  ||  ADX
len = input(title="Length",  defval=14)
th = input(title="threshold",  defval=20)

TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0


SmoothedTrueRange = nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus = nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus

DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)
//  ||----------------------------------------------------------------------------------------------------------------------------------------------||
//  ||  Trade session:
USE_TRADESESSION = input(title='Use Trading Session?', type=bool, defval=true)
trade_session = input(title='Trade Session:', defval='0400-1500', confirm=false)
istradingsession = not USE_TRADESESSION ? false : not na(time('1', trade_session))
bgcolor(istradingsession?gray:na)
//  ||----------------------------------------------------------------------------------------------------------------------------------------------||
//  ||  Strategy:
trade_size = input(title='Trade Size:',  defval=1)
stop_loss_in_ticks = input(title='Stop Loss in ticks:',  defval=150)
take_profit_in_ticks = input(title='Take Profit in ticks:',  defval=200)

buy_icloud_signal = open < conversionLine and close > conversionLine
buy_adx_signal = DIPlus > 20
buy_signal = istradingsession and buy_icloud_signal and buy_adx_signal

sel_icloud_signal = open > conversionLine and close < conversionLine
sel_adx_signal = DIMinus > 20
sel_signal = istradingsession and sel_icloud_signal and sel_adx_signal


strategy.order('buy', long=true, qty=trade_size, comment='buy', when=buy_signal)
strategy.order('sel', long=false, qty=trade_size, comment='sel', when=sel_signal)

strategy.exit('exit buy', from_entry='buy', profit=take_profit_in_ticks, loss=stop_loss_in_ticks)
strategy.exit('exit sel', from_entry='sel', profit=take_profit_in_ticks, loss=stop_loss_in_ticks)