
이 전략은 종합적으로 지표 EMA, 트렌드 추적 전략 TTS 및 슈퍼트 트렌드 사이클 STC의 3개 지표의 장점을 활용하여 더 강한 단선 추적 트렌드 전략을 형성한다. 구체적으로, 전략은 세 지표의 다공이 신호가 일치하는지 여부를 동시에 판단한다. 일치하면 거래 신호가 발생한다. 일치하지 않으면 거래가 이루어지지 않는다.
이 전략은 크게 세 부분으로 구성된다: EMA 평형 지표, TTS 트렌드 추적 전략 및 STC 슈퍼트 트렌드 사이클 지표.
우선, 200주기의 EMA 지수 이동 평균을 계산하여 가격이 이 EMA 라인보다 낮거나 높지 여부를 판단합니다. 가격이 이 라인보다 낮으면 EMA 지표가 공백 신호를 냅니다.
다음으로, TTS 트렌드 추적 전략의 관련 매개 변수를 계산하여, 가격의 상승/하락을 기준으로 거래 트렌드 방향을 판단한다. 가격이 상승하면 다중 신호가 발생하고, 가격이 하락하면 공중 신호가 발생한다.
마지막으로, 슈퍼트 트렌드 사이클 STC 지표를 계산해, 이 지표는 가격 중추의 변화 경향을 반영한다. STC 지표가 상승하면, 다중 헤드 신호가 발생하고; STC 지표가 하락하면, 공중 헤드 신호가 발생한다.
세 지표의 판단 신호를 받은 후, 전략은 그들이 일치하는지 판단한다. 세 지표의 판단 신호가 모두 일치할 때만 실제 거래 신호가 생성된다. 이것은 몇 가지 가짜 신호를 효과적으로 필터링하여 전략을 더 신뢰할 수 있습니다.
거래 신호가 발생한다고 확인되면, 더 많은 또는 더 적은 주문을 수행하고, 스톱 스톱 손실을 설정하십시오.
이 전략은 시장의 동향을 효과적으로 판단할 수 있는 세 가지 다른 유형의 지표를 통합적으로 사용한다.
세 가지 지표의 판단 신호의 일관성을 사용하여 가짜 신호를 필터링하여 불필요한 거래를 줄이고 전략을 더 신뢰할 수 있습니다.
합리적인 스톱스톱스포트를 설정하여 수익을 고정하고 손실을 확대하지 않도록하십시오.
선택된 매개 변수들은 대부분의 주식과 외환 품종에 적합하도록 최적화되었다.
거래 논리는 명확하고 간결하며 이해하기 쉽고 수정하기 쉽습니다.
3가지 지표 (judgment) 사이에 일치하지 않을 때, 디머가 발생하여 거래 기회를 놓칠 수 있다. 판단 규칙을 최적화하는 것을 고려할 수 있다.
STC 지표는 매개 변수에 대한 민감도가 높으며, 다른 품종은 매개 변수를 조정해야 한다.
경기 침체 시, 스톱 로즈는 돌파되어 큰 손실을 초래할 수 있다. 실시간 최적화 스톱 로즈는 고려할 수 있다.
이 경우, 수평으로 정리하는 것을 판단할 수 없기 때문에, 수평으로 정리하는 것은 교도소로 이어질 수 있다.
더 많은 지표의 조합을 테스트하여 더 강력한 판단 규칙을 찾을 수 있습니다. 예를 들어 RSI 지표가 포함됩니다.
STC 지표의 지표 매개 변수를 최적화하여 다양한 품종에 더 적합하게 만듭니다. 적응 매개 변수 최적화 모듈이 추가되었습니다.
적응형 스톱로스 모듈을 추가하여 실제 상황에 따라 실시간으로 최적화된 스톱포인트 설정을 할 수 있다.
평점 모듈을 강화하여 수평으로 이동하는지 판단하고, 포획을 피하십시오.
높은 주파수 거래에 대한 알고리즘 최적화, 시스템 지연을 줄이고, 위탁 성공률을 높인다.
이 전략은 EMA, TTS 및 STC의 세 가지 지표를 사용하여 시장의 트렌드 방향을 판단하고, 판단 규칙이 세 가지가 일치하면 거래 신호를 생성하여 가짜 신호를 효과적으로 필터링 할 수 있습니다. 전략의 최적화 공간은 여전히 넓고, 더 많은 지표 조합을 테스트하고, 적응 알고리즘을 추가하고, 고주파 거래 모듈을 최적화하는 등의 방법을 사용하여 트렌드를 추적하는 과정에서 전략을 더욱 강화합니다. 단순한 평균선을 따르는 것과 같은 전통적인 전략에 비해, 이 전략은 시장을 보다 지능적으로 판단하고, 트렌드를 파악하면서 최대한 포착되는 것을 피할 수 있습니다.
/*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")