チャッピネスK線突破戦略

作者: リン・ハーンチャオチャン開催日:2023年10月7日 15:59:26
タグ:

概要

チョッピネスK線突破戦略は,株式取引のエントリーと出口を決定するためにK線パターンとインパクト指標を使用する定量的な取引戦略である.この戦略は,価格動向とインパクト信号を識別するための複数の技術指標を組み合わせ,突破点でのポジションを設定し,ストップ損失を設定し,利益を出し,取引リスクを効果的に制御する.

戦略の論理

チャッピネスK線突破戦略の核心概念は以下の通りです

  1. コモディティチャネルインデックス (CCI) を用いて,価格が過剰購入または過剰販売の領域にあるかどうかを判断する.CCIが100を超えると過剰購入信号とみなされ,-100を下回ると過剰販売信号とみなされます.

  2. 突破信号を検出するためのK線パターンを識別する.開くよりも高い閉じる赤いK線は上昇傾向を示し,開くよりも低い閉じる緑色のK線は下落傾向を示します.

  3. 取引量が急上昇するときにのみ購入・販売シグナルを考慮する.

  4. 上向きの傾向が確認され,CCIが過売りを示した場合,ロングポジションを取ること.下向きの傾向が確認され,CCIが過買いを示した場合,ショートポジションを取ること.

  5. ストップ・ロスト・ポイントを設定して リスクをコントロールし 利益を確保します

戦略は,TCIを過買い/過売分析,K線パターンをトレンド方向,ボリュームをモメンタムに用いる.基準が満たされるとロングまたはショートポジションに入ります.ストップ・ロストとテイク・プロフィートはリスクと利益を管理するために使用されます.

利点分析

チョッピネスK線突破戦略には以下の利点があります

  1. 複数の指標を組み合わせることで,取引信号の信頼性が向上します.CCIは取引領域を特定し,K線はトレンド方向を決定し,ボリュムは市場の勢いを反映します.

  2. K線パターンの利用は,トレンド逆転を正確に特定するのに役立ちます.例えば,CCI過売れた赤いK線は,購入機会を提供します.

  3. ストップ・ロスト・アンド・テイク・プロフィートは リスクを効果的に制御し 利益を固定します

  4. 音量上昇の信号のみを考慮すれば 誤った信号を避けることができます

  5. 戦略の論理は明確で パラメータは株式や市場環境の最適化のために柔軟です

  6. より多くの要因,機械学習などによって戦略をさらに改善し,安定性と収益性を高めることができます.

リスク分析

戦略の潜在的なリスクには以下のものがある.

  1. CCI信号は遅延し,最適なエントリーポイントを逃す可能性があります.CCIパラメータはより高い感度のために調整することができます.

  2. K線パターンの偽のブレイクが不必要な損失を引き起こす可能性があります. 確認のためにより多くの指標を追加したり,ストップ損失パーセントを調整したりできます.

  3. 増量も操作できるので,物価の変動に注意することが重要です.

  4. 静的なストップ・ロスト/テイク・プロフィートは,早期に終了したり,さらなるトレンドを逃す可能性があります. ダイナミックな調整を検討してください.

  5. あるストックに搭載されたパラメータは,他のストックに適合しない可能性があります.特定の調整が必要です.

  6. バックテストの結果は ライブでのパフォーマンスを反映しないかもしれない 実行リスクに注意

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

戦略は以下によって強化される:

  1. CCI パラメータを最適化して 信号を早く生成する

  2. MACDやボリンジャー帯などの指標を追加して 信号の精度を向上します

  3. 歴史的なデータで訓練された機械学習モデルを使用して 入口/出口先を予測します

  4. 市場変動に基づいて ダイナミックなストップ・ロスを利用し 利益を取ります

  5. 価格差を検出するための量増加ロジックの改善

  6. 安定性を高めるため,異なるストックと市場体制のパラメータを調整する.

  7. トレンドフォローメカニズムを組み込み,市場各段階でのより良いパフォーマンスを実現する.

  8. 戦略をモジュール化して 柔軟性や拡張性を高めます

結論

ショッピネスKラインブレークスルー戦略は,比較的直線的な短期取引戦略である.ストップ・ロストとテイク・プロフィートによる明確な論理とリスク管理のための共通の技術指標を組み合わせ,短期的な逆転と中期的なトレンドを把握するためのニーズに基づいて柔軟に最適化することができる.しかし,指標遅延や偽ブレイクアウトを含むリスクは管理されるべきである.堅牢な最適化とリスク管理により,基本的な定量的な取引戦略を形成することができる.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 2h
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/
// © vikris

//@version=4
strategy("[VJ]War Machine PAT Intra", overlay=true, calc_on_every_tick = false)

// ********** Strategy inputs - Start **********

// Used for intraday handling
// Session value should be from market start to the time you want to square-off 
// your intraday strategy
// Important: The end time should be at least 2 minutes before the intraday
// square-off time set by your broker
var i_marketSession = input(title="Market session", type=input.session, 
     defval="0915-1455", confirm=true)

// Make inputs that set the take profit % (optional)
longProfitPerc = input(title="Long Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01

shortProfitPerc = input(title="Short Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01
     
// Set stop loss level with input options (optional)
longLossPerc = input(title="Long Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01

shortLossPerc = input(title="Short Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01    

trendFactor = input(title="Trend Factor(Lower means trending)", type=input.integer, minval=1, step=1, defval=50)

oversold = input(title="Oversold", type=input.integer, minval=1, step=1, defval=25)

overbought = input(title="Overbought", type=input.integer, minval=1, step=1, defval=75)

// ********** Strategy inputs - End **********


// ********** Supporting functions - Start **********

// A function to check whether the bar or period is in intraday session
barInSession(sess) => time(timeframe.period, sess) != 0
// Figure out take profit price
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


// ********** Supporting functions - End **********


// ********** Strategy - Start **********
// See if intraday session is active
bool intradaySession = barInSession(i_marketSession)

// Trade only if intraday session is active

//=================Strategy logic goes in here===========================
//Vol Confirmation
vol = volume > volume[1]

//Engulfing candle confirm
bullishEC = close > open[1] and close[1] < open[1]
bearishEC = close < open[1] and close[1] > open[1]

//Candles colors
greenCandle = (close > open)
redCandle = (close < open)

length = input(title="Length", type=input.integer, defval=14, minval=1, maxval=2000)
src = hlc3
upper = sum(volume * (change(src) <= 0 ? 0 : src), length)
lower = sum(volume * (change(src) >= 0 ? 0 : src), length)
_rsi(upper, lower) =>
    100.0 - (100.0 / (1.0 + upper / lower))
mf = _rsi(upper, lower)
ci = 100 * log10(sum(atr(1), length) / (highest(length) - lowest(length))) / log10(length)

//tradeSignal = ((rsiOS or rsiOS[1]) and bullishEC) or ((rsiOB or rsiOB[1]) and bearishEC)




//Final Long/Short Condition
longCondition =  redCandle and mf < oversold and ci <trendFactor and vol
shortCondition = greenCandle and mf >overbought and ci <trendFactor and vol
 
//Long Strategy - buy condition and exits with Take profit and SL
if (longCondition and intradaySession)
    stop_level = longStopPrice
    profit_level = longExitPrice
    strategy.entry("My Long Entry Id", strategy.long)
    strategy.exit("TP/SL", "My Long Entry Id", stop=stop_level, limit=profit_level)


//Short Strategy - sell condition and exits with Take profit and SL
if (shortCondition and intradaySession)
    stop_level = shortStopPrice
    profit_level = shortExitPrice
    strategy.entry("My Short Entry Id", strategy.short)
    strategy.exit("TP/SL", "My Short Entry Id", stop=stop_level, limit=profit_level)
 
 
// Square-off position (when session is over and position is open)
squareOff = (not intradaySession) and (strategy.position_size != 0)
strategy.close_all(when = squareOff, comment = "Square-off")

// ********** Strategy - End **********

もっと