Estrategia de stop loss con media móvil suavizada


Fecha de creación: 2024-01-31 14:25:29 Última modificación: 2024-01-31 14:25:29
Copiar: 0 Número de Visitas: 656
1
Seguir
1617
Seguidores

Estrategia de stop loss con media móvil suavizada

Descripción general

La estrategia utiliza una media móvil plana y un rango de precios reales promedio para calcular dos precios de parada, abrir posiciones invertidas cuando se rompe el precio de parada, para lograr un stop loss de seguimiento de tendencias. La estrategia es adecuada para el comercio de monedas digitales de alta volatilidad, que puede bloquear efectivamente las ganancias y evitar la expansión de las pérdidas.

Principio de estrategia

  1. Calcula el rango de fluctuación de precios reales promedio de los últimos n ciclos atr y se suaviza con el método RMA
  2. El precio de la parada múltiple es el precio más alto menosatr, el precio de la parada vacía es el precio más bajo másatr
  3. Haga un descuento cuando el precio se rompa hacia arriba de la línea de parada y un descuento cuando se rompa hacia abajo de la línea de parada
  4. La línea de parada se actualiza constantemente a medida que el precio se mueve, lo que permite un seguimiento dinámico

La estrategia determina un rango de pérdida razonable mediante el cálculo de ATR, y luego se combina con el método RMA para suavizar la línea de pérdida y evitar que se produzca una pérdida por una pequeña oscilación de precios. Cuando la tendencia se produce, la estrategia puede identificar rápidamente las señales y establecer posiciones de manera que el precio inverso rompa la línea de pérdida.

Análisis de las ventajas

  1. Suavizar las líneas de parada móvil, filtrar el ruido de manera efectiva y evitar señales falsas
  2. La dinámica de seguimiento de los puntos de parada para bloquear la mayor parte de las ganancias de las tendencias
  3. Los parámetros son estables y adecuados para mantener posiciones en líneas medianas y largas
  4. Las transacciones serán totalmente automáticas y no requerirán intervención humana.

Análisis de riesgos

  1. El stop loss puede ser excesivo y se debe ajustar el ciclo y el multiplicador ATR adecuadamente.
  2. Cuando la tendencia no es clara, puede haber más cierre de posición
  3. Se debe tener en cuenta el establecimiento de condiciones de entrada razonables para evitar la persecución de la caída.

Se puede reducir el margen de pérdida mediante la reducción adecuada del ciclo ATR o la reducción del múltiplo ATR, o agregar otras condiciones de filtración para reducir la apertura innecesaria de posiciones. Tenga en cuenta el control del apalancamiento real y el tamaño de la posición para responder a los cambios bruscos del mercado.

Dirección de optimización

  1. Basado en los parámetros de ATR, se pueden agregar otros indicadores para determinar tendencias
  2. Optimización de la lógica de apertura de la posición, estableciendo condiciones de filtrado de ruptura más estrictas
  3. Aumento de la función de bloqueo móvil
  4. Optimización de la línea de parada combinada con algoritmos de aprendizaje automático

La integración de otros indicadores de osciladores para determinar la dirección de la tendencia y evitar la invalidez de las posiciones en períodos de crisis. Optimización de la lógica de entrada para garantizar que el precio pueda seguir funcionando después de la ruptura de la línea de parada.

Resumir

La estrategia permite controlar el riesgo de manera efectiva mediante el cálculo de una línea de parada de pérdidas de media móvil suave y el seguimiento dinámico de la parada de pérdidas en los mercados de criptomonedas altamente volátiles. Los parámetros de la estrategia son más estables y adecuados para el comercio automatizado. Se puede realizar una optimización multidimensional sobre esta base, combinando más indicadores y algoritmos para mejorar la eficacia.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//
//  作品: [LunaOwl] 超級趨勢2
//
////////////////////////////////
//     ~~!!*(๑╹◡╹๑) **       //
//  製作: @LunaOwl 彭彭       //
//  第1版: 2019年05月29日     //
//  第2版: 2019年06月12日     //
//  微調:  2019年10月26日     //
//  第3版: 2020年02月12日     //
////////////////////////////////
//
//
//超級趨勢的缺點:
//--1.止損距離可能相當大, 請自己調整週期
//--2.市場沒有存在明顯趨勢的時候表現不佳
//
//超級趨勢的優點:
//--1.具有可以參考的移動止損線, 適合新手
//--2.市場存在明顯趨勢的時候表現會很不錯
//
//使用須知:
//--1.每筆交易都需要下移動止損單, 絕對要下
//--2.中途被針掃出場時不要急著再進去
//--3.當錯失機會不要追高追低, 等待下次機會
//--4.實質槓桿比率不要太高, 不要輕忽市場變化
//--5.訂單進出場都建議分成五份、十份區間掛單
//--6.不要妄圖賺到市場上的每一分錢
//
//稍做更新:
//--1.平均真實區間利用了遞迴均線減少雜訊
//--2.針對高波動率的小幣市場,中期順勢策略應該以減少雜訊為重點
//--3.研究國外交易策略後,它們常用平滑因子過濾隨機走勢
//--4.績效上和其它平均法比較並沒有突出,但優點是參數變動穩定性
//--5.我選擇四小時線回測小幣市場,並且選擇經歷過牛熊市的以太坊

//==設定研究==//

//study(title = "[LunaOwl] 超級趨勢2", shorttitle = "[LunaOwl] 超級趨勢2", overlay = true)

//==設定策略==//

strategy(
     title               = "[LunaOwl] 超級趨勢2",
     shorttitle          = "[LunaOwl] 超級趨勢2",
     format              = format.inherit,
     overlay             = true,
     calc_on_order_fills = true,
     calc_on_every_tick  = false,
     pyramiding          =  0,      
     currency            = currency.USD,    
     initial_capital     = 10000,
     slippage            = 10,
     default_qty_value   = 100,
     default_qty_type    = strategy.percent_of_equity,
     commission_value    = 0.1
     )

//==設定參數==//

src = input(close, "數據來源")

length = input(
     title  = "ATR 周期", 
     type   = input.integer,
     minval = 1,
     maxval = 4,
     defval = 1
     )

//可以設定的精度為小數點後三位

mult = input(
     title  = "ATR 乘數", 
     type   = input.float,
     minval = 1.000, 
     maxval = 9.000,
     defval = 2.618,
     step   = 0.001
     )
     
atr = mult * atr(length) 
atr_rma = rma(atr, 14)  //平均真實區間添加遞回均線

//==算法邏輯==//

LongStop      = hl2 - atr_rma
LongStopPrev  = nz(LongStop[1], LongStop)
LongStop     := close[1] > LongStopPrev ? max(LongStop, LongStopPrev) : LongStop
 
ShortStop     = hl2 + atr_rma
ShortStopPrev = nz(ShortStop[1], ShortStop)
ShortStop    := close[1] < ShortStopPrev ? min(ShortStop, ShortStopPrev) : ShortStop

dir  = 1
dir := nz(dir[1], dir)
dir := dir == -1 and close > ShortStopPrev ? 1 :
       dir ==  1 and close < LongStopPrev ? -1 : 
       dir

LongStop_data  = dir == 1 ? LongStop : na
ShortStop_data = dir == 1 ? na : ShortStop

LongMark  = dir ==  1 and dir[1] == -1 ? LongStop : na
ShortMark = dir == -1 and dir[1] == 1 ? ShortStop : na

LongColor  = #0D47A1  //普魯士藍
ShortColor = #B71C1C  //酒紅色

//==設置止損線==//

plot(LongStop_data,
     title     = "移動止損線",
     style     = plot.style_linebr,
     color     = LongColor,
     linewidth = 1
     )
     
plot(ShortStop_data,
     title     = "移動止損線",
     style     = plot.style_linebr,
     color     = ShortColor,
     linewidth = 1 
     )

//==設定K線顏色==//

barcolor(dir == 1 ? LongColor : ShortColor, title = "K線顏色")

//==設定快訊通知==//

alertcondition(LongMark,
     title   = "多頭標記", 
     message = "多頭標記: 行情可能出現潛在變化,請注意個人的對沖或空頭部位,留意風險。")
     
alertcondition(ShortMark,
     title   = "空頭標記", 
     message = "空頭標記: 行情可能出現潛在變化,請注意個人的現貨或多單持倉狀況,留意風險。")

// - 設定日期範圍 - //

test_Year   = input(2017, title = "設定範圍:年", minval = 1, maxval = 2140) 
test_Month  = input(  11, title = "_____月", minval = 1, maxval =   12)
test_Day    = input(  01, title = "_____日", minval = 1, maxval =   31)
test_Period = timestamp( test_Year, test_Month, test_Day, 0, 0)

// - 買賣條件 - //

Long = src > LongStop_data
strategy.entry("多頭進場", strategy.long, when = Long)
strategy.close("多頭出場", when = Long) 

Short = src < ShortStop_data
strategy.entry("空頭進場", strategy.short, when = Short)
strategy.close("空頭回補", when = Short)