弾性体積重量移動平均交差戦略

作者: リン・ハーンチャオチャン,日付: 2023-09-18 22:07:14
タグ:

概要

この戦略は,クロスオーバーを生成し,買い・売るシグナルを生成するために,異なる期間の2つのEVWMAラインを使用する.短い期間のラインが長い期間のラインを横切ると,購入信号を生成する.短い期間のラインが長い期間のラインを下に横切ると,販売信号を生成する.

戦略の論理

戦略は,異なる期間の2つのEVWMA線を計算し,交差することによって傾向の変化を特定します.

まず2つのEVWMA線を計算します

  1. 短期間線 m1 期間長さ1 5 にデフォルト

  2. 長期期間の線m2で,期間の長さ2で,デフォルトは40

その後,クロスオーバーとクロスアンダー関数を用いて,m1とm2間のクロスオーバー状況を決定します.

  • m1 が m2 を横切る場合は,購入信号を生成し,長引く操作を実行します.

  • M1 が m2 を下回る場合は,売り信号を生成し,ショート操作を実行します.

EVWMAは,単純な移動平均値と比較して最近のデータにより重みを付けていることに注意してください. 計算式は:

data = (nz(data[1]) * (nb_floating_shares - volume)/nb_floating_shares) + (volume_price/nb_floating_shares)

nz ((data[1]) は前期のEVWMA値,nb_floating_sharesは前期の総量,ボリュームは現在の期間のボリューム,ボリューム_価格は現在の期間のターンオーバーである.これは最近のデータにより高い重みを割り当てる効果を達成する.

利点分析

この戦略の利点は以下の通りです.

  1. EVWMAは価格変化に迅速に対応し,利益の機会を向上させる

  2. 2つのEVWMAラインのクロスオーバーは,タイムリーにターニングポイントを特定します

  3. シンプルな論理と実行が簡単

  4. 異なる市場環境に適応するための調整可能な期間長さ

  5. 複雑なパラメータの最適化を必要とせず,ライブ取引に簡単です.

リスク と 解決策

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

  1. クロスオーバーは,市場のノイズをフィルタリングせずに過度に無効な信号を生成する可能性があります

    • 解決策: 音量または他の指標と組み合わせて信号をフィルターする
  2. 傾向の逆転点を特定するのが困難で,逆転が欠けているリスク

    • 解決法: 期間パラメータを調整するか,他の逆転指標を追加する
  3. ストップ・ロスはなく,利益も得られないし,リスクを効果的にコントロールできない.

    • 解決法: 過去データと変動に基づいて適切なストップ損失と収益率を設定する
  4. パラメータの最適化が不十分で,不適切な周期設定が起こる.

    • 解決策: バックテストを通じてパラメータを最適化し,適切な長さを選択する

改善 の 方向

戦略を改善するためのいくつかの方向性:

  1. ストップ・ロストと利益を引き取りを厳格にリスク管理に追加する

  2. 最適なパラメータを見つけるために期間の長さを最適化

  3. 無効な取引を減らすためにボリュームフィルターを追加する

  4. 逆転を回避するために逆転指標と組み合わせる

  5. 市場の変化に基づいてパラメータを動的に最適化

  6. 牛市場と熊市場を区別し,異なるパラメータを使用する

  7. ビッグデータに基づく取引タイミングを決定するための機械学習モデルを導入

結論

概要すると,このEVWMAクロス戦略は,二重EVWMA線を計算し,横断することによってトレンド変化を効果的に特定し,取引信号を生成することができます.論理はシンプルですが,リスクと改善方向があります.ストップ損失,パラメータ選択,他の指標を統合などを最適化することで,戦略はライブ取引のために強化できます.全体的に見ると,これは移動平均クロス戦略の有益な探索であり,さらなる研究と適用に値します.


/*backtest
start: 2023-08-18 00:00:00
end: 2023-08-26 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

strategy("Elastic Volume Weighted Moving Average Cross Strategy", shorttitle="EVWMA Cross", overlay=true)
length1=input(5, title="EVWMA Short")
length2=input(40, title="EVWMA Long")

nbfs1=sum(volume, length1)
nbfs2=sum(volume, length2)

medianSrc=close

calc_evwma(price, length, nb_floating_shares) => 
    data = (nz(data[1]) * (nb_floating_shares - volume)/nb_floating_shares) + (volume*price/nb_floating_shares)
    data
    

m1=calc_evwma(medianSrc, length1, nbfs1)
m2=calc_evwma(medianSrc, length2, nbfs2)

if (crossover(m1, m2))
    strategy.entry("MA2CrossLE", strategy.long, comment="MA2CrossLE")

if (crossunder(m1, m2))
    strategy.entry("MA2CrossSE", strategy.short, comment="MA2CrossSE")

p1=plot(m1,color=orange,linewidth=2, title="evwma")
p2=plot(m2,color=orange,linewidth=2, title="evwma")

もっと