トリプルEMAモメント戦略

作者: リン・ハーンチャオチャン, 日時: 2023-09-27 17:19:26
タグ:

概要

この戦略は,遅延を減らすために単純な移動平均の代わりに三重指数移動平均を使用することで,リスク管理のメジャーのためのソフトキル21のAmazing scalperから修正されています. 1分間のタイムフレームで主要な通貨ペアに適しており,高速EMA,標準EMAおよびスローEMAの黄金十字と死十字に基づいたトレンドフォローアプローチを採用しています.また,ロンドンとニューヨークセッションとリスク管理原則を組み込み,ポジションサイズを決定します.

戦略の論理

この戦略は,25期高速EMA,50期標準EMA,100期遅いEMAの3つの異なる期間を持つEMAを使用する.高速EMAが標準EMAと遅いEMAを横切ると,購入信号を生成する.高速EMAが標準EMAと遅いEMAを下回ると,販売信号を生成する.遅れを減らすために,EDMAはダブル指数式スムージング技術を使用して計算される.戦略はまた,ロンドンまたはニューヨークセッションのオープンマーケットタイムがエントリー条件に一致するかどうかをチェックする.さらに,各オーダーのポジションサイズはリスク制御のために口座資本の固定パーセントを使用して動的に決定される.

戦略は,まず3つのEMA線を計算し,標準EMAとスローEMAで高速EMAが黄金十字または死十字を形成するかどうかを確認する.条件がロンドンまたはニューヨークのオープンマーケット時間にも一致する場合は,買いまたは販売信号が生成される.ポジションサイズを決定する際に,戦略はリスク露出として口座資本の固定パーセントを計算し,その後,各オーダーにポジションを動的に調整するために契約サイズとラウンドロットに変換する.

利点分析

この戦略には以下の利点があります.

  1. トリプルEMAは,価格データを効果的にスムーズにし,トレンド方向を特定することができます. 急速なEMAは価格変化に敏感で,標準的なEMAは安定的に追跡し,遅いEMAはノイズをフィルターします.一緒に使用すると,偽のブレイクをフィルターし,トレンド方向を決定することができます.

  2. ダブル指数式スムーズ化により遅延が減り,信号がより敏感になる.

  3. 主要な取引セッションを組み込むことで,非ピーク時間に誤解を招くシグナルが回避されます.

  4. リスクマネジメントアプローチでは,単独取引で過度の損失を避けるために,口座の資本に基づいてポジションサイズを調整します.

  5. 論理はシンプルで明快で 分かりやすく 実行しやすいし 初心者にも適しています

  6. この戦略は,さまざまな通貨ペアと時間枠に最適化され調整され,広く適用できます.

リスク分析

この戦略にはいくつかの潜在的なリスクもあります.

  1. EMAは,突然の出来事によって引き起こされる短期間の誤ったブレイクを効果的にフィルタすることはできません.これは間違った信号を生成する可能性があります.フィルタリングと分析のために他の指標を追加することができます.

  2. 固定パーセントのポジションサイジングは,市場の変動に動的に調整できないため,過剰または過小のポジションが生じる.動的ポジションサイジングは,変動に基づいて検討することができる.

  3. 2つの主要セッションのみを考慮し,他のセッションでの取引機会を逃す可能性があります.異なるセッションの効果をテストすることができます.

  4. ストップ損失メカニズムの欠如は,一方的な損失を効果的に制御できない結果になります.移動または時間ベースのストップ損失が実装できます.

  5. EMAのクロスオーバーには一定の遅れがあり,ベストエントリータイミングを逃す可能性があります. EMA期間を短縮したり,主要指標を組み込むことが役立ちます.

  6. 取引コストによって業績が影響される可能性があります.ストップ損失と収益のレベルを相応に調整する必要があります.

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

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

  1. 最適な組み合わせを見つけるために異なる EMA 期間パラメータをテストする. 適性 EMA は期間を動的に最適化するために導入することができる.

  2. RSI,ボリンジャー帯などの他のフィルタリングインジケーターを追加して信号の質を改善します

  3. 市場変動と収益性に基づいて動的ポジションサイズを導入する.

  4. 損失を制限するために移動または時間停止損失を追加します.

  5. 最適なタイミングを見つけるために,異なる取引セッションをテストします. 変動度測定はスクリーニングに役立ちます.

  6. 利得と損失のレベルを最適化して 利益の規模と勝利率を均衡させ パラボリックSARのようなスマートストップを導入します

  7. 遅延を減らすために EMAを直線的な重みで計算してみてください

  8. 最適なパラメータを見つけるために 機械学習を使用します

  9. 取引コストモデルと 最大純利益の調整システム

上記の最適化によって,システムの収益性が向上し,引き下げが制御され,適用性が拡大し,より強力で堅牢な取引戦略を得ることができます.

概要

この戦略の全体的な論理は明確で,トレンドを特定するために三重EMAを使用し,実行のための主要なセッションと組み合わせ,アカウントパーセントに基づいてポジションサイズを採用する.これは典型的なトレンドフォローシステムに属している.パラメータチューニング,メカニズム改善,技術導入などを通じて最適化するための大きな余地があり,より多くの市場で適用性をさらに拡大し,強度を改善する.初心者のための学習eとして,良い出発点を提供します.練習と強化により,成熟した信頼性の高い定量戦略に変容することができます.


/*backtest
start: 2023-09-19 00:00:00
end: 2023-09-26 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// original author SoftKill21
//@version=4
//@capam 

strategy(title="Triple EMA Scalper low lag strat", shorttitle="3EMA scalper", overlay=true)
strategy.initial_capital = 50000
len1 = input(25, minval=1, title="Length")
len2 = input(50, minval=1, title="Length")
len3 = input(100, minval=1, title="Length")

src = input(close, title="Source")
tmp1 = ema(src, len1)
tmp2 = ema(src, len2)
tmp3 = ema(src, len3)
fastemaOut = 2*tmp1 - ema(tmp1, len1)
standardemaOut = 2*tmp2 - ema(tmp2, len2)
slowemaOut = 2*tmp3 - ema(tmp3, len3)
//fastemaOut = sma(src, len1)
//standardemaOut = sma(src, len2)
//slowemaOut = sma(src, len3)

plot(fastemaOut, color=color.black, title="First EMA")
plot(standardemaOut, color=color.yellow, title="Second EMA")
plot(slowemaOut, color=color.blue, title="Third EMA")


timeinrange(res, sess) => time(res, sess) != 0


londopen = timeinrange(timeframe.period, "0300-1100") 
nyopen = timeinrange(timeframe.period, "0800-1600") 

longCondition = crossover(fastemaOut,standardemaOut) and crossover(fastemaOut,slowemaOut) and londopen //or nyopen)
shortCondition = crossunder(fastemaOut,standardemaOut) and crossunder(fastemaOut,slowemaOut) and londopen// or nyopen)

longCondition2 = crossover(fastemaOut,standardemaOut) and crossover(fastemaOut,slowemaOut) and nyopen
shortCondition2 = crossunder(fastemaOut,standardemaOut) and crossunder(fastemaOut,slowemaOut) and nyopen
tp = input(50,title="TP")
sl = input(100, title="SL")

tradeLondon =  input(title="Trade london session?", type=input.bool, defval=true)
tradeNewyork = input(title="Trade new york session?", type=input.bool, defval=true)

//MONEY MANAGEMENT--------------------------------------------------------------
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
risk = input(1,type=input.float,title="Risk % of equity ")/100           //risk % per trade
temp01 = balance * risk     //Risk in USD
temp02 = temp01/sl        //Risk in lots
temp03 = temp02*100000      //Convert to contracts
size = temp03 - temp03%1000 //Normalize to 1000s (Trade size)
if(size < 1000)
    size := 1000        

if(tradeLondon==true)
    strategy.entry("long",1,when=longCondition)
    strategy.exit("tp/sl","long",profit=tp,loss=sl)
    
    strategy.entry("short",0,when=shortCondition)
    strategy.exit("tp/sl","short",profit=tp,loss=sl)

if(tradeNewyork==true)
    strategy.entry("long",1,when=longCondition2)
    strategy.exit("tp/sl","long",profit=tp,loss=sl)
    
    strategy.entry("short",0,when=shortCondition2)
    strategy.exit("tp/sl","short",profit=tp,loss=sl)

// strategy.risk.max_intraday_filled_orders(2) 

もっと