La estrategia de seguimiento de la tendencia de múltiples indicadores para detener los pérdidas determina la dirección de la tendencia actual mediante la integración de varios indicadores como EMA, MACD, OBV y PSAR, y establece paradas de pérdidas para controlar el riesgo después de la salida a bolsa. La estrategia integra varios factores para confirmar las señales de negociación y controlar estrictamente los beneficios y los riesgos de cada transacción mientras se sigue la tendencia.
Determinar la dirección de la tendencia: Determinar la tendencia cuando los indicadores como EMA, MACD, OBV y PSAR emiten señales multicabezas o cabecera sincronizadas.
Reglas de entrada: hacer más cuando se establece una señal de cabeza múltiple, hacer vacío cuando se establece una señal de cabeza vacía.
Stop Loss: Establece el Stop Loss de la operación en base a la distancia de puntos del indicador PSAR después de la entrada.
Reglas de salida: Cancelar o cerrar la posición después del disparo.
La ventaja de esta estrategia reside en que se utiliza el juicio de múltiples indicadores para emitir señales de negociación de alta probabilidad, mientras que la estrategia de stop loss puede controlar activamente el riesgo con la premisa de garantizar la rentabilidad. La combinación de indicadores y la configuración de parámetros se pueden optimizar según las condiciones del mercado.
La combinación de múltiples indicadores emite una señal de alta probabilidad
Las estrategias de stop loss y control activo del riesgo
Punto de referencia de la PSAR para establecer el stop loss
Flexibilidad para optimizar indicadores y parámetros
Puede seguir ganando en la tendencia
La combinación de varios indicadores es más compleja
Existe cierto riesgo de retraso de la señal
Necesidad de estar alerta ante cambios y sacudidas en el mercado
La configuración de los parámetros requiere constantes pruebas y optimización
La estrategia de stop loss de seguimiento de tendencias de indicadores múltiples es una mejora integral en el comercio de tendencias, no solo para mejorar la precisión de las decisiones, sino también para controlar activamente el riesgo. Mediante la prueba repetida de diferentes mercados y parámetros, la estrategia se puede optimizar como un sistema de cuantificación estable y confiable.
/*backtest
start: 2023-08-15 00:00:00
end: 2023-09-14 00:00:00
period: 1h
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/
// © exlux99
//@version=4
strategy("Scalping FOrex full strategy with risk management",overlay=true,initial_capital = 10000, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.cash_per_contract ,commission_value=0.00005)
//VOLUME o
shortlen = input(1, minval=1, title = "Short Length OBV")
longlen = input(8, minval=1, title = "Long Length OBV")
upColor = #2196F3//input(#2196F3, "Color Up")
dnColor = #6B1599//input(#6B1599, "Color Down")
f_normGradientColor(_series, _crossesZero, _colorNormLen, _dnColor, _upColor) =>
_dnValue = _crossesZero?-100:0
_mult = 0.0
_lowest = lowest(_colorNormLen)
_highest = highest(_colorNormLen)
_diff1 = close - _lowest
_diff2 = _highest - _lowest
if _diff2 > 0
_mult := _diff1 / _diff2 * 100
color.from_gradient(sign(_series) * _mult, _dnValue, 100, _dnColor, _upColor)
shorta = ema(volume, shortlen)
longa = ema(volume, longlen)
osc = 100 * (shorta - longa) / longa
start = input(0.1, title="PSAR START")
increment = input(0.05,title="PSAR INC")
maximum = input(0.3, title="PSAR MAX")
// multitp=input(1)
// multisl=input(1)
var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na
if bar_index > 0
firstTrendBar = false
SAR := nextBarSAR
if bar_index == 1
float prevSAR = na
float prevEP = na
lowPrev = low[1]
highPrev = high[1]
closeCur = close
closePrev = close[1]
if closeCur > closePrev
uptrend := true
EP := high
prevSAR := lowPrev
prevEP := high
else
uptrend := false
EP := low
prevSAR := highPrev
prevEP := low
firstTrendBar := true
SAR := prevSAR + start * (prevEP - prevSAR)
if uptrend
if SAR > low
firstTrendBar := true
uptrend := false
SAR := max(EP, high)
EP := low
AF := start
else
if SAR < high
firstTrendBar := true
uptrend := true
SAR := min(EP, low)
EP := high
AF := start
if not firstTrendBar
if uptrend
if high > EP
EP := high
AF := min(AF + increment, maximum)
else
if low < EP
EP := low
AF := min(AF + increment, maximum)
if uptrend
SAR := min(SAR, low[1])
if bar_index > 1
SAR := min(SAR, low[2])
else
SAR := max(SAR, high[1])
if bar_index > 1
SAR := max(SAR, high[2])
nextBarSAR := SAR + AF * (EP - SAR)
// if barstate.isconfirmed
// if uptrend
// strategy.entry("ParSE", strategy.short, stop=nextBarSAR, comment="ParSE")
// strategy.cancel("ParLE")
// else
// strategy.entry("ParLE", strategy.long, stop=nextBarSAR, comment="ParLE")
// strategy.cancel("ParSE")
//plot(SAR, style=plot.style_cross, linewidth=3, color=color.orange)
psarshort = close- SAR
psarlong= SAR-close
lena = input(200, minval=1, title="Length EMA")
srca = input(close, title="Source")
out = ema(srca, lena)
fast_length = input(title="Fast Length MACD", type=input.integer, defval=12)
slow_length = input(title="Slow Length MACD", type=input.integer, defval=25)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing MACD", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=true)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=true)
// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
long = hist[1]<0 and hist > 0 and close > out and uptrend and osc < 0
short = hist[1]>0 and hist< 0 and close < out and not uptrend and osc >0
// ------------------------- Strategy Logic --------------------------------- //
var longOpeneds = false
var shortOpeneds = false
var int timeOfBuys = na
var float tpLong = na
var float slLong = na
var int entrys = na
longConditions = long and not longOpeneds and entrys<100
if longConditions
longOpeneds := true
timeOfBuys := time
tpLong := close+ (psarshort) //* multitp)
slLong := close- (psarshort)//*multisl)
entrys:=entrys+1
tpLongTrigger = (longOpeneds[1] and (crossover(close, tpLong) or crossover( high,tpLong)))
slLongTrigger = (longOpeneds[1] and (crossunder(close, slLong) or crossunder( low,slLong)))
longExitSignals = slLongTrigger or tpLongTrigger or short
exitLongConditions = longOpeneds[1] and longExitSignals
if exitLongConditions
longOpeneds := false
timeOfBuys := na
tpLong := na
slLong := na
if(short)
entrys:=0
//short
// ------------------------- Strategy Logic --------------------------------- //
var longOpenedss = false
// var shortOpeneds = false
var int timeOfBuyss = na
var float tpLongs = na
var float slLongs = na
var int entry = na
longConditionss = short and not longOpenedss and entry<100
if longConditionss
longOpenedss := true
timeOfBuyss := time
tpLongs := close- (psarlong)//*multitp )
slLongs := close+ (psarlong)//*multisl)
entry:=1
tpLongTriggers = (longOpenedss[1] and ( crossunder(close, tpLongs) or crossunder( low,tpLongs)))
slLongTriggers = (longOpenedss[1] and (crossover(close, slLongs) or crossover( high,slLongs)))
longExitSignalss = slLongTriggers or tpLongTriggers or long
exitLongConditionss = longOpenedss[1] and longExitSignalss
if exitLongConditionss
longOpenedss := false
timeOfBuyss := na
tpLongs := na
slLongs := na
if(long)
entry:=0
longEntry=input(true)
shortEntry=input(true)
if(longEntry)
strategy.entry("long",1,when=longConditions)
strategy.close('long',when=exitLongConditions)
if(shortEntry)
strategy.entry("short",0,when=longConditionss)
strategy.close("short",when=exitLongConditionss)