В процессе загрузки ресурсов... загрузка...

Стратегия торговли автоматическим обучением

Автор:Чао Чжан, Дата: 2024-01-29 11:20:42
Тэги:

img

Обзор

Эта стратегия использует методы машинного обучения для реализации автоматизированной стратегии торговли. Она интегрирует несколько индикаторов и моделей для автоматического генерирования торговых сигналов и принятия соответствующих решений о покупке и продаже.

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

Эта стратегия основывается главным образом на следующих ключевых моментах:

  1. Используйте скользящую среднюю Hull для определения направления тенденции рынка
  2. Использование EMA для оценки краткосрочных и среднесрочных тенденций
  3. Используйте канал тела свечи для определения ключевых уровней поддержки/сопротивления
  4. Принимать решения на основе перекрестного перехода между открытыми и закрытыми ценами из многочасовых рамок

В частности, стратегия будет отражать Hull MA, 13-периодическую EMA и 21-периодическую EMA. Судя по краткосрочным и среднесрочным направлениям тренда на основе длинного и короткого статуса EMA. В сочетании с Hull MA для определения тенденций более длительного цикла. Это дает руководство по общему направлению для последующих торговых сигналов.

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

Наконец, стратегия использует 60-периодные открытые и закрытые цены. Когда цена закрытия пересекает открытую цену, генерируется сигнал покупки. Когда он пересекает ниже, генерируется сигнал продажи. Это завершает всю логику торговли.

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

Самое большое преимущество этой стратегии заключается в том, что она сочетает в себе механическое обучение и технический анализ, чтобы достичь логического, регулируемого и простого в использовании автоматизированного торгового решения.

  1. Комбинация с несколькими индикаторами улучшает точность сигнала

    Стратегия не опирается только на один или два индикатора, но учитывает множество факторов, таких как тенденции, поддержка / сопротивление и прорывы цены.

  2. Гибкие настройки параметров

    Продолжительность периодов Hull MA, EMA, открытых/ближайших периодов перекрестного перехода может быть скорректирована с помощью параметров, что делает стратегию адаптивной к различным рыночным условиям.

  3. Автоматизированные торговые сигналы

    Торговые сигналы, основанные на индикаторах и кроссоверах, могут автоматически запускать покупки и продажи без ручного суждения, уменьшая сложность.

  4. Визуализированное отображение

    Графики в стратегии могут четко показывать структуру рынка, состояние тренда и ключевые цены, интуитивно отображая основу стратегического суждения.

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

Несмотря на то, что эта стратегия была оптимизирована во многих аспектах, все еще существуют некоторые потенциальные риски:

  1. Неспособность отслеживать резкие изменения цен

    На волатильных рынках индикаторы могут стать неэффективными или задерживаться, что приводит к тому, что стратегия не может отслеживать изменения цен во времени.

  2. Наличие погрешности сигнала

    Торговые сигналы, основанные на индикаторах и моделях, будут иметь некоторые ложные сигналы или отсутствующие сигналы.

  3. Риск длинной/короткой смеси

    Стратегия, в которой одновременно занимаются как длинные, так и короткие позиции, имеет риск потерь с обеих сторон, если решения пойдут не так.

  4. Риск перегрузки

    Слишком сложные параметры подвергаются риску перенастройки.

Руководство по оптимизации

Эта стратегия по-прежнему может быть оптимизирована, главным образом в следующих аспектах:

  1. Добавить больше сигналов индикатора

    В дополнение к существующим показателям могут быть введены дополнительные показатели, такие как каналы BOLL, показатели KD и т.д., для обогащения системы ссылки.

  2. Применение моделей глубокого обучения

    Использовать простые индикаторы в качестве функций для обучения LSTM и других моделей глубокого обучения для улучшения качества сигнала.

  3. Включить основные данные

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

  4. Размер риска и позиции

    Внедрять стратегии стоп-лосса, динамически корректировать размер позиций на основе волатильности прибыли стратегии для строгого контроля рисков.

Заключение

Эта стратегия объединяет тенденции, уровни поддержки/сопротивления, прорывы и множество других индикаторов, используя методы машинного обучения для достижения автоматизированных, готовых к использованию количественных торговых решений. Она имеет преимущества различных комбинаций индикаторов, настраиваемых параметров и автоматизированных сигналов, в то же время сталкивается с отклонениями отслеживания, ошибками сигнала, рисками длинной/короткой смеси в некоторой степени.


/*backtest
start: 2023-01-22 00:00:00
end: 2024-01-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title='Ali Jitu Abus', shorttitle='Ali_Jitu_Abis_Strategy', overlay=true, pyramiding=0, initial_capital=1000, currency=currency.USD)

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=input(false, title="Bar Channel On/Off")
ul2=plot(channel2?last8h:last8h==nz(last8h[1])?last8h:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level top", offset=0)
ll2=plot(channel2?lastl8:lastl8==nz(lastl8[1])?lastl8:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level bottom", offset=0)
//fill(ul2, ll2, color=black, transp=95, title="Candle body resistance Channel")

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:',  defval=10) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)
RT2 = plot(RSTT, color=RSTT != RSTT[1] ? na : red, linewidth=1, offset=+0)
RB2 = plot(RSTB, color=RSTB != RSTB[1] ? na : green, linewidth=1, offset=0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0
plot_color = direction > 0  ? lime: direction < 0 ? red : na
plot(ema0, title="EMA", style=line, linewidth=1, color = plot_color)

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0
plot_color2 = direction2 > 0  ? lime: direction2 < 0 ? red : na
plot(ema02, title="EMA Signal 2", style=line, linewidth=1, color = plot_color2)

//=============Hull MA//
show_hma = input(false, title="Display Hull MA Set:")
hma_src = input(close, title="Hull MA's Source:")
hma_base_length = input(8, minval=1, title="Hull MA's Base Length:")
hma_length_scalar = input(5, minval=0, title="Hull MA's Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
plot(not show_hma ? na : hullma(hma_src, hma_base_length+hma_length_scalar*6), color=black, linewidth=2, title="Hull MA")

//============ signal Generator ==================================//
Period=input('60')
ch1 = request.security(syminfo.tickerid, Period, open)
ch2 = request.security(syminfo.tickerid, Period, close)
longCondition = crossover(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
if (longCondition)
    strategy.entry("BUY", strategy.long)
shortCondition = crossunder(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
if (shortCondition)
    strategy.entry("SELL", strategy.short)

plot(request.security(syminfo.tickerid, Period, close), color=red, title="Period request.security Close")
plot(request.security(syminfo.tickerid, Period, open), color=green, title="Period request.security Open")

///////////////////////////////////////////////////////////////////////////////////////////

Больше