波動トレンドに基づく定量的取引戦略


作成日: 2023-11-28 16:17:31 最終変更日: 2023-11-28 16:17:31
コピー: 1 クリック数: 715
1
フォロー
1619
フォロワー

波動トレンドに基づく定量的取引戦略

概要

この戦略は,波動のトレンド指標に基づいて設計されています. 波動のトレンド指標は,価格チャネルと平均線を組み合わせて,市場トレンドを効果的に識別し,買入と売却のシグナルを発信します. この戦略は,波動のトレンドの超買い超販売ラインを設定して,指標ラインが重要なラインを突破すると,買入または売却を行う.

戦略原則

  1. 価格の三角移動平均ap,およびapの指数移動平均esa を計算する.
  2. apとesaの絶対差値の指数移動平均 d を計算する.
  3. 波動指数ci。が得られます.
  4. ciのn2周期平均を計算して,波動傾向指標wt1。を得ます.
  5. オーバーバイラインとオーバーセールラインを設定します.
  6. wt1で超売り線を穿ったとき,多めにする.wt1の下で超買い線を穿ったとき,空にする.

優位分析

  1. 波動トレンド指標は,超買超売ラインを突破し,市場トレンドの転換点を効果的に捕捉し,精密な買取り決定を行うことができます.
  2. 価格チャネルと均等線理論を組み合わせると,指標は頻繁にシグナルを生成しない.
  3. 任意の時間周期を使用し,複数の取引品種に適用されます.
  4. ユーザー体験は良好です.

リスクと解決

  1. 大幅な振動市場では,指標は誤信号を生じ,リスクは大きい.適切な保持期間を短縮するか,または他の指標のフィルター信号と組み合わせることができる.
  2. ポジション管理とストップ・メカニズムを考慮していないため,損失のリスクがある. ポジションの規模と移動ストップを設定してリスクを制御できます.

最適化の方向

  1. KDJ,MACDなどの他の指標のポートフォリオと併用して,取引ポートフォリオを形成し,戦略の安定性を向上させることも考えられます.
  2. 追跡停止,変速ライン停止などの自動停止メカニズムを設計して,単一損失を制御することができる.
  3. ディープ・ラーニング・アルゴリズムと組み合わせて,反測データ訓練により,自動的にパラメータを最適化し,戦略の勝利率を向上させることができる.

要約する

この戦略は,波動的トレンド指標に基づいて,オーバーバイ・オーバーセルの状況を判断し,トレンドを識別し,効果的なトレンド追跡戦略である.短期指標と比較して,波動的トレンド指標は,誤信号を軽減し,安定性を高める.ポジション管理とストップと組み合わせて,この戦略は,安定した収益を得ることができる.パラメータとモデル調整により,戦略の効果をさらに向上させることができる.

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


//@author SoftKill21
//@version=4

strategy(title="WaveTrend strat", shorttitle="WaveTrend strategy")
n1 = input(10, "Channel Length")
n2 = input(21, "Average Length")
Overbought = input(70, "Over Bought")
Oversold = input(-30, "Over Sold ")

// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2001, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
DST = 1 //day light saving for usa
//--- Europe
London = iff(DST==0,"0000-0900","0100-1000")
//--- America
NewYork = iff(DST==0,"0400-1500","0500-1600")
//--- Pacific
Sydney = iff(DST==0,"1300-2200","1400-2300")
//--- Asia
Tokyo = iff(DST==0,"1500-2400","1600-0100")

//-- Time In Range
timeinrange(res, sess) => time(res, sess) != 0

london = timeinrange(timeframe.period, London)
newyork = timeinrange(timeframe.period, NewYork)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true //and (london or newyork)

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)

plot(0, color=color.gray)
plot(Overbought, color=color.red)
plot(Oversold, color=color.green)

plot(wt1, color=color.green)
longButton = input(title="Long", type=input.bool, defval=true)
shortButton = input(title="Short", type=input.bool, defval=true)

if(longButton==true)
    strategy.entry("long",1,when=crossover(wt1,Oversold) and time_cond)
    strategy.close("long",when=crossunder(wt1, Overbought))
    
if(shortButton==true)
    strategy.entry("short",0,when=crossunder(wt1, Overbought) and time_cond)
    strategy.close("short",when=crossover(wt1,Oversold))

//strategy.close_all(when= not (london or newyork),comment="time")
if(dayofweek == dayofweek.friday)
    strategy.close_all(when= timeinrange(timeframe.period, "1300-1400"), comment="friday")