Find() är utmärkt att använda för att komma ihåg när ett villkor var sant senast eller n:te hången bakåt. Då kan man tex använda finf gör att ta fram värden från den botten eller topp som senare ska användas som referens för nästa osv.
Allmänt meddelande
Collapse
No announcement yet.
Top/Bottom funktionerna
Collapse
X
-
Har försökt en del med att mäta första toppen mot första och andra botten med hjälp av TOP och BOTTOM men det fungerar mindre bra
Kanske är det så tredje parametern fungerar?Attached Files
Comment
-
Ursprungligen postat av Rikard Nilsson Visa inläggFind() är utmärkt att använda för att komma ihåg när ett villkor var sant senast eller n:te hången bakåt. Då kan man tex använda finf gör att ta fram värden från den botten eller topp som senare ska användas som referens för nästa osv.
Kan du inte bara lägga ut top-/bottomfunktionerna så man får en uppfattning om hur de jobbar.
Comment
-
Jag sticker ut hakan och påstår att uppgiften i den här tråden är helt omöjlig att lösa med NAT-funktioner, om man inte samtidigt använder sig av en drös globala variabler, en för varje signifikant topp/botten man önskar testa mot.
Den som lyckas bevisa att jag har fel vinner ära och berömmelse för evig tid framöver, och om vederbörande händelsevis också har vägarna förbi Stockholm bjuder jag självklart även på en god öl.
Comment
-
Här är ett lite mer utvecklat exempel som definierar både topp och botten, och där man kan mäta mot förrförra topp och botten. Det går ju att definiera en topp eller botten på otaliga sätt, så det är i princip helt upp till hur man vill göra i de första delarna av koden. Det väsentliga som jag ser det är att man därefter kan läsa av värdet från vilken topp eller botten som helst bakåt i tiden och göra beräkningar på de. Då går det även att jämföra tidigare toppar och bottnar mot varandra för att få olika villkor sanna eller falska.
{definiera topp}
stapel1:=aref(h,1)
stapel2:=aref(h,2)
stapel3:=aref(h,3)
t1:=lt(stapel1,mult(stapel2,0.998)) {bestäm procent höger sida}
t2:=lt(stapel3,mult(stapel2,0.995)) {bestäm procent vänster sida}
t3:=and(t1,t2)
{definiera botten}
stapel4:=aref(l,1)
stapel5:=aref(l,2)
stapel6:=aref(l,3)
b1:=gt(stapel4,mult(stapel5,1.003)) {bestäm procent höger sida}
b2:=gt(stapel6,mult(stapel5,1.005)) {bestäm procent vänster sida}
b3:=and(b1,b2)
högsta_senaste_topp=find(t3,50,aref(h,2),1)
lägsta_senaste_botten=find(b3,50,aref(l,2),1)
högsta_förrförra_topp=find(t3,50,aref(h,2),2)
lägsta_förrförra_botten=find(b3,50,aref(l,2),2)
draw(högsta_senaste_topp,2,rqb)
draw(lägsta_senaste_botten,3,dgqb)
draw(högsta_förrförra_topp,4,mqb)
draw(lägsta_förrförra_botten,5,bqb)
mult(0,10)Attached Files
Comment
-
Vad tror ni om att bygga en breakout-modell runt detta? Entry Long vid notering över förra samt förrförra toppnivåerna, samt Entry Short vid notering under förra samt förrförra bottennivåerna. Detta skulle kunna bli en ganska intressant modell...
Comment
-
Jo det skulle säkert gå att få till. Man brukar ju definiera en upptrend som både stigande toppar och stigande bottnar. Bara att mäta senaste och jämföra med föregående. Kanske i tre led för att säkerställa trenden riktigt.
Det riktigt coola blir ju när vi kan simulera det!
Comment
-
Det är ju bara att skapa följdvillkor baserade på de topp- och bottenvärden man får fram enligt ovan och säga att en signifikant topp ska vara minst x % högre än förra botten osv. Om man har alla befintliga toppar och bottnar i dataserien tillgängliga kan man ju efterbehandla med följdvillkor och få fram vilka av dessa som är signifikanta toppar och bottnar.
Comment
-
Just så Rikard, och det är ju nu som svårigheterna tornar upp sig.
Ett sätt att gå vidare är ju att skriva:
(Här förutsätts grafen vara omx och hö/vä-värdena punkter)
vänster:=20
höger:=10
{ Signifikant Topp }
villkorT1=ge(sub(högsta_senaste_topp,lägsta_förrförra_botten),vänster)
villkorT2=ge(sub(högsta_senaste_topp,lägsta_senaste_botten),höger)
villkorT3=and(villkorT1,villkorT2)
signifikant_topp=find(villkorT3,500,?,1)
Jag ser flera problem med detta:
a) kan man använda sig av find() i find() hur som helst?
b) villkoret ovan är uppfyllt i stapeln strax till höger om senaste botten. Hur hittar man värdet på toppen? (funkar ?=högsta_senaste_topp? Dvs. har det, av de tidigare villkoren i find()-funktionen, bidats en dataserie av h_s_t-variabeln genom hela diagrammet från vänster till höger?)
c) villkorT1 ovan använder sig av lägsta_förrförra_botten. Det är fel den ska ju utgå från senaste "signifikanta_botten", som ännu ej är uträknad.
d) om man väljer att räkna ut den signifikanta botten först, måste man ha tillgång till den förra signifikanta toppen, som ännu ej är uträknad, moment 22.
e) för att lösa c,d måste man först bestämma ett startvärde, som används som syftvärde för den allra första signifikanta topp/botten i serien för att sedan inte användas mer.
osv osv.
Många fågor att lösa blir det, men den viktigaste frågan är ändå om find()-funktionen kan användas flera gånger i sig själv helt obehindrat. (Tycker att jag har testat detta tidigare utan avsedd framgång)
Visar det sig att find() kan avändas obehindrat i sig själv, finns det gott hopp om, att uppgiften i tråden ska gå att lösa utan globisar.
Comment
-
Vet inte om detta är något att spinna på?
Det går att sätta villkor för tid och % för ner- och uppgångar.
{formation botten-topp-nedgång(trigger)}
båttentid1:=10 {max perioder för nedgång innan uppgång}
tåppentid1:=10 {max perioder för att topp bildas}
båttentid2:=5 {max perioder för nedgång efter topp}
båttenpr1:=0.75 {procent ner för första botten}
tåppenpr1:=0.75 {procent för att topp bildas}
båttenpr2:=0.3 {procent för nedgång efter topp}
totid1:=add(add(båttentid1,tåppentid1),båttentid2)
första1:=gt(div(sub(hhv(c,båttentid1),c),hhv(c,båttentid1)),div(båttenpr1,100))
första2:=and(första1,le(c,llv(c,båttentid1)))
första3:=hhvbars(första2,totid1:100)
andra1:=gt(div(sub(c,llv(c,tåppentid1)),llv(c,tåppentid1)),div(tåppenpr1,100))
andra2:=and(andra1,ge(c,hhv(c,tåppentid1)))
andra3:=hhvbars(andra2,totid1:100)
tredje1:=gt(div(sub(hhv(c,båttentid2),c),hhv(c,båttentid2)),div(båttenpr2,100))
tredje2:=hhvbars(tredje1,totid1:100)
i30(
trigger1=and(and(lt(tredje2,andra3),lt(andra3,första3)),tredje1)
trigger2=and(trigger1,hhv(första1,totid1:100))
add(0,0)
)
Comment
-
Här har du precenterat en samling väldigt intressanta villkor Henric, absolut något att spinna vidare på.
Jag antar att du med:
första3 menar det antal perioder bort där botten1-värdet finns
andra3 det antal perioder bort där topp1-värdet finns
och tredje3 det antal perioder bort där botten2_värdet finns?
Spännande att höra hur du har tänkt dig fortsättningen.
Jag menar att när trigger2 är sann, få fram serier på botten1 och topp1 som är ritbara och refererbara bakåt i tiden?
EDIT:
Är kanske ute och cyklar, men en tanke som slår mig är följande:
signT1=if(trigger2,hhv(c,andra3),signT1)
signB1=if(trigger2,hhv(c,första3),signB1)
draw(signT1,2,bqb)
draw(signB1,2,rqb)
Frågan är om det kommer att fungera.
Vad säger du Henric?
Last edited by LillWicke; 2012-12-01, 17:38.
Comment
-
Jag såg att det "tredje" inte är linkat i tid, utan bara att nedgången ska ha skett inom viss tid. Jag har linkat i tid. Det går ju lika bra att bara använda första och andra och sedan ett trigger villkor. Det går ju att definiera toppar och bottnar på många sätt. Jag läser ut toppen som rör sig uppåt innan en ny botten.
{formation botten-topp-nedgång(trigger)}
båttentid1:=15 {max perioder för nedgång innan uppgång}
tåppentid1:=15 {max perioder för att topp bildas}
båttentid2:=15 {max perioder för nedgång efter topp}
båttenpr1:=0.75 {procent ner för första botten}
tåppenpr1:=0.75 {procent för att topp bildas}
båttenpr2:=0.3 {procent för nedgång efter topp}
totid1:=add(add(båttentid1,tåppentid1),båttentid2)
första1:=gt(div(sub(hhv(c,båttentid1),c),hhv(c,båttentid1)),div(båttenpr1,100))
första2:=and(första1,le(c,llv(c,båttentid1)))
första3:=hhvbars(första2,totid1:100)
andra1:=gt(div(sub(c,llv(c,tåppentid1)),llv(c,tåppentid1)),div(tåppenpr1,100))
andra2:=and(andra1,ge(c,hhv(c,tåppentid1)))
andra3:=hhvbars(andra2,totid1:100)
tredje1:=gt(div(sub(hhv(c,båttentid2),c),hhv(c,båttentid2)),div(båttenpr2,100))
tredje2:=hhvbars(tredje1,totid1:100)
i30(
trigger1=and(and(lt(tredje2,andra3),lt(andra3,första3)),tredje1)
trigger2=and(trigger1,hhv(första1,totid1:100))
trigger3=and(trigger2,le(andra3,båttentid2))
högsta1=sub(hhvbars(första2,400),hhvbars(andra2,400))
högsta2=hhvbars(första2,400)
högsta3=if(gt(högsta1,0),hhv(h,högsta2),0)
draw(högsta3,2,yqb)
draw(mult(första2,20),3,rsbF)
draw(mult(andra2,20),4,gsbF)
draw(mult(trigger3,20),5,bsbF)
add(0,0)
)
Comment
Comment