この戦略は,技術指標STC,移動平均MA,平均真の範囲ATRを組み合わせて,トレンドを判断し,比較的安定したトレンド追跡取引を実施します.
STCインジケータはトレンド逆転を判断する. 速い線を減慢し,ゆっくりとした線を活用し,次要のスムージングを処理し,一貫したトレンド信号を形成する. 買い信号はインジケーターが0軸以上,売り信号が0軸以下を横切るときに来る.
移動平均MAは,トレンド方向を判断する.株価がMAを超えると,上向きのシグナルが表示され,ロングポジション保持シグナルが表示されます.価格がMAを下回ると,下向きのシグナルが表示され,ショートポジション保持シグナルが表示されます.
ATRインジケーターはストップ・ロストとテイク・プロフィートを設定します. ATRは市場の変動に基づいてストップ・ロストとテイク・プロフィートを動的に調整できます.そしてATRは,上向きで上昇し,下向きで低下し,取引方向のサインとして機能します.
この戦略は,STC信号をエントリーの主なタイミングとして採用し,MAを補助的なトレンド判断として,ATRをストップ・ロストとテイク・プロフィートとして使用する.STCが買い信号を出すとき,MAも上昇傾向を示し,ATRが上昇すると,ロングポジションを開く.STCが売り信号を出すとき,MAがダウントレンドを示し,ATRが下がると,ショートポジションを開く.
この戦略は,トレンドと逆転点を判断するための複数の指標を組み合わせ,取引信号の正確性を向上させます.
STCは逆転信号をキャプチャし,トレンドに囚われないようにすることができます. MAは,主要なトレンドに従うことを確保するために不確実な逆転信号をフィルターします.
ATRは市場変動に基づいて ダイナミックなストップ・ロスを設定し 利益を得て 大きな損失を避けます
複数の指標の組み合わせにより,強いトレンド追跡能力が形成される.歴史的なバックテストは比較的安定した収益性を示しています.
STCは時間遅れがあり,価格逆転の最適なタイミングを逃す可能性があります.
MAは激烈な価格変動で遅滞する傾向があり,誤った信号を生む可能性があります.
ATRストップロスは数秒でヒットすることがあります.大きなトレンドの間,ATR倍数は緩め,または一時的に無効にする必要があります.
ストップ・ロスを打つ可能性が高くなります.不要なストップ・ロスを避けるためにパラメータを調整する必要があります.
STCのパラメータを調整して 逆転の反応が早くなるようにする
より良いトレンド追跡のためにMA期間パラメータを最適化します.
異なるATR倍数による試験衝撃
STCを他の指標に置き換えてみてください
マシン学習アルゴリズムを導入し 多パラメータ自動最適化
サイクルの大きな傾向を考慮し 異なる段階を区別します
STC MA ATR戦略は,安定したトレンドトラッキング取引のためにトレンド逆転点を捕捉するために3つの指標を組み合わせます.指標コンボは誤った信号をフィルタリングし,ストップ損失/取利益でリスクを制御します.強固性と安定性があります.パラメータ最適化とアルゴリズム導入によりさらなる改善を達成できます.全体的には信頼性と適度な戦略選択です.
/*backtest start: 2023-09-16 00:00:00 end: 2023-10-16 00:00:00 period: 4h basePeriod: 15m 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/ // © Romedius //@version=5 strategy("My Strategy", overlay=true, margin_long=100, margin_short=100) // STC EEEEEE=input(12,"Length",group="STC") BBBB=input(26,"FastLength",group="STC") BBBBB=input(50,"SlowLength",group="STC") AAAA(BBB, BBBB, BBBBB) => fastMA = ta.ema(BBB, BBBB) slowMA = ta.ema(BBB, BBBBB) AAAA = fastMA - slowMA AAAA AAAAA(EEEEEE, BBBB, BBBBB) => //AAA=input(0.5) var AAA = 0.5 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) stc = mAAAAA > mAAAAA[1] ? true : false stc_sig = stc == true and stc[1] == false ? 1 : stc == false and stc[1] == true ? -1 : 0 stc_long = stc_sig == 1 stc_short = stc_sig == -1 // STC end // ATR stops nATRPeriod = input(5,group="ATR Stops") nATRMultip = input(3.5,group="ATR Stops") xATR = ta.atr(nATRPeriod) nLoss = nATRMultip * xATR xATRTrailingStop = 0.0 xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) : close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) : close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss pos = 0 pos := close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0) ? 1 : close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0) atr_sig = pos == -1 ? false : true // ATR stops end // ma ma_len = input(200, title="MA Length", group="Moving Average") ma = ta.sma(close, 200) ma_sig = close < ma ? false : true // ma end // strategy entries tp_mult = input(2, title="Take Profit ATR Multiplier", group="Strategy") sl_mult = input(1, title="Stop Loss ATR Multiplier", group="Strategy") early_stop = input(true, title="Close position when ATR changes color") atr_stop = if close < xATRTrailingStop close - (close - xATRTrailingStop) * sl_mult else close + (xATRTrailingStop - close) * sl_mult longCondition = atr_sig == true and stc_sig == 1 and ma_sig == true shortCondition = atr_sig == false and stc_sig == -1 and ma_sig == false if (longCondition) strategy.entry("Long", strategy.long) strategy.exit("Exit Long", "Long", limit=close + xATR * tp_mult, stop=atr_stop) else if atr_sig == false and early_stop strategy.close("Long") if (shortCondition) strategy.entry("Short", strategy.short) strategy.exit("Exit Short", "Short", limit=close - xATR * tp_mult, stop=atr_stop) else if atr_sig == true and early_stop strategy.close("Short") // plot stuff atr_color = pos == -1 ? color.red: pos == 1 ? color.green : color.blue plot(atr_stop, title="ATR Stop", color=atr_color) ma_color = ma_sig ? color.green : color.red plot(ma, title="Moving Average", color=ma_color) stc_color = stc_long ? color.green : color.red plotshape(stc_long, style=shape.triangleup, color=stc_color, title="STC Long Signal", size=size.tiny) plotshape(stc_short, style=shape.triangledown, color=stc_color, title="STC Short Signal", size=size.tiny) // plot stuff end