Стратегия Yesterday's High Breakout - это система, следующая за трендом, которая длится долго, когда цена превышает вчерашний максимум, даже если прорыв происходит несколько раз в день.
Стратегия использует несколько технических показателей для сигналов входа и выхода:
ROC Filter - Стратегия активируется только тогда, когда сегодняшний закрытие имеет изменение цены в процентах выше порога по сравнению с предыдущим закрытием дня.
Точка триггера - сегодняшний рекорд высоких, низких и открытых цен. Длинный вход запускается, когда цена превышает сегодняшний рекорд.
Условия входа и выхода - После входа устанавливаются процентные ставки стоп-лосса и прибыли. Последующая остановка может быть включена для блокировки прибыли. Условный выход, когда цена падает ниже эталонной EMA.
Конфигурация - Процент разрыва для прогнозирования или задержки входа.
Конкретно, он отслеживает сегодняшнюю высокую цену для входного сигнала. Длинный вход, когда цена превышает сегодняшний максимум. Затем устанавливаются стоп-лосс и выходы с прибылью, с включенной последующей остановкой. Альтернативный выход, когда цена пересекает ниже данной EMA. Оптимизация путем установки процента разрыва, корректировки коэффициента стоп-лосса и выхода с прибылью для контроля риска, позволяя последующей остановке блокировать прибыль.
Преимущества этой стратегии:
Следуя тренду, вы получаете прибыль от движений тренда.
Стратегия прорыва дает четкие сигналы входа.
Учитывая сегодняшнюю высокую цену, избегайте последовательных записей.
Стоп-потеря и получение прибыли помогает контролировать риск.
Задержка задержки в прибыли.
Время входа может быть настроено с оптимизацией параметров для контроля риска.
Просто и интуитивно понятно, легко понять и реализовать.
Применяется для длинных и коротких сделок.
Риски, которые следует учитывать:
Стратегии выхода подвержены ударам, цена может сразу же измениться после входа.
Эффективен только для рынков с тенденциями, неэффективен в условиях диапазона.
Необходим разумный процент стоп-лосса, слишком широкий может увеличить потерю.
Необходим разумный процент разрыва, слишком агрессивный может увеличить убытки.
Фальшивый прорыв может вызвать ненужные потери, требуется настройка.
Объем должен поддерживать после прорыва.
Необходимая согласованность между параметрами в разные периоды времени.
Возможные оптимизации:
Добавьте другие показатели, такие как объем, волатильность, чтобы избежать колебаний на рынках.
Добавьте индикаторы соответствия кривой для определения силы тренда, избегайте ложных тенденций.
Динамическая оптимизация пробела вхождения на основе волатильности рынка.
Динамическая оптимизация стоп-лосса и получения прибыли в соответствии с рыночными условиями.
Различные наборы параметров для различных символов и временных рамок.
Машинное обучение влияет на эффективность стратегии.
Добавить функцию Options для оптимизации конфигурации.
Применимость исследований при различных рыночных условиях.
Расширяться на межвременные и многоактивные стратегии.
Стратегия предлагает приличную производительность на трендовых рынках на основе прорыва вчерашней высокой концепции. Но существуют риски сложностей с оптимальной оптимизацией параметров. Дальнейшие оптимизации возможны путем добавления суждений, динамической настройки параметров, расширения на комбинированные стратегии и т. Д. В целом она подходит для краткосрочного тренда, но необходим контроль риска и настройка параметров.
/*backtest start: 2023-10-06 00:00:00 end: 2023-11-05 00:00:00 period: 1h basePeriod: 15m 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/ // Author: © tumiza 999 // © TheSocialCryptoClub //@version=5 strategy("Yesterday's High v.17.07", overlay=true, pyramiding = 1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, slippage=1, backtest_fill_limits_assumption=1, use_bar_magnifier=true, commission_type=strategy.commission.percent, commission_value=0.075 ) // ----------------------------------------------------------------------------- // ROC Filter // ----------------------------------------------------------------------------- // f_security function by LucF for PineCoders available here: https://www.tradingview.com/script/cyPWY96u-How-to-avoid-repainting-when-using-security-PineCoders-FAQ/ f_security(_sym, _res, _src, _rep) => request.security(_sym, _res, _src[not _rep and barstate.isrealtime ? 1 : 0])[_rep or barstate.isrealtime ? 0 : 1] high_daily = f_security(syminfo.tickerid, "D", high, false) roc_enable = input.bool(false, "", group="ROC Filter from CloseD", inline="roc") roc_threshold = input.float(1, "Treshold", step=0.5, group="ROC Filter from CloseD", inline="roc") closed = f_security(syminfo.tickerid,"1D",close, false) roc_filter= roc_enable ? (close-closed)/closed*100 > roc_threshold : true // ----------------------------------------------------------------------------- // Trigger Point // ----------------------------------------------------------------------------- open_session = ta.change(time('D')) price_session = ta.valuewhen(open_session, open, 0) tf_session = timeframe.multiplier <= 60 bgcolor(open_session and tf_session ?color.new(color.blue,80):na, title = "Session") first_bar = 0 if open_session first_bar := bar_index var max_today = 0.0 var min_today = 0.0 var high_daily1 = 0.0 var low_daily1 = 0.0 var today_open = 0.0 if first_bar high_daily1 := max_today low_daily1 := min_today today_open := open max_today := high min_today := low if high >= max_today max_today := high if low < min_today min_today := low same_day = today_open == today_open[1] plot( timeframe.multiplier <= 240 and same_day ? high_daily1 : na, color= color.yellow , style=plot.style_linebr, linewidth=1, title='High line') plot( timeframe.multiplier <= 240 and same_day ? low_daily1 : na, color= #E8000D , style=plot.style_linebr, linewidth=1, title='Low line') // ----------------------------------------------------------------------------- // Strategy settings // ----------------------------------------------------------------------------- Gap = input.float(1,"Gap%", step=0.5, tooltip="Gap di entrata su entry_price -n anticipa entrata, con +n posticipa entrata", group = "Entry") Gap2 = (high_daily1 * Gap)/100 sl = input.float(3, "Stop-loss", step= 0.5, group = "Entry") tp = input.float(9, "Take-profit", step= 0.5, group = "Entry") stop_loss_price = strategy.position_avg_price * (1-sl/100) take_price = strategy.position_avg_price * (1+tp/100) sl_trl = input.float(2, "Trailing-stop", step = 0.5, tooltip = "Attiva trailing stop dopo che ha raggiunto...",group = "Trailing Stop Settings")//group = "Trailing Stop Settings") Atrl= input.float(1, "Offset Trailing", step=0.5,tooltip = "Distanza dal prezzo", group = "Trailing Stop Settings") stop_trl_price_cond = sl_trl * high/syminfo.mintick/100 stop_trl_price_offset_cond = Atrl * high/syminfo.mintick/100 stop_tick = sl * high/syminfo.mintick/100 profit_tick = tp * high/syminfo.mintick/100 mess_buy = "buy" mess_sell = "sell" // ----------------------------------------------------------------------------- // Entry - Exit - Close // ----------------------------------------------------------------------------- if close < high_daily1 and roc_filter strategy.entry("Entry", strategy.long, stop = high_daily1 + (Gap2), alert_message = mess_buy) ts_n = input.bool(true, "Trailing-stop", tooltip = "Attiva o disattiva trailing-stop", group = "Trailing Stop Settings") close_ema = input.bool(false, "Close EMA", tooltip = "Attiva o disattiva chiusura su EMA", group = "Trailing Stop Settings") len1 = input.int(10, "EMA length", step=1, group = "Trailing Stop Settings") ma1 = ta.ema(close, len1) plot(ma1, title='EMA', color=color.new(color.yellow, 0)) if ts_n == true strategy.exit("Trailing-Stop","Entry",loss= stop_tick, stop= stop_loss_price, limit= take_price, trail_points = stop_trl_price_cond, trail_offset = stop_trl_price_offset_cond, comment_loss="Stop-Loss!!",comment_profit ="CASH!!", comment_trailing = "TRL-Stop!!", alert_message = mess_sell) else strategy.exit("TP-SL", "Entry",loss= stop_tick, stop=stop_loss_price, limit= take_price, comment_loss= "Stop-loss!!!", comment_profit = "CASH!!", alert_message = mess_sell) if close_ema == true and ta.crossunder(close,ma1) strategy.close("Entry",comment = "Close" , alert_message = mess_sell)