Вчерашняя высокая тенденция прорыва после стратегии

Автор:Чао Чжан, Дата: 2023-10-08 14:06:55
Тэги:

Обзор

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

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

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

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

  3. Сравните текущий максимум с max_today, обнови max_today, если превышен.

  4. Сравните текущий минимум с 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, стоп-лосс, стоп-остановка и т.д.

Возможности для улучшения

Некоторые способы дальнейшей оптимизации стратегии:

  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)



Больше