スピード・アンド・ロング EMA ゴールデンクロス・ブレークスルー戦略

作者: リン・ハーンチャオチャン, 日付: 2023-12-01 18:02:24
タグ:

img

概要

速くて遅いEMA金十字突破戦略は,市場の動向を追跡するためのシンプルで効果的な戦略である. 購入・販売信号を生成するために,異なるサイクルEMAのクロスオーバーを使用する. 基本的な考え方は,短サイクルEMAが長サイクルEMAの上を横切ると,購入信号が生成され,短サイクルEMAが長サイクルEMA以下を横切ると,販売信号が生成される.

戦略原則

この戦略は,主に5サイクル,8サイクルおよび13サイクルEMAの比較に基づいて取引信号を生成する.以下を含む:

  1. 5 サイクル EMA,8 サイクル EMA,13 サイクル EMA を計算する.
  2. 5 サイクル EMA が 8 サイクルと 13 サイクル EMA を越えると,買い信号が生成されます.
  3. 5 サイクル EMA が 8 サイクルと 13 サイクル EMA を下回ると,売り信号が生成されます.
  4. 同時に ADX インディケーターを組み合わせてトレンド強さを決定する.トレンドが信号を生成するのに十分な強さがある場合にのみ.

中期および長期間のトレンドを追跡する効果を認識する.短周期移動平均が長周期移動平均を上回ると,短期トレンドが上昇し,購入できる.短周期移動平均が長周期移動平均を下回ると,短期トレンドが下落し,売却されるべきである.

利点分析

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

  1. 操作が簡単で 実行も簡単です
  2. EMAの平滑効果を充分活用して 効率的な傾向を追跡する.
  3. 複数の EMA 組み合わせは,偽信号を避けるためにクロスオーバーを実行します.
  4. ADXインジケーターと組み合わせると信号はより信頼性があります
  5. 比較的少ない使用量と最大減少

リスク分析

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

  1. トレンドが急激に逆転するとストップロスは大きくなる.ストップロスの範囲は適切に緩和することができる.
  2. 取引頻度が高い場合,取引コストが上昇する可能性があります. EMAパラメータは,取引頻度を減らすために適切に調整できます.

最適化方向

戦略は以下の側面で最適化できます.

  1. EMA パラメータを最適化して 最適なパラメータの組み合わせを見つけます
  2. フィルタリングのための他の指標,例えばKDJ,BOLLなどを追加し,信号品質を改善します.
  3. リスク管理を最適化するために ポジション管理を調整する
  4. 機械学習方法を用いて より良い入出ルールを見つけます

概要

要約すると,高速で遅いEMA金十字突破戦略の運用はスムーズで,シグナルがより信頼性があり,引き下げは高くないし,中長期のトレンドを追跡するのに適しています.パラメータ最適化と改善されたルールによってより良い戦略結果を得ることができます.


/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-30 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// 
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gregoirejohnb
// @It is modified by ttsaadet.
// Moving average crossover systems measure drift in the market. They are great strategies for time-limited people.
// So, why don't more people use them?
// 

//
strategy(title="EMA Crossover Strategy by TTS", shorttitle="EMA-5-8-13 COS by TTS", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency=currency.TRY,commission_type=strategy.commission.percent,commission_value=0.04, process_orders_on_close = true, initial_capital = 100000)

// === GENERAL INPUTS ===
//strategy start date
start_year = input(defval=2020, title="Backtest Start Year")

// === LOGIC ===
short_period = input(type=input.integer,defval=5,minval=1,title="Length")
mid_period = input(type=input.integer,defval=8,minval=1,title="Length")
long_period = input(type=input.integer,defval=13,minval=1,title="Length")
rsi_period = input(type=input.integer,defval=14,minval=1,title="Length")
longOnly = input(type=input.bool,defval=false,title="Long Only")
shortEma = ema(close,short_period)
midEma = ema(close,mid_period)
longEma = ema(close,long_period)

rsi = rsi(close, rsi_period)

[diplus, diminus, adx] = dmi(short_period, short_period)
plot(shortEma,linewidth=2,color=color.red,title="Fast")
plot(midEma,linewidth=2,color=color.orange,title="Fast")
plot(longEma,linewidth=2,color=color.blue,title="Slow")

longEntry = crossover(shortEma,midEma) and crossover(shortEma,longEma) //or ((shortEma > longEma) and crossover(shortEma,midEma)))and (adx > 25)
shortEntry =((shortEma < midEma) and crossunder(shortEma,longEma)) or ((shortEma < longEma) and crossunder(shortEma,midEma))

plotshape(longEntry ? close : na,style=shape.triangleup,color=color.green,location=location.belowbar,size=size.small,title="Long Triangle")
plotshape(shortEntry and not longOnly ? close : na,style=shape.triangledown,color=color.red,location=location.abovebar,size=size.small,title="Short Triangle")
plotshape(shortEntry and longOnly ? close : na,style=shape.xcross,color=color.black,location=location.abovebar,size=size.small,title="Exit Sign")

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() =>
    longEntry and 
       time > timestamp(start_year, 1, 1, 01, 01)
exitLong() =>
    crossunder(shortEma,longEma) or crossunder(close, longEma)

strategy.entry(id="Long", long=strategy.long, when=enterLong())
strategy.close(id="Long", when=exitLong())


// === STRATEGY - SHORT POSITION EXECUTION ===

enterShort() =>
    not longOnly and shortEntry and 
       time > timestamp(start_year, 1, 1, 01, 01)
exitShort() =>
    crossover(shortEma,longEma)

strategy.entry(id="Short", long=strategy.short, when=enterShort())
strategy.close(id="Short", when=exitShort())

もっと