イチモク クラウド 量子 スカルピング 戦略

作者: リン・ハーンチャオチャン,日付: 2023年12月21日 11:13:15
タグ:

img

概要

イチモク・クラウド量子スカルピング戦略は,イチモク・クラウドと平均方向指数 (ADX) を統合した短期的定量戦略である.イチモク・クラウドを使用してトレンド方向を決定し,ADXを使用してトレンド条件下でスカルピングのためのトレンド以外の市場をフィルタリングする.

戦略の論理

戦略は2つの主要要素から構成されています.

  1. イチモク・クラウドがトレンド方向を判断する

    • 換算線:過去7期間の中値
    • ベースライン:過去26期間の中値
    • リードスパンA:変換線とベースラインの真ん中点
    • Leading Span B: 過去52期間の平均価格

    雲の上の価格は上昇傾向を示し,下の値は下落傾向を示します.この戦略は,トレンドの逆転を決定するためにコンバーションラインのブレイクを使用します.

  2. ADXは,非トレンド市場をフィルタリングする

    ADXが20を超えるとのみシグナルを受け取り,トレンド市場を示唆する. ADXが範囲限定市場中に<20である場合,取引しない.

貿易規則:

  • 長期入場: 変換線とADX>20を超える価格ブレイク
  • 短期入場: 価格が変換線とADX>20を下回る
  • ストップ・ロスト: 150トーク
  • 利潤を稼ぐ 200 枚

利点分析

この戦略の利点は

  1. トレンドをフォローし,範囲を避ける. イチモク・クラウドは,トレンド方向とターニングポイントを正確に決定することができます. ADXは,誤ったブレイクを防ぐために,範囲に制限された市場をフィルターします.

  2. 引き下げ制御 150 ティックのストップ損失 取引損失の有効な制限

  3. 利潤因子は高です 200トークで利益を得ると 150トークでストップ損失を得ると 利潤因子は1.33になります 利潤を得るのは簡単です

  4. 適正な取引頻度 傾向が現れるときのみ取引は過度な取引を防ぐ.

リスク分析

リスクは次のとおりです.

  1. トレンド決定の失敗リスク. イチモク・クラウドがトレンド逆転を検出できないときに誤った信号. 精度を向上させるためにパラメータを最適化することができます.

  2. ストップ・ロスはリスクにさらされる. ストップ・ロスは,高速な市場中に侵入できる. トレイリング・ストップ・ロスは,より広いストップ・ロスの範囲を使用できる.

  3. オーナイトおよびプレマーケット取引リスク. デフォルト設定では日取引のみが許可されます. 延長時間中に判断が失敗する可能性があります. 24H取引を有効にしたり,延長セッションのための戦略をカスタマイズすることができます.

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

潜在的な最適化方向:

  1. イチモク雲のパラメータ調節で 最適な設定を見つけます

  2. ADXパラメータと極限の最適化により 最適値が決定される.

  3. 利益目標とストップロスの最適化

  4. ストップロスを後押しして トレンドを順守する

  5. トレンド決定を助けるMACDとKDのような追加指標

  6. 異なる製品に対する適応性最適化

結論

イチモク・クラウド・量子スカルピング戦略は,トレンド逆転点を正確に決定し,レンジ・バインド市場をフィルタリングするために,イチモク・クラウドと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)


もっと