この戦略は,EMA,トレンドトラッキング戦略 (TTS) とシャフトレンドサイクル (STC) の3つの指標の利点を組み合わせて,強力な短期トレンドトラッキング戦略を形成する.具体的には,戦略は3つの指標の買いと売りの信号が一貫しているかどうかを判断する.それが一貫している場合は,取引信号が生成される.そうでなければ取引は行われない.これはいくつかの偽信号をフィルターし,戦略をより信頼性のあるものにする.
この戦略は,EMA指標,TTS傾向追跡戦略,STC指標の3つの主要部分で構成されています.
まず,200期 EMA 指数関数移動平均線が計算されます.価格がこの EMA 線以下であれば,EMA インディケーターは売り信号を表示します: -1;価格が線上であれば,EMA インディケーターは買い信号を表示します: 1.
2つ目は,TTSトレンド追跡戦略の関連パラメータを計算する.上下レールの価格ブレイクに応じて,市場のトレンド方向が決定される.価格が上下レールを突破した場合,購入信号1が生成され,価格が下下レールを突破した場合,販売信号-1が生成される.
最後に,価格統合の変化傾向を反映するシャフトレンドサイクル (STC) 指標が計算されます.STC指標が上昇した場合,1の購入信号を生成します.STC指標が低下した場合,1の販売信号を生成します.
3つの指標から判断信号を取得した後,戦略はそれらの一致性を決定する.すべての3つの指標判断信号が一貫している場合にのみ,実際の取引信号が生成される.これはいくつかの誤った信号を効果的にフィルタリングし,戦略をより信頼性のあるものにすることができます.
取引シグナルが生成されると,ロングまたはショートポジションが開かれ,ストップ・プロフィット/ストップ・ロスト・ポイントが設定されます.
この戦略は,3つの異なるタイプの指標を組み合わせて 市場の動向方向性を効果的に決定します
誤った信号をフィルタリングするために3つの指標からの判断信号の一貫性を利用することで,不必要な取引を削減し,戦略をより信頼性のあるものにすることができます.
合理的なストップ・プロフィート/ストップ・ロストポイントを設定することで 利益を固定し 損失を拡大させることができません
最適化されたパラメータは,ほとんどの株式やフォックス製品に適しています.
シンプルで分かりやすい取引の論理です
インディケーター判断の不一致は,取引機会の損失を引き起こす可能性があります.判断規則はさらに最適化できます.
STCインジケーターはパラメータに敏感です 異なる製品にはパラメータ調整が必要です
ダウントレンドでは,ストップロスは突入し,大きな損失を引き起こす可能性があります.適応ストップロスは検討できます.
横の整合は効果的に特定できないので,罠の位置になります.
より強い判断のルールを見つけるために,より多くの指標組み合わせをテストします.例えば,RSI指標を追加します.
STC パラメータを最適化して,異なる製品に適応できるようにします.適応パラメータ最適化モジュールを追加します.
適応型ストップ損失モジュールを増やして ストップ損失ポイントを動的に最適化します
位置閉じるモジュールを強化して 横の範囲を特定し 罠を避ける
高周波取引のためのアルゴリズムを最適化し,遅延を削減し,注文履行率を向上させる.
この戦略は,EMA,TTSおよびSTCインジケーターを組み合わせて市場方向性を決定し,すべての3つのトリガートレードからの一貫した判断により,誤ったシグナルを効果的にフィルタリングする.さらにトレンド追跡能力を強化するために,より多くのインジケーター組み合わせをテストし,適応アルゴリズムを追加し,高周波取引モジュールを最適化し,さらにトレンド追跡能力を強化するなど,最適化のための大きな余地があります.単に移動平均値に従う伝統的な戦略と比較して,この戦略は市場をより賢く判断し,罠を回避しながらトレンドを捉えることができます.
/*backtest start: 2022-12-05 00:00:00 end: 2023-04-14 00:00:00 period: 1d basePeriod: 1h 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/ // © ajahanbin1374 //@version=5 strategy(title = "EMA + TTS + STC", shorttitle = "EMA + TTS + STC", overlay = true, calc_on_order_fills=false, calc_on_every_tick = false, initial_capital = 100, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.01) //////////////////////////////////////////////////////////// // Strategy entry //////////////////////////////////////////////////////////// profit = input.float(defval = 0.1, minval = 0.0, title="Profit %", step=0.01, group = "Strategy") * 0.01 //////////////////////////////////////////////////////////// // Emponential Moving Average //////////////////////////////////////////////////////////// ema = ta.ema(close, 200) posEma = close < ema ? -1 : 1 //////////////////////////////////////////////////////////// // Trend Trader Strategy //////////////////////////////////////////////////////////// Length = input.int(21, minval=1, group="Trend Trader Strategy") Multiplier = input.float(3, minval=0.000001, group="Trend Trader Strategy") avgTR = ta.wma(ta.atr(1), Length) highestC = ta.highest(Length) lowestC = ta.lowest(Length) hiLimit = highestC[1] - avgTR[1] * Multiplier loLimit = lowestC[1] + avgTR[1] * Multiplier ret = 0.0 posTts = 0.0 ret:= close > hiLimit and close > loLimit ? hiLimit : close < loLimit and close < hiLimit ? loLimit : nz(ret[1], close) posTts:= close > ret ? 1 :close < ret ? -1 : nz(posTts[1], 0) //////////////////////////////////////////////////////////// // Schaff Trend Cycle (STC) //////////////////////////////////////////////////////////// EEEEEE = input.int(12, 'Length', group ="Schaff Trend Cycle") BBBB = input.int(26, 'FastLength', group ="Schaff Trend Cycle") BBBBB = input.int(50, 'SlowLength', group ="Schaff Trend Cycle") AAAA(BBB, BBBB, BBBBB) => fastMA = ta.ema(BBB, BBBB) slowMA = ta.ema(BBB, BBBBB) AAAA = fastMA - slowMA AAAA AAAAA(EEEEEE, BBBB, BBBBB) => AAA = input.float(0.5, group ="Schaff Trend Cycle") var CCCCC = 0.0 var DDD = 0.0 var DDDDDD = 0.0 var EEEEE = 0.0 BBBBBB = AAAA(close, BBBB, BBBBB) CCC = ta.lowest(BBBBBB, EEEEEE) CCCC = ta.highest(BBBBBB, EEEEEE) - CCC CCCCC := CCCC > 0 ? (BBBBBB - CCC) / CCCC * 100 : nz(CCCCC[1]) DDD := na(DDD[1]) ? CCCCC : DDD[1] + AAA * (CCCCC - DDD[1]) DDDD = ta.lowest(DDD, EEEEEE) DDDDD = ta.highest(DDD, EEEEEE) - DDDD DDDDDD := DDDDD > 0 ? (DDD - DDDD) / DDDDD * 100 : nz(DDDDDD[1]) EEEEE := na(EEEEE[1]) ? DDDDDD : EEEEE[1] + AAA * (DDDDDD - EEEEE[1]) EEEEE mAAAAA = AAAAA(EEEEEE, BBBB, BBBBB) mColor = mAAAAA > mAAAAA[1] ? color.new(color.green, 20) : color.new(color.red, 20) posStc = mAAAAA > mAAAAA[1] ? 1 : -1 //////////////////////////////////////////////////////////// // Strategy entry //////////////////////////////////////////////////////////// pos = posEma == 1 and posTts == 1 and posStc == 1 ? 1 : posEma == -1 and posTts == -1 and posStc == -1 ? -1 : 0 currentPostition = strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0 noOpenPosition = strategy.position_size == 0 signal = pos != pos[1] and pos == 1 and noOpenPosition ? 1 : pos != pos[1] and pos == -1 and noOpenPosition ? -1 : 0 stopPriceForLong = math.min(close * (1 - profit), low[1] * 0.9998, low[2] * 0.9998) limitPriceForLong = close + (close - stopPriceForLong) stopPriceForShort = math.max(close * (1 + profit), high[1] * 1.0002, high[2] * 1.0002) limitPriceForShort = close - (stopPriceForShort - close) if signal == 1 strategy.entry(id="L", direction=strategy.long) strategy.exit(id='EL', from_entry='L', limit=limitPriceForLong, stop=stopPriceForLong) if signal == -1 strategy.entry(id="S", direction=strategy.short) strategy.exit(id='ES', from_entry='S', limit=limitPriceForShort, stop=stopPriceForShort) //////////////////////////////////////////////////////////// // Plots - Debuger //////////////////////////////////////////////////////////// plotchar(signal, title='singal', char = '') plotchar(posEma, title='posEma', char = '') plotchar(posTts, title='posTts', char = '') plotchar(pos, title='pos', char = '') plotchar(currentPostition, title = 'currentPostition', char='') plotchar(stopPriceForLong, title = "stopPriceForLong", char ='') plotchar(limitPriceForLong, title = 'limitPriceForLong', char='') plotchar(stopPriceForShort, title = "stopPriceForShort", char ='') plotchar(limitPriceForShort, title = 'limitPriceForShort', char='') //////////////////////////////////////////////////////////// // Plots //////////////////////////////////////////////////////////// plot(ret, color=color.new(color.black, 0), title='Trend Trader Strategy') plotchar(mAAAAA, color=mColor, title='STC', location = location.bottom, char='-', size=size.normal) plot(series = ema, title = "ema")