Стратегии покупки и продажи, основанные на тренде


Дата создания: 2023-10-17 12:59:59 Последнее изменение: 2023-10-17 12:59:59
Копировать: 0 Количество просмотров: 628
1
Подписаться
1617
Подписчики

Стратегии покупки и продажи, основанные на тренде

Обзор

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

Стратегический принцип

Эта стратегия использует SMA для определения направления тренда. В восходящем тренде, когда K-линия появляется в нижней точке (откат), стратегия делает больше, когда она прорывает предыдущую K-линию; в нисходящем тренде, когда K-линия появляется в верхней точке (откат), стратегия делает пустое, когда она прорывает предыдущую K-линию.

Стратегия также использует индикаторы Blanchflower %K и %D для определения тренда. Помимо этого, стратегия использует кривую MACD и Signal в качестве фильтрующих условий, чтобы совершать сделки только в том случае, если MACD и Signal соответствуют тренду.

Эта стратегия может быть выполнена только в большем количестве, только в пустом месте или одновременно. Начальная дата может быть установлена в начале месяца и года отсчета. Все параметры, такие как циклы скользящих средних, циклы K, циклы D, параметры MACD и т. Д., могут быть настроены.

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

  • Использование движущихся средних для определения направления тренда может эффективно отфильтровывать колебания и избегать ошибочных сделок.
  • Использование индикатора Blanchflower позволяет вовремя определить обратный тренд и контролировать риски
  • Фильтрация MACD и Signal уменьшает шумные сделки, не соответствующие тренду
  • Настраиваемые параметры для ценового поведения различных сортов
  • Возможность простого, простого или двустороннего трейдинга, гибкая адаптация к рыночным условиям

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

Основные риски этой стратегии:

  • Риск значительного нарушения движущейся средней приводит к огромным убыткам. Для снижения риска можно соответствующим образом увеличить цикл движущейся средней.
  • Частота торговли в волатильном тренде приводит к переторгам. Можно увеличить цикл %K, чтобы снизить частоту торгов.
  • Неправильная настройка параметров MACD и Signal приводит к неэффективности фильтрации. Параметры должны быть оптимизированы в зависимости от конкретной разновидности.
  • При двусторонней торговле свободные позиции накапливаются и приводят к большим убыткам.

Направление оптимизации

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

  • Оптимизация циклов движущихся средних, по возможности, фильтрация колебаний, сохраняя при этом оценку тенденции
  • Оптимизация параметров %K, %D, уменьшение whipsaw при сохранении обратного тренда
  • Оптимизация MACD-параметров для улучшения эффективности их фильтрации и снижения шума в сделках
  • Повышение контроля за позицией, например, открытие позиции с фиксированным количеством открытых позиций, плавающие позиции и т. д.
  • Добавление стратегий по удержанию убытков, таких как мобильные убытки, временные убытки, убытки ATR

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2022-10-10 00:00:00
end: 2023-10-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Higher High / Lower Low Strategy", overlay=true)

// Getting inputs
longOnly = input(true, title="Long or Short Only")
useMACD = input(true, title="Use MACD Filter")
useSignal = input(true, title="Use Signal Filter")
//Filter backtest month and year
startMonth = input(10, minval=1, maxval=12, title="Month")
startYear = input(2020, minval=2000, maxval=2100, title="Year")
//Filter funtion inputs
periodA = input(20, minval=1, title="Period SMA")
periodK = input(5, minval=1, title="Period %K")
fast_length = input(title="Period Fast", type=input.integer, defval=5)
slow_length = input(title="Period Slow", type=input.integer, defval=20)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 30)

//Calculations
smoothD = 3 //input(3, minval=1, title="Smooth %D")
smoothK = 2 //input(2, minval=1, title="Smooth %K")
ma50 = sma(close, periodA)
k = sma(stoch(close, high, low, periodK), smoothK) - 50
d = sma(k, smoothD)
macd = ema(close,fast_length) - ema(close,slow_length)
signal = ema(macd,signal_length)
hist = macd - signal

if (not na(k) and not na(d) and not na(macd) and not na(signal) and longOnly and month>=startMonth and year>=startYear)//	if(k > k[1] and k[2] >= k[1] and (ma50 > ma50[1]) and (not useK or k[1] <= -threshold_k) and (not useMACD or macd > macd[1]) and (not useSignal or signal > signal[1]) and (not useHHLL or close >= high[1]) and (not useD or d <= -threshold_d))
    if(high[2] >= high[1] and high > high[1] and (ma50 > ma50[1]) and (not useMACD or macd > macd[1]) and (not useSignal or signal > signal[1]))
		strategy.order("HH_LE", strategy.long, when=strategy.position_size == 0, comment="HH_LE")
    if (k < k[1])
		strategy.order("HH_SX", strategy.short, when=strategy.position_size != 0, comment="HH_SX")

if (not na(k) and not na(d) and not na(macd) and not na(signal) and not longOnly and month>=startMonth and year>=startYear)
    if(low[2] <= low[1] and low < low[1] and (ma50 < ma50[1]) and (not useMACD or macd < macd[1]) and (not useSignal or signal < signal[1]))
		strategy.order("HH_SE", strategy.short, when=strategy.position_size == 0, comment="HH_SE")
    if (k > k[1])
		strategy.order("HH_LX", strategy.long, when=strategy.position_size != 0, comment="HH_LX")

//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)