Allmänt meddelande

Collapse
No announcement yet.

60min long/short

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

  • 60min long/short

    Hej
    Jag vill bygga en ordermodell som har dessa villkoren, är det något ni kan hjälpa mig med?

    Köp
    • första 60min candlestick ska vara vägvisaren
    • om den passerar högsta ska den köpa en minilong
    • om den passerar lägsta ska den köpa minishort

    Sälj
    • OMX30 (lång) köpkurs +1,5punkt
    • OMX30 (kort) köpkurs -1,5punkt kort
    • Stoploss 50% av 60min candlestick
    • Om inte något av dessa säljkraven är gjorda under dagen så sälj kl 17,20
    MVH John

  • #2
    Du menar alltså att du först ska blockera att ingen handel görs första timmen?
    Direkt efter tiden stämmer med att en timme gått får du skriva förra periodens low och high i två globala variabler, detta ska bara göras en gång per dag så att det alltid är första timmens värden som gäller. Efter det är det bara att ligga med script som kollar om du någon gång går över eller under och direkt köpa - lagra köpkursen i en Gvar och låt en sl/tp bevaka dig.

    Har lite kort om tid just nu men hjälper gärna till framöver - vilket jag vet att många andra på forumet också gör. - Lycka till.

    /Erik

    Comment


    • #3
      Hej tack för visast intresse!!
      Ja du verka förstå vad jag menar! så första timmen görs inga affärer, sen får det göra max ett köp för lång o ett för kort om dagen! hoppas du/ni förstår vad jag menar
      har bra börjat kolla på scriptkurserna så är tacksam för all hjälp man kan få!!
      /John

      Comment


      • #4
        Häpp!

        Här är ett script som jag tror blir enklare, man skippar globala celler helt och mäter direkt på dataserierna. Scriptet tar fram högsta och lägsta nivån första timmen och ritar ut. Bara att lägga till test av kursen om den bryter upp eller ned osv.

        i60(
        period1=eqv(int(ref(d,1)),int(d))
        gräns=And(hhv(Not(period1),2),period1)
        hi=Find(gräns,10,aref(h,1),1)
        lo=Find(gräns,10,aref(l,1),1)
        Draw(hi,2,gqb)
        Draw(lo,3,rqb)
        and(0,0)
        )
        Attached Files

        Comment


        • #5
          Ursprungligen postat av Rikard Nilsson Visa inlägg
          Häpp!

          Här är ett script som jag tror blir enklare, man skippar globala celler helt och mäter direkt på dataserierna. Scriptet tar fram högsta och lägsta nivån första timmen och ritar ut. Bara att lägga till test av kursen om den bryter upp eller ned osv.

          i60(
          period1=eqv(int(ref(d,1)),int(d))
          gräns=And(hhv(Not(period1),2),period1)
          hi=Find(gräns,10,aref(h,1),1)
          lo=Find(gräns,10,aref(l,1),1)
          Draw(hi,2,gqb)
          Draw(lo,3,rqb)
          and(0,0)
          )
          Du menar alltså att det går att göra så här? Trodde inte man kunde numreriskt peka ut perioder på detta viset. Då är ju detta klart enklare. Annars hade man ju behövt lagra värdena för att inte alltid få förra 60-minuters perioden. Däremot kan det ju vara bra att lägga i globals ifall man vill använda olika ordermodeller som tar hänsyn till dessa data utan att räkna fram hi och lo på nytt i varje tick i varje ordermodell. Sparar tid vid simulering om inte annat. /Erik

          Comment


          • #6
            Jo, det går fint eftersom det ligger lagrat som dataserier. Find() och andra kommandon HHV() osv är perfekta att titta bakåt i dataserier. Då behöver man inte så många globala celler. Det blir snabbare och mer effektiv kod.

            Comment


            • #7
              Jomen jag menar att du så enkelt kan hitta tillbaka till dagens första timme närsomhelst på dagen? Alltså att du klockan 15 t.ex. fortfarande får fram första timmens värde genom ovan kod?

              Comment


              • #8
                Det är Find() som gör det möjligt genom att villkora en tidpunkt i en dataserie och returnera värde från en annan dataserie. Kraftfullt och användbart.

                Comment


                • #9
                  Men hur vet du hur långt från dagsöppning du är? Eller är första 60 minuterna alltid period 1 i 60-min upplösning? Trodde att 60-minuters perioder bara blev en lång radda och inte avgränsades av ny dag..

                  Comment


                  • #10
                    Ursprungligen postat av e-Rik Visa inlägg
                    Men hur vet du hur långt från dagsöppning du är? Eller är första 60 minuterna alltid period 1 i 60-min upplösning? Trodde att 60-minuters perioder bara blev en lång radda och inte avgränsades av ny dag..
                    Dataserien "gräns" (som Rikard definierat) är en serie bestående av enbart av nollor utom exakt då dagens första 60-minutersstapel "slutar" då serien blir 1. Det i sin tur innebär att find() under dagen aldrig kan hitta någon annan tidpunkt än just denna.

                    Comment


                    • #11
                      Hej tack för all hjälp!
                      Nu har jag "Rikard" fått ihop början på modellen. Ser helt ok ut förutom några få men stora förluster, som jag tror man man kan få bort med med hjälp av att det görs avslut efter exempel 20 min efter ordern är tagen.
                      Är det någon som har något förslag?
                      här är modellen idag
                      Break out köp
                      i60(
                      close=cmpref(c,0,a)
                      period1=eqv(int(ref(d,1)),int(d))
                      gräns=And(hhv(Not(period1),2),period1)
                      hi=Find(gräns,10,aref(cmpref(h,0,a),1),1)
                      lo=Find(gräns,10,aref(cmpref(l,0,a),1),1)
                      Draw(hi,2,gqb)
                      Draw(lo,3,rqb)
                      ej_innehav=le(portfolio(v),0)
                      ej_samma_dag=gt(int(d),lasttrade(b,d))
                      köp1=and(GT(close,hi),ej_innehav)
                      köp2=and(and(köp1,ej_samma_dag),gräns)
                      mult(köp2,10)
                      )
                      Break out 60 sälj
                      i60(
                      close=cmpref(c,0,a)
                      period1=eqv(int(ref(d,1)),int(d))
                      gräns=And(hhv(Not(period1),2),period1)
                      hi=Find(gräns,10,aref(cmpref(h,0,a),1),1)
                      lo=Find(gräns,10,aref(cmpref(l,0,a),1),1)
                      Draw(hi,2,gqb)
                      Draw(lo,3,rqb)
                      innehav=gt(portfolio(v),0)
                      säljläge1=ge(close,add(hi,1.5))
                      stoppnivå=add(lo,mult(0.0,sub(hi,lo)))
                      säljläge2=lt(close,stoppnivå)
                      sälj1=and(innehav,or(säljläge1,säljläge2))
                      mult(sälj1,10)
                      )

                      Break out 60min shrt köp
                      i60(
                      close=cmpref(c,0,a)
                      period1=eqv(int(ref(d,1)),int(d))
                      gräns=And(hhv(Not(period1),2),period1)
                      hi=Find(gräns,10,aref(cmpref(h,0,a),1),1)
                      lo=Find(gräns,10,aref(cmpref(l,0,a),1),1)
                      ej_innehav=le(portfolio(v),0)
                      ej_samma_dag=gt(int(d),lasttrade(b,d))
                      köp1=and(LT(close,lo),ej_innehav)
                      köp2=and(and(köp1,ej_samma_dag),gräns)
                      mult(köp2,10)
                      )

                      Break out shrt sälj
                      i60(
                      close=cmpref(c,0,a)
                      period1=eqv(int(ref(d,1)),int(d))
                      gräns=And(hhv(Not(period1),2),period1)
                      hi=Find(gräns,10,aref(cmpref(h,0,a),1),1)
                      lo=Find(gräns,10,aref(cmpref(l,0,a),1),1)
                      innehav=gt(portfolio(v),0)
                      säljläge1=le(close,sub(lo,1.5))
                      stoppnivå=sub(hi,mult(0.382,sub(hi,lo)))
                      säljläge2=gt(close,stoppnivå)
                      sälj1=and(innehav,or(säljläge1,säljläge2))
                      mult(sälj1,10)
                      )

                      Comment


                      • #12
                        Du glömde få med extra objekt-definitionerna.

                        Annars är en 20-minuters stopploss säkert lätt att få till. Då har du både en prisstopp och en tidsstopp.

                        Eftersom scriptet körs i 60-min upplösning kan man inte använda LastTrade(b,d) för att avgöra köptidpunkten exakt, man får istället spara ner date() i en cell med retval() i slutet av köpscripten, så kan man läsa av den exakta tidpunkten för köp med lasttrade(b,0) istället.

                        Då är det enkelt att jämföra med date() som tickar upp varje sekund, och avgöra när 20 min gått.

                        Comment


                        • #13
                          Exempel på köpscript för Bull:

                          i60(
                          close=cmpref(c,0,a)
                          period1=eqv(int(ref(d,1)),int(d))
                          gräns=And(hhv(Not(period1),2),period1)
                          hi=Find(gräns,10,aref(cmpref(h,0,a),1),1)
                          lo=Find(gräns,10,aref(cmpref(l,0,a),1),1)
                          Draw(hi,2,gqb)
                          Draw(lo,3,rqb)
                          ej_innehav=le(portfolio(v),0)
                          ej_samma_dag=gt(int(d),lasttrade(b,d))
                          köp1=and(GT(close,hi),ej_innehav)
                          köp2=and(and(köp1,ej_samma_dag),gräns)
                          retval(date(),0)
                          mult(köp2,10)


                          och här på säljsidan:

                          i60(
                          close=cmpref(c,0,a)
                          period1=eqv(int(ref(d,1)),int(d))
                          gräns=And(hhv(Not(period1),2),period1)
                          hi=Find(gräns,10,aref(cmpref(h,0,a),1),1)
                          lo=Find(gräns,10,aref(cmpref(l,0,a),1),1)
                          Draw(hi,2,gqb)
                          Draw(lo,3,rqb)
                          innehav=gt(portfolio(v),0)
                          köptid=lasttrade(b,0)
                          20min=mult(div(1,24),0.33333)
                          tidstopp=gt(date(),add(köptid,20min)))
                          säljläge1=ge(close,add(hi,1.5))
                          stoppnivå=add(lo,mult(0.0,sub(hi,lo)))
                          säljläge2=lt(close,stoppnivå)
                          sälj1=and(innehav,or(tidstopp,or(säljläge1,säljläge2)))
                          mult(sälj1,10)
                          )



                          )

                          Comment


                          • #14
                            Hej o tack för hjälpen! jag har kört den i analysbänken, o får den till att sälja 1 minut efter den har köpt. har provat att ändra tiden men ingen bättring

                            min nästa tanke var om det gått att få den att köpa nästa gång den passerar samma köpnivå som tidigare?
                            men den ska ju varit under nivån fört så klart!

                            här är scriptet


                            i60(
                            close=cmpref(c,0,a)
                            period1=eqv(int(ref(d,1)),int(d))
                            gräns=And(hhv(Not(period1),2),period1)
                            hi=Find(gräns,10,aref(cmpref(h,0,a),1),1)
                            lo=Find(gräns,10,aref(cmpref(l,0,a),1),1)
                            Draw(hi,2,gqb)
                            Draw(lo,3,rqb)
                            ej_innehav=le(portfolio(v),0)
                            ej_samma_dag=gt(int(d),lasttrade(b,d))
                            köp1=and(GT(close,hi),ej_innehav)
                            köp2=and(and(köp1,ej_samma_dag),gräns)
                            retval(date(),0)
                            mult(köp2,10)
                            )

                            {@A(60,OMX Stock )}

                            o sälj

                            i60(
                            close=cmpref(c,0,a)
                            period1=eqv(int(ref(d,1)),int(d))
                            gräns=And(hhv(Not(period1),2),period1)
                            hi=Find(gräns,10,aref(cmpref(h,0,a),1),1)
                            lo=Find(gräns,10,aref(cmpref(l,0,a),1),1)
                            Draw(hi,2,gqb)
                            Draw(lo,3,rqb)
                            innehav=gt(portfolio(v),0)
                            köptid=lasttrade(b,0)
                            20min=mult(div(1,24),0.33333)
                            tidstopp=gt(date(),add(köptid,20min)))
                            säljläge1=ge(close,add(hi,1.5))
                            stoppnivå=add(lo,mult(0.0,sub(hi,lo)))
                            säljläge2=lt(close,stoppnivå)
                            sälj1=and(innehav,or(tidstopp,or(säljläge1,))
                            mult(sälj1,10)
                            )

                            {@A(60,OMX Stock )}

                            Comment


                            • #15
                              Tidstopp har en parantes för mycket.

                              Comment

                              Working...
                              X