Allmänt meddelande

Collapse
No announcement yet.

Ranka topp 5

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

  • Ranka topp 5

    Hej!
    Jag skulle vilja bygga en rankingmotor som rankar de 5 bästa aktierna baserat på procentuell utveckling senaste månaden. Därefter ska dessa aktier "sparas ner" i en månad för att därefter återigen rankas.
    Nedan är mitt script som dock inte fungerar. Misstänker att jag kan vara helt ute och cyklar så därav vänder jag mig till forumet för hjälp.
    Tack på förhand!

    ny_månad=lt(dayofmonth(),aref(dayofmonth(),1))
    slutkurs_1=find(ny_månad,400,aref(c,1),1)
    slutkurs_2=find(ny_månad,400,aref(c,1),2)
    rate=div(slutkurs_1,slutkurs_2)
    draw(slutkurs_1,2,dgqb)
    draw(slutkurs_2,3,rqb)
    draw(mult(ny_månad,20),4,bsbf)

    1_procentuell_utveckling=div(slutkurs_1,slutkurs_2)
    bästa_kandidat=getgvar(9785)
    nollställ=and(ny_månad,eqv(xtime(date(),h),9))
    skriv_ut=and(not(nollställ),gt(1_procentuell_utveckling,bästa_kandidat))
    setgvarif(0,9785,nollställ)
    setgvarif(2_procentuell_utveckling,9785,skriv_ut)
    setgvarif(crcid(),9784,skriv_ut)
    kandidat_1=eqv(crcid(),getgvar(9784))

    2_procentuell_utveckling=aref(div(slutkurs_1,slutkurs_2),1)
    nästbästa_kandidat=getgvar(9783)
    nollställ=and(ny_månad,eqv(xtime(date(),h),9))
    skriv_ut=and(not(nollställ),gt(2_procentuell_utveckling,nästbästa_kandidat))
    setgvarif(0,9783,nollställ)
    setgvarif(2_procentuell_utveckling,9783,skriv_ut)
    setgvarif(crcid(),9782,skriv_ut)
    kandidat_2=eqv(crcid(),getgvar(9782))

    3_procentuell_utveckling=aref(div(slutkurs_1,slutkurs_2),2)
    tredje_bästa_kandidat=getgvar(9781)
    nollställ=and(ny_månad,eqv(xtime(date(),h),9))
    skriv_ut=and(not(nollställ),gt(3_procentuell_utveckling,tredje_bästa_kandidat))
    setgvarif(0,9781,nollställ)
    setgvarif(3_procentuell_utveckling,9781,skriv_ut)
    setgvarif(crcid(),9780,skriv_ut)
    kandidat_3=eqv(crcid(),getgvar(9780))

    4_procentuell_utveckling=aref(div(slutkurs_1,slutkurs_2),3)
    fjärde_bästa_kandidat=getgvar(9779)
    nollställ=and(ny_månad,eqv(xtime(date(),h),9))
    skriv_ut=and(not(nollställ),gt(4_procentuell_utveckling,fjärde_bästa_kandidat))
    setgvarif(0,9779,nollställ)
    setgvarif(4_procentuell_utveckling,9779,skriv_ut)
    setgvarif(crcid(),9778,skriv_ut)
    kandidat_4=eqv(crcid(),getgvar(9778))

    5_procentuell_utveckling=aref(div(slutkurs_1,slutkurs_2),4)
    femte_bästa_kandidat=getgvar(9777)
    nollställ=and(ny_månad,eqv(xtime(date(),h),9))
    skriv_ut=and(not(nollställ),gt(5_procentuell_utveckling,femte_bästa_kandidat))
    setgvarif(0,9777,nollställ)
    setgvarif(5_procentuell_utveckling,9777,skriv_ut)
    setgvarif(crcid(),9776,skriv_ut)
    kandidat_5=eqv(crcid(),getgvar(9776))

  • #2
    Hej Tobias!
    Jag har inte gått igenom din kod och svarar inte helt på din fråga utan kommer bara att ge dig lite tips samt bra att ha kod.
    Säg att du vill ta ut den "bästa" av 30 aktier.
    Först får du göra 10 st dummyordermodeller som inte handlar men som var och en tar in 3 aktier som cmpref. Där testar du alla tre aktierna på det sättet du vill och lägger resultatet i var sin globala variabel.
    I det 11:e dummyscriptet (kan även läggas i slutet av det 10:e dummyscriptet), kan man göra följande koll för att få fram den bästa aktien:

    vinnare01=if(Gt(Abs(GetGVar(3801)),Abs(GetGVar(3802))),3801,3802)
    vinnare02=if(Gt(Abs(GetGVar(3803)),Abs(GetGVar(3804))),3803,3804)
    vinnare03=if(Gt(Abs(GetGVar(3805)),Abs(GetGVar(3806))),3805,3806)
    vinnare04=if(Gt(Abs(GetGVar(3807)),Abs(GetGVar(3808))),3807,3808)
    vinnare05=if(Gt(Abs(GetGVar(3809)),Abs(GetGVar(3810))),3809,3810)
    vinnare06=if(Gt(Abs(GetGVar(3811)),Abs(GetGVar(3812))),3811,3812)
    vinnare07=if(Gt(Abs(GetGVar(3813)),Abs(GetGVar(3814))),3813,3814)
    vinnare08=if(Gt(Abs(GetGVar(3815)),Abs(GetGVar(3816))),3815,3816)
    vinnare09=if(Gt(Abs(GetGVar(3817)),Abs(GetGVar(3818))),3817,3818)
    vinnare10=if(Gt(Abs(GetGVar(3819)),Abs(GetGVar(3820))),3819,3820)
    vinnare11=if(Gt(Abs(GetGVar(3821)),Abs(GetGVar(3822))),3821,3822)
    vinnare12=if(Gt(Abs(GetGVar(3823)),Abs(GetGVar(3824))),3823,3824)
    vinnare13=if(Gt(Abs(GetGVar(3825)),Abs(GetGVar(3826))),3825,3826)
    vinnare14=if(Gt(Abs(GetGVar(3827)),Abs(GetGVar(3828))),3827,3828)
    vinnare15=if(Gt(Abs(GetGVar(3829)),Abs(GetGVar(3830))),3829,3830)


    vinnare20=if(Gt(Abs(GetGVar(vinnare01)),Abs(GetGVar(vinnare02))),vinnare01,vinnare02)
    vinnare21=if(Gt(Abs(GetGVar(vinnare03)),Abs(GetGVar(vinnare04))),vinnare03,vinnare04)
    vinnare22=if(Gt(Abs(GetGVar(vinnare05)),Abs(GetGVar(vinnare06))),vinnare05,vinnare06)
    vinnare23=if(Gt(Abs(GetGVar(vinnare07)),Abs(GetGVar(vinnare08))),vinnare07,vinnare08)
    vinnare24=if(Gt(Abs(GetGVar(vinnare09)),Abs(GetGVar(vinnare10))),vinnare09,vinnare10)
    vinnare25=if(Gt(Abs(GetGVar(vinnare11)),Abs(GetGVar(vinnare12))),vinnare11,vinnare12)
    vinnare26=if(Gt(Abs(GetGVar(vinnare13)),Abs(GetGVar(vinnare14))),vinnare13,vinnare14)
    vinnare27=if(Gt(Abs(GetGVar(vinnare15)),Abs(GetGVar(vinnare15))),vinnare15,vinnare15)

    vinnare30=if(Gt(Abs(GetGVar(vinnare20)),Abs(GetGVar(vinnare21))),vinnare20,vinnare21)
    vinnare31=if(Gt(Abs(GetGVar(vinnare22)),Abs(GetGVar(vinnare23))),vinnare22,vinnare23)
    vinnare32=if(Gt(Abs(GetGVar(vinnare24)),Abs(GetGVar(vinnare25))),vinnare24,vinnare25)
    vinnare33=if(Gt(Abs(GetGVar(vinnare26)),Abs(GetGVar(vinnare27))),vinnare26,vinnare27)

    vinnare40=if(Gt(Abs(GetGVar(vinnare30)),Abs(GetGVar(vinnare31))),vinnare30,vinnare31)
    vinnare41=if(Gt(Abs(GetGVar(vinnare32)),Abs(GetGVar(vinnare33))),vinnare32,vinnare33)

    vinnare50=if(Gt(Abs(GetGVar(vinnare40)),Abs(GetGVar(vinnare41))),vinnare40,vinnare41)
    ----------------------
    Vinnare50 innhåller alltså numret på den globala variabel som rankats högst enligt din test.
    GetGVar(vinnare50) är värdet av rankingen.

    Du får även ha en tabell så att du vet vilken aktie som numret på den globala variabeln motsvarar. Tex
    vinnareaktieid=GetGVar(add(vinnare50,100))

    mvh
    Bertil


    Edit: ABS kanske inte är nödvändigt att använda i ditt fall, men då jag gjorde testen ville jag se vilken aktie som påverkade indexet mest oberoende om aktien gick upp eller ner.
    Last edited by Bertil; 2020-06-22, 12:47.

    Comment


    • #3
      Säg att du önskar ranka vilken av de 30 ingående aktierna som hade störst procentuell förändring de senaste 22 handelsdagarna (dagens kurs ej inräknad) motsvarar ungefär 30 kalenderdagar (1 månad).

      Då får du göra 10 dummyordermodeller enligt nedan:

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

      { DDD2 01 to 03 }
      { ABB }
      { Alfa }
      { ASSA }

      i1(

      SetGVarIf(Div(sub(cmpref(c,1,a),cmpref(c,23,a)),cmpref(c,23,a)),3801,1)
      SetGVarIf(Div(sub(cmpref(c,1,b),cmpref(c,23,b)),cmpref(c,23,b)),3802,1)
      SetGVarIf(Div(sub(cmpref(c,1,c),cmpref(c,23,c)),cmpref(c,23,c)),3803,1)
      And(0,0)
      )


      {@A(0,ABB )@B(0,ALFA )@C(0,ASSA B )}

      ............................................

      { DDD2 04 to 06 }
      { Atlas A }
      { Atlas B }
      { AZN }

      i1(

      SetGVarIf(Div(sub(cmpref(c,1,a),cmpref(c,23,a)),cmpref(c,23,a)),3804,1)
      SetGVarIf(Div(sub(cmpref(c,1,b),cmpref(c,23,b)),cmpref(c,23,b)),3805,1)
      SetGVarIf(Div(sub(cmpref(c,1,c),cmpref(c,23,c)),cmpref(c,23,c)),3806,1)
      And(0,0)
      )

      {@A(0,ATCO A )@B(0,ATCO B )@C(0,AZN )}

      ................................................

      osv.

      mvh
      Bertil
      Last edited by Bertil; 2020-06-22, 12:33.

      Comment


      • #4
        TIPS
        Då du skriver ett script så försök aldrig att skriva hela scriptet på en gång, utan dela upp det i småavsnitt som går att kontrollera var för sig. Sedan kan du skriva ihop det. Att göra script är 10% kodning och 90 % felsökning.
        Därför måste man koda så att det går lätt att felsöka.

        mvh
        Bertil

        Comment


        • #5
          Ursprungligen postat av Tobias00 Visa inlägg
          Hej!
          Jag skulle vilja bygga en rankingmotor som rankar de 5 bästa aktierna baserat på procentuell utveckling senaste månaden. Därefter ska dessa aktier "sparas ner" i en månad för att därefter återigen rankas.
          Nedan är mitt script som dock inte fungerar. Misstänker att jag kan vara helt ute och cyklar så därav vänder jag mig till forumet för hjälp.
          Tack på förhand!

          ny_månad=lt(dayofmonth(),aref(dayofmonth(),1))
          slutkurs_1=find(ny_månad,400,aref(c,1),1)
          slutkurs_2=find(ny_månad,400,aref(c,1),2)
          rate=div(slutkurs_1,slutkurs_2)
          draw(slutkurs_1,2,dgqb)
          draw(slutkurs_2,3,rqb)
          draw(mult(ny_månad,20),4,bsbf)

          1_procentuell_utveckling=div(slutkurs_1,slutkurs_2)
          bästa_kandidat=getgvar(9785)
          nollställ=and(ny_månad,eqv(xtime(date(),h),9))
          skriv_ut=and(not(nollställ),gt(1_procentuell_utveckling,bästa_kandidat))
          setgvarif(0,9785,nollställ)
          setgvarif(2_procentuell_utveckling,9785,skriv_ut)
          setgvarif(crcid(),9784,skriv_ut)
          kandidat_1=eqv(crcid(),getgvar(9784))

          2_procentuell_utveckling=aref(div(slutkurs_1,slutkurs_2),1)
          nästbästa_kandidat=getgvar(9783)
          nollställ=and(ny_månad,eqv(xtime(date(),h),9))
          skriv_ut=and(not(nollställ),gt(2_procentuell_utveckling,nästbästa_kandidat))
          setgvarif(0,9783,nollställ)
          setgvarif(2_procentuell_utveckling,9783,skriv_ut)
          setgvarif(crcid(),9782,skriv_ut)
          kandidat_2=eqv(crcid(),getgvar(9782))

          3_procentuell_utveckling=aref(div(slutkurs_1,slutkurs_2),2)
          tredje_bästa_kandidat=getgvar(9781)
          nollställ=and(ny_månad,eqv(xtime(date(),h),9))
          skriv_ut=and(not(nollställ),gt(3_procentuell_utveckling,tredje_bästa_kandidat))
          setgvarif(0,9781,nollställ)
          setgvarif(3_procentuell_utveckling,9781,skriv_ut)
          setgvarif(crcid(),9780,skriv_ut)
          kandidat_3=eqv(crcid(),getgvar(9780))

          4_procentuell_utveckling=aref(div(slutkurs_1,slutkurs_2),3)
          fjärde_bästa_kandidat=getgvar(9779)
          nollställ=and(ny_månad,eqv(xtime(date(),h),9))
          skriv_ut=and(not(nollställ),gt(4_procentuell_utveckling,fjärde_bästa_kandidat))
          setgvarif(0,9779,nollställ)
          setgvarif(4_procentuell_utveckling,9779,skriv_ut)
          setgvarif(crcid(),9778,skriv_ut)
          kandidat_4=eqv(crcid(),getgvar(9778))

          5_procentuell_utveckling=aref(div(slutkurs_1,slutkurs_2),4)
          femte_bästa_kandidat=getgvar(9777)
          nollställ=and(ny_månad,eqv(xtime(date(),h),9))
          skriv_ut=and(not(nollställ),gt(5_procentuell_utveckling,femte_bästa_kandidat))
          setgvarif(0,9777,nollställ)
          setgvarif(5_procentuell_utveckling,9777,skriv_ut)
          setgvarif(crcid(),9776,skriv_ut)
          kandidat_5=eqv(crcid(),getgvar(9776))

          Jag har inte tittat på funktionalitet. Ser några fel. Jag ser att nollställ används på många ställen. Vill du använda samma villkor används en minnesreferens innan den används längre ner. Kör en kompileringstest så att delnamn inte används av andra minnesreferenser.

          Comment


          • #6
            Fråga till Tobias:
            Jag uppfattade det som du ville köra rankingen skarpt var 5:e sekund, men du kanske bara önskar att köra manuellt i kalkylforskaren en gång per månad?

            Jag ser att du har kontroller på crcid(). Är det så att du tänkt koppla din ordermodell till alla intressanta aktier samtidigt? I så fall behöver man ju inte ta in via cmpref som jag föreslog.
            Då du testar i Simulatorn och kopplar till flera instrument måste du ha "kör som samtidigt kopplade" ibockat.
            mvh
            Bertil
            Last edited by Bertil; 2020-06-22, 13:12.

            Comment


            • #7
              Här är en rankingmotor vi använt i lite olika sammanhang, har ändrat så att den tar fram ROC(c,22,%) första börsdagen varje månad och rankar på de värdena. Cellerna nollställs första minuten varje timme, och inom 2 scriptcykler har de uppdaterats med topp 5-kandidaterna igen.
              "kandidat" blir true om aktien scriptet kör just nu ligger på topp 5-listan. Enkelt att se att det fungerar genom att klicka på Debug-knappen och koppla scriptet till en av aktierna som ingår i urvalet. id1 till id5 visar CRCID för alla fem toppaktier.



              hysteres1:=1.02
              hysteres2:=0.98


              open:=9.5
              close:=17.3
              $par1:=14
              $par2:=25





              ej_abb=not(eqv(crcid(),3588324501))

              { Ranking }

              nymån=not(eqv(monthnumber(),aref(monthnumber(),1)))
              poäng_tt=find(nymån,30,roc(c,22,%),1)
              draw(poäng_tt,2,dgaa)
              best=getgvar(9981)
              id1=getgvar(9976)
              id2=getgvar(9977)
              id3=getgvar(9978)
              id4=getgvar(9979)
              id5=getgvar(9980)



              nollställ=eqv(xtime(date(),m),0)
              innan1720=not(nollställ)

              setgvarif(-1,9981,nollställ)
              setgvarif(-1,9980,nollställ)
              setgvarif(-1,9979,nollställ)
              setgvarif(-1,9978,nollställ)
              setgvarif(-1,9977,nollställ)
              setgvarif(-1,9976,nollställ)
              setgvarif(-1,9975,nollställ)
              setgvarif(-1,9982,or(nollställ,gt(getgvar(9982),mult(hysteres1,getgvar(9981)))))
              setgvarif(-1,9983,or(nollställ,gt(getgvar(9983),mult(hysteres1,getgvar(9982)))))
              setgvarif(-1,9984,or(nollställ,gt(getgvar(9984),mult(hysteres1,getgvar(9983)))))
              setgvarif(-1,9985,or(nollställ,gt(getgvar(9985),mult(hysteres1,getgvar(9984)))))

              write=and(and(innan1720,gt(poäng_tt,mult(best,hysteres2))),gt(poäng_tt,0))
              setgvarif(poäng_tt,9981,write)
              setgvarif(crcid(),9980,write)

              set_kand2=and(and(gt(poäng_tt,getgvar(9982)),lt(poäng_tt,mult(hysteres2,getgvar(9981)))),innan1720)
              setgvarif(poäng_tt,9982,set_kand2)
              setgvarif(crcid(),9979,set_kand2)

              set_kand3=and(and(gt(poäng_tt,getgvar(9983)),lt(poäng_tt,mult(hysteres2,getgvar(9982)))),innan1720)
              setgvarif(poäng_tt,9983,set_kand3)
              setgvarif(crcid(),9978,set_kand3)

              set_kand4=and(and(gt(poäng_tt,getgvar(9984)),lt(poäng_tt,mult(hysteres2,getgvar(9983)))),innan1720)
              setgvarif(poäng_tt,9984,set_kand4)
              setgvarif(crcid(),9977,set_kand4)

              set_kand5=and(and(gt(poäng_tt,getgvar(9985)),lt(poäng_tt,mult(hysteres2,getgvar(9984)))),innan1720)
              setgvarif(poäng_tt,9985,set_kand5)
              setgvarif(crcid(),9976,set_kand5)


              kandidat=or(or(or(or(eqv(crcid(),id1),eqv(crcid(),id2)),eqv(crcid(),id3)),eqv(crcid(),id4)),eqv(crcid(),id5))
              and(0,0)

              Comment


              • #8
                Hej!
                Stort tack för alla svar!
                Som svar på din fråga Bertil: ja, tanken är att strategin ska köras en gång i månaden och inte var femte sekund, jag kanske var lite otydlig när jag förklara.

                Än en gång, tack för svar!

                Mvh
                Tobias

                Comment


                • #9
                  Hej igen,

                  Efter att ha läst allt ni skrev så gjorde jag lite ändringar. Nu fungerar scriptet, dock vet jag inte om det är precis korrekt utefter va jag "vill" att det ska utföra, nämligen att ranka de 5 bästa aktierna procentuellt senaste månaden ur ett antal aktier som jag kopplar till modellen. Därefter ska modellen köpa aktien/aktierna om EMA5 är över EMA14. Ni har redan hjälpt mig mycket men om någon skulle kunna ögna igenom scriptet hade det varit guld värt!
                  /Tobias

                  ny_månad:=lt(dayofmonth(),aref(dayofmonth(),1))
                  slutkurs_1:=find(ny_månad,400,aref(c,1),1)
                  slutkurs_2:=find(ny_månad,400,aref(c,1),2)
                  rate:=div(slutkurs_1,slutkurs_2)
                  draw(slutkurs_1,2,dgqb)
                  draw(slutkurs_2,3,rqb)
                  draw(mult(ny_månad,20),4,bsbf)
                  nollställ:=and(ny_månad,eqv(xtime(date(),h),9))

                  1_procentuell_utveckling=div(slutkurs_1,slutkurs_2)
                  1_kandidat=getgvar(9785)
                  skriv_ut_1=and(not(nollställ),gt(1_procentuell_utveckling,1_kandidat))
                  setgvarif(0,9785,nollställ)
                  setgvarif(2_procentuell_utveckling,9785,skriv_ut_1)
                  setgvarif(crcid(),9784,skriv_ut_1)
                  kandidat_nummer_1=eqv(crcid(),getgvar(9784))

                  2_procentuell_utveckling=aref(div(slutkurs_1,slutkurs_2),1)
                  2_kandidat=getgvar(9783)
                  skriv_ut_2=and(not(nollställ),gt(2_procentuell_utveckling,2_kandidat))
                  setgvarif(0,9783,nollställ)
                  setgvarif(2_procentuell_utveckling,9783,skriv_ut_2)
                  setgvarif(crcid(),9782,skriv_ut_2)
                  kandidat_nummer_2=eqv(crcid(),getgvar(9782))

                  3_procentuell_utveckling=aref(div(slutkurs_1,slutkurs_2),2)
                  3_kandidat=getgvar(9781)
                  skriv_ut_3=and(not(nollställ),gt(3_procentuell_utveckling,3_kandidat))
                  setgvarif(0,9781,nollställ)
                  setgvarif(3_procentuell_utveckling,9781,skriv_ut_3)
                  setgvarif(crcid(),9780,skriv_ut_3)
                  kandidat_nummer_3=eqv(crcid(),getgvar(9780))

                  4_procentuell_utveckling=aref(div(slutkurs_1,slutkurs_2),3)
                  4_kandidat=getgvar(9779)
                  skriv_ut_4=and(not(nollställ),gt(4_procentuell_utveckling,4_kandidat))
                  setgvarif(0,9779,nollställ)
                  setgvarif(4_procentuell_utveckling,9779,skriv_ut_4)
                  setgvarif(crcid(),9778,skriv_ut_4)
                  kandidat_nummer_4=eqv(crcid(),getgvar(9778))

                  5_procentuell_utveckling=aref(div(slutkurs_1,slutkurs_2),4)
                  5_kandidat=getgvar(9777)
                  skriv_ut_5=and(not(nollställ),gt(5_procentuell_utveckling,5_kandidat))
                  setgvarif(0,9777,nollställ)
                  setgvarif(5_procentuell_utveckling,9777,skriv_ut_5)
                  setgvarif(crcid(),9776,skriv_ut_5)
                  kandidat_nummer_5=eqv(crcid(),getgvar(9776))

                  aktier_1=or(kandidat_nummer_1,kandidat_nummer_2)
                  aktier_2=or(aktier_1,kandidat_nummer_3)
                  aktier_3=or(aktier_2,kandidat_nummer_4)
                  samtliga_aktier=or(aktier_3,kandidat_nummer_5)

                  ema5=EMA(C,5)
                  ema14=EMA(C,14)
                  trend_upp=gt(ema5,ema14)

                  köp_aktie=and(samtliga_aktier,trend_upp)

                  Comment


                  • #10
                    Är det EMA5 och EMA14 i dagsupplösning också? När ska de säljas? Om de faller ur topp 5-listan nästa månad?

                    Comment


                    • #11
                      2_procentuell_utveckling inte deklarerad än. Ska nog vara "1_procentuell_utveckling". Se nedan:

                      setgvarif(2_procentuell_utveckling,9785,skriv_ut_1)


                      Jag har inte testat koden, men är det inte risk för att en kandidat eller några kandidater fastnar i flera nät.

                      Comment


                      • #12
                        Här är en som verkar fungera:

                        hysteres1:=1.02
                        hysteres2:=0.98


                        open:=9.5
                        close:=17.3


                        hävstång:=1
                        setgvarif(hävstång,9800,1)

                        { Ranking }

                        nymån=not(eqv(monthnumber(),aref(monthnumber(),1)))
                        poäng_tt=find(nymån,30,roc(c,22,%),1)
                        draw(poäng_tt,2,dgaa)
                        best=getgvar(9981)
                        id1=getgvar(9976)
                        id2=getgvar(9977)
                        id3=getgvar(9978)
                        id4=getgvar(9979)
                        id5=getgvar(9980)



                        nollställ=and(eqv(xtime(date(),h),17),eqv(xtime(date(),m),15))
                        innan1720=not(nollställ)

                        setgvarif(-1,9981,nollställ)
                        setgvarif(-1,9980,nollställ)
                        setgvarif(-1,9979,nollställ)
                        setgvarif(-1,9978,nollställ)
                        setgvarif(-1,9977,nollställ)
                        setgvarif(-1,9976,nollställ)
                        setgvarif(-1,9975,nollställ)
                        setgvarif(-1,9982,or(nollställ,gt(getgvar(9982),mult(hysteres1,getgvar(9981)))))
                        setgvarif(-1,9983,or(nollställ,gt(getgvar(9983),mult(hysteres1,getgvar(9982)))))
                        setgvarif(-1,9984,or(nollställ,gt(getgvar(9984),mult(hysteres1,getgvar(9983)))))
                        setgvarif(-1,9985,or(nollställ,gt(getgvar(9985),mult(hysteres1,getgvar(9984)))))

                        write=and(and(innan1720,gt(poäng_tt,mult(best,hysteres2))),gt(poäng_tt,0))
                        setgvarif(poäng_tt,9981,write)
                        setgvarif(crcid(),9980,write)

                        set_kand2=and(and(gt(poäng_tt,getgvar(9982)),lt(poäng_tt,mult(hysteres2,getgvar(9981)))),innan1720)
                        setgvarif(poäng_tt,9982,set_kand2)
                        setgvarif(crcid(),9979,set_kand2)

                        set_kand3=and(and(gt(poäng_tt,getgvar(9983)),lt(poäng_tt,mult(hysteres2,getgvar(9982)))),innan1720)
                        setgvarif(poäng_tt,9983,set_kand3)
                        setgvarif(crcid(),9978,set_kand3)

                        set_kand4=and(and(gt(poäng_tt,getgvar(9984)),lt(poäng_tt,mult(hysteres2,getgvar(9983)))),innan1720)
                        setgvarif(poäng_tt,9984,set_kand4)
                        setgvarif(crcid(),9977,set_kand4)

                        set_kand5=and(and(gt(poäng_tt,getgvar(9985)),lt(poäng_tt,mult(hysteres2,getgvar(9984)))),innan1720)
                        setgvarif(poäng_tt,9985,set_kand5)
                        setgvarif(crcid(),9976,set_kand5)


                        kandidat=or(or(or(or(eqv(crcid(),id1),eqv(crcid(),id2)),eqv(crcid(),id3)),eqv(crcid(),id4)),eqv(crcid(),id5))



                        öppet=ge(mult(1440,sub(market(c),frac(date()))),5)
                        stängning=le(mult(1440,sub(market(c),frac(date()))),10)
                        ej_innehav=eqv(portfolio(v),0)
                        em1=ema(c,5)
                        em2=ema(c,14)
                        upp=gt(em1,em2)
                        köp1=and(and(upp,kandidat),ej_innehav)
                        köp2=and(and(köp1,nymån),and(öppet,stängning))
                        mult(köp2,10)

                        Comment


                        • #13
                          Sorry Tobias00 för att jag använder denna tråd för diskussion. Rankning är egentligen enkel, men är rent praktiskt mer komplicerad än vad man tror. Dessutom kan det lätt skilja mellan simulering och skarpt. Detta då man kör 1minuts animering för att snabba på simuleringen. Det gör att det sker en rankningsrunda per minut, medan det skarp sker ca 10ggr/minut. Skarpt skulle man kunna välja bästa kandidaten vänta 10sekunder och handla. Välj en ny osv. Då måste man även simulera med 5sek. Vid tester blir det i simulering i bland ungefär samma med 5sek och 1minut. Ibland kan det skilja en del. Hur löser man problemet:

                          1. Hysteres(inte min favorit, särskilt om analys sker i det kortare perspektivet)
                          2. Sorteringsfunktion som sorterar fram bästa till sämsta med uppdatering av redan rankade. Ny kandidat om bättre än sämsta.
                          3. Håll koll på den sämsta av de rankade och uppdatering av redan rankade. Ny kandidat om bättre än sämst rankade (tror det är min favorit, men inte implementerat ännu)

                          Comment


                          • #14
                            Om man kör motorn i mitt inlägg får man samma resultat live som i simulering, det beror på att "först till kvarn" inte gäller, ifall en ny kandidat hittas som är bättre än nr 2 i listan nollas cellerna och den nya hamnar där istället. På så vis undviker man risken att listan blir ofullständig ifall man tex stöter på den bästa kandidaten redan från början. Skillnaden i bänken och live är att det körs i alfabetisk ordning i ena och record number-ordning i andra. Så mitt tips är att använda motorn i inlägg #12 som löser det problemet. Tog lite tid innan jag kom på varför det blev olika live och i sim, men med den extra nollningen roteras det hela mycket snyggare och blir alltid samma resultat.

                            Comment


                            • #15
                              Först till kvarn spelar ingen roll. Det kan man lätt lösa med uppdatering av värdena och att ingen nollställning behövs när kandidater byts ut. Det som inte är bra med hysteres är att 2% är mycket i det korta perspektivet. Går att minska men då blir det lätt många nollställningar och risk att det sker strax innan rankningen slutar.

                              Comment

                              Working...
                              X