この記事では,EMAクロスオーバーを使用して取引信号を生成するトレンドフォロー戦略を詳細に説明します.移動平均パラメータを最適化することで戦略の安定性を向上させることを目的としています.
I. 戦略の論理
基本ルールとは
価格変化の敏感性を示すのに速いEMAとトレンドを示すのに遅いEMAを設定します
遅い EMA の上での高速 EMA クロスオーバーでロングで,下のクロスオーバーでショートします.
誤信号を減らすために,遅い周期 ≥ 3 倍の速い周期で EMA 比率を設定します.
オプションは,反トレンド取引を避けるため,ロングのみモードです.
パラメータ最適化のためのカスタマイズ可能なバックテスト期間.
EMA パラメータを調整することで 傾向から利益を得るために 敏感性と安定性をバランスできます
戦略の利点
最大の利点は,使いやすさのためのシンプルさで,時間制限のトレーダーに適しています.
また,パラメータ最適化によってウィップソウを減らす能力もあります.
最後に,ロングのみモードは,反トレンド取引を避け,株式などの特定の市場に適しています.
III.潜在的な弱点
しかし,いくつかの問題があります.
第一に,EMAは本質的に遅れの問題を抱えており,最適なエントリを逃してしまう.
2つ目は,不正な設定が過濾しすぎて 取引が失敗する可能性があります
最後に,ストップ・ロストと 利益引き取りのメカニズムは 改善が必要です.
IV.要約
この記事では,EMAのクロスオーバーに基づいたトレンドフォロー戦略を説明しました. EMAパラメータを調整することによって強度を改善することを目的としています. シンプルで明確なルールにより,実装は簡単ですが,EMA遅延のようなリスクは予防する必要があります.
/*backtest start: 2023-08-15 00:00:00 end: 2023-09-12 00:00:00 period: 1h 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 // // 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? // // I think it's due to poor choice in choosing EMA lengths: Market Wizard Ed Seykota has a guideline for moving average crossovers: the slow line should be at least 3x the fast line. // This removes a lot of the whipsaws inherent in moving average systems, which means greater profitability. // His other piece of advice: long-only strategies are best in stock markets where there's a lot more upside potential. // // Using these simple rules, we can reduce a lot of the whipsaws and low profitability trades! This strategy was made so you can see for yourself before trading. // // === HOW TO USE THIS INDICATOR === // 1) Choose your market and timeframe. // 2) Choose the length. // 3) Choose the multiplier. // 4) Choose if the strategy is long-only or bidirectional. // // Don't overthink the above! We don't know the best answers, that's why this strategy exists! We're going to test and find out. // After you find a good combination, set up an alert system with the default Exponential Moving Average indicators provided by TradingView. // // === TIPS === // Increase the multiplier to reduce whipsaws (back and forth trades). // Increase the length to take fewer trades, decrease the length to take more trades. // Try a Long-Only strategy to see if that performs better. // strategy(title="EMA Crossover Strategy", shorttitle="EMA COS", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=10, currency=currency.USD,commission_type=strategy.commission.percent,commission_value=0.1) // === GENERAL INPUTS === //strategy start date start_year = input(defval=2020, title="Backtest Start Year") // === LOGIC === length = input(type=input.integer,defval=20,minval=1,title="Length") ratio = input(type=input.integer,defval=3,title="Multiplier (3x length, 4x length, etc)",options=[3,4,5,6,7,8,9,10]) longOnly = input(type=input.bool,defval=false,title="Long Only") fast = ema(hl2,length) slow = ema(hl2,length * ratio) plot(fast,linewidth=2,color=color.orange,title="Fast") plot(slow,linewidth=2,color=color.blue,title="Slow") longEntry = crossover(fast,slow) shortEntry = crossunder(fast,slow) 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() => crossover(fast,slow) and time > timestamp(start_year, 1, 1, 01, 01) exitLong() => longOnly and crossunder(fast,slow) strategy.entry(id="Long", long=strategy.long, when=enterLong()) strategy.close(id="Long", when=exitLong()) // === STRATEGY - SHORT POSITION EXECUTION === enterShort() => not longOnly and crossunder(fast,slow) and time > timestamp(start_year, 1, 1, 01, 01) exitShort() => false strategy.entry(id="Short", long=strategy.short, when=enterShort()) strategy.close(id="Short", when=exitShort())