多期移動平均チャネルトレンド 戦略に従う

作者: リン・ハーンチャオチャン開催日:2024年2月20日 13:45:42
タグ:

img

概要

これは,暗号や株式などのトレンド市場のために設計されたスイング戦略で,8時間などの大きなタイムフレームを使用しています.この戦略は,SMA,EMA,VWMA,ALMA,SMMA,LSMA,VWMAを含む複数の移動平均値を,チャンネルとして2つの平均線を形成するために,高値と低値に別々に適用します.

高値に当てはまる平均線より上にある場合,ロングになります.低値に当てはまる平均線より下にある場合,ショートになります.

戦略の論理

この戦略は,SMA,EMA,VWMA,ALMA,SMMA,LSMA,VWMAを含む7種類の異なる移動平均値を使用します.これらのMAは2つの平均線を生成するために,キャンドルストイックの最高値と最低値に別々に適用されます.

高価格に適用される平均線は avg_high と呼ばれ,低価格に適用される平均線は avg_low と呼ばれ,この2つの線はチャネルを形成する.

ストップが平均値以上でロング,ストップが平均値以下でショート.

ロングのストップ・ロスは avg_low です. 取利益はエントリー価格 *(1 + tp_long です. ストップ・ロスは avg_high です.取利益はエントリー価格 *(1 - tp_short です.

利点分析

この戦略の最大の利点は,収益性を向上させるために複数の移動平均値を使用することです.異なるMAsは価格変化に異なる反応速度を持っています.それらを組み合わせることで,より信頼性の高い取引信号を形成します.

また,チャネルアプローチの利点もあります.チャネルはストップ・ロスの範囲を制限し,スウィング・トレーディングに適したリスクを軽減します.

リスク分析

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

  1. 複数のMAsの組み合わせにより パラメータ調整が複雑になり テストと最適化が多く求められます

  2. 横向またはトレンドのない市場では,戦略は損失や失敗をもたらす傾向があります.

リスクを軽減するために 明確な傾向のある製品を選択し,現在の市場状況に適したパラメータを見つけるために 広範なバックテストと最適化を行います.

オプティマイゼーションの方向性

さらに最適化すべき分野:

  1. より良い組み合わせを見つけるためにより多くの種類のMAをテストします SMA,EMA,KAMA,TEMAなどです

  2. 最適パラメータを決定するために,MAの長さとチャネル幅を最適化する.

  3. トレーリングストップやダイナミックストップのような 利益とストップ・ロスのメカニズムをテストします

  4. ADXやATRなどのトレンドメトリックを組み込むことで 市場が動揺しているときに 混乱を避けることができます

  5. 入口と出口ロジックを最適化し,有効な取引を減らすために追加のフィルターを使用します.

概要

このスウィングトレンドフォロー戦略は,複数のMAを使用して収益性を向上させ,チャネルを通じてリスクを軽減する.パラメータ最適化後のトレンド製品にはうまく機能する.しかし,トレンド逆転で大きな損失を被る可能性があります.下向きのリスクを軽減するためにさらなる最適化が必要です.


/*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))



もっと