Отслеживание вчерашней высокой стратегии


Дата создания: 2023-10-08 14:06:55 Последнее изменение: 2023-10-08 14:06:55
Копировать: 0 Количество просмотров: 757
1
Подписаться
1617
Подписчики

Обзор

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

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

  1. Используйте функцию LucF, чтобы избежать обратного отсчета и посмотреть на последнюю K-линию.

  2. Определите, открыт ли новый торговый день. Запишите максимальную цену max_today и минимальную цену min_today.

  3. Сравните текущие максимальные цены high и max_today, обновление max_today。

  4. Сравните текущие минимальные цены low и min_today, обновление min_today。

  5. Нарисуйте максимальную и минимальную цены за предыдущий торговый день.

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

  7. Настройка стоп-лосс соотношения sl и стоп-стоп соотношения tp。

  8. Открыть позицию, когда цена превышает максимум предыдущего торгового дня.

  9. Установите точки остановки и точки остановки.

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

  11. Вы можете выбрать, будет ли EMA закрыта.

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

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

  1. Стратегические сигналы просты, понятны и легко реализуемы.

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

  3. Чувствительность входа в игру можно регулировать с помощью параметров GAP.

  4. Общий риск контролируем, остановка убытков понятна.

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

  6. Это может быть сделано в соответствии с рекомендациями EMA, чтобы избежать попадания в ловушку.

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

В этой стратегии также есть некоторые риски, о которых следует помнить:

  1. Неудачный прорыв может привести к убыткам, поэтому необходимо установить разумную цену стоп-лосса.

  2. Эффективность прорыва зависит от того, насколько рынок находится в состоянии тренда, и легко поддается обману в волатильных рынках.

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

  4. EMA может быть слишком чувствительной или медленной, если параметры выбраны неправильно.

  5. Необходимо обратить внимание и оптимизировать множество переменных, таких как GAP, stop loss amplitude, tracking stop loss settings и т.д.

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

Мы можем продолжить оптимизацию этой стратегии в следующих аспектах:

  1. Применение динамического стоп-стопа от фиксированного до ATR или трендового.

  2. Повышение эффективности прорыва с помощью фильтрации на стандартную погрешность.

  3. Добавление условий, основанных на волатильности, чтобы избежать неэффективного прорыва в шоковой ситуации.

  4. Оптимизация параметров EMA для более стабильного и точного суждения.

  5. Оптимизация параметров для отслеживания стоп-лосс, чтобы они соответствовали масштабам рыночных колебаний.

  6. Тестирование параметров устойчивости различных сортов.

  7. Добавление механизмов для динамического регулирования размеров позиций.

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

Эта стратегия в целом является простой и практичной, она относится к типичной стратегии отслеживания тенденции, прорыв наивысшей цены предыдущего торгового дня используется в качестве сигнала для отслеживания тенденции, контроль риска осуществляется в основном за счет остановки. С помощью разумной оптимизации параметров стратегия может получить лучший эффект в трендовых ситуациях.

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

// This source code is subject to the terms of the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
// © TheSocialCryptoClub

//@version=5

strategy("Yesterday's High", 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)