定量的な金十字戦略

作者: リン・ハーンチャオチャン,日付: 2023年11月22日 14:39:33
タグ:

img

概要

この戦略は,ゴールドクロスオーバーで購入し,デスクロスオーバーで販売する取引戦略を実行するために,カスタム・ネット・ボリューム指標を計算します.この戦略はトレンドフォロー戦略に属します.

戦略原則

戦略の基本論理は,カスタムな純量 (NV) インディケーターを計算することです.NV インディケーターは価格変動の方向性を判断します.陽性であれば,日々のボリュームを採ります.負の場合は,日々のボリュームの負値を採ります.変化しない場合は0を取ります.これは価格変化とボリュームの関係をより明確に反映することができます.

この戦略は,それぞれGOLDEN CROSS LINEとDEATH CROSS LINEとして,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)

もっと