
La estrategia genera señales de negociación basadas en rupturas de movimiento, y la idea principal es observar los movimientos de los precios en un período de tiempo determinado para juzgar los cambios de tendencia de los precios con rupturas de movimiento.
La estrategia determina el movimiento de los precios calculando los máximos y mínimos de los precios en un período de tiempo determinado, es decir, el alto y el bajo de pivote.
Concretamente, la estrategia calcula el precio más alto de la línea N-K anterior como un alto de pivote y el precio más bajo de la línea M-K anterior como un bajo de pivote. Cuando el punto más alto de la línea K actual supera el alto de pivote, se produce una señal de aumento; cuando el punto más bajo de la línea K actual cae por debajo del bajo de pivote, se produce una señal de descenso.
Después de hacer un sobre y un descubierto, la estrategia utiliza ATR para establecer un stop loss y un stop loss por etapas durante el día. Al mismo tiempo, la estrategia también elimina todas las posiciones en un período de tiempo específico (por ejemplo, 14:55).
La estrategia utiliza de manera simple y efectiva las rupturas de precios en un rango de tiempo específico para capturar tendencias, lo que es ideal para el comercio de líneas cortas en el día. La idea de cálculo es clara y fácil de implementar.
Se puede ajustar el intervalo de tiempo adecuado, o combinar otros indicadores para determinar el momento de entrada
Se pueden ajustar los parámetros o añadir condiciones de filtrado, como indicadores de tendencia, volumen de transacciones, etc.
Se puede ajustar el tamaño de la posición o prolongar la duración de la misma de manera adecuada.
Se deben ajustar los parámetros en función de las diferentes condiciones del mercado, o se debe optimizar automáticamente mediante métodos como el aprendizaje automático
Prueba con otros datos de precios, como precios típicos, medias, etc.
Condiciones de filtración como aumento de volumen o fluctuación
Intentar una combinación diferente de parámetros
Indicadores de tendencia para determinar la dirección de la tendencia
Optimización automática de parámetros con métodos de aprendizaje automático
El proyecto se extiende a varios períodos de tiempo, cambiando el tiempo de entrada al campo.
La idea general de la estrategia es clara y concisa, capta las tendencias a corto plazo mediante el uso efectivo de las rupturas móviles en los precios, y logra un mayor factor de ganancia. La estrategia tiene pocos parámetros, es fácil de probar y optimizar, y es adecuada para operaciones de línea corta durante el día. Aunque hay un cierto grado de retraso y problemas de falsas señales, se puede mejorar mediante ajustes de parámetros, adición de condiciones de filtración, etc.
/*backtest
start: 2022-10-27 00:00:00
end: 2023-11-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// ____________ _________ _____________
// |____________| ||________| ||__________|
// || || || ||
// || ||________|| ||
// || H E ||________ U L L || H A R T I S T
// || || || ||
// || ||________|| ||__________
// || ||________| ||__________|
//@version=5
// strategy("PIVOT STRATEGY [5MIN TF]",overlay=true ,commission_type = strategy.cash, commission_value = 30 , slippage = 2, default_qty_value = 60, currency = currency.NONE, pyramiding = 0)
leftbars = input(defval = 10)
rightbars = input(defval = 15)
// ═══════════════════════════ //
// ——————————> INPUTS <——————— //
// ═══════════════════════════ //
EMA1 = input.int(title='PRICE CROSS EMA', defval = 150, minval = 10 ,maxval = 400)
factor1 = input.float(title='_ATR LONG',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL LONG")
factor2 = input.float(title='_ATR SHORT',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL SHORT")
risk = input.float(title='RISK',defval = 200 , minval = 1 , maxval = 5000 , step = 50, tooltip = "RISK PER TRADE")
var initialCapital = strategy.equity
t = time(timeframe.period, '0935-1400:1234567')
time_cond = true
// ══════════════════════════════════ //
// ———————————> EMA DATA <——————————— //
// ══════════════════════════════════ //
ema1 = ta.ema(close, EMA1)
plot(ema1, color=color.new(color.yellow, 0), style=plot.style_linebr, title='ema1')
// ══════════════════════════════════ //
// ————————> TRAIL DATA <———————————— //
// ══════════════════════════════════ //
// *******Calculate LONG TRAIL data*****
ATR_LO = ta.atr(14)*factor1
// *******Calculate SHORT TRAIL data*****
ATR_SH = ta.atr(14)*factor2
longStop = close - ATR_LO
shortStop = close + ATR_SH
// Plot atr data
//plot(longStop, color=color.new(color.green, 0), style=plot.style_linebr, title='Long Trailing Stop')
//plot(shortStop , color=color.new(color.red, 0), style=plot.style_linebr, title='Short Trailing Stop')
// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //
// ————————————————————————————————————————————————————————> PIVOT DATA <———————————————————————————————————————————————————————————————————————————————————————————————————— //
// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //
ph = ta.pivothigh(close,leftbars, rightbars)
pl = ta.pivotlow(close,leftbars, rightbars)
pvt_condition1 = not na(ph)
upper_price = 0.0
upper_price := pvt_condition1 ? ph : upper_price[1]
pvt_condition2 = not na(pl)
lower_price = 0.0
lower_price := pvt_condition2 ? pl : lower_price[1]
// Signals
long = ta.crossover(high, upper_price + syminfo.mintick)
short = ta.crossunder(low, lower_price - syminfo.mintick)
plot(upper_price, color= close > ema1 ? color.green : na, style=plot.style_line, title='PH')
plot(lower_price, color= close < ema1 ? color.red : na, style=plot.style_line, title='PL')
// ══════════════════════════════════//
// ————————> LONG POSITIONS <————————//
// ══════════════════════════════════//
//******barinstate.isconfirmed used to avoid repaint in real time*******
if ( long and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close >= ema1 )
strategy.entry(id= "Long" ,direction = strategy.long, comment = "B")
//plot(longStop , color=color.new(color.blue, 0), style=plot.style_linebr, title='long Stop')
if strategy.position_size > 0
strategy.exit("long tsl", "Long" , stop = longStop ,comment='S')
// ═════════════════════════════════════//
// ————————> SHORT POSITIONS <————————— //
// ═════════════════════════════════════//
if ( short and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close <= ema1 )
strategy.entry(id = "Short" ,direction = strategy.short, comment = "S")
if strategy.position_size < 0
strategy.exit("short tsl", "Short" , stop = shortStop ,comment='B')
// ════════════════════════════════════════════════//
// ————————> CLOSE ALL POSITIONS BY 3PM <————————— //
// ════════════════════════════════════════════════//
strategy.close_all(when = hour == 14 and minute == 55)
// ════════════════════════════════════════//
// ————————> MAX INTRADAY LOSS <————————— //
// ════════════════════════════════════════//
// strategy.risk.max_intraday_loss(type = strategy.cash, value = risk)