Динамическая стратегия стоп-лосса


Дата создания: 2024-01-03 16:15:29 Последнее изменение: 2024-01-03 16:15:29
Копировать: 0 Количество просмотров: 596
1
Подписаться
1617
Подписчики

Динамическая стратегия стоп-лосса

Обзор

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

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

  1. Эта стратегия основана на показателях Стоха, которые генерируют сигналы покупки и продажи, когда линия K Стоха прорывает линию D снизу; сигнал продажи, когда линия K Стоха прорывает линию D снизу.

  2. После входа в рынок, стратегия будет в реальном времени отслеживать новейшие низкие цены на наименьшую цену и новейшие высокие цены на наибольшую цену в качестве динамического стоп-лостара. В частности, для многозаказных, будет отслеживать последние низкие цены на наименьшую цену в качестве стоп-лостара; для фрейдических, будет отслеживать последние высокие цены на наибольшую цену в качестве стоп-лостара.

  3. Когда обнаруживается изменение стоп-стопа, стратегия генерирует измененные стоп-инструкции с помощью функции оповещения, отправляет в MT4/MT5 для корректировки стоп-стопа в реальной сделке в режиме реального времени. При этом графическая маркировка отображает изменения стоп-стопа.

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

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

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

  2. Используя функцию Alert, можно в режиме реального времени отправлять информацию о снятии убытков в MT4/MT5, автоматизировать управление без вмешательства человека.

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

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

  5. В сочетании с оценкой времени по показателю Стоха можно эффективно отфильтровать ложные прорывы и повысить стабильность стратегии.

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

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

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

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

  4. Динамическое отслеживание остановок требует относительно интенсивных корректировок, которые могут привести к увеличению расходов на транзакции.

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

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

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

  3. Различные алгоритмы отслеживания могут быть изучены, чтобы обеспечить эффективность сдерживания убытков при снижении частоты корректировки.

  4. Можно оптимизировать подключение к MT4/MT5, чтобы обеспечить эффективное и своевременное оповещение и уменьшить проблемы с задержкой.

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

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

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

Исходный код стратегии
/*backtest
start: 2022-12-27 00:00:00
end: 2024-01-02 00:00:00
period: 1d
basePeriod: 1h
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/
// © Peter_O

//@version=4
strategy(title="Moving Stop-Loss mechanism", overlay=true)

// This script was created for educational purposes only and it is a spin-off of my previous script:
// https://www.tradingview.com/script/9MJO3AgE-TradingView-Alerts-to-MT4-MT5-dynamic-variables-NON-REPAINTING/
// This spin-off adds very often requested Moving Stop-Loss Mechanism - the logic here moves the stop-loss each time 
// a new pivot is detected.
//
// Last lines of the script include alert() function calls, with a syntax compatible with TradingConnector
// for execution in Forex/indices/commodities/crypto markets via MetaTrader.
// Please note that "tradeid=" variable must be passed with each alert, so that MetaTrader knows which
// trade to modify.

TakeProfitLevel=input(400)

// **** Entries logic, based on Stoch **** {
periodK = 13 //input(13, title="K", minval=1)
periodD = 3 //input(3, title="D", minval=1)
smoothK = 4 //input(4, title="Smooth", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)

GoLong=crossover(k,d) and k<80
GoShort=crossunder(k,d) and k>20
// } End of entries logic

// **** Pivot-points and stop-loss logic **** {
piv_high = pivothigh(high,1,1)
piv_low = pivotlow(low,1,1)
var float stoploss_long=low
var float stoploss_short=high

pl=valuewhen(piv_low,piv_low,0)
ph=valuewhen(piv_high,piv_high,0)

if GoLong 
    stoploss_long := low<pl ? low : pl
if GoShort 
    stoploss_short := high>ph ? high : ph

plot(stoploss_long, color=color.red, title="stoploss_long")
plot(stoploss_short, color=color.lime, title="stoploss_short")

// Stop-Loss Updating mechanism
enable_stoploss_mechanism=input(true, title="Enable Stoploss Modification Mechanism")
UpdateLongStopLoss = strategy.position_size>0 and strategy.position_size[1]>0 and piv_low and pl!=stoploss_long and not GoLong and enable_stoploss_mechanism
UpdateShortStopLoss = strategy.position_size<0 and strategy.position_size[1]<0 and piv_high and ph!=stoploss_short and not GoShort and enable_stoploss_mechanism
if UpdateLongStopLoss
    stoploss_long := pl
if UpdateShortStopLoss
    stoploss_short := ph

plotshape(UpdateLongStopLoss ? stoploss_long[1]-300*syminfo.mintick : na, location=location.absolute, style=shape.labelup, color=color.lime, textcolor=color.white, text="SL\nmove")
plotshape(UpdateShortStopLoss ? stoploss_short[1]+300*syminfo.mintick : na, location=location.absolute, style=shape.labeldown, color=color.red, textcolor=color.black, text="SL\nmove")
// } End of Pivot-points and stop-loss logic

// **** Trade counter **** {
var int trade_id=0
if GoLong or GoShort
    trade_id:=trade_id+1
// } End of Trade counter

strategy.entry("Long", strategy.long, when=GoLong)
strategy.exit("XLong", from_entry="Long", stop=stoploss_long, profit=TakeProfitLevel)
strategy.entry("Short", strategy.short, when=GoShort)
strategy.exit("XShort", from_entry="Short", stop=stoploss_short, profit=TakeProfitLevel)

if GoLong
    alertsyntax_golong='long slprice=' + tostring(stoploss_long) + ' tradeid=' + tostring(trade_id) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_golong, freq=alert.freq_once_per_bar_close)
if GoShort
    alertsyntax_goshort='short slprice=' + tostring(stoploss_short) + ' tradeid=' + tostring(trade_id) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_goshort, freq=alert.freq_once_per_bar_close)
if UpdateLongStopLoss
    alertsyntax_updatelongstoploss='slmod slprice=' + tostring(stoploss_long) + ' tradeid=' + tostring(trade_id)
    alert(message=alertsyntax_updatelongstoploss, freq=alert.freq_once_per_bar_close)
if UpdateShortStopLoss
    alertsyntax_updateshortstoploss='slmod slprice=' + tostring(stoploss_short) + ' tradeid=' + tostring(trade_id)
    alert(message=alertsyntax_updateshortstoploss, freq=alert.freq_once_per_bar_close)