この戦略は,クロスオーバーを生成し,買い・売るシグナルを生成するために,異なる期間の2つのEVWMAラインを使用する.短い期間のラインが長い期間のラインを横切ると,購入信号を生成する.短い期間のラインが長い期間のラインを下に横切ると,販売信号を生成する.
戦略は,異なる期間の2つのEVWMA線を計算し,交差することによって傾向の変化を特定します.
まず2つのEVWMA線を計算します
短期間線 m1 期間長さ1 5 にデフォルト
長期期間の線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は前期の総量,ボリュームは現在の期間のボリューム,ボリューム_価格は現在の期間のターンオーバーである.これは最近のデータにより高い重みを割り当てる効果を達成する.
この戦略の利点は以下の通りです.
EVWMAは価格変化に迅速に対応し,利益の機会を向上させる
2つのEVWMAラインのクロスオーバーは,タイムリーにターニングポイントを特定します
シンプルな論理と実行が簡単
異なる市場環境に適応するための調整可能な期間長さ
複雑なパラメータの最適化を必要とせず,ライブ取引に簡単です.
この戦略にはいくつかのリスクもあります:
クロスオーバーは,市場のノイズをフィルタリングせずに過度に無効な信号を生成する可能性があります
傾向の逆転点を特定するのが困難で,逆転が欠けているリスク
ストップ・ロスはなく,利益も得られないし,リスクを効果的にコントロールできない.
パラメータの最適化が不十分で,不適切な周期設定が起こる.
戦略を改善するためのいくつかの方向性:
ストップ・ロストと利益を引き取りを厳格にリスク管理に追加する
最適なパラメータを見つけるために期間の長さを最適化
無効な取引を減らすためにボリュームフィルターを追加する
逆転を回避するために逆転指標と組み合わせる
市場の変化に基づいてパラメータを動的に最適化
牛市場と熊市場を区別し,異なるパラメータを使用する
ビッグデータに基づく取引タイミングを決定するための機械学習モデルを導入
概要すると,この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")