Les ressources ont été chargées... Je charge...

Stratégie de négociation quantitative basée sur le PSAR et l'EMA

Auteur:ChaoZhang est là., Date: le 28 mai 2024 à 11h40
Les étiquettes:PSARLe taux d'intérêtCIGIRC

img

Résumé

Cette stratégie de trading quantitative utilise principalement les signaux croisés des indicateurs SAR parabolique (PSAR) et moyenne mobile exponentielle (EMA), combinés à plusieurs conditions personnalisées pour générer des signaux d'achat et de vente.

Principe de stratégie

  1. Calcul des indicateurs PSAR et des indicateurs EMA à 30 périodes
  2. Déterminer la relation croisée entre le PSAR et l'EMA et définir les signaux correspondants
  3. Définir IGC (Ideal Green Candle) et IRC (Ideal Red Candle) en fonction des positions relatives de PSAR et EMA, ainsi que de la couleur des bougies
  4. Générer des signaux d'achat et de vente basés sur l'occurrence de CIG et de CIR
  5. Fixer les niveaux de prise de profit à 8%, 16% et 32% au-dessus du prix d'achat et le niveau de stop-loss à 16% en dessous du prix d'achat; fixer les niveaux de prise de profit à 8%, 16% et 32% en dessous du prix de vente et le niveau de stop-loss à 16% au-dessus du prix de vente
  6. Exécuter des positions d'achat, de vente ou de clôture en fonction de la session de négociation et du statut de la position

Les avantages de la stratégie

  1. Combine plusieurs indicateurs et conditions pour améliorer la fiabilité du signal
  2. Définit plusieurs niveaux de prise de profit et de stop-loss pour une gestion flexible du risque et du rendement
  3. Mettre en place des filtres pour les conditions d'achat et de vente en fonction des différentes situations du marché, améliorant ainsi l'adaptabilité de la stratégie
  4. Code hautement modulaire, facile à comprendre et à modifier

Risques stratégiques

  1. Les paramètres de la stratégie peuvent ne pas convenir à tous les environnements de marché et doivent être ajustés en fonction des conditions réelles.
  2. Dans les marchés instables, la stratégie peut générer des signaux de trading fréquents, ce qui entraîne une augmentation des coûts de trading
  3. La stratégie manque de jugement sur les tendances du marché et risque de manquer des opportunités sur des marchés fortement en évolution
  4. Les paramètres de stop-loss peuvent ne pas éviter complètement les risques liés aux conditions de marché extrêmes

Directions d'optimisation de la stratégie

  1. Introduction d'un plus grand nombre d'indicateurs techniques ou d'indicateurs du sentiment du marché pour améliorer l'exactitude et la fiabilité des signaux
  2. Optimiser les paramètres des niveaux de prise de profit et de stop-loss, en tenant compte de la mise en œuvre de la prise de profit/stop-loss dynamique ou de la prise de profit/stop-loss basée sur la volatilité
  3. Définir des paramètres et des règles de négociation différents pour les différents états de marché afin d'améliorer l'adaptabilité de la stratégie
  4. Incorporer un module de gestion de trésorerie pour ajuster dynamiquement les positions et l'exposition au risque en fonction de facteurs tels que le ratio de fonds propres et le solde du compte

Résumé

Cette stratégie de trading quantitative est basée sur les indicateurs PSAR et EMA, générant des signaux d'achat et de vente à travers plusieurs conditions et règles personnalisées. La stratégie a un certain niveau d'adaptabilité et de flexibilité tout en définissant des niveaux de prise de profit et de stop-loss pour gérer le risque. Cependant, il y a encore place à l'optimisation en termes de paramètres et de contrôle des risques. Dans l'ensemble, cette stratégie peut servir de modèle de base et, avec une optimisation et des améliorations supplémentaires, elle a le potentiel de devenir une stratégie de trading robuste.


/*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 )


Relationnée

Plus de