
Основная идея этой стратегии заключается в том, чтобы определить время входа в сочетании с прорывами в поддерживающих сопротивлениях и объемах сделок, а также использовать показатели ATR для динамического регулирования цены стоп-лост-трекера после получения прибыли, чтобы получить больше потенциальной прибыли.
Стратегия состоит из следующих частей:
Используйте функции ta.pivothigh и ta.pivotlow, чтобы вычислить наивысшую цену линии L_Bars root K и наименьшую цену линии R_Bars root K, как линию сопротивления и линию поддержки.
Когда цена на закрытии пробивает линию сопротивления и объем сделок превышает порог объемного диапазона, делайте больше; когда цена на закрытии пробивает линию поддержки и объем сделок превышает порог объемного диапазона, делайте пробел.
После покупки, используйте close-ATR_LO в качестве длинной остановки; после покупки, используйте close+ATR_SH в качестве короткой остановки, чтобы реализовать динамическую корректировку отслеживания остановки.
В течение торгового времени ((0915-1445), каждый день делается первый торговый сигнал, прибыль или убыток достигают рискованного размера, после чего не открывается новый ордер.
Используя теорию опорного сопротивления, в сочетании с показателями пропускной способности, время входа в игру становится более точным.
Используя индикатор ATR для отслеживания стоп-лосса, можно гибко корректировать стоп-позиции в зависимости от степени волатильности рынка, чтобы снизить вероятность возврата прибыли после получения прибыли.
Правильный контроль за числом однодневных сделок и рисками отдельных сделок помогает уловить тенденции и избежать чрезмерных потерь.
Поддерживающая резистентность может не сработать и не обеспечить эффективный входный сигнал.
Слишком большие показатели ATR могут привести к слишком большому расстоянию от остановки, увеличивая риск потери.
Слишком маленькие показатели могут привести к упущенным возможностям, слишком большие - к ошибочным сигналам.
Решение проблемы:
Параметры сопротивления поддержки корректируются в зависимости от характеристик разных сортов
Оптимизация ATR-коэффициентов и параметров загрузки
В сочетании с другими показателями для определения времени поступления
В сочетании с другими показателями для определения времени входа в игру, например, с помощью скользящей средней.
Оптимизация параметров ATR-множества и загрузки
Оптимизация динамических параметров в сочетании с алгоритмами машинного обучения
Расширять на другие сорта, чтобы найти закономерности в параметрах
Стратегия объединяет различные аналитические инструменты, используя методы поддержки сопротивления, объема торговли и остановки убытков, чтобы достичь лучших результатов на этапе отсчета. Однако в реальном секторе может возникнуть больше неопределенности, требующей дальнейшего улучшения показателей в реальном секторе путем оптимизации параметров и введения других показателей оценки. В целом, стратегия ясна и понятна, и представляет собой хороший пример для количественной стратегии торговли.
/*backtest
start: 2024-01-03 00:00:00
end: 2024-01-10 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// ____________ _________ _____________
// |____________| ||________| ||__________|
// || ____ || || || ______ ________ _____ ________
// || | || || ||________|| | || || || || | || /\\ | // |______| || || |______|
// || |===|| |=== ||__________ | || || || || |===|| /__\\ |=== || || \\ ||
// || | || ||___ || || |___|| ||___ ||___ || | || / \\ | \\ || || ___|| ||
// || ||________|| ||__________
// || ||________| ||__________|
//@version=5
strategy("SUPPORT RESISTANCE STRATEGY [5MIN TF]",overlay=true )
L_Bars = input.int(defval = 10, minval = 1 , maxval = 50, step =1)
R_Bars = input.int(defval = 15, minval = 1 , maxval = 50, step =1)
volumeRange = input.int(20, title='Volume Break [threshold]', minval = 1)
// ═══════════════════════════ //
// ——————————> INPUT <——————— //
// ═══════════════════════════ //
EMA1 = input.int(title='PRICE CROSS EMA', defval = 150, minval = 10 ,maxval = 400)
factor1 = input.float(title='_ATR LONG',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL LONG")
factor2 = input.float(title='_ATR SHORT',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL SHORT")
risk = input.float(title='RISK',defval = 200 , minval = 1 , maxval = 5000 , step = 50, tooltip = "RISK PER TRADE")
var initialCapital = strategy.equity
t = time(timeframe.period, '0915-1445:1234567')
time_cond = not na(t)
// ══════════════════════════════════ //
// ———————————> EMA DATA <——————————— //
// ══════════════════════════════════ //
ema1 = ta.ema(close, EMA1)
plot(ema1, color=color.new(color.yellow, 0), style=plot.style_linebr, title='ema1')
// ══════════════════════════════════ //
// ————————> TRAIL DATA <———————————— //
// ══════════════════════════════════ //
// *******Calculate LONG TRAIL data*****
ATR_LO = ta.atr(14)*factor1
// *******Calculate SHORT TRAIL data*****
ATR_SH = ta.atr(14)*factor2
long_trail = close - ATR_LO
short_trail = close + ATR_SH
// Plot atr data
//plot(longStop, color=color.new(color.green, 0), style=plot.style_linebr, title='Long Trailing Stop')
//plot(shortStop , color=color.new(color.red, 0), style=plot.style_linebr, title='Short Trailing Stop')
// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //
// ————————————————————————————————————————————————————————> RESISTANCE/SUPPORT LEVELS DATA <————————————————————————————————————————————————————————————————————————————————————————————— //
// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //
Resistance_pi = fixnan(ta.pivothigh(L_Bars, R_Bars)[1])
Support_pi = fixnan(ta.pivotlow(L_Bars, R_Bars)[1])
r1 = plot(Resistance_pi, color=ta.change(Resistance_pi) ? na : color.red, offset=-(R_Bars + 1),linewidth=2, title='RESISTANCE')
s1 = plot(Support_pi, color=ta.change(Support_pi) ? na : color.green, offset=-(R_Bars + 1),linewidth=2, title='SUPPORT')
//Volume
vol_1 = ta.ema(volume, 5)
vol_2 = ta.ema(volume, 10)
osc_vol = 100 * (vol_1 - vol_2) / vol_2
// ══════════════════════════════════//
// ————————> LONG POSITIONS <————————//
// ══════════════════════════════════//
//******barinstate.isconfirmed used to avoid repaint in real time*******
if ( ta.crossover(close, Resistance_pi) and osc_vol > volumeRange and not(open - low > close - open) and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close >= ema1 )
strategy.entry(id= "Long" ,direction = strategy.long, comment = "BUY")
plot(long_trail , color=color.new(color.blue, 0), style=plot.style_linebr, title='long Stop')
if strategy.position_size > 0
strategy.exit("long tsl", "Long" , stop = long_trail ,comment='SELL')
// ═════════════════════════════════════//
// ————————> SHORT POSITIONS <————————— //
// ═════════════════════════════════════//
if ( ta.crossunder(close, Support_pi) and osc_vol > volumeRange and not(open - close < high - open) and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close <= ema1 )
strategy.entry(id = "Short" ,direction = strategy.short, comment = "SELL")
if strategy.position_size < 0
strategy.exit("short tsl", "Short" , stop = short_trail ,comment='BUY')
// ════════════════════════════════════════════════//
// ————————> CLOSE ALL POSITIONS BY 3PM <————————— //
// ════════════════════════════════════════════════//
strategy.close_all(when = hour == 14 and minute == 55)
// ════════════════════════════════════════//
// ————————> MAX INTRADAY LOSS <————————— //
// ════════════════════════════════════════//
// strategy.risk.max_intraday_loss(type = strategy.cash, value = risk)