Тенденция ADX сырой нефти в соответствии со стратегией

Автор:Чао Чжан, Дата: 2024-01-25 15:18:15
Тэги:

img

Обзор

Эта стратегия адаптирована из стратегии свободной торговли фьючерсами на сырую нефть Кевина Дэви. Она использует индикатор ADX для определения тенденции на рынке сырой нефти и в сочетании с принципом ценового прорыва реализует простую и практичную автоматизированную торговую стратегию для сырой нефти.

Принцип стратегии

  1. Расчет 14-периодного индикатора ADX
  2. Если ADX> 10, рынок считается тенденционным.
  3. Если цена закрытия выше, чем цена закрытия 65 бар назад, это указывает на прорыв цены и длинный сигнал.
  4. Если цена закрытия ниже, чем цена закрытия 65 бар, это указывает на прорыв цены и короткий сигнал.
  5. Установите стоп-лосс и принимайте прибыль после входа в позицию

Стратегия в основном опирается на индикатор ADX для определения тренда и генерирует торговые сигналы на основе фиксированного цикла ценовых прорывов в условиях тренда.

Анализ преимуществ

  • Используйте ADX для определения тенденций и избегайте упущенных трендовых возможностей
  • Прорыв цен на фиксированный цикл генерирует сигналы с хорошими результатами обратных тестов
  • Интуитивно понятный и простой код, легко понимаемый и модифицируемый
  • Многолетняя верификация торговли на живых, не соответствующая кривой.

Анализ рисков

  • В качестве основного показателя 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()))

Больше