Стратегия стоп-лосса и прибыли, основанная на индикаторах

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

img

Обзор

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

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

Основная логика этой стратегии заключается в следующем:

  1. Используйте 3-периодическую SMA в качестве торговых сигналов, займите длинную позицию, когда SMA пересекается выше 0, и займите короткую позицию, когда SMA пересекается ниже 0.

  2. После вступления в торговлю, пользователи могут настроить стоп-лосс и взять коэффициенты прибыли.

  3. На основе входной цены и коэффициента стоп-лосса, установленного пользователем, автоматически устанавливается линия стоп-лосса.

  4. На основе входной цены и соотношения прибыли, установленного пользователем, автоматически устанавливается линия прибыли.

  5. Когда цена достигнет линии остановки, то автоматически прекратится.

  6. После закрытия позиций, автоматически отменить стоп-лосс и принять ордера на прибыль.

В частности, стратегия рассчитывает 3-периодическую SMA с использованием функции sma и присваивает ее переменной ma.

Затем он рассчитывает длину длинной входной линии, которая составляет ma плюс ma% от lo. lo является пользовательским регулируемым параметром для длинного смещения входной линии.

Когда ma превышает 0, это сигнализирует о длинном входе. Стратегия входит в длинный с помощью функции strategy.entry с ценой входа, установленной на длинный.

В то же время устанавливаются цены стоп-лосса и прибыли. Стоп-лосса - это цена входа минус цена входа% sl. sl - параметр коэффициента стоп-лосса, регулируемый пользователем. Цена прибыли - это цена входа плюс цена входа% tp. tp - параметр коэффициента прибыли, регулируемый пользователем.

Функция Strategy.entry устанавливает стоп-лосс и прибыль отдельно. Когда цена касается линии стоп-лосса, она автоматически останавливается. Когда цена касается линии прибыли, она автоматически получает прибыль.

После закрытия позиций ордера на остановку потерь и получение прибыли автоматически отменяются с помощью функции strategy.cancel.

Преимущества

Преимущества этой стратегии:

  1. Высокая степень автоматизации, отсутствие необходимости в ручном вмешательстве, подходит для алгоритмической торговли.

  2. Настраиваемые коэффициенты стоп-лосса и прибыли для контроля риска.

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

  4. Визуализация стоп-лосса и прибыли, интуитивно.

  5. Простая и понятная логика стратегии, легко понятная и реализуемая.

Риски и решения

Эта стратегия также сопряжена с некоторыми рисками:

  1. Риск ложных сигналов от индикатора.

  2. Неправильные параметры стоп-лосса и показателя прибыли могут быть слишком свободными или слишком агрессивными.

  3. Решение заключается в том, чтобы отфильтровать сигналы входа с трендом, объемом и т. Д.

  4. Решение заключается в том, чтобы уменьшить размер позиции или использовать стоп-лосс.

Руководство по оптимизации

Некоторые направления для оптимизации стратегии:

  1. Оптимизировать параметры скользящей средней для надежности.

  2. Оптимизировать условия входа, чтобы избежать ложного прорыва, добавить подтверждение объема и т.д.

  3. Оптимизировать стоп-лосс и получать прибыль, использовать динамический или отслеживающий стоп-лосс и т.д.

  4. Оптимизировать управление рисками, корректировать размер позиций, снизить риск одной сделки.

  5. Оптимизировать время входа, комбинировать с трендом, поддержкой/сопротивлением и т.д.

  6. Добавьте пирамиду для совокупной прибыли.

  7. Оптимизация параметров для конкретных продуктов.

Заключение

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


/*backtest
start: 2023-01-01 00:00:00
end: 2023-11-09 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("example for panel signals", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//https://www.tradingview.com/script/m2a04xmb-noro-s-shiftma-tp-sl-strategy/
//Settings
lo = input(-5.0, title = "Long-line, %")
tp = input(5.0, title = "Take-profit")
sl = input(2.0, title = "Stop-loss")

//SMA
ma = sma(ohlc4, 3)
long = ma + ((ma / 100) * lo)

//Orders
avg = strategy.position_avg_price
if ma > 0
    strategy.entry("Long", strategy.long, limit = long)
    strategy.entry("Take", strategy.short, 0, limit = avg + ((avg / 100) * tp))
    strategy.entry("Stop", strategy.short, 0, stop = avg - ((avg / 100) * sl))
    
//Cancel order
if strategy.position_size == 0
    strategy.cancel("Take")
    strategy.cancel("Stop")

//Lines
plot(long, offset = 1, color = color.black, transp = 0)
take = avg != 0 ? avg + ((avg / 100) * tp) : long + ((long / 100) * tp)
stop = avg != 0 ? avg - ((avg / 100) * sl) : long - ((long / 100) * sl)
takelinecolor = avg == avg[1] and avg != 0 ? color.lime : na
stoplinecolor = avg == avg[1] and avg != 0 ? color.red : na
plot(take, offset = 1, color = takelinecolor, linewidth = 3, transp = 0)
plot(stop, offset = 1, color = stoplinecolor, linewidth = 3, transp = 0)
//
disp_panels = input(true, title="Display info panels?")
h=high
info_label_off = input(20, title="Info panel offset")
info_label_size = input(size.large, options=[size.tiny, size.small, size.normal, size.large, size.huge], title="Info panel label size")
info_panel_x = timenow + round(change(time)*info_label_off)
info_panel_y = h

info_title= "-=-=-=-=- Info Panel -=-=-=-=-"
info_div = "\n\n------------------------------"
a = "\n\ Long : " + tostring(long)
b = "\n\ Stop loss : " + tostring(stop)
c = "\n\ TP : " + tostring(take)
// info_text = a+c+b
// info_panel = disp_panels ? label.new(x=info_panel_x, y=info_panel_y, text=info_text, xloc=xloc.bar_time, yloc=yloc.price, color=color.yellow, style=label.style_labelup, textcolor=color.black, size=info_label_size) : na
// label.delete(info_panel[1])




Больше