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


Дата создания: 2023-09-24 13:14:08 Последнее изменение: 2023-09-24 13:14:08
Копировать: 0 Количество просмотров: 694
1
Подписаться
1617
Подписчики

Обзор

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

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

  1. Используйте долгосрочные RMA и краткосрочные EMA для определения направления тренда. Долгосрочные RMA в нижней части короткой EMA - это сигнал пробега, а в верхней части - сигнал пробега.

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

  3. Установите безрегулируемый диапазон, в который цена входит без открытия позиции, чтобы избежать подкупа. Диапазон диапазона определяется определенной пропорцией средней линии RMA.

  4. После входа в систему устанавливается стоп-приз и вывод прибыли в определенной пропорции.

Стратегические преимущества

  1. Двухлинейная комбинация дает точную и надежную оценку направления тенденции.

  2. Следить за остановкой, чтобы остановка следила за трендом.

  3. Установка зоны без сделок для эффективной фильтрации ложных сигналов прорыва.

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

Стратегический риск

  1. Возможны задержки при появлении мертвых винтов, что приводит к увеличению убытков.

  2. Стоп-стоп отслеживания слишком близко к цене может быть ударен предварительным шумом.

  3. Слишком широкий диапазон без сделок приводит к упущенным возможностям.

  4. Не своевременное прекращение убытков может привести к их дальнейшему расширению.

Решение проблемы:

  1. Оптимизация среднелинейных параметров, снижение вероятности задержки.

  2. Необходимо отпустить остановку, чтобы предотвратить чрезмерную чувствительность.

  3. Тестирование настройки зоны отсутствия сделок для предотвращения упущенных возможностей.

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

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

  1. Проверяйте другие комбинации равномерных показателей, чтобы найти более подходящие.

  2. Увеличение разрыва в ценах, MACD и другие показатели, повышение стабильности стратегии.

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

  4. Вместе со слабыми индикаторами тренда, избегайте обратной торговли.

  5. Оптимизация стратегии управления капиталом, повышение успешности стратегии.

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

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

Исходный код стратегии
/*backtest
start: 2023-08-24 00:00:00
end: 2023-09-12 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © PatrickGwynBuckley

//@version=5
//var initialCapital = strategy.equity

strategy("PB Trend Scalper", "PB Trend Scalper", overlay = true)
shortma = input.int(55, title="quick ma's")
longma = input.int(100, title="long ma's")
ema55h = ta.ema(high, shortma)
ema55l = ta.ema(low, shortma)
ema200h = ta.rma(high, longma)
ema200l = ta.rma(low, longma)
stock = ta.stoch(close, high, low, 14)

lev = input.int(3, title="leverage")
hhVal = input.int(170, title="Highest high period")
llVal = input.int(170, title="Lowest low period")

hh = ta.highest(high, hhVal)
ll = ta.lowest(low, llVal)
//plot(stock)

plot(hh, color=color.new(color.green, 50))
plot(ll, color=color.new(color.red, 50))
var float downtrade = 0
p = input.float(3.0, title="no trade zone")
l = 3
emadistlong = ema200h + ((ema200h/100)*p)
emadistshort = ema200l - ((ema200h/100)*p)

plot(ema55h)
plot(ema55l)
ntl = plot(emadistlong, color=color.new(color.red, 10))
nts = plot(emadistshort, color=color.new(color.red, 10))
fill(ntl, nts, color=color.new(color.red, 90))

//position size

EntryPrice = close
//positionValue = initialCapital
positionSize = (strategy.equity*lev) / EntryPrice

//plot(strategy.equity)


//standard short

if ema55h < ema200l and close[2] < ema55l and close[1] > ema55l and high[1] < ema55h and close < ema55h and ema55h < emadistshort and strategy.opentrades == 0// and stock > 85 
    strategy.entry("short", strategy.short, qty=positionSize, comment="short")
    downtrade := 1

//reset count    
if (ta.crossunder(ema55h, ema200l)) and downtrade == 1
    downtrade := 0

//standard long    
if ema55l > ema200h and close[2] > ema55h and close[1] < ema55h and low[1] > ema55l and close > ema55l and ema55l > emadistlong and strategy.opentrades <= 1// and stock < 15 
    strategy.entry("long", strategy.long, qty=positionSize, comment="long")
    downtrade := 0

//RESET COUNT ON MA CROSS
if (ta.crossover(ema55l, ema200h)) and downtrade == 0
    downtrade := 1
    
longclose2 = low < ll[1] or low < emadistshort //close < open and open<open[1] and open[2] < open[3] and open[3] < emadistshort//close < ta.lowest(low, 20)//
shortclose2 = high > hh[1] or high>emadistlong//close > open and open>open[1] and open[2]>open[3] and open[3] > emadistlong//high > emadistlong//close > ta.highest(high, 20)//

sl = 3.5
tp = input.float(6.9, title="take profit %")
tp2 = 10


strategy.exit("long exit", "long", profit = (strategy.position_avg_price*(tp)))//, loss = (strategy.position_avg_price*(sl)))
strategy.close("long", when = longclose2, comment = "long exit")
//strategy.close("long", when = (downtrade == 1), comment = "long exit")
//strategy.exit("long exit", "long2", profit = (strategy.position_avg_price*(tp2)))//, loss = (strategy.position_avg_price*(sl)))
//strategy.close ("long2", when = longclose2, comment = "long exit")
//strategy.close("long", when = (downtrade == 1), comment = "long exit")

strategy.exit("short exit", "short", profit = (strategy.position_avg_price*(tp)))//, loss = (strategy.position_avg_price*(sl)))//, loss = 300)
strategy.close("short", when = shortclose2, comment = "short exit")
//strategy.close("short", when = (downtrade == 0), comment = "short exit")
//strategy.exit("short exit", "short2", profit = (strategy.position_avg_price*(tp2)))//, loss = (strategy.position_avg_price*(sl)))
//strategy.close ("short2", when = shortclose2, comment = "short exit")
//strategy.close("short2", when = (downtrade == 0), comment = "short exit")

//if (strategy.exit("long exit", "long"))
    //downtrade := 1
//else 
   // downtrade := 0