Allmänt meddelande

Collapse
No announcement yet.

Indikator på index handlar termin

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

  • Indikator på index handlar termin

    Hej,
    kan någon hjälpa mig att sammanfatta hur man gör för att en indikator, som är kopplad till index, sen handlar på terminen.

    Det är säkert skitenkelt, men jag fattar inte, är sjukt trött i mössan och vill inte göra fel, jag vill köra skarpt så fort som möjligt, så jag vågar inte riskera att det blir fel...

    Tack!

    /nyrn2k

  • #2
    Det finns två sätt, antingen läser man in index som ett Extra Objekt i scriptet som är kopplat till det instrument man vill handla meed Cmpref().


    Alternativt gör man hela analysen direkt på index och skickar köp- och säljsignalerna via globala celler med hjälp av SetGVarIf().

    Dessa celler kan därefter läsas av från de triggerscript som ingår i modellerna för de instrument man vill handla.



    Vilken variant skulle du föredra?

    Comment


    • #3
      Jag föredrar det andra alternativet, SetGvarIf()
      jag har ett humm om hur jag skulle göra det, men behöver facit så det inte blir fel... ;-)

      Tack!

      Comment


      • #4
        Hej,
        nu har jag petet in följande i mitt script kopplat till index:

        m4=(and(lt(aref(m3,1),0),cross(m3,0))
        {detta är signalen, m4 sätts till 1 om m3 korsar noll underifrån}

        SetGvarIf(0,666,1) {skriver nolla hela tiden, eller hur?
        SetGvarIf(1,666,m4) {om m4 returnerar 1, så skrivs 1 i cell 666, eller hur?

        sen har jag gjort en ordermodell som jag kan koppla till aktuell termin som triggas av
        i1(
        GetVar(666)
        )

        Har gjort motsvarande för att korta terminen,

        m4=(and(gt(aref(m3,1),0),cross(m3,0))

        SetGvarIf(0,667,1)
        SetGvarIf(1,667,m4)

        och triggern

        i1(
        GetVar(667)
        )

        Har jag gjort rätt?

        Comment


        • #5
          Du är helt klart på rätt spår!

          Ett par saker bara:

          m4=(and(gt(aref(m3,1),0),cross(m3,0))

          innehåller en parentes för mycket, det ska vara:

          m4=and(gt(aref(m3,1),0),cross(m3,0))


          samt att du troligen vill köra en loopad modell som sköter själva handeln? I så fall behöver du ett villkor som testar om innehav finns eller ej. Annars kommer den modellen att köpa hela tiden så länge signal finns:


          i1(
          signal:=GetVar(667)
          ej_innehav:=le(portfolio(v),0)
          köp=and(signal,ej_innehav)
          köp
          )


          Fråga: Du testar i scriptet överst om m3 korsar noll? Eller var det bara ett exempel?

          Comment


          • #6
            Hej,
            den extra parentesen kom av att jag inte copy/pasteade.... signalen funkar fint...

            jag har ett fungerande antalscript, där görs en kontroll om innehav finns och räknar ut hur många kontrakt som skall köpas/säljas för att nå önskat antal

            m4-scriptet kollar om m3 korsar noll uppifrån, vilket ger en säljsignal, sen har jag ett likadant script för köpsignal,
            m4=and(lt(aref(m3,1),0),cross(m3,0))

            Fråga:
            Om jag nu har ett antalscript som blockar om innehav redan finns, kan jag då köra detta skarpt på måndag?
            Det är SetGvar()- och GetGvar()-kommandona som jag är osäker på hur dom funkar

            Comment


            • #7
              Rikard,
              Har jag gjort rätt när det gäller

              SetGvarIf(0,667,1)
              SetGvarIf(1,667,m4)

              och

              i1(
              GetVar(667)
              )

              /nyrn2k

              Comment


              • #8
                Ja, det är rätt. Men jag skulle som sagt lägga till kontroll i "mottagarscriptet" om innehav finns eller ej:

                i1(
                signal:=GetVar(667)
                ej_innehav:=le(portfolio(v),0)
                köp=and(signal,ej_innehav)
                köp
                )


                Comment


                • #9
                  tack,
                  och för kortnings-scriptet så kör jag:
                  ej_innehav:=ge(portfolio(v),0)
                  ?

                  kan du förklara skillnaden på := och = ?

                  Comment


                  • #10
                    Stämmer fint!

                    Skillnaden är att := är tilldelat namn, medan bara = är en minnesreferens.

                    De sistnämnda används i slutet av scriptet för att få plats med fler parentesnivåer. Varje rad bildar en egen bit exekverbar kod vilket både går snabbare och spar utrymme.

                    Det viktigaste att tänka på är att man inte kan använda tilldelade namn bland minnesreferenser utan alla tilldelade namn måste samlas för sig.



                    mvh Rikard

                    Comment


                    • #11
                      signal:=GetGVar(667)

                      glöm inte G:et

                      Comment


                      • #12
                        finns det nåt bra sätt att minska ner på minnesåtgången?
                        som det är nu blir programmet extremt segt.
                        mitt script körs i femminuters upplösning, men räknar på ganska lång tid bakåt...

                        om jag istället för att omsluta allt med i5(...) kör i30(...),
                        får jag ungefär samma precision då, men 1/6 att hålla i minnet?

                        Comment


                        • #13
                          Använd så många minnesreferenser som möjligt, det snabbar upp exekveringen. Men det brukar inte vara så lätt att få scriptexekveringen att blir långsam. Du får gärna maila scriptet om du vill så kan vi se om något är direkt fel.

                          Annars är det rätt resonerat att i30() blir 6 ggr snabbare att exekvera än i5().

                          Comment


                          • #14
                            det tittar 8000 5-minutersperioder bakåt för att hitta högsta och lägsta kurs, gör lite beräkningar på det, sen läggs en LinReg på ett par hundra perioder på det...

                            grejen är den att jag inte är hundra på hur scriptspråket funkar, inte ens femtio, om jag ska vara ärlig...

                            det är i sig inte viktigt att veta i varje stund högsta/lägsta kurs för precis 8000 perioder bakåt, det kan lika gärna kolla en gång i timmen men motsvarande tid bakåt.
                            det viktiga är att när signal kommer så triggas åtgärd på stört eller när en 5min stapel är klar, och inte först efter en timme.
                            där har jag det lite oklart för mig hur programmet fungerar...

                            Comment


                            • #15
                              Aha, men du kan lika gärna mäta högsta värdet i annan upplösning så att det går snabbare. Du får ändå larm när som helst så fort ett script löser ut. Ett i30()-script kan alltså lösa ut mitt i en 30-minutersperiod, man väntar inte tills den är slut.

                              Comment

                              Working...
                              X