WaveTrend と CMF ベース トレンド フォロー 戦略

作者: リン・ハーンチャオチャン, 日付: 2023-11-16 16:38:03
タグ:

img

概要

この戦略は,トレンドの方向性を特定し,トレンドをフォローするためにWaveTrend指標とChaikin Money Flow (CMF) インジケーターを組み合わせます.これは15分間のタイムフレームで実行され,WaveTrendを使用して価格トレンドを決定し,CMFを使用してトレンドを確認し,それによって超短期トレンドフォローを実装します.

戦略の論理

WaveTrendインジケーターは,価格のトレンド方向を効果的に特定することができる.チャネルミッドライン,チャネル平均線,チャネルインデックスで構成される.チャネルミッドラインは,価格傾向を反映する価格の指数関数移動平均線である.チャネルミッドラインの移動平均線は,チャネルミッドラインを特定するために使用されるチャネルミッドラインの移動平均線である.チャネルインデックスは,チャネルミッドラインからの価格の偏差を反映し,過買い/過売り信号を生成する.

CMF指標は,資金の流入と流出を判断し,傾向を確認することができる.この指標は,購入力と販売力の比較を反映する,容量調整の蓄積/分配線に基づいています. 0 周りの値は資金の流入と流出のバランスを示します. 0 未満は資金の流出を示し,0 以上は資金の流入を示します.

この戦略は15分間のタイムフレームで実行される.まずは価格トレンド方向性を決定するためにWaveTrendインジケーターを使用し,その後,トレンドを追跡するためにCMFインジケーターを使用して確認する.特に,WaveTrendチャネルインデックスが-60未満でCMFが-0.2未満の場合,ロングに行く.WaveTrendチャネルインデックスが60を超え,CMFが-0.2未満の場合,ショートに行く.出口条件は主にCMFインジケーターに基づいている - CMFが-0.18未満でロングポジションを閉じて,CMFが-0.18未満でショートポジションを閉じる.

利点分析

  1. WaveTrendインジケーターは,価格傾向の方向性を効果的に決定することができます.
  2. CMFインジケーターはトレンドの方向性を確認し 間違った取引を避けることができます
  3. WaveTrendとCMFを組み合わせると,超短期的なトレンドフォローを実現できます.
  4. 短時間取引に適しています

リスク分析

  1. WaveTrendは統合中に誤った信号を生む可能性があります.
  2. CMFは遅れて,トレンドのターニングポイントを見逃す可能性があります.
  3. 取引期間を延長すべきです
  4. ストップ・ロスの戦略がない 単一の損失を制御できない

解決策:

  1. 誤った信号を避けるため,他の確認指標を追加します.
  2. CMFのパラメータを調整して 感度を上げろ
  3. 保有期間を延長して 単一の時間枠でリスクを下げる
  4. 損失を制御するために移動ストップ・損失,ブレイク・イブ・ストップなどを追加します.

最適化

  1. ポジションサイズを追加して 傾向を追求します
  2. ストップ・ロスの戦略を追加して単一の損失を制限する.
  3. 単一の指標から誤りを避けるために ストキャスティクスのような指標を追加します
  4. 最適値を見つけるために 異なる保持期間をテストします
  5. CMFのパラメータを最適化して 最適な組み合わせを見つけます

概要

この戦略は,トレンドを決定するためにWaveTrendとCMFを確認するために,超短期的なトレンドフォローのために使用する.その利点は,合理的な指標組み合わせと効果的なトレンドフォローで,15分間のタイムフレームで,短期取引に適している.しかし,不正確な信号や過短な保持期間などのリスクがあります.ストップ損失,パラメータ最適化,より多くの信号フィルタリングなどの将来の改善は,安定性と収益性をさらに高めることができます.


/*backtest
start: 2023-11-08 00:00:00
end: 2023-11-15 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "CMF - WaveTrend", shorttitle = "CMF - WaveTrend", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.EUR)

//Chaikin Money Flow

len = input(20, minval=1, title="Length")
mas = input(title="Aggregation", defval="SUM", options=["SUM", "EMA", "WMA"])
e = input(10.0, title="Volume Exponent (0-10 reduces & 10+ increases volume effect)")
p = input(false, title="Show in Percentage")
mvs = input(false, "Factor in Price (Money Volume)")
src=input(hlc3, title="Source for price factor")

trl = min(low,close[1]), trh = max(high,close[1]) // 'true range' fixes issues caused by gaps in price
wv = pow(volume,e/10.0)*(mvs ? src : 1)
ad = (trh==trl ? 0 : (2*close-(trh+trl))/tr(true))*wv
cmf = mas=="SUM" ? sum(ad, len)/sum(wv, len) : mas=="EMA" ? ema(ad, len)/ema(wv, len) : mas=="WMA" ? wma(ad, len)/wma(wv, len) : na
cmf_p  = if p
    50*cmf+50
else
    cmf
b = p ? 50 : 0


//WaveTrend
n1 = input(10, "Channel Length")
n2 = input(21, "Average Length")
obLevel1 = input(60, "Over Bought Level 1")
obLevel2 = input(53, "Over Bought Level 2")
osLevel1 = input(-60, "Over Sold Level 1")
osLevel2 = input(-53, "Over Sold Level 2")
 
ap = hlc3 
esa = ema(ap, n1)
d = ema(abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ema(ci, n2)
 
wt1 = tci
wt2 = sma(wt1,4)
// 


longCondition = wt1 < -60 and cmf < - 0.20
if (longCondition)
 
    strategy.entry("My Long Entry Id", strategy.long)
    
 
shortCondition = wt1 > 60 and cmf > 0.20
if (shortCondition)
 
    strategy.entry("My Short Entry Id", strategy.short)
    
closeLongCondition = cmf_p > 0.18 ? true : false
closeShortCondition = cmf_p < -0.18 ? true : false
    
    
strategy.close("My Long Entry Id", when=(closeLongCondition == true))
strategy.close("My Short Entry Id", when=(closeShortCondition == true))

もっと