En este artículo se detalla una estrategia de trading cuantitativa que utiliza el ATR como stop loss y la línea de paridad como entrada. La estrategia se combina con el índice de William para la verificación de la señal para controlar el riesgo de la operación.
El principio de la estrategia
Los indicadores centrales de la estrategia incluyen:
El ATR es un indicador de stop loss que refleja dinámicamente la volatilidad del mercado.
La línea de equilibrio a primera vista da una señal de entrada para determinar la dirección de la tendencia.
Los indicadores de William se verifican adicionalmente para evitar la admisión falsa.
La lógica de la transacción es la siguiente:
Cuando el precio cae por debajo de la línea de equilibrio inicial y luego se recupera, haga más; cuando el precio rompe la línea media y luego cae por debajo, haga un vacío. Esto permite el seguimiento de tendencias.
Al mismo tiempo, compruebe si los indicadores de William coinciden con la dirección y abandone la entrada si no coinciden. Esto puede filtrar las señales falsas.
En cada entrada, se establece un punto de parada calculado con el ATR. El ATR puede reflejar dinámicamente la volatilidad del mercado y, a continuación, se establece un margen de parada razonable.
Cuando se activa el nivel de stop loss o stop-loss, la posición se cierra con ganancias.
Dos, las ventajas estratégicas
Las principales ventajas de esta estrategia son:
En primer lugar, el ATR Stop Loss es un control de riesgo basado en la volatilidad del mercado que permite evitar pérdidas importantes.
En segundo lugar, la entrada de la línea media en combinación con la verificación del indicador William puede mejorar la calidad de la señal.
Por último, la configuración de stop loss también permite que cada operación tenga un riesgo-rendimiento definido.
Tercero, el riesgo potencial.
Sin embargo, también debemos tener en cuenta los siguientes riesgos:
En primer lugar, cuando la tendencia cambia, las señales de la línea media pueden retrasarse y no reaccionar a tiempo.
En segundo lugar, el estancamiento es demasiado radical y puede causar que el estancamiento sea superado.
Por último, la optimización incorrecta de los parámetros también puede conducir a una sobreadaptación.
Cuatro contenido, resumen
En este artículo se describe en detalle una estrategia de comercio cuantitativa basada en el ATR como stop loss y la línea de paridad como base de entrada. Puede lograr un buen efecto de control de riesgo a través de stop loss dinámico y filtración de señales. Pero también debemos prevenir la aparición de problemas como rupturas de tendencia y rupturas de stop loss. En general, la estrategia ofrece un método de seguimiento de tendencias simple y eficaz.
/*backtest
start: 2023-09-06 00:00:00
end: 2023-09-13 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// strategy("NNFX ft. ATR, Kijun-Sen, %R","NNFX-2",true,pyramiding=1,calc_on_order_fills=true,calc_on_every_tick=true,initial_capital = 1000, currency="USD",slippage=5,commission_type=strategy.commission.cash_per_contract,commission_value=0.000035)
strategy.initial_capital = 50000
//INDICATOR---------------------------------------------------------------------
//Average True Range (1. RISK)
atr_period = input(14, "Average True Range Period")
atr = atr(atr_period)
//Ichimoku Cloud - Kijun Sen (2. BASELINE)
ks_period = input(20, "Kijun Sen Period")
kijun_sen = (highest(high,ks_period) + lowest(low,ks_period))/2
base_long = open < kijun_sen and close > kijun_sen
base_short = open > kijun_sen and close < kijun_sen
//Williams Percent Range (3. Confirmation#1)
use_wpr = input(true,"Use W%R?")
wpr_len = input(1, "Williams % Range Period")
wpr = -100*(highest(high,wpr_len) - close)/(highest(high,wpr_len) - lowest(low,wpr_len))
wpr_up = input(-25, "%R Upper Level")
wpr_low = input(-75, "%R Lower Level")
conf1_long = wpr >= wpr_up
conf1_short = wpr <= wpr_low
if(use_wpr == false)
conf1_long := true
conf1_short := true
//TRADE LOGIC-------------------------------------------------------------------
//Long Entry
//if -> WPR crosses below -39 AND MACD line is less than signal line
l_en = base_long and conf1_long
//Long Exit
//if -> WPR crosses above -14
l_ex = close < kijun_sen
//Short Entry
//if -> WPR crosses above -39 AND MACD line is greater than signal line
s_en = base_short and conf1_short
//Short Exit
//if -> WPR crosses under -14
s_ex = close > kijun_sen
//MONEY MANAGEMENT--------------------------------------------------------------
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit //floating profit/loss
isTwoDigit = input(false,"Is this a 2 digit pair? (JPY, XAU, XPD...")
risk = input(5,"Risk %")/100 //risk % per trade
equity_protector = input(30,"Equity Protection %")/100 //equity protection %
stop = atr*100000*input(1.5,"Average True Range multiplier") //Stop level
if(isTwoDigit)
stop := stop/100
target = input(150, "Target TP in Points") //TP level
//Calculate current DD and determine if stopout is necessary
equity_stopout = false
if(floating<0 and abs(floating/balance)>equity_protector)
equity_stopout := true
//Calculate the size of the next trade
temp01 = balance * risk //Risk in USD
temp02 = temp01/stop //Risk in lots
temp03 = temp02*100000 //Convert to contracts
size = temp03 - temp03%1000 //Normalize to 1000s (Trade size)
if(size < 1000)
size := 1000 //Set min. lot size
//TRADE EXECUTION---------------------------------------------------------------
strategy.close_all(equity_stopout) //Close all trades w/equity protector
is_open = strategy.opentrades > 0
if(true)
strategy.entry("l_en",true,oca_name="a",when=l_en and not is_open) //Long entry
strategy.entry("s_en",false,oca_name="a",when=s_en and not is_open) //Short entry
strategy.exit("S/L","l_en",loss=stop, profit=target) //Long exit (stop loss)
strategy.close("l_en",when=l_ex) //Long exit (exit condition)
strategy.exit("S/L","s_en",loss=stop, profit=target) //Short exit (stop loss)
strategy.close("s_en",when=s_ex) //Short exit (exit condition)
//PLOTTING----------------------------------------------------------------------
plot(kijun_sen,"Kijun-Sen",color.blue,2)