マルチインジケータ EMA 戦略

作者: リン・ハーンチャオチャン, 日時: 2023-09-28 15:57:34
タグ:

概要

マルチインジケーターEMA戦略は,取引信号を生成するためにEMA,MACD,オシレーター,RSI,ストカスティック,ボリンジャーバンドなどの複数の指標を組み込むトレンドフォロー戦略である.複数の指標に基づいて複合信号を計算することによって,市場は上昇傾向か下落傾向にあるかどうかを決定する.

戦略の論理

戦略はまず次の指標を計算します

  • EMA: ある期間における指数関数移動平均値

  • MACD:MACD DIFとDEAライン

  • オスイレーター: 閉店と開店の間の差値.

  • RSI: 比較強度指数

  • ストカスティック:パラメータを含むストカスティックKとD値.

  • ボリンジャー帯: 期間中の上部,中部,下部帯.

次に,各指標は現在の状態に基づいて値が割り当てられます.例えば,20未満のストカスティックは2で,80を超えるRSIは-2で割り当てられます.

インディケーター値は合計して複合信号トリガーを導き出す.トリガー >=7の場合,長い信号が生成される.トリガー <=-7の場合,短い信号が生成される.

複数の指標からの信号を組み合わせることで,戦略は傾向の方向性をより正確に決定し,信頼できる取引信号を生成することができます.

利点分析

この多指標戦略の主な利点は,複数の指標の強みを組み合わせて より包括的で正確な評価を行うことであり,個々の指標からの誤った信号を回避することです.

具体的には以下のような利点があります

  1. 複数の指標を組み合わせることで,より信頼性の高い傾向決定ができます.個々の指標は誤解を招く信号を与え,複数の指標は互いに検証し,エラーを減らすことができます.

  2. 異なる指標は,その特徴に基づいてトレンドの異なる段階を特定することができます.例えば,トレンド開始のMACD,過剰購入/過剰販売状態のRSI.

  3. 異なるパラメータを持つ指標は,異なる時間枠における特徴を捉えることができます.例えば,速いEMAと遅いEMA期間です.

  4. 各指標の重さはカスタマイズできます.より重要な指標にはより高い重量を与えることができます.

  5. インディケーターのミックスと重さは,バックテストによって最適化され,よりよいパフォーマンスを得ることができます.

リスク分析

複数の指標を使用しているにもかかわらず,いくつかのリスクがあります.

  1. 指標の不適切な組み合わせは,強みを活用できず,衝突を引き起こす可能性があります.指標の適用性を適切に理解する必要があります.

  2. 不合理な重量分布は指標の重要性を不正確に表現する可能性があります.重量は繰り返しのテストと調整が必要です.

  3. 単一パラメータセットがオーバーフィッティングを引き起こす可能性があります.複数タイムフレームの検証を使用する必要があります.

  4. 静的指標の重量/パラメータは,変化する市場状況に適応できない.動的調整メカニズムが必要である.

  5. インディケーター信号が遅れる可能性があります.ストップ・ロスのタイミングを決定するために他の技術を使用する必要があります.

  6. 複数の指標による戦略の複雑性が高まるため,十分な歴史的データとパラメータ調整の難しさが必要である.

改善 の 機会

戦略を改善する方法:

  1. 現在の市場状況に敏感な指標の種類をテストする.

  2. 異なる時間枠における傾向を把握するために指標期間を最適化します.

  3. 相対的重要性をより良く表現するために指標の重さを最適化する.

  4. ダイナミックな調整を加え, 変化する市場状況に適応する リアルタイムでパラメータと重量を最適化します.

  5. 損失を制限するために合理的なストップ・ロスのポイントを伴うストップ・ロスの戦略を組み込む.

  6. 複数のタイムフレームの検証を追加し,単一のタイムフレームに過剰に適合しないようにする.

  7. 最適なパラメータ組み合わせを見つけるために段階的および組み合わせ最適化を使用する.

  8. 機械学習を加えれば よりスマートな動的指標の 重み付けができます

  9. 入口と出口のロジックを最適化し,トレンドを追跡し,過剰取引を避けるためにバランスをとります.

結論

マルチインジケータ EMA戦略は,EMA,MACD,RSIなどの組み合わせた強みを活用して市場のトレンド方向を決定し,取引信号を生成する.単一インジケータ戦略と比較して,より包括的な市場分析を提供し,誤った信号を減らす.パラメータチューニングなどのさらなる最適化により,複雑な変化する市場状況に適応することができる.全体的に,マルチインジケータ EMA戦略は,トレンドフォローする戦略として非常に有効である.


/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 4h
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/
// © ally17

//@version=4
// strategy("ELIA MULTI STRATEGY",overlay=true,initial_capital=1000, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.00, default_qty_value=25)

//INPUT
start = timestamp(input(2021, "start year"), 1, 1, 00, 00)
end = timestamp(input(9999, "end year"), 1, 1, 00, 00)

emalen=input(80, title="Ema Len")
macdfast=input(12, title="Macd Fast Len")
macdslow=input(26, title="Macd Fast Len")
macdsig=input(12, title="Macd Signal Len")
occlen=input(15, title="Occ Len")

rsilen=input(2, title="Rsi Len")
stochklen=input(11, title="Stk K Len")
stochdlen=input(3, title="Stk D Len")
stochlen=input(3, title="Stk Smooth Len")
bblength = input(10, minval=1, title="BB Len")
mult = input(2.0, minval=0.001, maxval=50, title="BB Std Dev")

momlen=input(10, title="Mom Len")


//CALCOLI
var trigger = 0.0

var emavar = 0.0
var macdvar = 0.0
var occvar = 0.0

var rsivar = 0.0
var stochvar = 0.0
var bbvar = 0.0

var donvar =0.0

ema = ema(close,emalen)

[macdLine, signalLine, histLine] = macd(close, 12, 26, 9) // MACD

occ = ema(close,occlen) - ema(open,occlen)

rsi = rsi(close, rsilen) // RSI

stoch = sma(stoch(close, high, low, stochklen), stochlen) // Stoch

basis = sma(close, bblength)
dev = mult * stdev(close, bblength)
upper = basis + dev
lower = basis - dev

moment = mom(close, momlen) // Momentum

Obv = obv // OBV


//PLOT


//STRATEGIA
emavar := (close>ema)? 3 : -3
macdvar := (macdLine>signalLine)? 3 : -3
occvar := (occ>0)? 3 : -3

rsivar := (rsi<20)? 2 : (rsi>50 and rsi<80)? 1 : (rsi>80)? -2 : (rsi<50 and rsi>20)? -1 : 0
stochvar := (stoch<20)? 2 : (stoch>80)? -2 : 0
bbvar :=  (close<lower)? 2 : (close>upper)? -2 : 0

trigger := emavar+macdvar+occvar+rsivar+stochvar+bbvar

longcondition = trigger>=7
closelong = trigger<3

shortcondition = trigger<=-7
closeshort = trigger >-3

trendcolor = longcondition ? color.green : shortcondition? color.red : (trigger>3 and trigger<7)? #A2E1BF : (trigger<-3 and trigger>-7)? #E19997 : na
bgcolor(trendcolor, transp=80)


if time > start and time < end
    if longcondition
        strategy.entry("LONG", long=strategy.long)

if closelong
    strategy.close("LONG", comment="CLOSE LONG")
    
if time > start and time < end
    if shortcondition
        strategy.entry("SHORT", long=strategy.short)

if closeshort
    strategy.close("SHORT", comment="CLOSE SHORT")
    
//plotshape(longcondition, color=color.green, text="L", size=size.small, style=shape.triangledown)
//plotshape(shortcondition, color=color.red, "S"(trigger), size=size.small, style=shape.triangledown)
//plotshape(closelong, color=color.purple, text="LC", size=size.small, style=shape.triangledown)
//plotshape(closeshort, color=color.purple, text="SC", size=size.small, style=shape.triangledown)


もっと