加重移動平均クロスオーバーに基づく定量取引戦略


作成日: 2023-12-06 12:05:01 最終変更日: 2023-12-06 12:05:01
コピー: 0 クリック数: 626
1
フォロー
1619
フォロワー

加重移動平均クロスオーバーに基づく定量取引戦略

概要

戦略は累積された量的な移動平均の交差策(Weighted Quantitative Moving Average Crossover Strategy) 基本的考え方は,価格,取引量などの複数の指標を組み合わせて,高速線と遅い速度線を設計し,金叉と死叉の発生時に買入と売却のシグナルを発信することです.

戦略原則

この戦略の核心指標は,定量的移動平均 (QMA) である.QMAは,一段の時間における重量平均の計算によってトレンドの方向性を測定する.それは,通常の移動平均と異なるのは,価格の重量 (重量=価格) である.*取引量) は時間とともに衰退する.このようにして,最近の価格の重さはより大きくなり,市場の変化により迅速に反応することができる.

具体的には,この戦略は,高速QMA線と遅いQMA線を構成している.高速線のパラメータは25日,遅い線のパラメータは29日と設定されている.高速線が,下から遅い線を横切るときに買い信号が生じる.高速線が,上から下から遅い線を横切るときに売り信号が生じる.

優位分析

この戦略は,通常の移動平均と比較して,以下の利点があります.

  1. 市場への反応が速くなり,短線の機会を把握できます.
  2. 価格と取引量の複数の次元を組み合わせ,より高い安定性
  3. パラメータの設定は,異なる市場環境に適応する柔軟性

リスク分析

この戦略にはいくつかのリスクがあります.

  1. ショートライン操作が頻繁で,取引コストや滑り点を増加させる可能性が高い
  2. PARAMETERS 過度な最適化により,曲線が合致する可能性がある
  3. 取引量が少ない場合,指標効果は割引される可能性があります.

適切なパラメータの周波数調整,厳格なウォークフォワード分析,および他の指標と組み合わせることで,上記のリスクを軽減することができます.

最適化の方向

この戦略をさらに改善する余地があります.

  1. QMAのパラメータを動的に調整し,市場の変動に応じて自律的に調整できるようにする
  2. 波動率や取引量などの指標を組み合わせて入場機会をフィルターします.
  3. 単一損失を抑えるためのストップ・ロース戦略を強化する

要約する

この戦略は,全体的に安定性の良い短期取引戦略である.単一の価格平均と比較して,その指標は,市場の需要と供給の関係をよりよく反映している.パラメータ調整とリスク管理手段の導入により,この戦略は,長期にわたって安定して動作し,良い収益を得ることができる.

ストラテジーソースコード
/*backtest
start: 2022-11-29 00:00:00
end: 2023-12-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Brad VWMACD Strategy 2233", overlay=false, max_bars_back=500,default_qty_type=strategy.percent_of_equity,commission_type=strategy.commission.percent, commission_value=0.18, default_qty_value=100)

// === INPUT BACKTEST RANGE === 
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === INPUT SMA === 
//fastMA    = input(defval = 16, type = integer, title = "FastMA", minval = 1 )
//slowMA    = input(defval = 23, type = integer, title = "SlowMA", minval = 1)

fastMA    = input(defval = 25, title = "FastMA", minval = 1 )
slowMA    = input(defval = 29,  title = "SlowMA", minval = 1)

Long_period = slowMA
Short_period = fastMA
Smoothing_period = input(9, minval=1)
xLongMAVolPrice = ema(volume * close, Long_period) 
xLongMAVol = ema(volume, Long_period) 
xResLong = (xLongMAVolPrice * Long_period) / (xLongMAVol * Long_period)
xShortMAVolPrice = ema(volume * close, Short_period) 
xShortMAVol = ema(volume, Short_period) 
xResShort = (xShortMAVolPrice * Short_period) / (xShortMAVol * Short_period)
xVMACD = xResShort - xResLong
xVMACDSignal = ema(xVMACD, Smoothing_period)
nRes = xVMACD - xVMACDSignal
//plot(nRes*20+slowMA, color=blue, style = line )
//plot(3000, color=red, style = line )


// === SERIES SETUP ===

buy  = crossover( xVMACD,xVMACDSignal)     // buy when fastMA crosses over slowMA
sell = crossunder( xVMACD,xVMACDSignal)  // sell when fastMA crosses under slowMA


// === SERIES SETUP === 

//buy  = crossover(vwma(close, fastMA),7+vwma(close, slowMA))     // buy when fastMA crosses over slowMA
//sell = crossunder(vwma(close, fastMA),vwma(close, slowMA)-7)    // sell when fastMA crosses under slowMA

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy)  // buy long when "within window of time" AND crossover
strategy.close("L", when = window() and sell)                // sell long when "within window of time" AND crossunder         

// === EXECUTION ===
strategy.entry("S", strategy.short, when = window() and sell)  // buy long when "within window of time" AND crossover
strategy.close("S", when = window() and buy)                // sell long when "within window of time" AND crossunder         

plotshape(window() and buy, style=shape.triangleup, color=green, text="up")
plotshape(window() and sell, style=shape.triangledown, color=red, text="down")
plot(xVMACD*100, title = 'FastMA', color = orange, linewidth = 2, style = line)  // plot FastMA
plot(xVMACDSignal*100, title = 'SlowMA', color = aqua, linewidth = 2, style = line)    // plot SlowMA