Стратегия «Золотой крест» пробивает скользящую среднюю полосу Боллинджера


Дата создания: 2023-11-21 12:01:25 Последнее изменение: 2023-11-21 12:01:25
Копировать: 0 Количество просмотров: 820
1
Подписаться
1617
Подписчики

Стратегия «Золотой крест» пробивает скользящую среднюю полосу Боллинджера

Обзор

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

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

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

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

  2. Если цена выше VWAP, считается, что она находится в стадии роста цены, что способствует созданию большего количества позиций;

  3. Если цена только что достигла или прорвала низкую линию Брин, это означает, что цена может быть близка к точке отскока, и у нее есть лучшие шансы;

  4. После входа в многоочередные позиции, цена превышает Брин, который выходит вовремя.

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

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

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

  • Показатель VWAP позволяет определить направление колебаний цены, что позволяет более точно выбрать точку покупки;

  • Показатели Брин-Бенда позволяют определить точку покупки, что делает стратегию более устойчивой, а также устанавливает стоп-стоп для блокировки прибыли.

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

Стратегические риски и решения

  • Система определения золотой форки может выдавать ложные сигналы, а также должна соответственно сокращать продолжительность цикла средней линии и подтверждать другие показатели;

  • Неправильная настройка параметров буринговых поясов также может привести к потере эффективности стратегии, поэтому следует отрегулировать циклы буринговых поясов и параметры стандартной погрешности;

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

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

  • оптимизировать комбинацию равноуровневых форков, тестировать разные параметры равноуровневых и находить оптимальные параметры;

  • тестирование различных периодических параметров Брин-полосы, чтобы найти оптимальную комбинацию параметров для амплитуды и дисперсии;

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

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

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

Исходный код стратегии
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
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/
// © mohanee

//@version=4
strategy(title="VWAP and BB strategy [$$]", overlay=true,pyramiding=2, default_qty_value=1, default_qty_type=strategy.fixed,    initial_capital=10000, currency=currency.USD)


fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 6, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2020, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 8, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
DST = 1 //day light saving for usa
//--- Europe
London = iff(DST==0,"0000-0900","0100-1000")
//--- America
NewYork = iff(DST==0,"0400-1300","0500-1400")
//--- Pacific
Sydney = iff(DST==0,"1300-2200","1400-2300")
//--- Asia
Tokyo = iff(DST==0,"1500-2400","1600-0100")

//-- Time In Range
timeinrange(res, sess) => time(res, sess) != 0

london = timeinrange(timeframe.period, London)
newyork = timeinrange(timeframe.period, NewYork)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = time >= startDate and time <= finishDate 


is_price_dipped_bb(pds,source1) =>
    t_bbDipped=false
    for i=1 to pds
        t_bbDipped:=  (t_bbDipped   or  close[i]<source1) ? true : false
        if t_bbDipped==true
            break
        else
            continue
            
    t_bbDipped


is_bb_per_dipped(pds,bbrSrc) =>
    t_bbDipped=false
    for i=1 to pds
        t_bbDipped:=  (t_bbDipped   or  bbrSrc[i]<=0) ? true : false
        if t_bbDipped==true
            break
        else
            continue
            
    t_bbDipped
    

// variables  BEGIN
shortEMA = input(50, title="fast EMA", minval=1)
longEMA = input(200, title="slow EMA", minval=1)

//BB

smaLength = input(7, title="BB SMA Length", minval=1)
bbsrc = input(close, title="BB Source")

strategyCalcOption = input(title="strategy to use", type=input.string, options=["BB", "BB_percentageB"],      defval="BB")



//addOnDivergence = input(true,title="Add to existing on Divergence")
//exitOption = input(title="exit on RSI or BB", type=input.string, options=["RSI", "BB"],      defval="BB")

//bbSource = input(title="BB  source", type=input.string, options=["close", "vwap"],      defval="close")
     
//vwap_res = input(title="VWAP Resolution", type=input.resolution, defval="session")
stopLoss = input(title="Stop Loss%", defval=1, minval=1)

//variables  END

longEMAval= ema(close, longEMA)
shortEMAval= ema(close, shortEMA)
ema200val = ema(close, 200)


vwapVal=vwap(close)



// Drawings

//plot emas
plot(shortEMAval, color = color.green, linewidth = 1, transp=0)
plot(longEMAval, color = color.orange, linewidth = 1, transp=0)
plot(ema200val, color = color.purple, linewidth = 2, style=plot.style_line ,transp=0)



//bollinger calculation 
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(bbsrc, smaLength)
dev = mult * stdev(bbsrc, smaLength)
upperBand = basis + dev
lowerBand = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)

bbr = (bbsrc - lowerBand)/(upperBand - lowerBand) 
//bollinger calculation 

//plot bb
//plot(basis, "Basis", color=#872323, offset = offset)
p1 = plot(upperBand, "Upper", color=color.teal, offset = offset)
p2 = plot(lowerBand, "Lower", color=color.teal, offset = offset)
fill(p1, p2, title = "Background", color=#198787, transp=95)


plot(vwapVal, color = color.purple, linewidth = 2, transp=0)


// Colour background

//barcolor(shortEMAval>longEMAval and close<=lowerBand ? color.yellow: na)
  

//longCondition=  shortEMAval > longEMAval and  close>open and  close>vwapVal
longCondition=  ( shortEMAval > longEMAval  and close>open and close>vwapVal and close<upperBand ) //and time_cond //     and  close>=vwapVal 



//Entry
strategy.entry(id="long", comment="VB LE" , long=true,  when= longCondition and ( strategyCalcOption=="BB"? is_price_dipped_bb(10,lowerBand) : is_bb_per_dipped(10,bbr)  )   and strategy.position_size<1 )   //is_price_dipped_bb(10,lowerBand))  //and strategy.position_size<1       is_bb_per_dipped(15,bbr) 


//add to the existing position
strategy.entry(id="long", comment="Add" , long=true,  when=strategy.position_size>=1 and close<strategy.position_avg_price and close>vwapVal) //and time_cond)

barcolor(strategy.position_size>=1  ? color.blue: na)



strategy.close(id="long", comment="TP Exit",   when=crossover(close,upperBand) )

//stoploss
stopLossVal =   strategy.position_avg_price * (1-(stopLoss*0.01) )
//strategy.close(id="long", comment="SL Exit",   when= close < stopLossVal)

//strategy.risk.max_intraday_loss(stopLoss, strategy.percent_of_equity)