Esta estrategia abre posiciones basadas en la cruz de oro y la cruz de la muerte de los promedios móviles, y los conjuntos toman ganancias y detienen pérdidas de una manera que cruza el piso.
La estrategia consta de cuatro partes:
Sistema de medias móviles
Utilice la cruz dorada y la cruz muerta de las medias móviles para determinar las tendencias y filtrar los choques.
Mudarse es beneficioso y no perjudicial
Utilice tomar ganancias y detener pérdidas con un cierto porcentaje para bloquear las ganancias y controlar los riesgos, realizando una gestión dinámica del capital.
Filtración de posición
Si la posición anterior es larga, la siguiente señal debe ser corta para abrir la posición, evitando mantener unilateralmente.
Pérdida de parada de ATR
Utilice ATR para limitar el rango máximo de pérdida de parada y evitar pérdidas de parada excesivas.
Específicamente, la estrategia primero calcula el promedio móvil, los largos en la cruz dorada y los cortos en la cruz de la muerte. Después de ingresar, establece las líneas móviles de toma de ganancias y stop loss con un cierto porcentaje. Si el precio toca la línea de toma de ganancias, luego tome ganancias; si toca la línea de stop loss o excede el rango de stop loss ATR, entonces detenga la pérdida.
Las principales ventajas de esta estrategia son las siguientes:
Alta configurabilidad
Muchos parámetros de la estrategia son configurables para que los usuarios se ajusten en función de sus estilos de negociación.
Una buena gestión del capital
La adopción de movimientos de toma de ganancias y stop loss y ATR stop loss puede controlar eficazmente la amplitud de una sola stop loss y lograr una excelente gestión de capital.
Adecuado para el mercado de tendencias
La estrategia de la media móvil en sí misma es más adecuada para mercados con tendencias fuertes para filtrar los choques de manera efectiva.
Esta estrategia también presenta algunos riesgos:
Equivocamiento de la tendencia
El juicio de las medias móviles en mercados complejos no es perfecto, y pueden ocurrir errores de juicio.
Exceso de pérdidas de parada
Los parámetros ATR deben combinarse para establecer el rango de stop loss.
Riesgos de apertura unidireccionales
El hecho de permitir el filtrado de posiciones tendrá cierto impacto en la frecuencia de negociación.
Las principales direcciones de optimización son:
Optimización de parámetros
Ajustar el ciclo de promedio móvil, los parámetros ATR, las tasas de toma de ganancias y de stop loss y otros parámetros para optimizar el rendimiento de la estrategia.
Adición de indicadores
Añadir indicadores como CMF, OBV para juzgar el flujo de capital y evitar el exceso de stop loss.
Combinación con otras estrategias
Combinar con estrategias de ruptura para seguir las tendencias después de que la tendencia se estabilice para lograr mejores resultados.
En resumen, a través del filtro de promedio móvil y el movimiento de las ganancias y pérdidas, esta estrategia realiza una gestión dinámica del capital basada en las tendencias. Tiene una alta configurabilidad, adecuada para que los inversores racionales se ajusten y usen de acuerdo con sus propios estilos. Como estrategia cuantitativa universal, todavía tiene un gran potencial de optimización y vale la pena una investigación en profundidad.
/*backtest start: 2023-11-20 00:00:00 end: 2023-12-11 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/ // © MGULHANN //@version=5 //İchimoku Leading Span 2 Hesaplaması ve Girişleri strategy("Stairs Gain Strategy - MG", overlay=true, margin_long=100, margin_short=100) laggingSpan2Periods = input.int(52, minval=1, title="Leading Periot") displacement = input.int(1, minval=1, title="Displacement") donchian(len) => math.avg(ta.lowest(len), ta.highest(len)) leadLine2 = donchian(laggingSpan2Periods) p2 = plot(leadLine2, offset = displacement - 1, color=#EF9A9A, title="Leading Span B") // İşlem Tekrarını Filtrele filtreUygula = input.bool(true,title="Pozisyon Sıra Filtresi Uygula") //Kar Al / Zarar Durdur Seviyeleri Girişleri zararDurdurmaYuzde = input.float(1.0, title='Zarar Durdurma %', step=0.01) / 100 karAlmaYuzde = input.float(2.0, title='Kar Alma %', step=0.01) / 100 //ATR Hesaplaması atrCarpani = input.float(0.3, title="ATR Çarpanı", step= 0.01) atrDegeri = ta.atr(14) * atrCarpani //ATR Değer Girişleri atrbuyukdeger = input.float(0.01, title="ATR Üst Limit", step=0.01) atrkucukdeger = input.float(0.06, title="ATR Alt Limit", step=0.01) //Buy ve Sell Şartları buycross = ta.crossover(close,leadLine2[displacement-1]) ? atrDegeri > atrbuyukdeger : strategy.position_size == 0 sellcross = ta.crossover(leadLine2[displacement-1],close) ? atrDegeri < atrkucukdeger : strategy.position_size == 0 //KONTROL var sonPozisyonYonu = 0 //Son kapanan pozisyon long ise degiskenin degerini 1 olarak ata if strategy.position_size[1] > 0 and strategy.position_size == 0 sonPozisyonYonu := 1 //Son kapanan pozisyon short ise degiskenin degerini -1 olarak ata if strategy.position_size[1] < 0 and strategy.position_size == 0 sonPozisyonYonu := -1 //eger filtre uygulama seçiliyse ve son pozisyon yönü long ise 'longFiltreSonuc' degiskenine false degeri ata ve bir sonraki pozisyonun long olmasını engelle longFiltreSonuc = filtreUygula ? sonPozisyonYonu == 1 ? false : true : true //eger filtre uygulama seçiliyse ve son pozisyon yönü short ise 'shortFiltreSonuc' degiskenine false degeri ata ve bir sonraki pozisyonun short olmasını engelle shortFiltreSonuc = filtreUygula ? sonPozisyonYonu == -1 ? false : true : true //LONG GİRİŞ strategy.entry("Long", strategy.long, when=buycross and longFiltreSonuc) longKarAl = strategy.position_avg_price * (1 + karAlmaYuzde) longZararDurdur = strategy.position_avg_price * (1 - zararDurdurmaYuzde) strategy.exit("Long Exit","Long",limit=longKarAl, stop=longZararDurdur) //SHORT GİRİŞ strategy.entry("Short", strategy.short, when=sellcross and shortFiltreSonuc) shortKarAl = strategy.position_avg_price * (1 - karAlmaYuzde) shortZararDurdur = strategy.position_avg_price * (1 + zararDurdurmaYuzde) strategy.exit("Short Exit","Short",limit=shortKarAl, stop=shortZararDurdur) //Kar Al ve Zarar Durdur Seviyelerinin Grafikte İşaretlenmesi plot(strategy.position_size != 0 ? strategy.position_avg_price : na, color=color.navy, linewidth=2, style=plot.style_linebr, title="İşleme Giriş Seviyesi") plot(strategy.position_size > 0 ? longKarAl : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Long Kar Alım Seviyesi") plot(strategy.position_size > 0 ? longZararDurdur : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Long Zarar Durdurma Seviyesi") plot(strategy.position_size < 0 ? shortKarAl : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Short Kar Alım Seviyesi") plot(strategy.position_size < 0 ? shortZararDurdur : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Short Zarar Durdurma Seviyesi") //plotshape(buycross,size=size.small,style=shape.labelup,location=location.belowbar,color=color.green,text="Al", offset = displacement-1, textcolor=color.white) //plotshape(sellcross,size=size.small,style=shape.labeldown,location=location.abovebar,color=color.red,text="Sat", offset = displacement-1, textcolor=color.white)