Allmänt meddelande

Collapse
No announcement yet.

Hålla reda på x antal inköpsnivåer mha globala celler

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

  • Hålla reda på x antal inköpsnivåer mha globala celler

    Varför funkar inte följande kod? Vill spara köppriset när köp triggas och skala upp så att många värden kan sparas sen.

    köp1 - är min köptrigger

    cell_1_ledig=if(eqv(GetGvar(201),0),1,0)
    cell_2_ledig=if(eqv(GetGvar(202),0),1,0)
    cell_3_ledig=if(eqv(GetGvar(203),0),1,0)

    if(cell_1_ledig,SetGvarif(köppris,201,köp1),if(cell_2_ledig,SetGvarif(köppris,202,köp1),if(cell_3_ledig,SetGvarif(köppris,203,köp1),0)))


    Varje gång köp1 är sant så sparas köppriset i alla tre cellerna. Det är som om den inledande if-satsen inte har någon funktion. Är cell_1_ledig så ska väl koden vara nöjd med det, spara värdet för köppris i cell 201 och sen avsluta if-satsen!??

    Jag tänker uppenbarligen fel här... Någon som har en lösning?

  • #2
    If-satsen är felformulerad, SetGVarIf körs inte.

    Lägg IF på värdet istället och låt SetGVarIf skriva i alla lägen.

    Annars hade jag nog förespråkat att skriva ner saker med transaktionerna i cell 0-4 med RetVal istället. Det kan läsas ut i efterhand med Lasttrade(B,0-4)

    På så vis blir det kontounikt, instrumentunikt och ligger kvar i databasen även i händelse av krasch eller omstart osv.

    Comment


    • #3
      Hej Rikard, jag vill spara undan ganska många värden (20 initialt, kan bli fler eller färre sen) så retval räcker inte på långa vägar... annars hade jag provat med det.

      Förstår nog inte riktigt hur du menar med koden, kan du förtydliga med kod hur principen skulle se ut!? Kan man göra en if-then-elseif-konstruktion med SetGvarIf eller hur menar du?

      Koden behöver kolla att en cell är lika med noll för att få skriva i den och det är bara en cell åt gången som får populeras... Sen ska säljsidan nolla den cell som går till försäljning så att cellen kan användas på nytt.

      Comment


      • #4
        värde=if(villkor,variabel1,variabel2)
        setgvarif(cell,värde,eqv(getgvar(cell),0))


        så här tänker jag, cellen skrivs bara om värdet är noll, och då skrivs värdet som beror på "villkor".

        Comment


        • #5
          Bara ett praktiskt exempel som jag har använt. Samma idé som Rikards. Är det mycket kan man ha en loop istället. Tänk på vad som händer då alla celler har värden eller någon resetfunktion.

          vlkSkriva=and(1,1) {xxxxxx}
          värde1=if(eqv(GetGvar(101),0),101,0)
          värde2=if(and(eqv(värde1,0),eqv(GetGvar(102),0)),102,värde1)
          värde3=if(and(eqv(värde2,0),eqv(GetGvar(103),0)),103,värde2)
          värdeSista=if(eqv(värde3,0),10,värde3) {vill ej ha noll om alla är fyllda}
          SetGvarIf(c,värdeSista,and(vlkSkriva,gt(värdeSista,100)))

          Comment


          • #6
            Ska det inte stå i ordningen värde-cell nr-villkor för funktionen setgvarif?

            Sen måste jag väl ha en elseif-funktion inbyggd för att den ska skriva i rätt cell? Säg för enkelhets skull att jag använder bara 3 celler. Om scriptet har köpt 2 gånger och fyllt cell 1 och 2 med värden så får den bara skriva i den tredje och tomma cellen. Nästa gång har den kanske sålt och säljsidan har nollat cell 2 och då är det den som nästa köppris ska in i då den köper på nytt.

            Kan man konstruera det såhär med cell nr 201, 202 och 203:

            cellnr=if(cell_1_ledig,201,if(cell_2_ledig,202,if(cell_3_ledig,203,0)))
            setgvarif(köppris,cellnr,köpvillkor)

            ?

            Comment


            • #7
              Varför inte? På längden eller bredden. Förutom att de nog finns en begränsning av hur många if-nåver som går att använda eller är praktiskt att använda. Eftersom att du ändå behöver cell_1_ledig, osv blir det samma sak som mitt script fast med ett extra steg. Jag skulle även se till att cellnr inte blir noll även om jag inte vet vad som händer då det blir ett runtime error.

              Comment


              • #8
                Längden eller bredden ja. Det viktiga är att det är någotsånär intuitivt i den egna skallen.

                Istället för cellnr noll så kan man ju använda ett annat nummer som slask och sätta krav på sista köpvillkoret att den inte får köpa om det är slasken som returnerats.

                Jag ska testa lite ikväll, så jag lär återkomma med antingen nya problem eller ett glädjebesked. Vi får hoppas på det senare...!
                Last edited by swedtraders; 2019-10-14, 14:46.

                Comment


                • #9
                  Nu funkar det. Tack Henric o Rikard för er hjälp!

                  Principen blev såhär:

                  Kollar varje cell om den är ledig
                  cell_1_ledig=if(eqv(GetGvar(201),0),1,0)
                  cell_2_ledig=if(eqv(GetGvar(202),0),1,0)
                  cell_3_ledig=if(eqv(GetGvar(203),0),1,0)
                  .
                  .
                  .

                  Delade upp cellnr-uträkningen i 4 delar för att klara max parentesdjup och satte cell 199 som slaskcell så att det alltid finns en cell att skriva till (kanske onödigt för köp1 blir bara sant om det också finns en ledig cell... jaja, hängslen o livrem)
                  cell_nr_1_t_5=if(cell_1_ledig,201,if(cell_2_ledig,202,if(cell_3_ledig,203,if(cell_4_ledig,204,if(cell_5_ledig,205,199)))))
                  cell_nr_6_t_10=if(gt(cell_nr_1_t_5,199),cell_nr_1_t_5,if(cell_6_ledig,206,if(cell_7_ledig,207,if(cell_8_ledig,208,if(cell_9_ledig,209,if(cell_10_ledig ,210,199))))))
                  cell_nr_11_t_15=if(gt(cell_nr_6_t_10,199),cell_nr_6_t_10,if(cell_11_ledig,211,if(cell_12_ledig,212,if(cell_13_ledig,213,if(cell_14_ledig,214,if(cell_1 5_ledig,215,199))))))
                  cell_nr_tot=if(gt(cell_nr_11_t_15,199),cell_nr_11_t_15,if(cell_16_ledig,216,if(cell_17_ledig,217,if(cell_18_ledig,218,if(cell_19_ledig,219,if(cell_20_ ledig,220,199))))))

                  setgvarif(köppris,cell_nr_tot,köp1)

                  Max 20 positioner kan fyllas. Nu ska bara säljsidan nolla resp. cell som går till försäljning också, sen kan jag börja testa på riktigt. Ja, signalmotorn ska också läggas till nu när principen fungerar.
                  Är även inne på att arbeta om scriptet och låta varje anslutet papper diktera cellnr (via indata script) för att göra det mer flexibelt. Man får vara noga med att cellerna inte krockar med andra script eller överlappar varandra om man kör flera papper parallellt, men det måste man ju kolla oavsett...

                  Nu... sängen!
                  Last edited by swedtraders; 2019-10-16, 02:26.

                  Comment


                  • #10
                    Jösses, vilken kod!

                    Comment


                    • #11
                      Jo, det finns säkert bättre sätt att koda på... förslag mottages gärna!

                      Comment

                      Working...
                      X