
이 전략은 지표 MACD의 빠른 선과 느린 선의 교차 신호를 이용하고, 다른 여러 지표와 결합하여 종합적인 판단을 하고, 지수 이동 평균의 돌파 신호를 순간적으로 포착하여 구매 또는 판매 결정을 내리고, 짧은 선 거래 전략에 속한다.
MACD의 빠른 선과 느린 선의 교차를 주요 거래 신호로 사용한다. 빠른 선에서 느린 선을 통과할 때 상향 입시하고 빠른 선 아래에서 느린 선을 통과할 때 하향 입시한다.
RSI 지표와 결합하여 과매매 여부를 판단한다. RSI가 중간선 아래로 올라가면 시상하고, RSI가 중간선 위로 올라가면 시상한다.
현재 종결 가격과 일정 기간 동안의 SMA 평균과 비교하여 종결 가격이 SMA보다 낮을 때 부진하고, 종결 가격이 SMA보다 높을 때 부진을 계산한다.
특정 주기 동안의 HIGHEST 값의 0.5 피보나치 지점을 계산하여, 보수의 저항 지점으로 . 특정 주기 동안의 LOWEST 값의 0.5 피보나치 지점을 계산하여, 보수의 지지 지점으로 .
빠른 라인을 통과하고 가격이 지원 지점보다 낮을 때 상점 입구에 들어갑니다. 빠른 라인을 통과하고 가격이 저항 지점보다 높을 때 상점 입구에 들어갑니다.
단계적으로 이동하는 스톱로스 방식을 채택한다. 입점 후 시작 시 스톱로스는 포지션 개시 가격의 일정한 비율로 고정되며, 손실이 일정한 비율을 달성한 후 소액으로 단계적으로 추적 스톱로스로 변경된다.
전략은 MACD의 교차 신호를 최대한 활용합니다. 이것은 고전적이고 효과적인 기술 지표 거래 신호입니다.
RSI, SMA 등 여러 지표와 결합하여 확인하면 가짜 신호를 필터링하여 신호의 신뢰성을 높일 수 있다.
동적으로 저항 지점을 지원하고, 브레이크 트레이딩을 수행하여 더 큰 시장을 포착할 수 있다.
점진적으로 이동한 스톱은 수익의 대부분을 고정시키면서도 위험을 통제할 수 있다.
전략 거래 논리는 명확하고 간단하며, 이해하기 쉽고, 학습 초보자에게 적합하다.
MACD 지표는 지연 문제로 인해 시장에서 가장 좋은 시가점을 놓칠 수 있습니다.
다중 지표 조합 판단은 전략적 복잡성을 증가시키고 지표 충돌이 발생할 수 있습니다.
동적 계산은 저항 부위가 잘못 돌파될 위험이 있다는 것을 지원한다.
이동 상쇄 손실은 큰 상황에서는 상쇄 손실이 너무 일찍 발생하여 수익을 지속할 수 없습니다.
전략의 매개 변수는 반복적으로 테스트를 통해 최적화되어야 하며, 적절하지 않은 매개 변수는 전략의 효과에 영향을 줄 수 있다.
다양한 변수 조합을 테스트하여 MACD 주기 변수를 최적화할 수 있다.
다차원 분석을 위해 브린 라인, KDJ 등과 같은 더 많은 지표를 도입할 수 있다.
저항 지점의 합리성을 판단할 수 있는 더 많은 요소들을 결합할 수 있다.
더 진보된 이동파괴 메커니즘을 연구할 수 있다. 시간파괴, 진동파괴 등이다.
자동 매개 변수 최적화 모듈을 추가하여 매개 변수의 자동 검색 최적화를 구현할 수 있다.
이 전략은 MACD, RSI, SMA 등 여러 지표를 종합적으로 사용하여 지수 이동 평균의 돌파 신호를 순간적으로 포착하며, 전형적인 단선 돌파 거래 전략에 속한다. 전략 신호는 약간의 지연성을 생성하지만, 변수 최적화를 통해 정확도를 향상시킬 수 있다.
/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-09 23:00:00
period: 1m
basePeriod: 1m
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/
// © onurenginogutcu
//@version=4
strategy("R19 STRATEGY", overlay=true, calc_on_every_tick=true , margin_long=100, margin_short=100 , process_orders_on_close=true )
sym = input(title="Symbol", type=input.symbol, defval="BINANCE:BTCUSDT" , group = "SYMBOL")
timeFrame = input(title="Strategy Decision Time Frame", type = input.resolution , defval="60")
adxlen = input(14, title="ADX Smoothing" , group = "ADX")
dilen = input(14, title="ADX DI Length", group = "ADX")
adxemalenght = input(30, title="ADX EMA", group = "ADX")
adxconstant = input(19, title="ADX CONSTANT", group = "ADX")
fibvar = input (title = "Fibo Look Back Canles" , defval = 50 , minval = 0 , group = "FIBO MACD SMA")
smaLookback = input (title = "SMA Look Back Candles" , defval = 30 , minval = 0 , group = "FIBO MACD SMA")
MACDFast = input (title = "MACD Fast Lenght" , defval = 15 , minval = 0 , group = "FIBO MACD SMA")
MACDSlow = input (title = "MACD Slow Lenght" , defval = 30 , minval = 0 , group = "FIBO MACD SMA")
MACDSmooth = input (title = "MACD Signal Smoothing" , defval = 9 , minval = 0 , group = "FIBO MACD SMA")
MACDLookback = input (title = "MACD Look Back Candles" , defval = 100 , minval = 0 , group = "FIBO MACD SMA")
trailingStopLong = input (title = "Trailing Long Stop %" , defval = 2.0 , step = 0.1, group = "TP & SL") * 0.01
trailingStopShort = input (title = "Trailing Short Stop %" , defval = 2.0 , step = 0.1 , group = "TP & SL") * 0.01
LongTrailingProfitStart = input (title = "Long Profit Start %" , defval = 2.0 , step = 0.1 , group = "TP & SL") * 0.01
ShortTrailingProfitStart = input (title = "Short Profit Start %" , defval = 2.0 , step = 0.1, group = "TP & SL") * 0.01
lsl = input(title="Max Long Stop Loss (%)",
minval=0.0, step=0.1, defval=3.0, group = "TP & SL") * 0.01
ssl = input(title="Max Short Stop Loss (%)",
minval=0.0, step=0.1, defval=2.5, group = "TP & SL") * 0.01
longtp = input(title="Long Take Profit (%)",
minval=0.0, step=0.1, defval=100, group = "TP & SL") * 0.01
shorttp = input(title="Short Take Profit (%)",
minval=0.0, step=0.1, defval=100, group = "TP & SL") * 0.01
capperc = input(title="Capital Percentage to Invest (%)",
minval=0.0, maxval=100, step=0.1, defval=95, group = "CAPITAL TO INVEST") * 0.01
symClose = security(sym, timeFrame, close)
symHigh = security(sym, timeFrame, high)
symLow = security(sym, timeFrame, low)
atr = atr (14)
/////////adx code
dirmov(len) =>
up = change(symHigh)
down = -change(symLow)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = rma(tr, len)
plus = fixnan(100 * rma(plusDM, len) / truerange)
minus = fixnan(100 * rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
emasig = ema (sig , adxemalenght )
////////adx code over
i = ema (symClose , MACDFast) - ema (symClose , MACDSlow)
r = ema (i , MACDSmooth)
sapust = highest (i , MACDLookback) * 0.729
sapalt = lowest (i , MACDLookback) * 0.729
simRSI = rsi (symClose , 50 )
fibtop = lowest (symLow , fibvar) + ((highest (symHigh , fibvar) - lowest (symLow , fibvar)) * 0.50)
fibbottom = lowest (symLow , fibvar) + ((highest (symHigh , fibvar) - lowest (symLow , fibvar)) * 0.50)
cond1 = 0
cond2 = 0
cond3 = 0
cond4 = 0
longCondition = crossover(i, r) and i < sapalt and sig > adxconstant and symClose < sma (symClose , smaLookback) and simRSI < sma (simRSI , 50) and symClose < fibbottom
shortCondition = crossunder(i, r) and i > sapust and sig > adxconstant and symClose > sma (symClose , smaLookback) and simRSI > sma (simRSI , 50) and symClose > fibtop
//////////////////////probability long/short
if (crossover(i, r) and i < sapalt)
cond1 := 35
else if (crossunder(i, r) and i > sapust)
cond1 := -35
else
cond1 := 0
if (symClose < sma (symClose , smaLookback))
cond2 := 30
else if (symClose > sma (symClose , smaLookback))
cond2 := -30
else
cond2 := 0
if (simRSI < sma (simRSI , 50))
cond3 := 25
else if (simRSI > sma (simRSI , 50))
cond3 := -25
else
cond3 := 0
if (symClose < fibbottom)
cond4 := 10
else if (symClose > fibbottom)
cond4 := -10
else
cond4 := 0
probab = cond1 + cond2 + cond3 + cond4
////////////////////////////////////////////////////////////////
///////////////////////////////////////////STRATEGY ENTRIES AND STOP LOSSES /////
var startTrail = 0
var trailingLongPrice = 0.0
var trailingShortPrice = 0.0
if (longCondition and strategy.position_size == 0)
strategy.entry("Long", strategy.long , qty = capperc * strategy.equity / close )
if (shortCondition and strategy.position_size == 0)
strategy.entry("Short" , strategy.short , qty = capperc * strategy.equity / close )
if (strategy.position_size == 0)
trailingShortPrice := 0.0
trailingLongPrice := 0.0
startTrail := 0
/////////////////////////////////strategy exit
if (strategy.position_size > 0 and close >= strategy.position_avg_price * (1 + LongTrailingProfitStart))
startTrail := 1
if (strategy.position_size < 0 and close <= strategy.position_avg_price * (1 - ShortTrailingProfitStart))
startTrail := -1
trailingLongPrice := if strategy.position_size > 0 and startTrail == 1
stopMeasure = close * (1 - trailingStopLong)
max (stopMeasure , trailingLongPrice [1])
else if strategy.position_size > 0 and startTrail == 0
strategy.position_avg_price * (1 - lsl)
trailingShortPrice := if strategy.position_size < 0 and startTrail == -1
stopMeasure = close * (1 + trailingStopShort)
min (stopMeasure , trailingShortPrice [1])
else if strategy.position_size < 0 and startTrail == 0
strategy.position_avg_price * (1 + ssl)
if (strategy.position_size > 0)
strategy.exit("Exit Long", "Long", stop = trailingLongPrice , limit=strategy.position_avg_price*(1 + longtp))
if (strategy.position_size < 0)
strategy.exit("Exit Short", "Short", stop = trailingShortPrice , limit=strategy.position_avg_price*(1 - shorttp))
////////////////////////vertical colouring signals
bgcolor(color=longCondition ? color.new (color.green , 70) : na)
bgcolor(color=shortCondition ? color.new (color.red , 70) : na)
plot (trailingLongPrice , color = color.green) ///long price trailing stop
plot (trailingShortPrice , color = color.red) /// short price trailing stop
plot (startTrail , color = color.yellow)
plot (probab , color = color.white) ////probability