Estrategia cuantitativa basada en PSAR y EMA

PSAR EMA IGC IRC
Fecha de creación: 2024-05-28 11:00:40 Última modificación: 2024-05-28 11:00:40
Copiar: 7 Número de Visitas: 681
1
Seguir
1617
Seguidores

Estrategia cuantitativa basada en PSAR y EMA

Descripción general

La estrategia cuantitativa utiliza principalmente la señal de cruce de la SAR paralela (PSAR) y el promedio móvil del índice (EMA) para generar señales de compra y venta, junto con una serie de condiciones personalizadas. La idea principal de la estrategia es: generar una señal de compra cuando el PSAR rompe la EMA desde abajo y cumple ciertas condiciones; generar una señal de venta cuando el PSAR rompe la EMA desde arriba y cumple ciertas condiciones.

Principio de estrategia

  1. Cálculo de las PSAR y las EMA de 30 ciclos
  2. Determinar la relación cruzada entre el PSAR y el EMA y establecer el punto de referencia correspondiente
  3. Combinando la relación de posición de los PSAR con los EMA, el color de la línea K, y otras condiciones, define IGC (Ideal Green Candle) e IRC (Ideal Red Candle)
  4. La aparición de IGC e IRC para juzgar las señales de compra y venta
  5. Establezca un stop y un stop loss, el stop es el 8%, 16% y 32% del precio de compra, el stop es el 16% del precio de compra y el stop es el 8%, 16% y 32% del precio de venta, el stop es el 16% del precio de venta
  6. Ejecutar operaciones de compra, venta o liquidación de acuerdo con el momento de la transacción y el estado de la posición

Ventajas estratégicas

  1. Combinación de varios indicadores y condiciones para mejorar la fiabilidad de la señal
  2. Establece múltiples paradas y paradas de pérdidas para un control flexible de riesgos y ganancias
  3. Se establecen condiciones de filtración de compra y venta para diferentes condiciones de mercado, aumentando la adaptabilidad de la estrategia
  4. Código altamente modular, fácil de entender y modificar

Riesgo estratégico

  1. La configuración de los parámetros de la estrategia puede no ser adecuada para todos los entornos de mercado y debe ajustarse a las circunstancias reales.
  2. En un mercado convulso, la estrategia puede generar señales de negociación frecuentes, lo que aumenta el costo de las transacciones.
  3. La estrategia carece de juicio sobre las tendencias del mercado y puede perder oportunidades en un mercado de fuerte tendencia
  4. La configuración de los puntos de parada puede no evitar por completo el riesgo de los extremos

Dirección de optimización de la estrategia

  1. Introducción de más indicadores técnicos o de sentimiento de mercado para mejorar la precisión y fiabilidad de las señales
  2. Optimizar la configuración de los paradas y paradas de pérdidas, se puede considerar la introducción de paradas de paradas dinámicas o paradas de paradas basadas en la volatilidad
  3. Adaptabilidad de las estrategias para diferentes estados de mercado, configuración de diferentes parámetros y reglas de negociación
  4. Agrega un módulo de administración de fondos para ajustar dinámicamente las posiciones y la exposición al riesgo en función de factores como el balance de la relación de equidad de la cuenta

Resumir

La estrategia cuantitativa se basa en los indicadores PSAR y EMA, que generan señales de compra y venta a través de una serie de condiciones y reglas personalizadas. La estrategia tiene cierta adaptabilidad y flexibilidad, y también establece un punto de parada y pérdida para controlar el riesgo. Sin embargo, hay espacio para la optimización en la configuración de los parámetros de la estrategia y el control del riesgo. En general, la estrategia puede servir como un modelo básico y, con mayor optimización y mejora, tiene posibilidades de convertirse en una estrategia de negociación sólida.

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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SwapnilRaykar

//@version=5
strategy("aj sir second project", overlay=true, margin_long=100, margin_short=100)

start=input("0915-1515","session time")
st11=time(timeframe.period,start)
st=st11>0
et= not st 

psar=ta.sar(0.02,0.02,0.2)
emared=ta.ema(close,30)
//plot(psar,"psar",color.yellow,style = plot.style_cross)
//plot(emared,"emared",color.red)
var crodownflag=0
var croupflag=0

var igcflag=0

var ircflag=0

cdown1=ta.crossunder(psar,emared)  and not (psar<close and psar[1]>close[1])
cup1=ta.crossover(psar,emared) and not (psar>close and psar[1]<close[1])

cdown=ta.crossunder(psar,emared) 
cup=ta.crossover(psar,emared)


green_candle=close>open
red_candle=close<open

if ta.crossunder(psar,emared) and crodownflag==0  and not (psar<close and psar[1]>close[1])
    crodownflag:=1
else if cdown and crodownflag==1
    crodownflag:=0



if crodownflag==1 and green_candle and igcflag==0
    igcflag:=1
else if cdown and igcflag==1
    igcflag:=0

//plot(igcflag,"igcflag",color.lime)

if ta.crossover(psar,emared) and croupflag==0 and not (psar>close and psar[1]<close[1])
    croupflag:=1
else if cdown and croupflag==1
    croupflag:=0

//plot(crodownflag,"crodownflag",color.white)
irc_cond=croupflag==1 or cup

if (croupflag==1 and red_candle and ircflag==0)
    ircflag:=1
else if cup and croupflag==1
    ircflag:=0

igc_candle1=(igcflag==1 and igcflag[1]==0) or (cdown1 and green_candle)
irc_candle1=(ircflag==1 and ircflag[1]==0) or (cup1 and red_candle)
///////////////////////////
dm=dayofmonth(time)
newday=dm!=dm[1]
dmc=dm==ta.valuewhen(bar_index==last_bar_index,dm,0)

///////////////////////////////////////////
var irc_there=0

if irc_candle1[1] and irc_there==0
    irc_there:=1
else if cdown and irc_there==1
    irc_there:=0

irc_candle=irc_candle1 and irc_there==0// and dmc

var igc_there=0

if igc_candle1[1] and igc_there==0
    igc_there:=1
else if cup and igc_there ==1
    igc_there:=0

igc_candle=igc_candle1 and igc_there==0// and dmc
/////////// to get rid of irc being valid even after crossdown
var valid_igc_low=0
var valid_irc_high=0

if irc_candle[1] and valid_irc_high==0
    valid_irc_high:=1
else if igc_candle and valid_irc_high==1
    valid_irc_high:=0

if igc_candle and valid_igc_low==0
    valid_igc_low:=1
else if irc_candle and valid_igc_low==1
    valid_igc_low:=0


igc_low=ta.valuewhen(igc_candle,low,0)
irc_high=ta.valuewhen(irc_candle,high,0)
//////////////////////////////
//plot(irc_high,"irc_high",color.red)

//plot(valid_irc_high,"valid_irc_high",color.purple)

buy12=ta.crossunder(close,igc_low) and valid_igc_low==1
buy1=buy12[1]

short12=ta.crossover(close,irc_high) and valid_irc_high==1
short1=short12[1]
//plotshape(short12,"short12",shape.arrowdown,color=color.purple)

// plotshape(igc_candle,"igc_candle",shape.arrowdown,color=color.green)
// plotshape(irc_candle,"irc_candle",shape.arrowdown,color=color.red)
//plotshape((psar<close and psar[1]>close[1]) ,"croup",shape.arrowdown,color=color.red)
//plotshape(cup ,"croup",shape.arrowdown,color=color.orange)

buyprice=ta.valuewhen(buy1 and strategy.position_size[1]==0,open,0)
shortprice=ta.valuewhen(short1 and strategy.position_size[1]==0,open,0)

btarget1=buyprice+(buyprice*0.08)
btarget2=buyprice+(buyprice*0.16)
btarget3=buyprice+(buyprice*0.32)
bstoploss=buyprice-(buyprice*0.16)

starget1=shortprice-(shortprice*0.08)
starget2=shortprice-(shortprice*0.16)
starget3=shortprice-(shortprice*0.32)
sstoploss=shortprice+(shortprice*0.16)

if buy12 and strategy.position_size==0 and st11
    strategy.entry("buy",strategy.long)

if strategy.position_size >0
    strategy.exit("sell",from_entry = "buy",stop=bstoploss,limit=btarget3)

if short12 and strategy.position_size==0 and st11
    strategy.entry("short",strategy.short)

if strategy.position_size<0
    strategy.exit("cover",from_entry = "short",stop = sstoploss,limit = starget3)

if et
    strategy.close_all(comment = "timeover")

plot(strategy.position_size>0?buyprice:na,"buyprice",color.white, style=plot.style_circles )
plot(strategy.position_size>0?bstoploss:na,"bstoploss",color.red, style=plot.style_circles )
plot(strategy.position_size>0?btarget1:na,"btarget1",color.green, style=plot.style_circles )
plot(strategy.position_size>0?btarget2:na,"btarget2",color.green, style=plot.style_circles )
plot(strategy.position_size>0?btarget3:na,"btarget3",color.green, style=plot.style_circles )

plot(strategy.position_size<0?shortprice:na,"shortprice",color.white, style=plot.style_circles )
plot(strategy.position_size<0?sstoploss:na,"sstoploss",color.red, style=plot.style_circles )
plot(strategy.position_size<0?starget1:na,"starget1",color.green, style=plot.style_circles )
plot(strategy.position_size<0?starget2:na,"starget2",color.green, style=plot.style_circles )
plot(strategy.position_size<0?starget3:na,"starget3",color.green, style=plot.style_circles )