Myo_LS_D Estrategia cuantitativa

El autor:¿ Qué pasa?, Fecha: 2024-01-15 14:56:03
Las etiquetas:

img

Resumen general

La estrategia cuantitativa Myo_LS_D es una estrategia de stop-profit de seguimiento de doble vía basada en posiciones largas y cortas. La estrategia combina múltiples indicadores como promedios móviles, avances de precios y relaciones riesgo-rendimiento para construir señales comerciales.

Principio

La estrategia consiste principalmente en un módulo de juicio de tendencia, un módulo de posición larga, un módulo de posición corta, un módulo de seguimiento de stop profit, etc.

  1. El módulo de juicio de tendencia utiliza el canal Donchain para determinar la dirección general de la tendencia.

  2. El módulo de posición larga tiene en cuenta factores tales como nuevos máximos, mínimos, posiciones de media móvil larga, etc. El módulo de posición corta tiene en cuenta nuevos máximos, mínimos, posiciones de media móvil corta y otros factores.

  3. El módulo de seguimiento de stop profit utiliza dos promedios móviles SMA de diferentes ciclos para rastrear los cambios de precios en tiempo real. Cuando el precio rompe la línea de promedio móvil, la posición se cierra para obtener ganancias. Este tipo de seguimiento en tiempo real puede maximizar las ganancias de la tendencia.

  4. La configuración de stop loss considera la stop loss ampliada para mantener el punto de stop loss lejos del nivel de soporte para evitar ser eliminado.

Análisis de ventajas

La mayor ventaja de esta estrategia es la construcción y seguimiento separados de posiciones largas y cortas y la estrategia de stop profit.

  1. Las posiciones largas y cortas separadas pueden maximizar las oportunidades de ganancia al capturar oportunidades de negociación de tendencia unilateral.

  2. El seguimiento del stop profit puede obtener un mayor margen de ganancia a través del ajuste en tiempo real.

  3. Las paradas ampliadas pueden reducir la probabilidad de ser noqueado y reducir el riesgo de pérdidas.

Riesgo y soluciones

Los principales riesgos de esta estrategia se concentran en los siguientes puntos:

  1. La optimización puede lograrse ajustando adecuadamente los parámetros de Donchain o agregando otros indicadores para el juicio.

  2. El seguimiento del stop profit es demasiado agresivo y puede detener prematuramente la ganancia sin poder sostener las ganancias.

  3. El rango de stop loss es demasiado pequeño, lo que puede aumentar la probabilidad de ser eliminado.

Direcciones de optimización

Las principales direcciones de optimización para esta estrategia son:

  1. Optimice el módulo de juicio de tendencia para mejorar la precisión del juicio. Considere combinar más indicadores como el MACD.

  2. Ajustar el método de seguimiento de stop profit para ampliar aún más el espacio de ganancias, por ejemplo, mover las líneas de stop profit en proporción.

  3. Ampliar el rango de pérdida de parada o considerar paradas de contracción puede reducir aún más la probabilidad de ser eliminado.

  4. Las diferentes variedades tienen diferentes parámetros. Las combinaciones óptimas de parámetros se pueden obtener a través de la capacitación para mejorar aún más los rendimientos de la estrategia.

Resumen de las actividades

En general, la estrategia Myo_LS_D es una estrategia cuantitativa de stop-profit de seguimiento dual relativamente madura y estable. Tiene ventajas obvias y riesgos controlables. Es una de las soluciones cuantitativas que vale la pena mantener a largo plazo. Las optimizaciones futuras pueden permitir una mejora continua del rendimiento para convertirla en una estrategia cuantitativa aún más superior.


/*backtest
start: 2023-12-15 00:00:00
end: 2024-01-14 00:00:00
period: 4h
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/
// © agresiynin

//@version=5
// ©Myo_Pionex
strategy(
 title                  =   "Myo_simple strategy_LS_D",
 shorttitle             =   "Myo_LS_D",
 overlay                =   true )


// var
lowest_price = ta.lowest(low, 200)
highest_price = ta.highest(high, 200)
min_800 = ta.lowest(low, 800)
max_800 = ta.highest(high, 800)
tp_target_L = min_800 + (max_800 - min_800) * math.rphi
tp_target_S = max_800 - (max_800 - min_800) * math.rphi
sl_length_L = input.int(100, "做多的止損長度", minval = 50, maxval = 300, step = 50)
sl_length_S = input.int(100, "做空的止損長度", minval = 50, maxval = 300, step = 50)
sl_L = lowest_price * (1 - 0.005)
sl_S = highest_price * (1 + 0.005)
rrr_L = tp_target_L - sl_L / sl_L
rrr_S = ta.lowest(low, 800) + ta.highest(high, 800) - ta.lowest(low, 800) * math.rphi / ta.highest(high, 200) + 0.005 * ta.highest(high, 200) - ta.lowest(low, 200) - 0.005 * ta.lowest(low, 200)
smalen1 = input.int(10, "做多追蹤止盈SMA長度1", options = [5, 10, 20, 40, 60, 80])
smalen2 = input.int(20, "做多追蹤止盈SMA長度2", options = [5, 10, 20, 40, 60, 80])
smalen1_S = input.int(5, "做空追蹤止盈SMA長度1", options = [5, 10, 20, 40, 60, 80])
smalen2_S = input.int(10, "做空追蹤止盈SMA長度2", options = [5, 10, 20, 40, 60, 80])
TrendLength_L = input.int(400, "做多趨勢線", options = [100, 200, 300, 400, 500])
TrendLength_S = input.int(300, "做空趨勢線", options = [100, 200, 300, 400, 500])
SMA1 = ta.sma(close, smalen1)
SMA2 = ta.sma(close, smalen2)
SMA1_S = ta.sma(close, smalen1_S)
SMA2_S = ta.sma(close, smalen2_S)
shortlength = input.int(20, "短期均價K線數量")
midlength = input.int(60, "中期均價K線數量")
longlength = input.int(120, "長期均價K線數量")
ShortAvg = math.sum(close, shortlength)/shortlength
MidAvg = math.sum(close, midlength)/midlength
LongAvg = math.sum(close, longlength)/longlength

// Trend
basePeriods = input.int(8, minval=1, title="趨勢基準線")
basePeriods_Short = input.int(26, "做空基準線")
donchian(len) => math.avg(ta.lowest(len), ta.highest(len))
baseLine = donchian(basePeriods)
baseLine_Short = donchian(basePeriods_Short)
trend = request.security(syminfo.tickerid, "D", baseLine)
isUptrend = false
isDowntrend = false
baseLine_D = request.security(syminfo.tickerid, "D", baseLine)
plot(baseLine_D, color=#B71C1C, title="趨勢基準線")
if close[0] > baseLine_D
    isUptrend := true
if close[0] < baseLine_Short
    isDowntrend := true
// Long
// Condition
// entry
con_a = low > lowest_price ? 1 : 0
con_b = high > highest_price ? 1 : 0
con_c = close[0] > ta.sma(close, TrendLength_L) ? 1 : 0
con_d = isUptrend ? 1 : 0
con_e = rrr_L > 3 ? 1 : 0
con_a1 = close[0] > ShortAvg[shortlength] ? 1 : 0
con_b1 = close[0] > MidAvg[midlength] ? 1 : 0

// close
con_f = ta.crossunder(close, SMA1) and ta.crossunder(close, SMA2) ? 1 : 0
con_g = close < ta.lowest(low, sl_length_L)[1] * (1 - 0.005) ? 1 : 0

// exit
con_h = tp_target_L

// Main calculation
LongOpen = false
AddPosition_L = false

if con_a + con_b + con_c + con_e + con_a1 + con_b1 >= 4 and con_d >= 1
    LongOpen := true
// Short
// Condition
// entry
con_1 = high < highest_price ? 1 : 0
con_2 = low < lowest_price ? 1 : 0
con_3 = close[0] < ta.sma(close, TrendLength_S) ? 1 : 0
con_4 = isDowntrend ? 1 : 0
con_5 = rrr_S > 3 ? 1 : 0
con_11 = close[0] < ShortAvg[shortlength] ? 1 : 0
con_12 = close[0] < MidAvg[midlength] ? 1 : 0

// close
con_6 = ta.crossover(close, SMA1_S) and ta.crossover(close, SMA2_S) ? 1 : 0
con_7 = close > ta.highest(high, sl_length_S)[1] * (1 + 0.005) ? 1 : 0

// exit
con_8 = tp_target_S

// Main calculation
ShortOpen = false
AddPosition_S = false

if con_1 + con_2 + con_3 + con_4 + con_5 + con_11 + con_12 >= 5
    ShortOpen := true

//
// execute
//
strategy.initial_capital = 50000
if strategy.position_size == 0
    if LongOpen
        strategy.entry("Long Open" , strategy.long , comment= "Long Open " + str.tostring(close[0]), qty=strategy.initial_capital/close[0])

if strategy.position_size > 0
    if (con_f > 0 or con_g > 0 or ShortOpen) and close <= baseLine_D
        strategy.close_all(comment="Close Long " + str.tostring(close[0]))

if strategy.position_size == 0
    if ShortOpen
        strategy.entry("Short Open" , strategy.short , comment= "Short Open " + str.tostring(close[0]), qty=strategy.initial_capital/close[0])

if strategy.position_size < 0
    if (con_6 > 0 or con_7 > 0 or LongOpen) and close >= baseLine_D
        strategy.close_all(comment="Close Short " + str.tostring(close[0]))


plot(ta.sma(close, TrendLength_L), color=#e5c212, title="LTradeTrend")
plot(ta.sma(close, TrendLength_S), color=#1275e5, title="STradeTrend")
plot(SMA1, "SMA1", color = color.lime, linewidth = 2)
plot(SMA2, "SMA2", color = color.rgb(255, 0, 255), linewidth = 2)

Más.