複数期間移動平均チャネルトレンドフォロー戦略


作成日: 2024-02-20 13:45:42 最終変更日: 2024-02-20 13:45:42
コピー: 2 クリック数: 607
1
フォロー
1617
フォロワー

複数期間移動平均チャネルトレンドフォロー戦略

概要

この戦略は,暗号通貨や株式のようなトレンド市場に適用されるスウィング戦略であり, 8時間などの大きな時間枠を使用する. この戦略は,SMA,EMA,VWMA,ALMA,SMMA,LSMA,VWMAを含む複数の移動平均を使用し,高点と低点にそれぞれ適用され,二つの平均線チャネルを形成する.

閉盤価格が高点に適用される平均値より高いときは多;閉盤価格が低点に適用される平均値より低いときは空.

戦略原則

この戦略は,SMA,EMA,VWMA,ALMA,SMMA,LSMA,VWMAを含む7種類の異なる移動平均指標を使用している.これらの移動平均は,K線の最高価格と最低価格にそれぞれ適用され,2つの平均を生成する.

最も高い価格に適用される平均はavg_highと呼ばれ,最も低い価格に適用される平均はavg_lowと呼ばれる.この2つの平均は1つの通路を形成する.

閉店価格がavg_highより大きいときは,多めに;閉店価格がavg_lowより低いときは,空白に.

ストップラインはavg_low,ストップラインは開設価格です.(1+tp_long);空白時に,ストップラインはavg_high,ストップラインは開設価格(1-tp_short)。

優位分析

この戦略の最大の利点は,複数の移動平均指標を活用して利益の確率を高めることです.異なる周期と計算方法の移動平均指標は,価格に対する反応速度が異なるため,組み合わせて使用すると,より信頼できる取引信号が形成されます.

もう一つの利点は,通路方式の取引である.上下通路は,止損範囲を制限し,リスクを軽減し,スウィング戦略に適している.

リスク分析

この戦略には2つのリスクがあります.

  1. 複数の移動平均指標の組み合わせが使用され,パラメータの設定は複雑で,最適なパラメータの組み合わせを見つけるために多くのテストと最適化が必要です.

  2. 横軸や明確なトレンドがない市場では,この戦略は損失を招く可能性があり,複数の無効ブレイクによる取引シグナルが発生します.

これらのリスクを軽減するには,トレンドが明らかな取引品種を選択し,パラメータの組み合わせを大量に反省し,最適化して,現在の市場状況に最も適したパラメータ設定を見つける必要があります.

最適化の方向

この戦略は,以下の点で改善する必要がある:

  1. より多くの種類の移動平均をテストし,より良い組み合わせを探してください.SMA,EMA,KAMA,TEMAなども考慮してください.

  2. 移動平均の長さと通路の幅のパラメータ最適化により,最適なパラメータの設定が求められます.

  3. 様々なストップ・ストップ・損失の設定をテストする. トレーリング・ストップやダイナミック・ストップなども考慮できる.

  4. トレンド判断指標と組み合わせて,明確なトレンドがない市場での頻繁な取引を避ける.例えばADX,ATRなど.

  5. エントリーとエグジットのロジックを最適化し,追加フィルター条件を設定し,無効取引を減らす.

要約する

この戦略は,複数の移動平均指標によって利益の確率を向上させ,上下チャネルを採用してリスクを低減する.これは,スウィングトレンド追跡戦略である.この戦略は,傾向が明らかな取引品種に適用され,パラメータの最適化後に効果が良くなります.しかし,市場が転換すると,大きな損失を負担しやすいため,リスクを低減するためにさらなる最適化が必要である.

ストラテジーソースコード
/*backtest
start: 2024-01-20 00:00:00
end: 2024-02-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © exlux99

//@version=4

strategy(title="High/Low channel swing", shorttitle="Multi MA swing", overlay=true)


fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

//////
length_ma= input(defval=12, title="Length Moving averages", minval=1)

////////////////////////////////SETUP///////////////////////////////////////////

sma_high   = sma(high, length_ma)
ema_high   = ema(high, length_ma)
wma_high   = wma(high, length_ma)
alma_high  = alma(high,length_ma, 0.85, 6)
smma_high = rma(high,length_ma)
lsma_high = linreg(high, length_ma, 0)
vwma_high = vwma(high,length_ma)



avg_high = (sma_high+ema_high+wma_high+alma_high+smma_high+lsma_high+vwma_high)/7

///////////////////////////////////////////

sma_low   = sma(low, length_ma)
ema_low   = ema(low, length_ma)
wma_low   = wma(low, length_ma)
alma_low  = alma(low,length_ma, 0.85, 6)
smma_low = rma(low,length_ma)
lsma_low = linreg(low, length_ma, 0)
vwma_low = vwma(low,length_ma)



avg_low = (sma_low+ema_low+wma_low+alma_low+smma_low+lsma_low+vwma_low)/7

////////////////////////////PLOTTING////////////////////////////////////////////


plot(avg_high , title="avg", color=color.green, linewidth = 4)
plot(avg_low , title="avg", color=color.red, linewidth = 4)

long= close > avg_high
short = close < avg_low

tplong=input(0.06, title="TP Long", step=0.01)
sllong=input(0.05, title="SL Long", step=0.01)

tpshort=input(0.045, title="TP Short", step=0.01)
slshort=input(0.05, title="SL Short", step=0.01)

if(time_cond)
    strategy.entry("long",1,when=long)
    strategy.exit("closelong", "long" , profit = close * tplong / syminfo.mintick, loss = close * sllong / syminfo.mintick, alert_message = "closelong")
    strategy.close("long", when=crossunder(low,avg_low))
    
    
    strategy.entry("short",0,when=short)
    strategy.exit("closeshort", "short" , profit = close * tpshort / syminfo.mintick, loss = close * slshort / syminfo.mintick, alert_message = "closeshort")
    strategy.close("short",when=crossover(high,avg_high))