
La estrategia utiliza la señal cruzada de la línea rápida y la línea lenta del indicador MACD, en combinación con varios otros indicadores para un juicio integral, para capturar en el instante el signo de ruptura de la media móvil del índice, para tomar una decisión de compra o venta, y pertenece a la estrategia de comercio en línea corta.
Utiliza el cruce de la línea rápida y la línea lenta del MACD como su principal señal de negociación. Entra en venta cuando la línea rápida atraviesa la línea lenta, y baja en venta cuando la línea rápida atraviesa la línea lenta.
En combinación con el indicador RSI, se puede determinar si se ha comprado o vendido demasiado. El RSI es positivo cuando está por debajo de la línea media y negativo cuando está por encima de la línea media.
Se calcula el precio de cierre actual en comparación con la media SMA en un período determinado, con un alza cuando el precio de cierre es inferior al SMA y un descenso cuando el precio de cierre es superior al SMA.
Calcula el punto de Fibonacci de 0.5 del valor más alto en un período determinado, como el punto de resistencia de los pronósticos. Calcula el punto de Fibonacci de 0.5 del valor más bajo en un período determinado, como el punto de apoyo de los pronósticos.
La entrada en la bolsa se realiza cuando se cumple con una brecha en la línea rápida y el precio está por debajo del soporte, y la entrada en la bolsa se realiza cuando se cumple con una brecha en la línea rápida y el precio está por encima de la resistencia.
La adopción de un método de stop loss progresivo. Al inicio de la entrada, el stop loss se fija como un determinado porcentaje del precio de apertura de la posición, y cuando las pérdidas alcanzan una cierta proporción, se cambia a un pequeño stop loss progresivo.
La estrategia aprovecha al máximo la señal cruzada del MACD, una señal de comercio de indicadores técnicos clásica y efectiva.
La combinación de varios indicadores, como el RSI, SMA y otros, puede ser confirmada para filtrar falsas señales y mejorar la fiabilidad de las señales.
Calcula la resistencia de soporte dinámico para realizar operaciones de ruptura y capturar las tendencias más grandes.
El uso de un método de stop-loss progresivo puede bloquear la mayor parte de los beneficios y controlar el riesgo.
La lógica de la estrategia de negociación es clara y simple, fácil de entender y manejar, adecuada para el aprendizaje de los principiantes.
El índice MACD está rezagado y podría perderse el punto de venta o compra óptimo.
La combinación de varios indicadores aumenta la complejidad de las estrategias, lo que hace que los indicadores puedan entrar en conflicto.
Los cálculos dinámicos sugieren que existe el riesgo de una ruptura errónea en el punto de resistencia.
El movimiento de pérdidas puede detenerse prematuramente en un escenario de gran movimiento y no puede generar ganancias sostenidas.
Los parámetros de la estrategia requieren una optimización de prueba repetida, y los parámetros inadecuados pueden afectar la eficacia de la estrategia.
Se pueden probar diferentes combinaciones de parámetros para optimizar los parámetros del ciclo MACD.
Se pueden introducir más indicadores, como líneas de Brin, KDJ, etc. para el análisis multidimensional.
Se puede combinar más factores para juzgar la racionalidad de apoyar el punto de resistencia.
Se pueden estudiar mecanismos de deterioro móvil más avanzados, como el deterioro del tiempo, el deterioro de la oscilación, etc.
Se puede agregar un módulo de optimización automática de parámetros para lograr la optimización automática de los parámetros.
La estrategia utiliza una combinación de indicadores como el MACD, el RSI y el SMA para capturar las señales de ruptura de las medias móviles del índice en un instante, y es una estrategia de negociación de ruptura de línea corta típica. La estrategia genera señales con cierto retraso, pero puede mejorar la precisión mediante la optimización de los parámetros. En general, la lógica de negociación de la estrategia es simple y clara, fácil de dominar, tiene un rendimiento sólido y es adecuada para la mayoría de las personas.
/*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