Стратегия торговли на день выхода

Автор:Чао Чжан, Дата: 2023-10-09 16:56:21
Тэги:

Обзор

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

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

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

  1. Входите только на лондонском открытом (8AM), когда цена превышает быстрый MA. Пройдите длинный, если закрытие или высокий перерыв выше быстрой MA, короткий, если закрытие или низкий перерыв ниже быстрой MA.

  2. Требовать, чтобы предыдущие бар закрывались выше медленного MA для длинного, ниже медленного MA для короткого, чтобы отфильтровать движения, не являющиеся трендом.

  3. Используйте очень небольшую стоп-лосс от 50 до 100 пунктов.

  4. Нет прибыли, выходит безоговорочно на лондонском закрытии (15:00).

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

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

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

  2. Торговля происходит только в период высокой волатильности в Лондоне.

  3. Небольшая стоп-лосс может выдержать некоторое отступление.

  4. Безусловный выход позволяет избежать рисков за одну ночь.

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

Стратегия также сопряжена с некоторыми рисками:

  1. Может оставаться на месте в течение длительных периодов, когда в Лондоне нет четкой тенденции.

  2. Риск остановки потерь, связанный с остановкой на ретреке.

  3. Риски раннего выхода, когда сильные тенденции требуют длительных периодов хранения.

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

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

Стратегия может быть улучшена в нескольких областях:

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

  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")



Больше