Die Ressourcen sind geladen. Beförderung...

PSAR- und EMA-basierte quantitative Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-05-28 11:00:40
Tags:PSAREMARegierungskonferenzIRC

img

Übersicht

Diese quantitative Handelsstrategie nutzt hauptsächlich die Crossover-Signale der Parabol SAR (PSAR) und Exponential Moving Average (EMA) Indikatoren, kombiniert mit mehreren benutzerdefinierten Bedingungen, um Kauf- und Verkaufssignale zu generieren.

Strategieprinzip

  1. Berechnung der PSAR- und 30-Perioden-EMA-Indikatoren
  2. Bestimmung der Kreuzbeziehung zwischen PSAR und EMA und Festlegung der entsprechenden Flaggen
  3. Definition von IGC (Ideal Green Candle) und IRC (Ideal Red Candle) anhand der relativen Positionen von PSAR und EMA sowie der Farbe der Kerzen
  4. Erstellen von Kauf- und Verkaufssignalen auf der Grundlage von IGC und IRC
  5. Festlegung von Take-Profit-Levels bei 8%, 16% und 32% über dem Kaufpreis und der Stop-Loss-Level bei 16% unter dem Kaufpreis; Festlegung von Take-Profit-Levels bei 8%, 16% und 32% unter dem Verkaufspreis und der Stop-Loss-Level bei 16% über dem Verkaufspreis
  6. Ausführung von Kauf-, Verkaufs- oder Schlusspositionen basierend auf der Handelssitzung und dem Status der Position

Strategische Vorteile

  1. Kombination mehrerer Indikatoren und Bedingungen zur Verbesserung der Signalzuverlässigkeit
  2. Festlegung mehrerer Take-Profit- und Stop-Loss-Level für ein flexibles Risikomanagement und Rendite
  3. Es werden Filter für Kauf- und Verkaufsbedingungen auf der Grundlage verschiedener Marktsituationen festgelegt, wodurch die Anpassungsfähigkeit der Strategie verbessert wird.
  4. Hochmodularisierter Code, der leicht zu verstehen und zu ändern ist

Strategische Risiken

  1. Die Parameter-Einstellungen der Strategie sind möglicherweise nicht für alle Marktumgebungen geeignet und müssen anhand der tatsächlichen Bedingungen angepasst werden.
  2. In unruhigen Märkten kann die Strategie häufige Handelssignale erzeugen, was zu erhöhten Handelskosten führt
  3. Die Strategie fehlt an Beurteilung der Marktentwicklung und kann Chancen in stark entwickelten Märkten verpassen
  4. Die Stop-Loss-Einstellungen können Risiken durch extreme Marktbedingungen möglicherweise nicht vollständig vermeiden

Strategieoptimierungsrichtlinien

  1. Einführung von mehr technischen Indikatoren oder Marktstimmungsindikatoren zur Verbesserung der Signalgenauigkeit und -zuverlässigkeit
  2. Optimierung der Einstellungen von Take-Profit- und Stop-Loss-Levels unter Berücksichtigung der Implementierung dynamischer Take-Profit/Stop-Loss oder volatilitätsbasierter Take-Profit/Stop-Loss
  3. Festlegung verschiedener Handelsparameter und -regeln für verschiedene Marktzustände zur Verbesserung der Anpassungsfähigkeit der Strategie
  4. Einbeziehung eines Geldverwaltungsmoduls zur dynamischen Anpassung von Positionen und Risikopositionen auf der Grundlage von Faktoren wie Konto-Eigenkapitalquote und -saldo

Zusammenfassung

Diese quantitative Handelsstrategie basiert auf den Indikatoren PSAR und EMA und erzeugt Kauf- und Verkaufssignale durch mehrere benutzerdefinierte Bedingungen und Regeln. Die Strategie hat eine gewisse Anpassungsfähigkeit und Flexibilität und setzt gleichzeitig Gewinn- und Stop-Loss-Level fest, um das Risiko zu managen. Allerdings gibt es immer noch Raum für Optimierung in Bezug auf Parameter-Einstellungen und Risikokontrolle. Insgesamt kann diese Strategie als Basisvorlage dienen und hat mit weiterer Optimierung und Verbesserung das Potenzial, eine robuste Handelsstrategie zu werden.


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


Verwandt

Mehr