ストッホとEMA指標に基づくトレンドフォロー定量戦略


作成日: 2024-02-05 15:27:03 最終変更日: 2024-02-05 15:27:03
コピー: 0 クリック数: 590
1
フォロー
1617
フォロワー

ストッホとEMA指標に基づくトレンドフォロー定量戦略

概要

この戦略は,主にStoch指標が超買い超売り領域で発生する交差を入場信号として利用し,同時にEMA指標と組み合わせて現在のトレンド方向を判断し,EMAが上昇し続けるトレンドにおいてのみ多操作を行い,EMAが低下し続けるトレンドにおいて空白操作を行う,典型的なトレンドフォロー戦略である.

戦略原則

この戦略は主に3つの部分から構成されています.

  1. EMAの指数はトレンドの方向を判断しています.

2つの異なるパラメータのEMAを使用し,遅いEMAが遅いEMAの上にあるときを上昇傾向と判断し,遅いEMAの下にあるときを下降傾向と判断する.

  1. ストック指数は,買い/売却のシグナルを判断します.

ストック指数は%K線と%D線で構成され,%K線が超買区の上方で%D線と黄金交差したときに買入シグナルを生じ,%K線が超売り区の下方で%D線と死交差したときに売りシグナルを生じます.この戦略は,ストック指数の交差が超買超売り区で起こった場合にのみ取引シグナルを発信します.

  1. リスク管理機構

この戦略は,同時にもストップ・ロズとストップ・ストップ・メカニズムを設定している. 複数のポジションを保有している場合,価格が設定されたストップ・ロスを破ると平仓を停止する.価格が設定されたストップ・ロスを破ると平仓を停止する. 空白のポジションと同等である.

全体として,この戦略は,比較的に典型的な量的な取引戦略の1つであり,指数の組み合わせを使用してトレンドの方向と取引シグナルを判断し,厳格なリスク管理のルールに補足すると,取引リスクを効果的に軽減できます.

優位分析

この戦略の利点は以下の通りです.

  1. EMAは,主子レベルのトレンドを判断し,波動が不明な市場で,を避けるために使用します.

  2. ストック指数の特徴は,それが現在,超買いまたは超売り領域にあるかどうかをよく反映できるという点にあるため,交差信号の生成と組み合わせて,超買い超売り領域の取引を行うことができる.

  3. この戦略は,多額の取引や空白の発生可能な環境を明確にし,シグナル生成をさらにフィルターし,誤ったシグナルの可能性を低減し,複雑な市場で盲目取引を避けるようにします.

  4. 厳格なリスク管理メカニズムにより,単一取引の損失を制御し,全体的な最大撤退を制御し,同時に利益のある取引に十分な余地を残すことができます.

リスク分析

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

  1. EMA,Stochなどの指標は後退しているため,この戦略は困難であり,市場の逆転の機会を捉えるのに時間がかかります.

  2. 単に指標に依拠するだけで,市場に対する先入観が形成されやすいので,市場が実際に提供する取引の機会を逃してしまう.

  3. リスク管理メカニズム自体が戦略的利益の余地に制限を与える可能性があり,大きなトレンドの停止損失と停止ポジションの設定は特に慎重である必要があります.

  4. この戦略には,パラメータ選択にも一定のリスクがあり,結果に対する異なるパラメータの影響は,大量の反射と最適化によって最適なパラメータ組み合わせを得る必要がある.

最適化の方向

この戦略は以下の点で最適化できます.

  1. 異なるタイプのEMA,例えば重力移動平均,Hull MAなどの指標を試してトレンドを判断し,比較分析を行う.

  2. MACD,KDJなどの他の指標と組み合わせて取引信号を生成しようとし,多指標の取引システムを構築する.

  3. 停止と停止の設定を最適化して,市場の実際の変動状況により適合させる.より緩やかな停止とより厳格な停止の設定が可能である.

  4. 異なる品種と異なる周期でこの戦略のパフォーマンスの差異性をテストし,最適な品種と周期の組み合わせを探します.

  5. 戦略の知性を実現するために,トレンドの方向と取引信号を判断するのに役立つ機械学習やニューラルネットワークのモデルを組み込むことを検討してください.

要約する

全体として,この戦略は,一般的な指標を組み合わせて,比較的に成熟したトレンド追跡取引戦略を構築しています. それは,トレンド判断と特定の取引信号の生成を考慮するとともに,リスク管理機構を設定しています. 継続的な最適化によって,この戦略は,より良い実況効果を得ることができると信じています. 同時に,我々は単一の戦略の限界を認識し,長期にわたって安定した利益を得るために,市場の秘密を学び,探索し続けなければなりません.

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

//@version=2
//by Wugamlo
//Strategy combining Stochastic Crosses in the Overbought/Oversold Area with a trend determined by two EMAs
//Default setup seems to work best on 4HR timeframe for BTC 

strategy(title = "Strategy Stoch/EMA Cross", shorttitle = "Strategy Stoch/EMA Cross", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD, commission_value=0.01,commission_type=strategy.commission.percent, initial_capital=1000)

// === GENERAL INPUTS ===
SectionInd      = input(defval = true ,title = "════════════ INDICATORS ════════════")
maFastLength    = input(defval = 55,   title = "Fast MA Period", minval = 1)
maSlowLength    = input(defval = 89,   title = "Slow MA Period", minval = 1)
StochLength     = input(defval = 14,   title = "Stochastic Length", minval=1)
smoothK         = input(defval = 6,    title = "%K Smooth", minval=1)
smoothD         = input(defval = 3,    title = "%D Smooth", minval=1)
overbought      = 80
oversold        = 20
HighlightOBOS   = input(defval = true, title = "Highlight Stoch Cross?")
HighlightTrend  = input(defval = true, title = "Highlight Trend?")

//DATE AND TIME
SectionFrom     = input(defval = true ,title = "═══════════════ FROM ═══════════════")
fromDay         = input(defval = 01,   title = "From day", minval=1)
fromMonth       = input(defval = 1,    title = "From month", minval=1)
fromYear        = input(defval = 2019, title = "From year", minval=2014)
SectionTo       = input(defval = true, title = "════════════════ TO ════════════════")
toDay           = input(defval = 31,   title = "To day", minval=1)
toMonth         = input(defval = 12,    title = "To month", minval=1)
toYear          = input(defval = 2020, title = "To year", minval=2014)

// === STRATEGY RELATED INPUTS ===
SectionStra     = input(defval = true ,title = "═════════════ STRATEGY ═════════════")

// Include Shorts or only trade Long Positions?
includeShorts   = input(defval = true, title = "Include Short Positions?")


// Risk Management inputs
useTakeProfit   = input(defval = true,  title = "User Take Profit?")
inpTakeProfit   = input(defval = 8,     title = "Take Profit (%)", minval = 0)
useStopLoss     = input(defval = false, title = "User Stop Loss?")
inpStopLoss     = input(defval = 2,     title = "Stop Loss (%)", minval = 0)

StopLossPerc    = inpStopLoss * 0.01
TakeProfitPerc  = inpTakeProfit * 0.01


// === EMA SERIES SETUP ===
maFast = ema(close, maFastLength)
maSlow = ema(close, maSlowLength)
diff   = maFast - maSlow

// === STOCHASTIC SETUP ===
k      = sma(stoch(close, high, low, StochLength), smoothK)
d      = sma(k, smoothD)

// Stochastic Long/Short Entry determination
stochLong  = crossover(k,d)  and (k < oversold)
stochShort = crossunder(k,d) and (k > overbought)

// Stochastic Long/Short Exit determination
stochLongEx  = crossover (k, overbought)
stochShortEx = crossunder(k, oversold)


// === PLOTTING EMAs ===
fast = plot(maFast, title = "Fast MA", color = yellow, linewidth = 1, style = line, transp = 10)
slow = plot(maSlow, title = "Slow MA", color = white,  linewidth = 1, style = line, transp = 10)


// === Vertical Coloring for Crosses in Overbought/Oversold zone and for MA Trend Zones ===
b_color = stochLong ? green : stochShort ? red : na
bgcolor(HighlightOBOS ? b_color : na, title="Overbought / Oversold", transp=65)   //Highlight the Overbought/Oversold Stoch Crossings
t_color = diff>=0 ? green : diff<0 ? red : na
bgcolor(HighlightTrend ? t_color : na, title="Trend up / Trend down", transp=75)  //Highlight the EMA Trend


// === STRATEGY LOGIC ===
// Time Restriction
timeInRange = true


// === STRATEGY - LONG POSITION EXECUTION ===
if stochLong and (diff >=0) and timeInRange    //Open Long when Stoch crossing in Oversold area and EMATrend is up
    strategy.entry(id = "Long", long = true)
if stochLong and (diff <0) and timeInRange     //Close Long when another Long Stoch cross signal is given after Trend has changed to down (avoid fake signals)
    strategy.close(id = "Long")
if stochLongEx and timeInRange                 //Close Long when Stoch is getting Overbought 
    strategy.close(id = "Long")


// === STRATEGY - SHORT POSITION EXECUTION ===
if stochShort and (diff <0) and timeInRange and includeShorts  //Open Short when Stoch crossing in Overbought area and EMA Trend is down
    strategy.entry(id = "Short", long = false)
if stochShort and (diff >=0) and timeInRange                   //Close Short when another Short Stoch cross signal is given after Trend has changed to up (avoid fake signals)
    strategy.close(id = "Short")
if stochShortEx and timeInRange                                //Close Short when Stoch is getting Oversold 
    strategy.close(id = "Short")

        
// === STRATEGY RISK MANAGEMENT EXECUTION ===
//Stop Loss
if useStopLoss    //Exit when Stop Loss is hit
    strategy.exit("Exit Long SL",   from_entry = "Long",  loss = close * StopLossPerc / syminfo.mintick )
    strategy.exit("Exit Short SL",  from_entry = "Short", loss = close * StopLossPerc / syminfo.mintick )

//Take Profit
if useTakeProfit  //Exit when Take Profit Limit is hit
    strategy.exit("Exit Long TP",   from_entry = "Long",  profit = close * TakeProfitPerc / syminfo.mintick)
    strategy.exit("Exit Short TP",  from_entry = "Short", profit = close * TakeProfitPerc / syminfo.mintick)