2つの移動平均逆転戦略

作者: リン・ハーンチャオチャン,日付: 2023-11-03 16:51:18
タグ:

img

概要

この戦略は,2/20指数移動平均値と平均本格範囲逆転値の2つの指標を用いて取引信号を生成する.逆転機会を把握することを目的としたトレンドフォローと短期逆転のアイデアを組み合わせる.

原則

戦略は2つの部分からなる.

  1. 2/20 指数関数移動平均値. 20日間のEMAを計算し,価格がEMAを上下に突破したときの信号を生成します.

  2. 平均 True Range Reversal Indicator.これは,ATRに基づいてストップ損失レベルを計算し,価格がストップ損失レベルを突破したときのシグナルを生成する.ここで3.5 x ATRがストップレベルとして使用される.

この戦略は,両方の信号を組み合わせます. 2/20 EMA がロング信号を与えるときはショートになります. ATR 逆転がロング信号を与えるときはロングになります. 反対の信号が生成されるとロングになります.

利点分析

この戦略は,トレンドフォローと逆転のアイデアを組み合わせて,逆転を捉えることを目指しています.

  1. 2/20 EMAは中期トレンドを特定し 市場の騒音を回避します

  2. ATRの逆転は短期的な逆転と機会を捉える.

  3. 信号を組み合わせることで 傾向の逆転を早く把握し 収益性を向上させる

  4. 合理的なATRストップ損失は一定のリスク制御を提供します.

  5. 調整可能な ATR マルチプリキュアで 異なる製品に対応できます

  6. 逆転オプションは異なる市場環境に適応します

リスク分析

リスクは次のとおりです.

  1. 2/20 EMAは遅いので 短期的なチャンスを逃す可能性があります

  2. ATRストップ損失は簡単に突入できる.より広いストップ損失が必要である.

  3. シングルインジケータ信号は信頼できない.より多くのフィルターが必要です.

  4. 過剰な取引に注意しなさい.

  5. パラメータ調整とバックテストは製品に合うために必要です.

  6. 取引ごとにリスクをコントロールするには 厳格な資本管理が必要です

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

戦略は以下から改善できます.

  1. EMAのパラメータを調整して 最適な組み合わせをします

  2. ATR倍数を最適化して ストップ・ロスを改善します

  3. フィルター条件を追加します 容量や揮発性です

  4. 動的ポジションサイズ化のための資本管理モデルを追加

  5. ストップ・ロスの戦略も追加します

  6. 異なる製品でテストするパラメータ

  7. 機械学習モデルを追加して 性能を向上させます

  8. アルファの多用策を組み合わせる

結論

この戦略は2つの主要なアイデアを組み合わせ,逆転を捕捉する一定の利点があります. しかし,不適切なパラメータ選択はリスクも引き起こす可能性があります.ストップ損失戦略のさらなる改善とフィルターを追加することで,安定性と収益性が向上します.


/*backtest
start: 2022-10-27 00:00:00
end: 2023-11-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 05/04/2022
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This indicator plots 2/20 exponential moving average. For the Mov 
// Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met.
//
// Second strategy
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort 
// The related article is copyrighted material from Stocks & Commodities Jun 2009 
// Please, use it only for learning or paper trading. Do not for real trading.
//
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
EMA20(Length) =>
    pos = 0.0
    xPrice = close
    xXA = ta.ema(xPrice, Length)
    nHH = math.max(high, high[1])
    nLL = math.min(low, low[1])
    nXS = nLL > xXA or nHH < xXA ? nLL : nHH
    iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0)
    pos := nXS > close[1] ? -1 : iff_1
    pos


ATRR(nATRPeriod,nATRMultip) =>
    pos = 0.0
    xATR = ta.atr(nATRPeriod)
    nLoss = nATRMultip * xATR
    xATRTrailingStop = 0.0
    xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) :
                          close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) : 
                          close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss
    pos:= close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0) ? 1 :
    	     close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0) 
    pos

strategy(title='Combo 2/20 EMA & Average True Range Reversed', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════ Average True Range Reversed  ═════●'
nATRPeriod = input.int(5, group=I2)
nATRMultip = input.float(3.5, group=I2)
var misc = '●═════ MISC ═════●'
reverse = input.bool(false, title='Trade reverse', group=misc)
var timePeriodHeader = '●═════ Time Start ═════●'
d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader)
m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader)
y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader)
StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false
posEMA20 = EMA20(Length)
prePosATRR = ATRR(nATRPeriod,nATRMultip)
iff_1 = posEMA20 == -1 and prePosATRR == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosATRR == 1 and StartTrade ? 1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
if possig == 1
    strategy.entry('Long', strategy.long)
if possig == -1
    strategy.entry('Short', strategy.short)
if possig == 0
    strategy.close_all()
barcolor(possig == -1 ? #b50404 : possig == 1 ? #079605 : #0536b3)

もっと