Allmänt meddelande

Collapse
No announcement yet.

Intradagsranking

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

  • Intradagsranking

    Hej igen,

    Försöker bygga en rankingmotor till vilken jag kan koppla flera aktier, sedan ska scriptet ranka aktierna efter procentuell utveckling från öppning till 09:05 och välja den bästa. Denna aktie ska sedan vara kopplade till ordermodellen fram till och med 13:10. Vid 13:10 ska samma ranking ske en gång till fast denna gången från öppning till just 13:10, den aktien som då har störst procentuell utveckling sedan öppning ska kopplas till ordermodellen fram till och med 17:15.
    Nedan har jag kodat så gott jag kan men får inte rätt på det, vet att du Rikard hjälpte mig med en liknande ranking tidigare och jag har försökt använda mig av den.
    om ni vill får ni gärna kika och kommentera vad jag gjort fel och hur jag kan få det att fungera.
    Tack på förhand!
    Mvh
    Tobias

    i10(
    öppning=cmpref(o,0,a)
    morgon=eqv(frac(d),0.378472)
    byte=eqv(frac(d),0.548611)
    eftermiddag=eqv(frac(d),0.552083)
    när=if(gt(frac(d),0.548611),eftermiddag,morgon)
    proc_utv=div(find(frac(d),när,c,när),öppning)
    best=getgvar(9885)
    reset=and(byte,eqv(xtime(date(),m),790))
    write=and(not(reset),gt(proc_utv,best))
    setgvarif(0,9885,reset)
    setgvarif(proc_utv,9885,write)
    setgvarif(crcid(),9884,write)
    vald_aktie=eqv(crcid(),getgvar(9884))
    )

  • #2
    Problemet är i tidsvillkoren, tex:

    morgon=eqv(frac(d),0.378472)

    som aldrig blir sant eftersom det testar om tidstämpeln för d är exakt angivet tal, vilket det aldrig blir eftersom det finns fler decimaler efter, och det i så fall bara skulle vara sant i någon microsekund. Lösningen är att skapa tidsfönster, tex med Lt och Gt som testar att tiden är inom ett intervall.


    Jag tycker själv det är enklare att använda Xtime():

    kl_13=eqv(xtime(date(),h),13)

    är sant hela timmen som tiden befinner sig på 13:xx


    Man kan komplettera med test av minut också:

    minut_10=eqv(xtime(date(),m),10)

    så båda tillsammans är sant under den minut som varar från 13:10:00 till 13:10:59


    kl_13_10=and(kl13,minut_10)


    Comment


    • #3
      Aha, okej!

      Har jag tänkt rätt nu då?
      Måste jag ha en reset för eftermiddagen också eller den kommer inte ligga kvar sparad till dagen efter då jag vill börja på ny kula med andra aktier?

      i10(
      öppning=cmpref(o,0,a)
      tim_morg=eqv(xtime(date(),h),9)
      min_morg=eqv(xtime(date(),m),4)
      morgon=and(tim_morg,min_morg)
      tim_eft=eqv(xtime(date(),h),13)
      min_eft=eqv(xtime(date(),m),14)
      eftermiddag=and(tim_eft,min_eft)
      när=if(gt(frac(d),0.548611),eftermiddag,morgon)
      proc_utv=div(find(frac(d),när,c,när),öppning)
      best=getgvar(9885)
      reset=and(morgon,eqv(xtime(date(),m),790))
      write=and(not(reset),gt(proc_utv,best))
      setgvarif(0,9885,reset)
      setgvarif(proc_utv,9885,write)
      setgvarif(crcid(),9884,write)
      vald_aktie=eqv(crcid(),getgvar(9884))
      )

      Comment


      • #4
        Bara lite kodoptimering och förslag :-)
        morgon=and(eqv(xtime(date(),h),9), eqv(xtime(date(),m),4))

        Comment


        • #5
          Du menar så här antar jag?

          i10(
          öppning=cmpref(o,0,a)
          morgon=and(eqv(xtime(date(),h),9),eqv(xtime(date(),m),4))
          eftermiddag=and(eqv(xtime(date(),h),13),eqv(xtime(date(),m),14))
          när=if(gt(frac(d),0.548611),eftermiddag,morgon)
          proc_utv=div(find(frac(d),när,c,när),öppning)
          best=getgvar(9885)
          reset=and(morgon,eqv(xtime(date(),m),790))
          write=and(not(reset),gt(proc_utv,best))
          setgvarif(0,9885,reset)
          setgvarif(proc_utv,9885,write)
          setgvarif(crcid(),9884,write)
          vald_aktie=eqv(crcid(),getgvar(9884))
          )

          Comment


          • #6
            Yes Spelar nog ingen större roll i det här sammanhanget men exekveringen blir snabbare och minnesupptaget mindre. Kodoptimering bara Istället för att lägga data i en variabel som används en gång och/eller som inte ändrar värde senare i koden, då kan man lika gärna skippa variabeln.
            Last edited by walle; 2020-07-19, 14:26.

            Comment


            • #7
              Yepp! Låter vettigt

              Dock undrar jag om jag måste lägga till en reset för eftermiddagen också?

              Comment


              • #8
                Reset behövs för att få bort gamla värden innan man kör ny ranking. Fel på raden ”reset” där minut aldrig kan bli 790, den går från 0-59 bara.

                Comment


                • #9
                  Jag har dålig erfarenhet med att använd "o" för att hitta öpnningskurs, brukar kunna bli lite vad som helst då.
                  AlgoPal - Emotionless Trading - Hyr ut våra trading algoritmer for Autostock via algopal.com

                  Comment


                  • #10
                    Ursprungligen postat av Rikard Autostock Visa inlägg
                    Reset behövs för att få bort gamla värden innan man kör ny ranking. Fel på raden ”reset” där minut aldrig kan bli 790, den går från 0-59 bara.

                    Okej, hur skulle det scriptet se ut?

                    Comment


                    • #11
                      Ursprungligen postat av Lord S Visa inlägg
                      Jag har dålig erfarenhet med att använd "o" för att hitta öpnningskurs, brukar kunna bli lite vad som helst då.
                      Okej, så det fungerar inte alltså?
                      Finns det någon alternativ lösning?

                      Comment


                      • #12
                        Såhär ser mitt uppdaterade script ut, det som kvarstår är (väll?) endast resetfunktionen för eftermiddagen, den har jag dock inte kunskap än till att bygga själv... :/

                        i10(
                        öppning=cmpref(o,0,a)
                        tid_morg=and(eqv(xtime(date(),h),9),eqv(xtime(date(),m),4))
                        tid_eft=and(eqv(xtime(date(),h),13),eqv(xtime(date(),m),14))
                        res_morg=and(eqv(xtime(date(),h),13),eqv(xtime(date(),m),13))
                        res_eft=and(eqv(xtime(date(),h),17),eqv(xtime(date(),m),35))
                        när_tid=if(gt(frac(d),0.548611),tid_eft,tid_morg)
                        proc_utv=div(find(frac(d),när_tid,c,när_tid),öppning)
                        best=getgvar(9885)
                        reset=and(tid_morg,res_morg)
                        write=and(not(reset),gt(proc_utv,best))
                        setgvarif(0,9885,reset)
                        setgvarif(proc_utv,9885,write)
                        setgvarif(crcid(),9884,write)
                        vald_aktie=eqv(crcid(),getgvar(9884))
                        )

                        Comment


                        • #13
                          Ursprungligen postat av Tobias00 Visa inlägg
                          Okej, så det fungerar inte alltså?
                          Finns det någon alternativ lösning?
                          kl0901=and(eqv(xtime(d,h),9),eqv(xtime(d,m),01))
                          öppning=find(kl0901,600,c,1)

                          Du kan testa och se om den ger annorlunda resultat.
                          AlgoPal - Emotionless Trading - Hyr ut våra trading algoritmer for Autostock via algopal.com

                          Comment


                          • #14
                            Ursprungligen postat av Lord S Visa inlägg
                            kl0901=and(eqv(xtime(d,h),9),eqv(xtime(d,m),01))
                            öppning=find(kl0901,600,c,1)

                            Du kan testa och se om den ger annorlunda resultat.
                            Okej så den kommer fortfaramde ta ut den bästa kandidaten intradag från öppning till 09:05?

                            Comment


                            • #15
                              Är detta korrekt med hänsyn till reset för både morgon och eftermiddag?
                              Jag ger öppningsfunktionen en chans imorgon, skulle det inte fungera så testar jag din variant Lord S.

                              i10(
                              öppning=cmpref(o,0,a)
                              tid_morg=and(eqv(xtime(date(),h),9),eqv(xtime(date(),m),4))
                              tid_eft=and(eqv(xtime(date(),h),13),eqv(xtime(date(),m),14))
                              res_morg=and(eqv(xtime(date(),h),13),eqv(xtime(date(),m),13))
                              res_eft=and(eqv(xtime(date(),h),17),eqv(xtime(date(),m),34))
                              vilken_tid=if(lt(frac(d),0.551389),tid_morg,tid_eft) {Om klockan är mindre än 13:14 välj tid_morg annars tid_eft}
                              vilken_res=if(lt(frac(d),0.551389),res_morg,res_eft) {Om klockan är mindre än 13:14 välj res_morg annars res_eft}
                              proc_utv=div(find(frac(d),vilken_tid,c,vilken_tid),öppning)
                              best=getgvar(9885)
                              reset=and(vilken_tid,vilken_res)
                              write=and(not(reset),gt(proc_utv,best))
                              setgvarif(0,9885,reset)
                              setgvarif(proc_utv,9885,write)
                              setgvarif(crcid(),9884,write)
                              vald_aktie=eqv(crcid(),getgvar(9884))
                              )

                              Comment

                              Working...
                              X