La idea central de esta estrategia es la combinación de indicadores horizontales y medias móviles básicas para lograr el seguimiento de tendencias y el cambio de tendencia. Cuando los precios se alinean con los indicadores, se toma el seguimiento de tendencias; cuando los precios y los indicadores se desvían, se toma el cambio de tendencia.
La estrategia se basa principalmente en tres indicadores personalizados:
Indicador de tendencia: calcula la relación entre el precio y el canal de sobreventa y sobreventa, determina la tendencia de la tendencia de la tendencia de la tendencia de la tendencia y la tendencia de la tendencia, y devuelve 1, 0, -1 tres estados.
Canal de sobrecompra y sobreventa ((Tsl): en referencia al ATR se calculan la subida y la bajada de la curva, el precio que rompe la subida de la curva se considera como sobrecompra, y el que rompe la bajada de la curva se considera como sobreventa.
Media móvil básica ((MA): calcula la media móvil simple del precio de cierre de 20 períodos.
En concreto, la estrategia se basa en el valor del indicador de pluralidad para determinar si el precio se encuentra en un estado de pluralidad, de oscilación o de vacante. Cuando el indicador de pluralidad es 1, el indicador está en un estado de pluralidad; cuando el indicador de pluralidad es -1, el indicador está en un estado de vacante.
Además, el precio que se rompe la media móvil también sirve como señal auxiliar para guiar la dirección de la operación. El precio sube al cruzar la media y baja al cruzar la media.
Las estrategias concretas para la negociación múltiple son las siguientes:
El indicador de la cantidad de espacio > 0, la subida de precios se rompe en la vía, es un caso de seguimiento de la tendencia, haga más.
El indicador de la mayoría de los huecos < 0, la caída de los precios rompió el camino, pertenece a la reversión de la tendencia, hacer huecos.
El precio de cierre > precio de apertura > punto central, se considera una oportunidad para hacer más, hacer más para romper el centro.
El precio de cierre se rompió en la vía y el precio de cierre fue > promedio móvil.
Las estrategias de negociación a balde son las siguientes:
El indicador de la amplitud < 0, la caída de los precios rompió la vía descendente, pertenece a la situación de seguimiento de la tendencia, hacer un hueco.
El indicador de la cantidad de espacio > 0, la subida de precios se desvía, es un caso de reversión de la tendencia, haga más.
Precio de apertura > Precio de cierre < Punto central, considerado como una oportunidad de brecha central para hacer un descuento, hacer un descuento.
El precio de cierre se rompió y el precio de cierre fue < promedio móvil, a la baja.
La estrategia de la posición plana es más simple, se detiene la pérdida de la vía de venta por encima de la compra por encima de la venta al volver a romper el precio.
La estrategia tiene las siguientes ventajas:
Los indicadores de la pluralidad de espacios permiten determinar con precisión el movimiento del mercado y son el indicador central de la estrategia.
El canal de sobreventa y sobrecompra, junto con el indicador, puede revelar oportunidades potenciales de reversión.
La media móvil básica puede servir como una señal de filtración auxiliar para evitar falsas rupturas.
Los puntos centrales se combinan con los indicadores de polinomios para formar puntos de comercio de alta probabilidad.
La combinación de la capacidad de seguimiento de tendencias y la capacidad de invertir el comercio, ofrece más oportunidades de ganancias.
El canal de stop loss de sobrecompra y sobreventa es claro y sencillo, lo que ayuda a controlar el riesgo.
La estrategia también tiene los siguientes riesgos:
El indicador de espacio múltiple puede emitir una señal errónea y se necesita combinar otros indicadores para filtrar.
Las operaciones de ruptura son fáciles de estafar y requieren un estricto stop loss.
El promedio móvil está mal configurado y puede perderse una tendencia o generar una señal falsa.
Los puntos centrales requieren una revisión de la fiabilidad de la probabilidad de verificación.
Los canales de venta excesiva necesitan parámetros optimizados para adaptarse a las diferentes variedades.
Los parámetros del indicador no coinciden, lo que puede provocar una mayor frecuencia de las operaciones.
Las siguientes medidas pueden ser tomadas para combatir estos riesgos:
En combinación con otros indicadores, como la línea K, la verificación de la transacción de la señal de indicador de polvo.
En la actualidad, el mercado de divisas en el país se encuentra en una situación de crisis económica, con una situación de crecimiento de los precios de las divisas.
Prueba diferentes parámetros de promedio móvil para encontrar el mejor.
La probabilidad de una estrategia de punto central de verificación de retroalimentación es suficiente.
Optimización de los parámetros del canal para encontrar la combinación óptima de los parámetros de cada variedad.
Ajustar los parámetros del indicador para que el sistema en general funcione de manera estable.
La estrategia también puede ser optimizada en los siguientes aspectos:
La adición de algoritmos de aprendizaje automático, el uso de grandes datos para el entrenamiento de indicadores de espacio múltiple. Puede mejorar la precisión de los indicadores y reducir las señales erróneas.
Aumentar el canal de adaptación y ajustar automáticamente los parámetros del canal en función de la volatilidad del mercado. Se puede mejorar la precisión de la ruptura.
Utilice el aprendizaje profundo para extraer más indicadores de cambio y crear un conjunto de indicadores para optimizar las estrategias de entrada y salida.
Se ha añadido un algoritmo avanzado de stop loss que permite el seguimiento de los trends de stop loss.
Optimización de parámetros y pruebas combinadas para mejorar la estabilidad de la estrategia general.
Añadir un módulo de gestión de fondos para hacer más científico el control de riesgos.
Esta estrategia, a través de múltiples indicadores para juzgar la estructura del mercado, así como la generación de señales de transacción de canales y promedios móviles, logra una combinación orgánica de seguimiento de tendencias y reversión de tendencias. Tiene una buena eficacia de los indicadores, muchas oportunidades de negociación y un claro deterioro.
/*backtest
start: 2023-08-25 00:00:00
end: 2023-09-24 00:00:00
period: 2h
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/
// © amysojexson
//@version=3
strategy(title="Pivots strategy", overlay=true)
// Input settings
// Create a pull-down menu for the pivot type
pivotType = input(title="Pivot Type",
options=["Daily", "Intraday", "Weekly"], defval="Daily")
// Make toggles for pivot level options
plotPP = input(title="Plot PP", type=bool, defval=true)
plotS1R1 = input(title="Plot S1 and R1", type=bool, defval=true)
plotS2R2 = input(title="Plot S2 and R2", type=bool, defval=true)
plotS3R3 = input(title="Plot S3 and R3", type=bool, defval=true)
plotTCBC = input(title="Plot S3 and R3", type=bool, defval=true)
// Configure session options
sessRange = input(title="Trading Session", defval="0800-1600")
showSess = input(title="Highlight Session?", type=bool, defval=false)
// Enable or disable pivot labels
showLabels = input(title="Show Labels?", type=bool, defval=false)
// Step 2. Calculate indicator values
// Create a function to fetch daily and weekly data
GetData(res, data) =>
security(syminfo.tickerid, res, data[1],
lookahead=barmerge.lookahead_on)
// Fetch daily and weekly price data
dailyHigh = GetData("D", high)
dailyLow = GetData("D", low)
dailyClose = GetData("D", close)
weeklyHigh = GetData("W", high)
weeklyLow = GetData("W", low)
weeklyClose = GetData("W", close)
// Determine session pivot data
// First see how the price bar relates to
// the session time range
inSession = not na(time(timeframe.period, sessRange)[1])
sessStart = inSession and not inSession[1]
sessEnd = not inSession and inSession[1]
// Determine session price data
sessHigh = 0.0
sessLow = 0.0
sessClose = 0.0
sessHigh := sessStart ? high :
inSession ? max(high, sessHigh[1]) : na
sessLow := sessStart ? low :
inSession ? min(low, sessLow[1]) : na
sessClose := sessEnd ? close[1] : na
// Compute high, low, close from previous intra-day session
highPrevSess = 0.0
lowPrevSess = 0.0
closePrevSess = 0.0
highPrevSess := sessEnd ? fixnan(sessHigh) : highPrevSess[1]
lowPrevSess := sessEnd ? fixnan(sessLow) : lowPrevSess[1]
closePrevSess := sessEnd ? fixnan(sessClose) : closePrevSess[1]
// Now figure out which kind of price data
// to use for the pivot calculation
theHigh = if (pivotType == "Daily")
dailyHigh
else
if (pivotType == "Intraday")
highPrevSess
else
weeklyHigh
theLow = if (pivotType == "Daily")
dailyLow
else
if (pivotType == "Intraday")
lowPrevSess
else
weeklyLow
theClose = if (pivotType == "Daily")
dailyClose
else
if (pivotType == "Intraday")
closePrevSess
else
weeklyClose
// Finally calculate the pivot levels
pp = (theHigh + theLow + theClose) / 3
bc= (theHigh + theLow)/2
tc= (pp-bc)+pp
r1 = pp+(.382*(theHigh-theLow))
s1 = pp-(.382*(theHigh-theLow))
r2 = pp +(.618*(theHigh-theLow))
s2 = pp -(.618*(theHigh-theLow))
r3 = pp +(1*(theHigh-theLow))
s3 = pp -(1*(theHigh-theLow))
// Step 3. Output indicator data
// Plot the various pivot levels
plot(series=plotS3R3 ? r3 : na, title="R3",
style=circles, linewidth=1, color=#0023FF)
plot(series=plotS2R2 ? r2 : na, title="R2",
style=circles, linewidth=1, color=#1E90FF)
plot(series=plotS1R1 ? r1 : na, title="R1",
style=circles, linewidth=1, color=#09E0F3)
plot(series=plotTCBC ? tc : na, title="TC",
style=circles, linewidth=.75, color=#FF00D1)
plot(series=plotPP ? pp : na, title="PP",
style=circles, linewidth=1, color=#000000)
plot(series=plotTCBC ? bc : na, title="BC",
style=circles, linewidth=.75, color=#FF00D1)
plot(series=plotS1R1 ? s1 : na, title="S1",
style=circles, linewidth=1, color=#09E0F3)
plot(series=plotS2R2 ? s2 : na, title="S2",
style=circles, linewidth=1, color=#1E90FF)
plot(series=plotS3R3 ? s3 : na, title="S3",
style=circles, linewidth=1, color=#0023FF)
// Display the pivot names on the chart, if applicable
newPivots = (showLabels == false) ? false :
(pivotType == "Intraday") ? sessEnd :
(pivotType == "Daily") ? dayofmonth != dayofmonth[1] :
dayofweek == monday and dayofmonth != dayofmonth[1]
plotchar(series=newPivots and plotS3R3 ? r3 : na,
char='', text="R3", offset=1,
location=location.absolute,
color=#0023FF, title="R3 label")
plotchar(series=newPivots and plotS2R2 ? r2 : na,
char='', text="R2", offset=1,
location=location.absolute,
color=#1E90FF, title="R2 label")
plotchar(series=newPivots and plotS1R1 ? r1 : na,
char='', text="R1", offset=1,
location=location.absolute,
color=#09E0F3, title="R1 label")
plotchar(series=newPivots and plotTCBC ? r1 : na,
char='', text="TC", offset=1,
location=location.absolute,
color=#FF00D1, title="TC label")
plotchar(series=newPivots and plotTCBC ? r1 : na,
char='', text="BC", offset=1,
location=location.absolute,
color=#FF00D1, title="BC label")
plotchar(series=newPivots and plotS1R1 ? s1 : na,
char='', text="S1", offset=1,
location=location.absolute,
color=#09E0F3, title="S1 label")
plotchar(series=newPivots and plotS2R2 ? s2 : na,
char='', text="S2", offset=1,
location=location.absolute,
color=#1E90FF, title="S2 label")
plotchar(series=newPivots and plotS3R3 ? s3 : na,
char='', text="S3", offset=1,
location=location.absolute,
color=#0023FF, title="S3 label")
// Highlight the intra-day price data session on the chart
bgcolor(color=showSess and inSession and (pivotType == "Intraday") ?
orange : na, transp=95)
// Step 4. Create indicator alerts
alertcondition(condition=cross(close, s3),
title="Pivot S3 Cross",
message="Prices crossed Pivot S3 level")
alertcondition(condition=cross(close, s2),
title="Pivot S2 Cross",
message="Prices crossed Pivot S2 level")
alertcondition(condition=cross(close, s1),
title="Pivot S1 Cross",
message="Prices crossed Pivot S1 level")
alertcondition(condition=cross(close, tc),
title="Pivot TC Cross",
message="Prices crossed Pivot TC level")
alertcondition(condition=cross(close, pp),
title="Pivot PP Cross",
message="Prices crossed the main Pivot Point level")
alertcondition(condition=cross(close, bc),
title="Pivot BC Cross",
message="Prices crossed Pivot BC level")
alertcondition(condition=cross(close, r1),
title="Pivot R1 Cross",
message="Prices crossed Pivot R1 level")
alertcondition(condition=cross(close, r2),
title="Pivot R2 Cross",
message="Prices crossed Pivot R2 level")
alertcondition(condition=cross(close, r3),
title="Pivot R3 Cross",
message="Prices crossed Pivot R3 level")
MA = sma(close, 20)
plot(MA, color=red)
Factor = input(2, type=float)
Pd = input(10, minval=1,maxval = 100)
Up = hl2-(Factor*atr(Pd))
Dn = hl2+(Factor*atr(Pd))
TrendUp = 0.0
TrendUp := close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown = 0.0
TrendDown := close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
Trend = 0.0
Trend := close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
Tsl = Trend==1? TrendUp: TrendDown
plot(Tsl, color=blue)
if close>open
if open<pp
if close>pp
if close>MA
strategy.entry("long", true)
if close<open
if open>pp
if close<pp
if close<MA
strategy.entry("short", false)
strategy.close("long", when = open<Tsl)
strategy.close("short", when = open>Tsl)