Estrategia de toma de beneficios basada en pistas duales largas y cortas


Fecha de creación: 2024-01-15 14:56:03 Última modificación: 2024-01-15 14:56:03
Copiar: 1 Número de Visitas: 626
1
Seguir
1617
Seguidores

Estrategia de toma de beneficios basada en pistas duales largas y cortas

Estrategia de cuantificación de Myo_LS_D

Descripción general

La estrategia de cuantificación Myo_LS_D es una estrategia de seguimiento y parada basada en binarios múltiples. La estrategia utiliza una combinación de varios indicadores para construir señales de negociación, como la línea media, la ruptura del precio y la relación de retorno al riesgo.

Principio de estrategia

La estrategia se compone principalmente de un módulo de evaluación de tendencias, un módulo de multitarea, un módulo de vacío y un módulo de seguimiento de paradas.

  1. El módulo de determinación de tendencias utiliza el canal donchain para determinar la dirección de la tendencia general. Hacer más entradas se supone que está en una tendencia ascendente, mientras que el shorting necesita estar en una tendencia descendente.

  2. El módulo de multiplicación tiene en cuenta factores tales como nuevos puntos altos, bajos y posiciones de líneas medias largas. El módulo de vacío tiene en cuenta factores tales como nuevos puntos altos, bajos y posiciones de líneas medias cortas. Esto asegura que se establezca una posición cuando se rompa un punto de precio clave hacia arriba o hacia abajo.

  3. El módulo de seguimiento de paradas utiliza la media SMA de dos períodos diferentes para seguir el cambio de precios en tiempo real. Se detiene el cierre de la posición cuando el precio cae por debajo de la media. Este seguimiento en tiempo real puede maximizar los beneficios de la tendencia.

  4. La configuración de parada de pérdidas considera la ampliación de la parada de pérdidas para asegurar que el punto de parada esté más lejos de la posición de soporte y evitar que se sacuda.

Análisis de las ventajas

La mayor ventaja de esta estrategia es la construcción de almacenes separados en el espacio y el seguimiento de la estrategia de detención. En concreto, se refleja principalmente en:

  1. La separación de varios espacios puede maximizar las oportunidades de ganancias de las tendencias unilaterales.

  2. El seguimiento de las paradas permite obtener una mayor tasa de ganancias con ajustes en tiempo real. En comparación con los métodos tradicionales de paradas, los beneficios se incrementan significativamente.

  3. La ampliación del stop loss puede reducir la probabilidad de ser sacudido y reducir el riesgo de pérdidas.

Riesgos y soluciones

Los principales riesgos de la estrategia se centran en:

  1. Si se produce un error en la determinación de la tendencia, puede ocasionar pérdidas en la construcción de posiciones en contra. Se pueden ajustar adecuadamente los parámetros de donchain o agregar otros indicadores para optimizar la determinación.

  2. El seguimiento de las paradas es demasiado radical y puede que las paradas anticipadas no sean rentables de manera sostenible. Se puede ampliar adecuadamente el intervalo de la línea media de paradas para optimizar.

  3. El alcance de los estancamientos es demasiado pequeño y puede aumentar la probabilidad de ser sacudido. El alcance de los estancamientos puede ampliarse adecuadamente para reducir el riesgo.

Dirección de optimización

La estrategia puede seguir mejorando en los siguientes aspectos:

  1. Optimizar el módulo de juicio de tendencias para mejorar la precisión de juicio. Se puede considerar la combinación de más indicadores como el MACD para lograr.

  2. Ajuste el modo de seguimiento de la parada para ampliar aún más el espacio de ganancias. Por ejemplo, puede mover la línea de parada en proporción, etc.

  3. Ampliar el rango de detención o considerar la reducción de la detención para reducir aún más la probabilidad de ser sacudido.

  4. Los parámetros de las diferentes variedades son diferentes, y se puede entrenar para obtener la combinación óptima de parámetros.

Resumir

La estrategia Myo_LS_D es una estrategia de bloqueo de seguimiento de múltiples espacios estable y más madura en general. Sus ventajas son evidentes, los riesgos son controlables y es una de las estrategias de cuantificación que vale la pena usar a largo plazo.

Código Fuente de la Estrategia
/*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)