2倍移動平均のクロスオーバーに基づいた定量取引戦略

作者: リン・ハーンチャオチャン, 開催日:2024年2月21日 14:28:28
タグ:

img

概要

この戦略は"ダブル・ムービング・アベア・クロスオーバーに基づいた定量取引戦略"と呼ばれる.この戦略の主な考え方は,価格動向を決定し,それに応じて購入・販売の決定を行うために,高速・遅い移動平均線間のクロス信号を使用することです.

戦略原則

この戦略の主な指標は,高速移動平均線と遅い移動平均線である.この戦略は,高速移動平均線と遅い移動平均線のクロスオーバー関係を利用し,価格動向を決定し,これに基づいて取引決定を行う.

具体的には,高速移動平均線パラメータは24期に設定され,スロームービング平均線パラメータは100期に設定されます.高速移動平均線が下からスロームービング平均線を越えると,価格は上昇傾向に入っていることを示し,この時点で戦略は購入信号を発行します.高速移動平均線が上からスロームービング平均線を下に越えると,価格は下向き傾向に入っていることを示し,この時点で戦略は販売信号を発行します.

急速な移動平均線と遅い移動平均線の交差方向を判断することで,価格動向の変化を効果的に把握し,買取や売却の決定を助けることができます.

戦略 の 利点

この戦略には以下の利点があります.

  1. 原則は単純で理解しやすく,実行しやすい.ダブル移動平均のクロスオーバーは最も基本的な技術指標の1つであり,理解し適用するのが簡単です.

  2. 調節可能なパラメータ,高度な適応性. 快速移動平均値と遅い移動平均値のパラメータは,実際の条件に応じて調整することができ,戦略をより柔軟にします.

  3. 傾向の変化を把握する強い能力.価格が統合からトレンドに移動するときに,二重移動平均のクロスオーバーはしばしばターニングポイントを把握するために使用されます.

  4. 統合を効果的にフィルタリングし,無効な取引を減らすことができます. 統合範囲を特定し,統合中にポジションの再開を避けるために,ダブル移動平均を使用できます.

戦略 の リスク

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

  1. ダブル移動平均のクロスオーバーシグナルが遅れている場合もあります.トレンド追跡指標として,ダブル移動平均のクロスオーバーシグナルは,一定の期間遅れていることが多いため,一定の機会コストにつながる可能性があります.

  2. 振動する市場では偽信号を出すのは簡単です. 価格が明確なトレンドを示しているときにダブル移動平均が最もうまく機能します. しかし振動する市場では,頻繁に偽信号を生成する傾向があります.

  3. パラメータの設定が正しくない場合,戦略のパフォーマンスに影響を与える可能性があります. 快速と遅い移動平均のパラメータが正しく設定されていない場合,トレンドクロスオーバーを捕捉する感度に影響します.

対応する解法:

  1. クロスオーバー信号の感度を高めるために移動平均期間を適切に短縮する.

  2. 波動する市場における無効な取引を減らすため,フィルタリングのための波動性またはボリューム指標を追加します.

  3. パラメータ最適化により,最適なパラメータ組み合わせを見つけます.自動最適化のために機械学習やその他の方法を追加します.

戦略の最適化のための方向性

戦略は以下の側面で最適化できます.

  1. より高度な移動平均技術指標,例えば線形重量移動平均を単純移動平均の代わりとして使用し,指標の追跡と予測能力を向上させる.

  2. 合同フィルタリングのためのボリュームと波動性指標などの補助指標を追加して,無効な信号を減らす.

  3. パラメータの適応性を向上させるために,高速および遅い移動平均パラメータを最適化する.機械学習やランダム最適化などの方法を使用して最適なパラメータを見つけることができます.

  4. 戦略が市場に投入された後,ストップ・ロスト・ポイントとトライリング・ストップ・ロスは単一の損失を制御するために設計することができます.同時に,十分な利益を確保するために利益最適化技術を追加します.

  5. ディープラーニングなどの新しい技術は,より複雑な価格パターンを特定し,より良い結果を得るため,買い物や販売の決定に移動平均のクロスオーバーを助けるために使用できます.

概要

一般的には,この戦略は比較的古典的でシンプルです.価格が統合からトレンドに移動するときに機会を明らかにするために,ダブル移動平均指標に基づいて価格動向を決定します.利点は,トレンド市場を追跡するのに適した明確な論理とシンプルさです.しかし,戦略の安定性と効率性を高めるためにパラメータチューニングと最適化によって改善する必要がある信号遅延のようないくつかの欠点もあります.全体として,基本的な戦略として,これは非常に適していますが,より複雑な市場環境に適応するために継続的な最適化が必要です.


/*backtest
start: 2024-01-21 00:00:00
end: 2024-02-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Pine Script Tutorial Example Strategy 1', overlay=true, initial_capital=100000, default_qty_value=100, default_qty_type=strategy.percent_of_equity)

//OBV
src = close
obv = ta.cum(math.sign(ta.change(src)) * volume)
ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)
typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
smoothingLength = input.int(title = "Length", defval = 20, minval = 1, maxval = 100, group="Smoothing")
Limit = input.float(title = "Limit", defval = 1, minval = 0.1, maxval = 10, group="Smoothing")
smoothingLine_ma = ma(obv,smoothingLength, typeMA)
obv_diff = (obv-smoothingLine_ma)*100/obv

//PVT
var cumVolp = 0.
cumVolp += nz(volume)
if barstate.islast and cumVolp == 0
    runtime.error("No volume is provided by the data vendor.")
srcp = close
vt = ta.cum(ta.change(srcp)/srcp[1]*volume)
smoothingLine_map = ma(vt,smoothingLength, typeMA)
pvt_diff = (vt-smoothingLine_map)*100/vt

// plot(obv_diff+close+100 ,title="OBV_DIFF", color = color.rgb(255, 118, 54))
// plot(pvt_diff+close+80 ,title="PVT_DIFF", color = color.rgb(223, 61, 255))

indicator = (pvt_diff+obv_diff)/2
goLongCondition1 = ta.crossover(indicator,Limit)
timePeriod = time >= timestamp(syminfo.timezone, 2023,1, 1, 0, 0)  // Backtesting Time
notInTrade = strategy.position_size <= 0
if goLongCondition1 and timePeriod and notInTrade
    stopLoss = low * 0.99 // -2%
    takeProfit = high * 1.05 // +5%
    strategy.entry('long', strategy.long )
    strategy.exit('exit', 'long', stop=stopLoss, limit=takeProfit)






// fastEMA = ta.ema(close, 24)
// slowEMA = ta.ema(close, 100)
// goLongCondition1 = ta.crossover(fastEMA, slowEMA)
// timePeriod = time >= timestamp(syminfo.timezone, 2018, 12, 15, 0, 0)
// notInTrade = strategy.position_size <= 0
// if goLongCondition1 and timePeriod and notInTrade
//     stopLoss = low * 0.97
//     takeProfit = high * 1.12
//     strategy.entry('long', strategy.long)
//     strategy.exit('exit', 'long', stop=stopLoss, limit=takeProfit)
// plot(fastEMA, color=color.new(color.blue, 0))
// plot(slowEMA, color=color.new(color.yellow, 0))

もっと