Allmänt meddelande

Collapse
No announcement yet.

Limit order-script

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

  • Limit order-script

    Jag skulle vilja skapa ett script som lägger limit orders, utan att ta liggande bud i marknaden direkt. Scriptet skulle då också behöva hålla koll på när dessa limit orders eventuellt har gått igenom antingen delvis eller helt. Samtidigt har jag ett annat script i en annan instans av Autotrader som ibland lägger market orders på samma värdepapper och i samma konto, där tanken är att alla ordrar ska gå igenom på en gång.

    Har sett någonstans på forumet att limit orders inte rekommenderas i allmänhet, men vore detta möjligt? Hur skulle man i så fall kunna hålla löpande koll på ifall limit orders eventuellt har gått igenom och i vilken mängd?

    Om jag bara skulle titta på innehavet i portföljen för att försöka kontrollera ifall limit orders eventuellt har gått igenom (och i vilken mängd) så vore det svårt att urskilja vilket av scripten det är som har handlat, då det samtidigt finns ett annat script som kan handla på samma värdepapper och konto.

  • #2
    Man kan spara antal som skickades i ordern i en cell med Retval() och läsa av senare med Lasttrade(b,x) där x är cell 0-4. Eller spara önskat målantal kanske är bättre, så kan man bara läsa av med portfolio(v) senare och vet direkt hur många man har och vad man borde ha osv.
    Det som ställer till det är om en annan installation handlar i samma instrument på samma konto. Då kommer LastTrade() innehålla data från den senaste transaktionen oavsett vilken installation den kommer från.
    Men går det inte att handla allt från samma installation så underlättar det enormt? Man kan tex skriva ner i en annan cell vilken strategi det är som köpt osv.



    Comment


    • #3
      Tack för svaret! Innebär det att man från ena scriptet skulle kunna ange information i någon cell med Retval() som sedan blir åtkomligt från båda instanserna och scripten genom Lasttrade()? För i så fall borde det ju vara möjligt att hålla reda på vilket script det är som har handlat, även om det sker från olika instanser av Autotrader. Globala celler verkade annars separata per instans när jag provade tidigare.

      Jag är osäker på om en enskild instans skulle klara av att köra alla script på en gång pga begränsningar i prestandan, då jag haft problem med det tidigare enbart med det första scriptet. Därav tänkte jag att det kanske var bättre att dela upp allt på flera instanser. Får kanske prova att köra på samma när jag har kommit längre med det nya scriptet.

      Comment


      • #4
        Njae, mellan script inom samma instans inga problem, men olika instanser lever sina egna liv så där går det inte. Men vi borde kunna fixa prestanda i scripten så att det går att köra på en instans tycker jag. Alternativt dela upp så att du kör samma modell men på begränsat antal instrument per instans.

        Comment


        • #5
          Jag förstår! Ska försöka följa ditt förslag och se om jag lyckas köra båda scripten på samma instans i första hand. Tack!

          Comment


          • #6
            Det rullar på ganska bra nu när jag kör scripten på samma instans, och det går att hålla reda på varifrån ordrarna kom med retVal och lastTrade. Tack för förslaget!

            Dock har jag ett problem med att scriptet lägger kaskadbud på en och samma prisnivå när det triggas.

            Jag har försökt att undvika det genom att spara den aktuella prisnivån i en global cell, och sedan endast lägga ny order om det nya priset är ett annat.

            bidchanged=if(not(eqv(GetGVar(add(thisindex,14)),thisbuyprice)),1,0)
            SetGVarIf(thisbuyprice,add(thisindex,14),bidchanged)
            ...
            Sista raden för att eventuellt trigga order:
            add(0,if(bidchanged,thisbuyprice,0))

            Men av någon anledning så vägrar då triggern att lägga ordrar på ett av instrumenten över huvud taget, medan det fungerar som tänkt på ett annat. Har provat byta global cell utan skillnad.

            Finns det någon bättre idé om hur man kan undvika att lägga flera bud i rad på samma prisnivå? Gärna utan att använda någon typ av fördröjning, det är priset och inte tiden som ska skilja sedan senaste budet.

            Comment


            • #7
              Du kan lagra priset vid orderläggning med tex Retval(c,2) och läsa ut med Lasttrade(b,2) och jämföra:

              nytt_pris=not(eqv(c,lasttrade(b,2)))

              Comment


              • #8
                Tack, hamnar det verkligen i last trade om det är en limit order som inte går igenom? På testkontot gör det ju det oavsett, men jag har inte testat skarpt än. I så fall faller lite av min logik med att kolla på lasttrade för att se när dessa ordrar faktiskt har handlats.

                Dock löste sig problemet ovan genom att jag tog bort alla script och ordermodellen, och sedan skapade dem på nytt med exakt samma kod. Kan inte förstå varför det hjälpte dock.

                Comment


                • #9
                  Japp, allt som postas lagras i Loggade lokala ordertransar och därmed också i cellerna. Det som kan förklara varför du behövde skapa om är att en ordermodell som redan är ansluten behöver återanslutas för att ev byten av script osv ska få effekt. Att redigera i redan anslutna script slår igenom direkt, men om man bytt script eller gjort någon annan ändring i strukturen i en modell behöver den återanslutas.

                  Comment


                  • #10
                    Tack! Hade fått för mig att endast avslutade ordrar hamnde i lasttrade, och i test är det sak samma, så det var tur att jag fick veta det innan jag körde skarpt.

                    Men bara så att jag förstår rätt nu då detta är lite kritiskt för mig; enda sättet att veta vad som faktiskt har handlats är att kolla portfolio(v)? Själva avsluten finns inte tillgängliga någonstans?

                    Lasttrade och avslut kan ju i så fall hamna i olika ordning om man lägger limit orders från ett script och market orders från ett annat, så det gäller att hålla tungan rätt i mun men det borde gå.

                    Comment


                    • #11
                      Så här funkar det:

                      LastTrade(b,v) innehåller det senaste antalet som "skett". Dvs, omedelbart efter en skickad order får du det postade antalet i ordern. Men, om det blir delavslut kommer LastTrade(b,v) returnera det antalet. Så, ett sätt att få feedback är att lagra det önskade målantalet i en cell med Retval() i triggerscriptet eller antalscriptet. Det kan alltid läsas av senare med Lasttrade(b,x) tex och jämföras med Portfolio(v) för att avgöra om du har rätt antal. Annars posta ny order etc.

                      Comment


                      • #12
                        Tack, då är jag med så långt. Kommer transaktionen även få en ny tidsstämpel och hamna "sist" i lasttrade vid delvist eller helt avslut? Säg t.ex. om en order från ett annat script lagts efter en limit order, varpå limit ordern senare får avslut. Eller är det alltid senast lagda order som man ser med lasttrade?

                        Comment


                        • #13
                          Om du tänker Lasttrade(B,D) så är det tiden för senaste avslut, om det är delavslut eller ej. Det gäller för det aktuella instrumentet på det aktuella kontot. Är det annat instrument eller konto gäller det för den i så fall. Men vilken ordermodell som lagt ordern spelar ingen roll där. Du kan tex även lagra kod för vilken ordermodell eller "edge" det är som lagt ordern i en egen cell, så vet du kanske vilken exit-strategi som ska användas osv.

                          Comment


                          • #14
                            Tack! Men det är väl inte så att bud från en ordermodell makuleras om en annan ordermodell skulle lägga bud på samma instrument och konto?

                            Comment


                            • #15
                              Normalt makueras aktiv order. Makulering eller ej går att ställa in när man arbetar med ordermodellen.

                              Comment

                              Working...
                              X