Allmänt meddelande

Collapse
No announcement yet.

RSI SuperZones

Collapse
X
 
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • RSI SuperZones

    Har lekt med en tanke under dagen som jag håller på att testa. Jag tycker att VAP filteret är fantastiskt bra för att minska risken i en modell. Jag håller på att testa filtret med en twist, men det tar så lång tid att köra analysern med VAP filter så jag hoppades på lite hjälp här.

    Eftersom att VAP filtret har en skala på 0-100 precis som RSIWS (och många andra vanliga inikatorer), så jag tänkte att dom borde går att kombinera. Kör en inskalnings modell alá Connors PowerZone modell. Men RSI trigger värdet är direkt beroende av VAP värdet. Så när RSI värdet är under VAP värdet så har vi köpsignal. Har lagt in en "Limiter" som i tillägg subtraheras från VAP för att sänka RSI trigger värdet ytterligare om det behövs.

    Än så länge så får min traditionella RSI PowerZone modell bättre resultat med fast RSI trigger värden och VAP filter för att stoppa köp helt. Men om vi slår våra kloka hjärnor ihop kanske vi kanske vi kan finna en bättre edge i den här modellen


    Kör exit på högsta femdagars kurs, finns säker en bättre variant här, har inte testat än.


    ------------------------------------------------------------------------------------------------------------

    {RSI SuperZones Long - 20200529}

    antal_steg:=4 {antal delköp/steg}
    storlek_steg:=0.25 {del av kontot för varje delköp}
    hävstång_max:=2 {största hävstången på portföljen för att tillåta köp}

    limiter:=40 {RSI minus VAP plus limiter ger trigger signal }
    ris:=4 {RSI perioder}

    $par_perioder1:=50 {50}
    $par_perioder2:=1000 {1000}

    {VAP}
    high=cmpref(h,0,a)
    low=cmpref(l,0,a)
    eod=cmpref(c,0,a)

    volla=sub(1,div(aref(eod,1),eod))
    ma50=mov(volla,$par_perioder1,s)
    bbl_1k=sub(ma50,mult(2.5,stdev(volla,$par_perioder2)))
    bbl50=sub(ma50,mult(2,stdev(volla,$par_perioder1)))

    rå=sub(bbl50,bbl_1k)
    rating1=mult(1,sum(gt(rå,aref(rå,1)),50))
    rating2=mult(50,sub(1,div(abs(rå),bbl_1k)))
    vap=mx(0,mn(100,mult(sub(add(rating1,rating2),70),2)))


    { Hävstångs kontrol }

    värde_positioner=sub(cash(a),cash(s))
    depåvärde=sub(add(cash(a),cash(t)),mult(2,abs(cash(s))))
    hävstång_nu=div(värde_positioner,depåvärde)
    hävstång_ok=lt(hävstång_nu,hävstång_max)

    new_buy=lt(c,lasttrade(b,p))
    {---------------------------------}

    {Cellberäkning}
    sälj_senast=gt(lasttrade(s,d),lasttrade(b,d))
    köp_senast=lt(lasttrade(s,d),lasttrade(b,d))

    retval(lasttrade(b,2),2)
    uppräknat=add(getval(2),1)
    retval(if(köp_senast,uppräknat,getval(2)),2)
    retval(if(sälj_senast,0,getval(2)),2)
    sista_köp=lt(getval(2),antal_steg)

    { Övriga kontroller }
    ej_samma_dag=gt(int(d),lasttrade(b,d))
    öppet=ge(mult(1440,sub(market(c),frac(date()))),6)
    stängning=le(mult(1440,sub(market(c),frac(date()))),7)

    setgvarif(storlek_steg,701,1)
    { Signal }

    ma5s=lt(c,mov(c,5,s))
    signal=and(lt(c,aref(c,1)),lt(rsiws(ris),sub(VAP,limiter))) {<----RSI Limiter}
    draw(mult(signal,10),3,ysbfw)

    köp1=and(or(and(signal,le(getval(2),1)),and(and(new_buy,signal),köp_senast)),ma5s)
    köp2=and(and(and(köp1,ej_samma_dag),and(and(sista_köp,stängning),öppet)),hävstång_ok)
    mult(köp2,10)

    {@A(0,)}

    ------------------------------------------------------------------------------------------------------------
    {RSI SuperZones Sell - 20200529}
    account_ok=not(eqv(cash(d),0))
    köpdag=lasttrade(b,d)
    innehav=gt(portfolio(v),0)
    inpådagen=gt(frac(date()),0.376)
    stängning=le(mult(1440,sub(market(c),frac(date()))),7)
    öppet=ge(mult(1440,sub(market(c),frac(date()))),6)
    {Säljvillkår}


    ma200=mov(c,200,s)
    dagar=if(ma200,5,4)
    hög=gt(c,hhv(aref(c,1),{dagar:5}5))

    {sälj_senast=gt(lasttrade(s,d),lasttrade(b,d))}
    sälj1=and(and(and(and(and(hög,account_ok),innehav),stängning),account_ok),öppet)
    mult(sälj1,5)
    ------------------------------------------------------------------------------------------------------------
    {RSI SuperZones Sell - 20200529}
    account_ok=not(eqv(cash(d),0))
    köpdag=lasttrade(b,d)
    innehav=gt(portfolio(v),0)
    inpådagen=gt(frac(date()),0.376)
    stängning=le(mult(1440,sub(market(c),frac(date()))),7)
    öppet=ge(mult(1440,sub(market(c),frac(date()))),6)
    {Säljvillkår}


    ma200=mov(c,200,s)
    dagar=if(ma200,5,4)
    hög=gt(c,hhv(aref(c,1),{dagar:5}5))

    {sälj_senast=gt(lasttrade(s,d),lasttrade(b,d))}
    sälj1=and(and(and(and(and(hög,account_ok),innehav),stängning),account_ok),öppet)
    mult(sälj1,5)

    ------------------------------------------------------------------------------------------------------------
    {RSI SuperZones Antal - 20200529}
    { Antalsberäkning }
    insatsproc:=getgvar(701)
    konto=sub(add(cash(t),cash(a)),mult(2,abs(cash(s))))
    insatsbelopp=mult(int(div(konto,c)),insatsproc)
    int(insatsbelopp)
    ------------------------------------------------------------------------------------------------------------
    Last edited by Lord S; 2020-05-29, 23:46.
    AlgoPal - Emotionless Trading - Hyr ut våra trading algoritmer for Autostock via algopal.com

  • #2
    Förövrigt har jag en fundering. Jag har märkt att om jag lägger VAP filter eller andra tunga filter i Köp/Sälj skriptet så tar det en väldans tid att analysera modellerna. Men lägger jag filteret i som ett extra control skript så märks det inte av alls?
    Vad beror det på?
    AlgoPal - Emotionless Trading - Hyr ut våra trading algoritmer for Autostock via algopal.com

    Comment


    • #3
      Ursprungligen postat av Lord S Visa inlägg
      Förövrigt har jag en fundering. Jag har märkt att om jag lägger VAP filter eller andra tunga filter i Köp/Sälj skriptet så tar det en väldans tid att analysera modellerna. Men lägger jag filteret i som ett extra control skript så märks det inte av alls?
      Vad beror det på?
      Jag antar extra kontrollskripten endast körs när köp/sälj givit signal. Om så är fallet blir det ju faktiskt ett ganska enkelt sätt att snabba upp ett skript, istället för knepigt många IF satser i sl skriptet som är det enda alternativet jag känner till.

      Comment


      • #4
        Körde ett första test på B-IDX-DAXI, OMXS30, ESPFUT-1, SIX-IDX-N100 från 20120101 till 20200528 med följande inställningar.

        antal_steg:=3 {antal delköp/steg}
        storlek_steg:=0.33 {del av kontot för varje delköp}
        hävstång_max:=2 {största hävstången på portföljen för att tillåta köp(minskar risk om man kör flera index samtidigt)}

        limiter:=15 {värde som ska dras från RSIWS för att ge trigger signal }
        ris:=4 {RSI perioder}

        $par_perioder1:=50 {50}
        $par_perioder2:=2000 {1000}

        Och ändrade signal raden till -
        signal=and(lt(c,aref(c,1)),lt(rsiws(ris),sub(div(VAP,1.5),limiter)))

        Resultatet blev ok, men jösses sån tid det tar i analysatorn.
        - Arbetad tid: 12865656ms.
        -----------------------------------------

        Max Result Drawdown 11.7520 %
        Sharpekvot 0.4667 (månadsresultat) (pre 1994 0.4667)
        -2.4230 (årsomräknat) (pre 1994 -2.4230)
        Effektivt Resultat: 292.9046% - Slutsaldo kontot: 3929045.90

        Avkastning 2929045.90 kr 0.92% på 239 affärer under 3353:00:00 tim
        Av dessa blankat 0 st med avkastning 0.00 kr 0.00%
        Innehav 203 st med vinst 4359270.50 kr 1.73%
        Innehav 36 st med förlust -1430224.38 kr -2.12%
        Blankning 0 st med vinst 0.00 kr 0.00%
        Blankning 0 st med förlust 0.00 kr 0.00%
        AlgoPal - Emotionless Trading - Hyr ut våra trading algoritmer for Autostock via algopal.com

        Comment


        • #5
          Riktigt bra resultat! Snyggt jobbat!

          Comment


          • #6
            Rickard, finns det något trix för att speeda upp det skriptet i bänken? Jag har tålamod, men 3,5h för en körning är i värsta laget, kör med 1min upplösning :-/
            AlgoPal - Emotionless Trading - Hyr ut våra trading algoritmer for Autostock via algopal.com

            Comment


            • #7
              Njae, men du kan ju lägga det som kontrollscript under simulering och sen baka in det i triggerscriptet för att köra live.

              Comment


              • #8
                Jag har tittat lite på parametrarna och justerat lite för att öka vinsten. Baksidan av myntet är att DD och tid i marknaden ökar lite. Så det är en smaksak vad man väljer.
                Man borde kanske kunna konstruera en bättre säljmodul men det har jag inte provat än...det kanske kommer.
                Testa och känn efter om det är värt mer vinst mot lite mer DD & tid i marknaden?

                Ändrat på köpsidan:
                limiter:=12

                Ändrat på säljsidan:
                hög=gt(c,hhv(aref(c,1),10))

                Comment

                Working...
                X