Quantitative Strategie basierend auf PSAR und EMA

PSAR EMA IGC IRC
Erstellungsdatum: 2024-05-28 11:00:40 zuletzt geändert: 2024-05-28 11:00:40
Kopie: 7 Klicks: 681
1
konzentrieren Sie sich auf
1617
Anhänger

Quantitative Strategie basierend auf PSAR und EMA

Überblick

Die quantitative Strategie nutzt hauptsächlich die Kreuzung der Parabola SAR-Indikator (PSAR) und Index Moving Average (EMA), kombiniert mit mehreren benutzerdefinierten Bedingungen, um ein Kauf- und Verkaufssignal zu erzeugen. Die Hauptidee der Strategie ist: ein Kaufsignal, wenn der PSAR von unten die EMA durchbricht und bestimmte Bedingungen erfüllt; ein Verkaufssignal, wenn der PSAR von oben die EMA durchbricht und bestimmte Bedingungen erfüllt. Die Strategie setzt auch Stopps und Stop-Losses ein, um das Risiko zu kontrollieren.

Strategieprinzip

  1. Berechnung der PSAR- und 30-Zyklus-EMA-Werte
  2. Beurteilung der Querbeziehung zwischen PSAR und EMA und entsprechende Kennziffern
  3. Kombination der Positionsbeziehungen von PSAR und EMA, Farbe der K-Linie und andere Bedingungen, um IGC (Ideal Green Candle) und IRC (Ideal Red Candle) zu definieren
  4. Das Auftreten von IGC und IRC, um Kauf- und Verkaufssignale zu beurteilen
  5. Setzen Sie Stop-Loss und Stop-Loss, Stop-Loss ist 8% der Kaufpreis, 16% und 32% der Kaufpreis, Stop-Loss ist 16% der Verkaufspreis, 8% der Verkaufspreis, 16% und 32% der Verkaufspreis
  6. Die Durchführung von Kauf-, Verkauf- oder Off-Position-Operationen, je nach Zeitpunkt des Handels und Positionshaltung

Strategische Vorteile

  1. Mehrfache Indikatoren und Bedingungen, die die Signalzuverlässigkeit erhöhen
  2. Mehrfache Stop-Loss- und Stop-Off-Lösungen, um Risiken und Erträge flexibel zu steuern
  3. Die Anpassungsfähigkeit der Strategie wird durch die Filterung von Kauf- und Verkaufskonditionen für verschiedene Marktbedingungen verbessert
  4. Der Code ist sehr modular und leicht zu verstehen und zu ändern.

Strategisches Risiko

  1. Die Parameter-Einstellungen der Strategie sind möglicherweise nicht für alle Marktumstände geeignet und müssen an die tatsächlichen Umstände angepasst werden.
  2. Die Strategie kann zu häufigen Handelssignalen führen, was zu erhöhten Handelskosten führt, wenn die Märkte im Umbruch sind.
  3. Die Strategie fehlt die Beurteilung von Markttrends und kann Chancen in stark trendigen Märkten verpassen
  4. Die Einstellung der Stop-Loss-Position kann die Gefahr von Extremen nicht vollständig vermeiden

Richtung der Strategieoptimierung

  1. Einführung von mehr technischen Indikatoren oder Marktstimmungsindikatoren, um die Genauigkeit und Zuverlässigkeit der Signale zu verbessern
  2. Optimierung der Einstellungen für Stopps und Stop-Loss-Punkte, wobei die Einführung von dynamischen Stopp-Stopps oder Stopp-Stopps basierend auf der Schwankung berücksichtigt werden kann
  3. Anpassung der Strategien an unterschiedliche Marktsituationen mit unterschiedlichen Handelsparametern und -regeln
  4. Hinzu kommt das Modul für die Vermögensverwaltung, um Positionen und Risikopositionen dynamisch an die Equity Ratio Balance anzupassen.

Zusammenfassen

Die quantitative Strategie basiert auf den PSAR- und EMA-Indikatoren und erzeugt Kauf- und Verkaufssignale durch mehrere benutzerdefinierte Bedingungen und Regeln. Die Strategie hat eine gewisse Anpassungsfähigkeit und Flexibilität, während auch eine Stop-Loss-Position zur Risikokontrolle festgelegt wird. Es gibt jedoch noch Optimierungsmöglichkeiten in Bezug auf die Einstellung der Parameter und die Risikokontrolle der Strategie.

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