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

Автор:Чао Чжан, Дата: 2023-09-24 13:14:08
Тэги:

Обзор

Эта стратегия использует долгосрочную RMA и краткосрочную EMA для определения направления тренда. Она следует за последним самым высоким или самым низким уровнем для остановки потери. Вокруг RMA также есть зона без торговли, чтобы избежать ложных сбоев.

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

  1. Для определения тренда используйте длительный период RMA и короткий период EMA. Короткий EMA, пересекающий длинный RMA, сигнализирует о нисходящем тренде. Пересечение выше сигнализирует о восходящем тренде.

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

  3. Не открывайте позиции, когда цена находится в зоне, чтобы избежать сбоев.

  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

Больше