Эта стратегия торгует прорывами в течение часа до рынка, используя скользящие средние и индикаторы импульса для определения краткосрочных тенденций к торговле при пиковой волатильности.
Логика стратегии:
Определите предмаркетный диапазон как в течение 1 часа после открытия.
Используйте 50-периодный EMA для оценки справедливого диапазона цен.
СМИ перекресток на низких сигналах - длинный вход.
Закрытие ниже ЭМА - это сигнал стоп-лосса.
Возьмем фиксированную цель прибыли для краткосрочного скальпирования.
Преимущества:
Прорыв краткосрочной ЕМА показывает внутридневный тренд.
СМИ подтверждает снижение.
Ограниченные параметры обратного теста делают прямую торговлю простой.
Риски:
Прорывы склонны к рыночным ловушкам, остерегайтесь переворотов.
Однодневный сеанс Невозможно защититься от пробелов.
Тяжелые остановки склонны к преждевременному выходу, если они плохо калиброваны.
Подводя итог, это типичная стратегия короткого скальпинга до рынка с использованием EMA/SMI для преодоления высокой волатильности.
/*backtest start: 2022-09-12 00:00:00 end: 2023-09-12 00:00:00 period: 4d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] args: [["v_input_7",65]] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Trading_Bites //@version=5 // strategy('Morning Scalp', overlay=false, pyramiding=2, initial_capital=3000, default_qty_value=0, commission_value=0.02, max_labels_count=500) // Initial Inputs StartDate = timestamp('15Aug 2022 14:00 +0000') EndDate = timestamp('15Aug 2022 20:00 +0000') testPeriodStart = input(StartDate, 'Start of trading') testPeriodEnd = input(EndDate, 'End of trading') QuantityOnLong = input(title="Quantity", defval=100, minval=1) QuantityOnClose = QuantityOnLong ////////////////////////////////////////////////////////////////////// //-- Time In Range timeinrange(res, sess) => not na(time(res, sess)) //Market Open// marketopen = '0930-1600' MarketOpen = timeinrange(timeframe.period, marketopen) ////////////////////////////////////////////////////////////////////// //Market Hour// morning = '1000-1210' Morning = timeinrange(timeframe.period, morning) ////////////////////////////////////////////////////////////////////////// //STOCK MOMENTUM INDEX// a = input(5, 'Percent K Length') b = input(3, 'Percent D Length') ovrsld = input.float(40, 'Over Bought') ovrbgt = input(-40, 'Over Sold') //lateleave = input(14, "Number of candles", type=input.integer) // Range Calculation ll = ta.lowest(low, a) hh = ta.highest(high, a) diff = hh - ll rdiff = close - (hh + ll) / 2 // Nested Moving Average for smoother curves avgrel = ta.ema(ta.ema(rdiff, b), b) avgdiff = ta.ema(ta.ema(diff, b), b) // SMI calculations SMI = avgdiff != 0 ? avgrel / (avgdiff / 2) * 100 : 0 SMIsignal = ta.ema(SMI, b) CrossoverIndex = ta.crossover(SMI, SMIsignal) CrossunderIndex = ta.crossunder(SMI, SMIsignal) plot1 = plot(SMI, color=color.new(color.aqua, 0), title='Stochastic Momentum Index', linewidth=1, style=plot.style_line) plot2 = plot(SMIsignal, color=color.new(color.red, 0), title='SMI Signal Line', linewidth=1, style=plot.style_line) hline = plot(ovrsld, color=color.new(color.red, 0), title='Over Bought') lline = plot(ovrbgt, color=color.new(color.green, 0), title='Over Sold') plot(CrossoverIndex ? close : na, color=color.new(color.aqua, 0), style=plot.style_cross, linewidth=2, title='RSICrossover') mycol1 = SMIsignal > -ovrbgt ? color.red : na mycol2 = SMIsignal < -ovrsld ? color.green : na fill(plot1, hline, color=color.new(mycol1, 80)) fill(plot2, lline, color=color.new(mycol2, 80)) ////////////////////////////////////////////////////////////////////// // Input EMA9 and EMA21 EMA50Len = input( 50 ) EMA50 = ta.ema(close, EMA50Len) ////////////////////////////////////////////////////////////////////////// // -------- VWAP ----------// vwapLine = ta.vwap(close) //////////////////////////////////////////////////////////////////////// //PROFIT TARGET// longProfitPer = input(10.0, title='Take Profit %') / 100 TargetPrice = strategy.position_avg_price * (1 + longProfitPer) //plot (strategy.position_size > 0 ? TargetPrice : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Price Target") //BUY STRATEGY CONDITION// condentry = ta.crossover(SMI, SMIsignal) and SMI < 0 profittarget = TargetPrice stoploss = close < EMA50 ///////////////////////////STRATEGY BUILD////////////////////////////////////// if MarketOpen if close > EMA50 if (condentry) and Morning strategy.entry('Long', strategy.long) if profittarget and strategy.position_size > 0 strategy.exit(id="Long", limit=TargetPrice) if stoploss strategy.close('Long' )