Esta estrategia es adaptada de la estrategia de trading de futuros de petróleo crudo libre de Kevin Davey. Utiliza el indicador ADX para determinar la tendencia en el mercado del petróleo crudo y, combinado con el principio de ruptura de precios, implementa una estrategia de trading automática simple y práctica para el petróleo crudo.
La estrategia se basa principalmente en el indicador ADX para determinar la tendencia, y genera señales de negociación basadas en las rupturas de precios de ciclo fijo en condiciones de tendencia.
En general, esta es una estrategia de comercio de petróleo crudo muy práctica. Utiliza el indicador ADX para determinar la tendencia de manera muy razonable. El principio de ruptura de precios es simple y efectivo con buenos resultados de pruebas de retroceso. Al mismo tiempo, como la estrategia pública gratuita de Kevin Davey, tiene una fiabilidad muy fuerte en el combate real. Aunque todavía hay margen de mejora en la estrategia, es una opción muy adecuada para los principiantes y los operadores de capital pequeño para comenzar y practicar.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // Strategy idea coded from EasyLanguage to Pinescript //@version=5 strategy("Kevin Davey Crude free crude oil strategy", shorttitle="CO Fut", format=format.price, precision=2, overlay = true, calc_on_every_tick = true) adxlen = input(14, title="ADX Smoothing") dilen = input(14, title="DI Length") dirmov(len) => up = ta.change(high) down = -ta.change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = ta.rma(ta.tr, len) plus = fixnan(100 * ta.rma(plusDM, len) / truerange) minus = fixnan(100 * ta.rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) sig = adx(dilen, adxlen) plot(sig, color=color.red, title="ADX") buy = sig > 10 and (close - close[65]) > 0 and (close - close[65])[1] < 0 sell = sig > 10 and (close - close[65]) < 0 and (close - close[65])[1] > 0 plotshape(buy, style = shape.arrowup, location = location.belowbar,size = size.huge) plotshape(sell, style = shape.arrowdown, location = location.abovebar,size = size.huge) if buy strategy.entry("long", strategy.long) if sell strategy.entry("short", strategy.short) if strategy.position_size != 0 strategy.exit("long", profit = 450, loss = 300) strategy.exit("short", profit = 450, loss = 300) // GetTickValue() returns the currency value of the instrument's // smallest possible price movement. GetTickValue() => syminfo.mintick * syminfo.pointvalue // On the last historical bar, make a label to display the // instrument's tick value if barstate.islastconfirmedhistory label.new(x=bar_index + 1, y=close, style=label.style_label_left, color=color.black, textcolor=color.white, size=size.large, text=syminfo.ticker + " has a tick value of:\n" + syminfo.currency + " " + str.tostring(GetTickValue()))