
この戦略は,株式の技術指標STC,移動平均MAおよび平均実際の変動率ATRを総合的に使用し,複数の技術指標との組み合わせでトレンド判断を行い,比較的安定したトレンド追跡取引を実現した.
STC指数は,トレンドの逆転を判断する.この指数は,快線を減速線として使用し,二次平滑処理を行い,一致したトレンドシグナルを形成する.指数が0軸を横切るときは買入シグナルであり,0軸を横切るときは売り出シグナルである.
移動平均MAは,トレンドの方向を判断する. 株価がMAを上を突破する時は,まだ上昇傾向にあると判断し,多単位のシグナルを保持する. 価格がMAを下を突破する時は,下を突破していると判断し,空券を保持するシグナルである.
ATR指標は,ストップ・ストラップを設定する.ATRは,市場の変動に応じて,ストップ・ストラップの位置を動的に調整することができる.そして,ATRを取引方向の信号として,多頭期のATRは上昇し,空頭期のATRは下落する.
戦略は,STC判断を反転として主要の買出点として選択し,MAを補助判断トレンドとして,ATRでストップストップを行う. STCが買入シグナルを発信すると,MAも上昇傾向にあり,ATRも上昇している場合は,多項を開きます.
この戦略は,トレンドと逆転点を判断する複数の指標を総合的に使用し,取引シグナルの正確性を向上させています.
STC指数は反転信号を捕捉し,取引を回避する.MA指数は不安定な反転信号をフィルターし,主要なトレンドに沿うことを保証する.
ATR指数は,市場の変動率に応じてストップ・ロース・ポジションを設定し,大きな損失を回避する.そして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