定量的ゴールデンクロス戦略


作成日: 2023-11-22 14:39:33 最終変更日: 2023-11-22 14:39:33
コピー: 2 クリック数: 652
1
フォロー
1617
フォロワー

定量的ゴールデンクロス戦略

概要

この戦略は,カスタマイズされた純量指標を計算することによって,金のクロス買いとデッドフォークの販売を定量化するための取引戦略である. この戦略は,トレンドフォロー型の戦略である.

戦略原則

策略の核心的な論理は,カスタマイズされた純額 ((NV) の指標を計算することである.NV指標は,価格の変化の方向を判断することによって,正の場合は当日の取引量,負の場合は当日の取引量の負の値,変化がない場合は0を取ることである.これは,価格の変化と取引量の関係をより明確に反映することができる.

その後,戦略は,NV指標の3日間の単純移動平均を,それぞれ金十字線と死叉線として計算する.NV指標が,下から上へ金十字線を突破すると,多行し,NV指標が,上から下へ死叉線を突破すると,空行する.

また,戦略は,取引時間を制御するためにパラメータ化された開始時間を設定します.

戦略的優位性

この戦略の最大の利点は,戦略が簡潔でわかりやすく,パラメータ設定が柔軟で,取引品種や取引時間などにカスタマイズできることです.また,この戦略はトレンドフォロー型の戦略であり,価格の動向を効果的に捉え,取引頻度を低下させ,高い利率を得ることができます.

戦略リスク

この戦略には以下のリスクがあります.

  1. 日は戦略に従っており,価格変化のトレンドに間に合うように反応することができない.一部の取引機会を逃したり,間に合うように止まらないかもしれない.

  2. 定量金クロス自体は遅滞しており,入場遅延や損失拡大を引き起こす可能性があります.

  3. 市場騒音を効率的にフィルターできず 騙されやすい.

移動平均は他の指標のフィルタリングと組み合わせてリスクを下げることができます.

戦略最適化の方向性

この戦略は以下の点で最適化できます.

  1. 単一損失を制御するために,移動停止,夜間停止などのストップ・ストップ戦略を増やす.

  2. フィルタリング指標を追加し,MACD,KDJなどの他の指標を活用して誤報信号をフィルタリングし,戦略の安定性を向上させる.

  3. 参数最適化,遺伝的アルゴリズム,マルコフ連鎖などの方法による最適参数組み合わせの探求を繰り返し行う.

  4. 戦略の組み合わせは,他の無関係な戦略と組み合わせることで,リスクをさらに分散させ,全体のリターン率を向上させることができます.

要約する

この戦略は,金十字を量化することで,シンプルで効果的なトレンドフォローを実現している.ある程度の遅れがあるが,パラメータ設定は柔軟で,容易に理解できるので,初心者の実践に適した戦略である.継続的な最適化により,戦略の効果を徐々に高め,リスクを低減することができる.

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

//@version=3
strategy(title="@DankCoins - Customized Net Volume")
src = input(defval = close, title = "VA Source")
nv = change(src) > 0 ? volume : change(src) < 0 ? -volume : 0*volume



// Inputs //
VHigh = input(defval = 50, title = "VHigh Amount")
VLow = input(defval = -50, title = "VLow Amount")


// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, 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 = 2012)
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 = 2012)

MAV1 = sma(volume, 3)
MAV2 = -sma(volume, 3)

enterShort = crossunder(nv, MAV1)
exitShort = crossunder(nv, MAV2)
enterLong = crossover(nv, MAV2)
exitLong = crossover(nv, MAV1)

// Time Function 
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"


strategy.entry(id="Long Entry", long=true, when=enterLong and window())
strategy.entry(id="Short Entry", long=false, when=enterShort and window())
strategy.exit("Exit Long", from_entry = "Long Entry",  when=exitLong and window())
strategy.exit("Exit Short", from_entry = "Short Entry",  when=exitShort and window())


// Plot
plot(nv, color=blue, title="NV")
plot(VHigh, color=red)
plot(VLow, color=red)
plot(MAV1, color=green)
plot(MAV2, color=green)