Formel som genererar köp/säljsignaler i Excel
Hej,
Vet inte riktigt om det räknas som programmering men ska försöka generera en signal i Excel...
Jag fattar det som att man inte kan bifoga filer i inläggen, men ska försöka förklara efter bästa förmåga.
Jag har data över OMXS30 och vill implementera en strategi som köper och säljer beroende på det glidande medelvärdet. Jag använder lite olika glidande medelvärden, ett av dom är MA5-20.
Det funkar på följande vis: De fem senaste dagarnas medelvärde jämförs med de 20 senaste dagarnas medelvärde. Korsar de fem senaste dagarnas medelvärde de 20 senaste dagarnas medelvärde nedifrån så genererar den en köpsignal som är betecknad med en etta, korsar det uppifrån så generera det -1, händer inget av det på dagen genererar det en nolla.
Formeln för den här signalen ser ut som följer:
=OM(OCH(N2>K2;N3<K3);1;OM(OCH(N2<K2;N3>K3);-1;0))
Det jag sen vill göra är att ta med ett band på en procent. Poängen är att reducera antalet köp/sälj-signaler genom att få metoden att inte reagera på tillfälliga korsningar. Så glidande medelvärdet för de fem senaste dagarna måste korsa de 20 senaste dagarnas medelvärde med över en procent. Koden för detta i Excel har jag skrivit som:
=OM(OCH(J2>(K2*1,01);J3<K3);1;OM(OCH(J2<(K2*0,99);J3>K3);-1;0))
Och här kommer vi till anledningen till hela inlägget. Problemet här är att formeln helt enkelt är fel. Jag säger åt Excel att bara generera Köp/sälj när korsning på över en procent sker direkt, alltså j3 måste vara mindre k3 dagen innan och sen måste j2 går över k2 direkt med minst en procent till exempel.
Målet är dock att få en köp/sälj-signal när femdagars medelvärde korsar 20dagars med över en procent, MEN det behöver inte ske direkt. Det kan till exempel korsa med 0,5% första dagen för att sedan öka med ytterligare 1% och då val jag ha en signal. Vilket koden jag skrivit hittills inte genererar. Har testat mig fram på lite olika sätt men inte riktigt lyckats få till det.
Frågan kanske hade prova bättre under ämnet matematik men jag provar här först...
Någon idé hur man kan modifiera formeln till att uppfylla detta?
Om bilder från arket behövs för att besvara frågan så är det bara att säga till så skickar jag med det.
Hälsningar, Hjalmar Fridén
Ska kanske även förtydliga att jag inte vill ha köp-köp eller sälj-sälj utan när sälj gjort till exempel, då ska vi ligga utanför marknaden tills en köpsignal kommer. Vi blankar inte eller något liknande. Samma med köp, kommer en köpsignal så ska vi ligga i marknaden tills sälj = investerar/säljer alltid hela kapitalet. Vi köper alltså inte för varje dag femdagars medelvärde är över tjugodagars utan bara i samband med att dom korsar. Det framgår i formeln, men tänkte ändå att det kunde vara bra med ett extra förtydligande där.
Hej Hjalmar.
Vilken typ av data har du i de olika cellerna i Excel?
Inte riktigt säker på vad du frågar efter men skickar med en bild:
Det som jag går efter i beräkningarna är kolonn E, "Closeprice"
Hoppas jag fattade frågan rätt :)
Det jag menade var att det var omöjligt för någon att relatera dina formler till beskrivningen av vad du vill göra eftersom du inte berättade vilken typ av information som finns i cellerna som formlerna refererar till.
Men nu med bilden så kanske det går att följa.
Förstår! Hade helst bifogat hela filen men fattar det som att det inte går. Om det krävs mer bilder för att kunna hjälpa till så skickar jag gärna det!
Som Yngve skrev så är detta omöjligt att lösa utan tillräckligt med information. Jag kan inte få den ur skärmdumpen.
Tillfälliga förändringar hanteras redan genom medelvärdesbildning av indata, eller hur?
Borde du då inte kunna förenkla det hela med en enda formel liknande den nedan?
OM(OCH(N2>(K2*1,01);N3<K3);1;OM(OCH(N2<(K2*0,99);N3>K3);-1;0))
Eller behöver du även kunna summera medelvärdesförändringar över tiden för att ge signal när summan över/under 1 procent?
Hur som helst behövs en cell som minns om det är i sälj eller köp och den cellen behöver användas för att undvika sälj-sälj eller köp-köp.
Och procentnivåerna för köp/sälj kan läggas i egna celler som används i formeln. Då kan köp/sälj-regulatorn finjusteras. För detta är en regulator.
Min spontana tanke är att det krävs en kolonn bredvid den med koden:
OM(OCH(N2>(K2*1.01);N3<K3);1;OM(OCH(N2<(K2*0.99);N3>K3);-1;0))
Som, precis som du som du säger, har procentnivåerna för hur långt över femdagars är över tjugodagars. Men vet inte riktigt hur sådan kod skulle se ut.
Som ni ser i bilderna nedan, så sker endast signaler(1 och -1) när en korsning med över en procent sker direkt. Så sker en korsning med exemplevis 0,5% för att dagen efter sked med ytterligare 1% så genereras ingen etta i kolumnen för signal, vilket i sin tur påverkar kolumnen för holding. Det vill jag att det ska göra. Exempelvis, om N5<K5 och sen N4>(K4*1,005) och sen N3>(K3>1,01), då får jag ingen köpsignal med den formel jag skrivit in. Men det vill jag, aggregat så har det ju överstigit 1%.
Holding är för övrigt en kolumn jag använt till att en form av dummy-variabel när jag är i respektive utanför marknaden. Den har till exempel värdet 1 tills det att -1 uppkommer i kolumnen för signal, då har den värdet -1 tills dess att 1 uppkommer i kolumnen signal.
Tack för svaren hittills föresten. Förstår att det är mer eller mindre omöjligt att svara på frågor kring ett Excel-ark man varken är insatt eller har tillgång till. Men väldigt schyst att ni tar er tiden.
Jag gör i alla fall ett till försök här och skickar mer bilder och hoppas det bringar extra klarhet i vad det är jag försöker göra:
Löste det såhär:
Hoppas det blir rätt. Ser inget fel nu iaf.
Tack för all hjälp.
/Hjalmar
Bra att du kunde lösa det.
Har ett förslag som minimerar antalet kolumner, formler och duplicering av formler.
Cellerna B2 och B3 är valbara nivåer för köp/sälj.
Kolumnen E är minnet av köp/sälj-läget för denna dag.
Kolumnen F innehåller formeln för signal att köpa/sälja denna dag. Undviker köp-köp och sälj-sälj.
På svenska blir formeln så här tror jag (kan inte kolla med engelsk Excel):
=OM(OCH(E14<>"Köp";D14>$B$1);"Köp";OM(OCH(E14<>"Sälj";D14<$B$2);"Sälj";""))
Snyggt! Rensade i min fil nu och körde på det du visade där och ser betydligt bättre ut. Tack snälla för hjälpen, riktigt schysst!
Roligt att kunna hjälpa :-)
Du har nu en PI-regulator som integrerar under oändlig tid, dvs den tar hänsyn till alla historiska differenser, vilket gör regulatorn riskerar att fastna för länge i köp- eller säljläge. Du kan ganska enkelt ändra det till en kortare integrationsperiod.
Regulatorn kan ändras ytterligare så att den tar hänsyn till snabba ändringar av differenser, dvs då derivatan är hög, så att den blir en PID-regulator. Då kan en förändring på exempelvis 0.8% från en dag till nästa få ge direkt genomslag på köp/sälj.
Bara om du vill experimentera förstås...