
Динамическая стоп-стратегия - это количественная торговая стратегия, использующая механизм стоп-слежения. Эта стратегия основана на теории слежения за тенденцией, настройке стоп-линий, установке стоп-оценки и отслеживании стоп-корректировки.
В основе стратегии динамического отслеживания стоп-лосса лежит установка трех ключевых параметров: первоначального стоп-дистанции, отслеживания стоп-дистанции и отслеживания стоп-дистанции. После того, как сигнал покупки был задействован, первоначальная стоп-дистанция была рассчитана на основе цены покупки и установленного первоначального стоп-дистанции.
Стратегия одновременно предусматривает низкий стоп, независимо от того, запускается ли стоп-слежение, и если цена упадет ниже стоп-слежения, она будет непосредственно прекращена. Низкий стоп-слежение используется для предотвращения неожиданных событий. Поэтому стратегия динамического стоп-слежения позволяет автоматически отслеживать выгодные движения, предотвращая при этом чрезмерные потери.
Не допускайте переполнения с помощью отслеживания стоп-лосса и блокирования прибыли.
Использование двойной структуры сверху и вниз, чтобы гарантировать своевременное отслеживание и предотвращение чрезмерных потерь.
Применение механизма постоянного суждения для коррекции убытков, простая в использовании и легко реализуемая.
Параметры могут быть скорректированы в соответствии с рыночными и индивидуальными характеристиками акций для оптимизации эффекта остановки убытков.
Не нужно предсказывать, куда движется рынок, можно следовать тенденциям.
Неправильная параметровая настройка может привести к тому, что стоп будет слишком мягким или слишком жестким. Слишком мягкий не может эффективно остановить убыток, а слишком жесткий может быть подвержен обычным колебаниям цены.
Внезапные события могут привести к падению цены, что может привести к потере эффективности остановки, что должно сочетаться с другими мерами защиты.
Торговые сборы и скольжение могут повлиять на фактическую цену продажи после возникновения стоп-линии.
Не очень адаптирована и не очень эффективна в определенные периоды, например, в период землетрясения.
Ответ:
Для лучшего отслеживания изменения цен на акции в разных ценовых уровнях можно скорректировать отслеживание стоп-линий на процентные изменения.
Добавить показатель волатильности, чтобы приостановить отслеживание стоп-убытков при значительных волатильностях и избежать обычных волатильностей, которые вызывают стоп-убытки.
Автоматическая оптимизация параметров с использованием методов машинного обучения. Образец обучения выбирает доходность комбинации параметров за последнее время.
Повышение оценки условий для открытия позиций в сочетании с трендами, показателями поддержки и сопротивления, чтобы избежать открытия позиций в шокирующем состоянии.
Стратегия динамического отслеживания стоп-убытков использует двухлинейный механизм стоп-убытков, устанавливает линию отслеживания стоп-убытков, обеспечивает подтверждение стоп-убытков и отслеживание стоп-убытков. Стоп-убыток может быть автоматически скорректирован в зависимости от изменения цены для блокирования прибыли, снижения возврата и контроля потерь.
/*backtest
start: 2023-11-28 00:00:00
end: 2023-12-17 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/
// © Thumpyr
//@version=5
/////////////////////////////////////////////////////////////////////////////////////////////
// Comment out Strategy Line and remove // from Indicator line to turn into Indicator //////
// Do same for alertConidction at bottom //////
/////////////////////////////////////////////////////////////////////////////////////////////
strategy("PCT Trailing Stoploss-Strategy", shorttitle="PCT Trailing Stoploss- Strategy", overlay=true)
//indicator(title="PCT Trailing Stoploss- Indicator", shorttitle="PCT Trailing Stoploss - Indicator", timeframe="", timeframe_gaps=true, overlay=true)//
sellLow=input.float(.035, minval=0, title="Stop Loss Loss: 1% = .01", group="Sell Settings")
trailStopArm=input.float(.0065, minval=0, title="Trailing Stop Arm: 1%=.01", group="Sell Settings")
trailStopPct=input.float(.003, minval=0, title="Trailing Stop Trigger: 1%=.01 ", group="Sell Settings")
/////////////////////////////////////////////////
// Indicators //
/////////////////////////////////////////////////
ema1Len = input.int(14, minval=1, title=" ema 1 Length", group="Trend Line Settings")
ema1Src = input(close, title="ema 1 Source", group="Trend Line Settings")
ema1 = ta.ema(ema1Src, ema1Len)
plot(ema1, title="EMA", color=color.blue)
ema2Len = input.int(22, minval=1, title=" ema 2 Length", group="Trend Line Settings")
ema2Src = input(close, title="ema 2 Source", group="Trend Line Settings")
ema2 = ta.ema(ema2Src, ema2Len)
plot(ema2, title="EMA", color=color.orange)
ema3Len = input.int(200, minval=1, title=" ema 3 Length", group="Trend Line Settings")
ema3Src = input(close, title="ema 2 Source", group="Trend Line Settings")
ema3 = ta.ema(ema3Src, ema3Len)
plot(ema3, title="EMA", color=color.gray)
/////////////////////////////
//// Buy Conditions ////
/////////////////////////////
alertBuy = ta.crossover(ema1,ema2) and close>ema3
////////////////////////////////////////////////////////////////////
//// Filter redundant Buy Signals if Sell has not happened ////
////////////////////////////////////////////////////////////////////
var lastsignal = 0
showAlertBuy = 0
if(alertBuy and lastsignal !=1)
showAlertBuy := 1
lastsignal := 1
buyAlert= showAlertBuy > 0
//////////////////////////////////////////////////////////////////
//// Track Conditions at buy Signal ////
//////////////////////////////////////////////////////////////////
alertBuyValue = ta.valuewhen(buyAlert, close,0)
alertSellValueLow = alertBuyValue - (alertBuyValue*sellLow)
////////////////////////////////////////////////////////////
///// Trailing Stop /////
////////////////////////////////////////////////////////////
var TSLActive=0 //Check to see if TSL has been activated
var TSLTriggerValue=0.0 //Initial and climbing value of TSL
var TSLStop = 0.0 //Sell Trigger
var TSLRunning =0 //Continuously check each bar to raise TSL or not
// Check if a Buy has been triggered and set initial value for TSL //
if buyAlert
TSLTriggerValue := alertBuyValue+(alertBuyValue*trailStopArm)
TSLActive := 0
TSLRunning :=1
TSLStop := TSLTriggerValue - (TSLTriggerValue*trailStopPct)
// Check that Buy has triggered and if Close has reached initial TSL//
// Keeps from setting Sell Signal before TSL has been armed w/TSLActive//
beginTrail=TSLRunning==1 and TSLActive==0 and close>alertBuyValue+(alertBuyValue*trailStopArm) and ta.crossover(close,TSLTriggerValue)
if beginTrail
TSLTriggerValue :=close
TSLActive :=1
TSLStop :=TSLTriggerValue - (TSLTriggerValue*trailStopPct)
// Continuously check if TSL needs to increase and set new value //
runTrail= TSLActive==1 and (ta.crossover(close,TSLTriggerValue) or close>=TSLTriggerValue)
if runTrail
TSLTriggerValue :=close
TSLStop :=TSLTriggerValue - (TSLTriggerValue*trailStopPct)
// Verify that TSL is active and trigger when close cross below TSL Stop//
TSL=TSLActive==1 and (ta.crossunder(close,TSLStop) or (close[1]>TSLStop and close<TSLStop))
// Plot point of inital arming of TSL//
TSLTrigger=TSLActive==1 and TSLActive[1]==0
plotshape(TSLTrigger, title='TSL Armed', location=location.abovebar, color=color.new(color.blue, 0), size=size.small, style=shape.cross, text='TSL Armed')
////////////////////////////////////////////////////////////
// Plots used for troubleshooting and verification of TSL //
////////////////////////////////////////////////////////////
//plot(TSLActive,"Trailing Stop", color=#f48fb1)
//plot(TSLRunning,"Trailing Stop", color=#f48fb1)
//plot(TSLTriggerValue,"Trailing Stop Trigger", color.new(color=#ec407a, transp = TSLRunning==1 ? 0 : 100))
//plot(TSLStop,"Trailing Stop", color.new(color=#f48fb1, transp = TSLRunning==1 ? 0 : 100))//
////////////////////////////////////////////////////////////
///// Sell Conditions ///////
////////////////////////////////////////////////////////////
Sell1 = TSL
Sell2 = ta.crossunder(close,alertSellValueLow)
alertSell= Sell1 or Sell2
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
//// Remove Redundant Signals ////
////////////////////////////////////////////////////////////
showAlertSell = 0
if(alertSell and lastsignal != -1)
showAlertSell := 1
lastsignal := -1
sellAlert= showAlertSell > 0
if sellAlert
TSLActive :=0
TSLRunning :=0
/////////////////////////////////////////
// Plot Buy and Sell Shapes on Chart //
/////////////////////////////////////////
plotshape(buyAlert, title='Buy', location=location.belowbar, color=color.new(color.green, 0), size=size.small, style=shape.triangleup, text='Buy')
plotshape(sellAlert, title='Sell', location=location.abovebar, color=color.new(color.red, 0), size=size.small, style=shape.triangledown, text='Sell')
/////////////////////////////////////////////////////////////////////////////////////////////
// Remove // to setup for Indicator //
/////////////////////////////////////////////////////////////////////////////////////////////
//Alerts
//alertcondition(title='Buy Alert', condition=buyAlert, message='Buy Conditions are Met')
//alertcondition(title='Sell Alert', condition=sellAlert, message='Sell Conditions are Met')
/////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
//// Comment out this section if setup as Indicator ////
////////////////////////////////////////////////////////////
longCondition = buyAlert
if (longCondition)
strategy.entry("Buy", strategy.long)
alert(message='Buy', freq=alert.freq_once_per_bar_close)
shortCondition = sellAlert
if (shortCondition)
strategy.close_all(sellAlert,"Sell")
alert(message='Sell', freq=alert.freq_once_per_bar_close)
/////////////////////////////////////////////////////////////