Стратегия торговли на прорыве закрытия дня


Дата создания: 2023-10-09 16:56:21 Последнее изменение: 2023-10-09 16:56:21
Копировать: 0 Количество просмотров: 641
1
Подписаться
1617
Подписчики

Обзор

Эта стратегия - простая внутридневная стратегия, основанная на движущейся средней линии, применяемая для 1-часового временного цикла GBPUSD. Она входит только в Лондон, когда открывается, и выходит из Лондона, когда закрывается, что очень хорошо подходит для торговли с прорывом в течение лондонского времени.

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

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

  1. Только в Лондон во время открытия торгов (в 8 часов) прорыв входит в поле. Судьба заключается в том, что цена закрытия или наивысшая цена может быть сделана больше, если она пробивает быструю среднюю линию, а цена закрытия или наименьшая цена может быть сделана пустой.

  2. В то же время, требуется, чтобы конечная цена предыдущей K-линии была выше средней медленной для того, чтобы сделать больше, и ниже средней медленной для того, чтобы сделать пустоту, чтобы отфильтровать не трендовые ситуации.

  3. Стоп-лост настроен на минимальные значения, только 50-100 баллов.

  4. Не устанавливая стоп-кода, когда Лондон закроется в 15:00, игра будет безоговорочной.

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

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

  1. В этом случае, если вы не хотите, чтобы ваш рынок колебался, вы можете начать играть только в то время, когда тенденция очевидна.

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

  3. С небольшими потерями, они могут выдержать определенный отклик.

  4. “Все, что мы делаем, - это выступаем в защиту нашей страны.

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

Однако эта стратегия также несет в себе некоторые риски:

  1. В то время как в Лондоне не наблюдается четкой тенденции, торговля может длиться долгое время.

  2. Риск остановки, вызванный небольшими потерями. После прорыва может быть определенная степень отскока, вызванная остановкой.

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

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

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

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

  1. Добавление фильтров для других индикаторов, таких как RSI, BRI и т.д., чтобы избежать дальнейшего колебания рынка.

  2. Оптимизируйте мобильные комбинации равномерности, тестируйте равномерность различных параметров.

  3. Испытание различных размеров стоп-точек для определения оптимального диапазона убытков.

  4. В зависимости от конкретной ситуации, время выхода в реальном времени, а не фиксированное время выхода в момент закрытия.

  5. Проверка эффективности других валютных пар и других временных циклов.

  6. Добавление модулей управления рисками, таких как управление капиталом, расчет размера сделки и т. д.

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

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

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

//@version=4

// strategy(title="2 ma breakout",shorttitle="2 ma breakout", initial_capital=10000,overlay=true, commission_type = strategy.commission.cash_per_contract, commission_value = 0.00008 )
timeinrange(res, sess) => time(res, sess) != 0

//Change false to false = You have to turn on, won't show up by default
//****Always use lowercase letters

doNYOpen = input(defval=false, type = input.bool, title="NY Open On")
doNYSession = input(defval=false, type = input.bool, title="NY Session On")
doNYClose = input(defval=false, type = input.bool, title="NY Close On")

doAussieOpen = input(defval=false, type = input.bool, title="Aussie Open On")
doAussieSession = input(defval=false, type = input.bool, title="Aussie Session On")
doAussieClose = input(defval=false, type = input.bool, title="Aussie Close On")

doAsiaOpen = input(defval=false, type = input.bool, title="Asia Open On")
doAsiaSession = input(defval=false, type = input.bool, title="Asia Session On")
doAsiaClose = input(defval=false, type = input.bool, title="Asia Close On")

doEurOpen = input(defval=true, type = input.bool, title="Euro Open On")
doEurSession = input(defval=true, type = input.bool, title="Euro Session On")
doEurClose = input(defval=true, type = input.bool, title="Euro Close On")

//You can copy and paste these colors. white - silver - gray - maroon - red - purple - fuchsia - green - lime
//   olive - yellow - navy - blue - teal - aqua - orange 

nySessionStart = color.olive
nySession = color.olive
nySessionEnd = color.olive
asiaSessionStart = color.blue
asiaSession = color.blue
asiaSessionEnd = color.blue
europeSessionStart = color.red
europeSession = color.red
europeSessionEnd = color.red
colorwhite = color.white

//****Note ---- Use Military Times --- So 3:00PM = 1500


bgcolor(doAsiaSession and timeinrange(timeframe.period, "1800-0400") ? asiaSession : na, transp=75)
//bgcolor(timeinrange(timeframe.period, "0000-0300") ? color.white  : na, transp=75)
bgcolor(doEurSession and timeinrange(timeframe.period, "0300-1100") ? europeSession : na, transp=75)
bgcolor(doNYSession and timeinrange(timeframe.period, "0800-1600") ? nySession : na, transp=75)

active = input(true, title="Show On Chart")
pricehigh = security(syminfo.tickerid, '60', high[0])
pricelow = security(syminfo.tickerid, '60', low[0])
//Daily Plots
offs_daily = 0 
hiHighs = 0
loLows = 0
//plot(timeinrange(timeframe.period, "0000-0300") and pricehigh ? pricehigh  : na, title="Previous Daily High", style=plot.style_line, linewidth=2, color=color.gray)
//plot(timeinrange(timeframe.period, "0000-0300") and pricelow ? pricelow : na, title="Previous Daily Low", style=plot.style_linebr, linewidth=2, color=color.gray)

if(timeinrange(timeframe.period, "0000-0300"))
    hiHighs = highest(high, 3)
    loLows = lowest(low, 3)
    

// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2020, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true


len = input(2)
src = input(close, title="Source")
out = sma(src, len)

lena = input(200, minval=1, title="Length slow")
srca = input(close, title="Source")
outa = ema(srca, lena)

//tp = input(100, title="tp")
sl = input(66, title="sl")
// if(smabool)
//     out := sma(src, len)
// else if(emabool)
//     out := ema(src, len)
// else if(hmabool)
//     out := hma(src, len)
// else if(vmabool)
//     out := wma(src, len)  
// else if(vwmabool)
//     out := vwma(src, len)   
// else if(smmabool)
//     out := sma(src, len)  
 
plot(out, color=color.white, title="MA")
plot(outa, color=color.white, title="MA")

longC = timeinrange(timeframe.period, "0300-0400") and (crossover(close,out) or crossover(high,out)) and close[1] > outa and time_cond
shortC = timeinrange(timeframe.period, "0300-0400") and (crossunder(close,out) or crossunder(low,out)) and close[1] < outa and time_cond



//inputlondon = input(false, title="london session")
//inputny = input(false, title="new york session")

//if(inputlondon==true)

strategy.initial_capital = 50000

//MONEY MANAGEMENT--------------------------------------------------------------
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
risk = input(1,type=input.float,title="Risk % of equity ")/100           //risk % per trade

temp01 = balance * risk     //Risk in USD
temp02 = temp01/sl        //Risk in lots
temp03 = temp02*100      //Convert to contracts
size = temp03 - temp03%1 //Normalize to 1000s (Trade size)
if(size < 1)
    size := 1         //Set min. lot size


strategy.entry("long",1,when=longC)
//strategy.close("long", when = crossunder(close,out) or not (timeinrange(timeframe.period, "0300-1000")))
strategy.close("long", when =  not (timeinrange(timeframe.period, "0300-0945")))
strategy.exit("x_long","long", loss = sl)
     
    
strategy.entry("short",0,when=shortC)
//strategy.close("short",when = crossover(close,out) or not (timeinrange(timeframe.period, "0300-1000")))
strategy.close("short",when = not (timeinrange(timeframe.period, "0300-0945")))

strategy.exit("x_short","short", loss = sl)

//strategy.exit("closelong", "RSI_BB_LONG" , profit = close * 0.01 / syminfo.mintick, loss = close * 0.01 / syminfo.mintick, alert_message = "closelong")
//strategy.exit("closeshort", "RSI_BB_SHORT" , profit = close * 0.01 / syminfo.mintick, loss = close * 0.01 / syminfo.mintick, alert_message = "closeshort")