Эта стратегия адаптирована из стратегии свободной торговли фьючерсами на сырую нефть Кевина Дэви. Она использует индикатор ADX для определения тенденции на рынке сырой нефти и в сочетании с принципом ценового прорыва реализует простую и практичную автоматизированную торговую стратегию для сырой нефти.
Стратегия в основном опирается на индикатор ADX для определения тренда и генерирует торговые сигналы на основе фиксированного цикла ценовых прорывов в условиях тренда.
В целом это очень практичная стратегия торговли сырой нефтью. Он использует индикатор ADX для определения тенденции очень разумно. Принцип ценового прорыва прост и эффективен с хорошими результатами бэкстеста. В то же время, как и стратегия Кевина Дэви
/*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()))