Стратегия обратной торговли на основе динамической скользящей средней

Автор:Чао Чжан, Дата: 2024-02-27 14:38:45
Тэги:

img

Обзор

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

Логика стратегии

Стратегия использует две простые скользящие средние (SMA) с различными периодами в качестве торговых сигналов. Первая SMA имеет более длительный период, чтобы представлять общее направление тренда. Вторая SMA имеет более короткий период, чтобы улавливать краткосрочные колебания цен.

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

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

Преимущества

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

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

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

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

Существует дополнительное пространство для оптимизации этой стратегии:

  1. Использование более продвинутых технических индикаторов, таких как полосы Боллинджера и KD, для измерения ценовых волн и тенденций
  2. Включите больше факторов, таких как изменение объема, волатильность, чтобы определить завершение отзыва
  3. Динамический размер позиций для максимизации потенциала прибыли
  4. Оптимизируйте логику остановки потери с помощью KAMA, облаков Ичимоку и сигналов с более низкими временными рамками

Заключение

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


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

// @version=5
strategy("Profitable Pullback Trading Strategy", overlay=true,initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Inputs
ma_length1 = input.int(280,'MA length 1', step = 10,group = 'Moving Avg. Parameters', inline = 'MA')
ma_length2 = input.int(13,'MA length 2', step = 1,group = 'Moving Avg. Parameters', inline = 'MA')
sl = input.float(title="Stop Loss (%)", defval=0.07, step=0.1, group="Moving Avg. Parameters")
too_deep    = input.float(title="Too Deep (%)", defval=0.27, step=0.01, group="Too Deep and Thin conditions", inline = 'Too')
too_thin    = input.float(title="Too Thin (%)", defval=0.03, step=0.01, group="Too Deep and Thin conditions", inline = 'Too')

// Calculations
ma1 = ta.sma(close,ma_length1)
ma2 = ta.sma(close,ma_length2)
too_deep2   = (ma2/ma1-1) < too_deep
too_thin2   = (ma2/ma1-1) > too_thin

// Entry and close condtions
var float buy_price = 0
buy_condition = (close > ma1) and (close < ma2) and strategy.position_size == 0 and too_deep2 and too_thin2
close_condition1  = (close > ma2) and strategy.position_size > 0 and (close < low[1])
stop_distance = strategy.position_size > 0 ? ((buy_price - close) / close) : na
close_condition2 = strategy.position_size > 0 and stop_distance > sl
stop_price = strategy.position_size > 0 ? buy_price - (buy_price * sl) : na

// Entry and close orders
if buy_condition
    strategy.entry('Long',strategy.long)
if buy_condition[1]
    buy_price := open
if close_condition1 or close_condition2
    strategy.close('Long',comment="Exit" + (close_condition2 ? "SL=true" : ""))
    buy_price := na

plot(ma1,color = color.blue)
plot(ma2,color = color.orange)



Больше