Amibroker Provning A Glidande-Medelvärde Crossover Systemet


Så här optimerar du handelssystemet OBS! Det här är ganska avancerat ämne. Läs först tidigare AFL-tutorials först. Tanken bakom en optimering är enkel. Först måste du ha ett handelssystem, det här kan vara en enkel glidande genomsnittlig crossover till exempel. I nästan alla system finns det några parametrar (som medelvärde) som bestämmer hur givet system fungerar (det vill säga är väl lämpat för långsiktig eller kort sikt, hur reagerar det på mycket volatila bestånd osv.). Optimeringen är processen att hitta optimala värden för dessa parametrar (ger högsta vinst från systemet) för en given symbol (eller en symbolportfölj). AmiBroker är ett av de få program som tillåter dig att optimera ditt system på flera symboler samtidigt. För att optimera ditt system måste du definiera från en upp till tio parametrar som ska optimeras. Du bestämmer vad som är ett minimum och maximalt tillåtet värde för parametern och i vilka steg detta värde ska uppdateras. AmiBroker utför sedan flera backtester systemet med ALLA möjliga kombinationer av parametervärden. När processen är klar visar AmiBroker listan över resultat sorterade efter nettoresultatet. Du kan se värdena för optimeringsparametrar som ger det bästa resultatet. Skrivning AFL-formel Optimering i backtester stöds via ny funktion som kallas optimera. Syntaxen för den här funktionen är följande: variabel optimera (variabel Beskrivning, standardminimum, maxsteg) variabel - är normal AFL-variabel som får tilldelas det värde som returneras genom att optimera funktionen. Med normal backtesting, scanning, exploration och comentary mode returnerar funktionen optimalt standardvärdet, så ovanstående funktionssamtal motsvarar: variabel standard Optimeringsfunktionen optimerar funktionen returnerar successiva värden från min till max (med) med stegsteg. quot Descriptionquot är en sträng som används för att identifiera optimeringsvariabeln och visas som ett kolumnnamn i listan över optimeringsresultat. standard är ett standardvärde som optimerar funktionsavkastningen i prospektering, indikator, kommentar, skanning och normala backtestlägen min är ett minimivärde av variabeln som optimeras max är ett maximivärde av variabeln som är optimerad steg är ett intervall som används för att öka värde från min till max AmiBroker stöder upp till 64 samtal för att optimera funktionen (därför upp till 64 optimeringsvariabler), notera att om du använder uttömmande optimering är det väldigt bra att begränsa antalet optimeringsvariabler till bara få. Varje samtal för att optimera generera (max - min) stegoptimeringsloops och flera samtal för att optimera multiplicera antalet körningar som behövs. Om du exempelvis vill optimera två parametrar med 10 steg krävs 1010 100 optimeringsslingor. Samtal optimera funktionen endast ENT per variabel i början av din formel eftersom varje samtal genererar en ny optimeringslopp Multiplikationsoptimering stöds fullt ut av AmiBroker Maximalt sökutrymme är 2 64 (10 19 10.000.000.000.000.000.000.000) kombinationer 1. Enstaka variabeloptimering: sigavg Optimera (Signalvärde. 9. 2. 20. 1) Köp kors (MACD (12. 26), Signal (12. 26. sigavg)) Sälj kors (Signal (12. 26. sigavg), MACD (12. 26)) 2. Optimering av två variabler (lämplig för 3D-kartläggning) per Optimera (per 2. 5. 50. 1) Nivåoptimera (nivå 2. 2. 150. 4) Köp kors (CCI (per), - nivå) Sälj Cross (Level, CCI (per)) 3. Flera (3) variabel optimering: mfast Optimera (MACD Fast. 12. 8. 16. 1) mslow Optimera (MACD Slow. 26. 17. 30. 1) sigavg Optimera genomsnittlig. 9. 2. 20. 1) Köp kors (MACD (mfast, mslow). Signal (mfast, mslow, sigavg)) Sälj kors (Signal (mfast, mslow, sigavg), MACD F ormula klicka bara på Optimera-knappen i quotAutomatic Analysisquot-fönstret. AmiBroker kommer att börja testa alla möjliga kombinationer av optimeringsvariabler och rapportera resultaten i listan. Efter att optimeringen är klar presenteras listan över resultat sorterat efter nettoresultatet. Eftersom du kan sortera resultaten med någon kolumn i resultatlistan är det enkelt att få de optimala parametrarna för lägsta drawdown, lägsta antal affärer, största vinstfaktor, lägsta marknadsexponering och högsta riskjusterade årliga avkastning. De sista kolumnerna i resultatlistan presenterar värdena för optimeringsvariabler för givna test. När du bestämmer vilken kombination av parametrar som passar dina behov är det bästa du behöver göra för att ersätta standardvärdena för att optimera funktionssamtal med optimala värden. I nuvarande skede måste du skriva dem manuellt i formulärredigeringsfönstret (den andra parametern för att optimera funktionssamtal). Visar 3D animerade optimeringsdiagram För att visa 3D optimeringsdiagram måste du först springa två variabler optimering. Två variabla optimeringar behöver en formel som har 2 Optimize () funktionssamtal. Ett exempel på två variabla optimeringsformler ser ut så här: per optimera (per 2. 5. 50. 1) nivåoptimera (nivå 2. 2. 150. 4) köp kors (CCI (per), - nivå) (Nivå, CCI (per)) När du har angett formeln måste du klicka på quotOptimizequot-knappen. När optimeringen är klar bör du klicka på nedåtpilen på Optimera-knappen och välja Visa 3D-optimeringsgraf. På några sekunder visas en färgstark tredimensionell yta i ett 3D-kartfönster. Ett exempel på 3D-diagram som genereras med ovanstående formel visas nedan. Som standard visar 3D-diagrammen värden på nettovinsten mot optimeringsvariabler. Du kan dock plotta 3D-ytplan för varje kolumn i optimeringsresultattabellen. Klicka bara på kolumnrubriken för att sortera den (den blå pilen visas som visar att optimeringsresultat sorteras efter vald kolumn) och sedan välja Visa 3D optimeringsgraf igen. Genom att visualisera hur dina systemparametrar påverkar handelsprestanda kan du lättare bestämma vilka parametervärden som producerar kvotfaktor och som producerar kvoteringssystemets prestanda. Robusta inställningar är regioner i 3D-grafen som visar gradvis snarare än plötsliga förändringar i ytan. 3D optimeringsdiagram är ett utmärkt verktyg för att förhindra kurvmontering. Kurvmontering (eller överoptimering) inträffar när systemet är mer komplext än det behöver vara och all den komplexiteten är inriktad på marknadsförhållanden som aldrig kan hända igen. Radikala ändringar (eller spikar) i 3D optimeringsdiagrammen visar tydligt överoptimeringsområden. Du bör välja parameterregion som producerar en bred och bred platå på 3D-diagrammet för ditt verkliga handel. Parametersatser som producerar vinstspikar fungerar inte på ett tillförlitligt sätt i verklig handel. 3D-kartvisare kontroller AmiBrokers 3D-kartvisare erbjuder totalt visningsförmåga med full grafrotation och animering. Nu kan du se dina systemresultat från alla tänkbara perspektiv. Du kan styra positionen och andra parametrar i diagrammet med hjälp av mus, verktygsfält och tangentbordsgenvägar, oavsett vad du tycker är lättare för dig. Nedan hittar du listan. - för att rotera - håll ner VÄNSTER musknapp och flytta i XY riktningar - för att zooma in, zooma ut - håll nere höger musknapp och flytta i XY riktningar - Flytta (översätt) - håll ned VÄNSTER musknapp och CTRL-tangent och flytta i XY riktningar - för att animera - håll ner VÄNSTER musknapp, dra snabbt och släpp knappen medan du drar SPACE - animera (rotera automatiskt) VÄNSTER PIL SÖK - rotera vert. vänster höger piltangent - rotera vert. Höger UPP PIL TAST - Rotera horisonten. upp NER PIL SÖK - rotera horisonten. NED NUMPAD (PLUS) - Nära (Zooma in) NUMPAD - (MINUS) - Långt (Zooma ut) NUMPAD 4 - Flytta till vänster NUMPAD 6 - Flytta åt höger NUMPAD 8 - Flytta upp NUMPAD 2 - Flytta ner SIDAN UPP - Vattennivå upp PAGE DOWN - Vattennivå ner Smart (icke-uttömmande) optimering AmiBroker erbjuder nu smart (icke-uttömmande) optimering utöver regelbunden och uttömmande sökning. Icke-uttömmande sökning är användbar om antalet parametrar i ett givet handelssystem är helt enkelt för stort för att vara genomförbart för uttömmande sökning. Uttömmande sökning är helt bra så länge det är rimligt att använda det. Låt oss säga att du har 2 parametrar vardera från 1 till 100 (steg 1). Det är 10000 kombinationer - helt ok för uttömmande sökning. Nu med 3 parametrar har du 1 miljon kombinationer - det är fortfarande OK för uttömmande sökning (men kan vara lång). Med 4 parametrar har du 100 miljoner kombinationer och med 5 parametrar (1..100) har du 10 miljarder kombinationer. I så fall skulle det vara för tidskrävande att kontrollera dem alla, och det här är det område där icke-uttömmande smarta sökmetoder kan lösa det problem som inte är lösbart i rimlig tid med hjälp av uttömmande sökning. Här är absolut den enklaste instruktionen hur man använder ny, icke-uttömmande optimeringsapparat (i detta fall CMA-ES). 1. Öppna din formel i Formula Editor 2. Lägg till den här raden längst upp i din formel: OptimizerSetEngine (quotcmaequot) Du kan också använda quotspsoquot eller quottribquot här 3. (Valfritt) Välj ditt optimeringsmål i Automatisk analys, Inställningar, quotWalk - Forwardquot-fliken, Optimeringsmålfält. Om du hoppar över det här steget kommer det att optimera för CARMDD (sammansatt årlig avkastning dividerad med maximal drawdown). Nu om du kör optimering med hjälp av denna formel, kommer den att använda ny evolutionär (icke-uttömmande) CMA-ES optimizer. Hur fungerar det Optimeringen är processen att hitta minsta (eller maximala) givna funktion. Alla handelssystem kan betraktas som en funktion av ett visst antal argument. Ingångarna är parametrar och citatdata. utmatningen är ditt optimeringsmål (säg CARMDD). Och du letar efter maximal given funktion. En del intelligenta optimeringsalgoritmer är baserade på natur (djurbeteende) - PSO-algoritm eller biologisk process - Genetiska algoritmer, och vissa är baserade på matematiska begrepp som härrör från människor - CMA-ES. Dessa algoritmer används i många olika områden, inklusive ekonomi. Ange quotPSO financequot eller quotCMA-ES financequot i Google och du hittar mycket information. Icke-uttömmande metoder (eller quotsmartquot) kommer att hitta globala eller lokala optimala. Målet är givetvis att hitta den globala, men om det finns en enda skarp topp ut ur zillionsparameterkombinationer, kan icke-uttömmande metoder misslyckas med att hitta denna enda topp, men om den är en form av handlare, är det inte värt att hitta en enda skarp topp. handel eftersom det resultatet skulle vara instabilt (för ömtåligt) och inte replikerbart i verklig handel. I optimeringsprocessen letar vi ganska efter platåregioner med stabila parametrar och detta är det område där intelligenta metoder lyser. När det gäller algoritmen som används av icke-uttömmande sökning ser det ut som följande: a) Optimiseraren genererar en del (vanligen slumpmässig) startpopulation av parameteruppsättningar b) Backtest utförs av AmiBroker för varje parameteruppsättning från befolkningen c) Resultaten av backtest är utvärderas enligt algoritmens logik och ny befolkning genereras baserat på utvecklingen av resultaten, d) om det nya bäst finns - spara det och gå till steg b) tills stoppkriterierna är uppfyllda Exempel på stoppkriterier kan innefatta: a) att nå specificerat maximala iterationer b) stoppa om intervallet av de bästa objektivvärdena för de senaste X-generationerna är noll c) sluta om man lägger till 0,1 standardavvikelsevektor i någon huvudaxelriktning ändrar inte värdet av objektivvärdet d) andra För att använda smart (icke - uttömmande) optimator i AmiBroker måste du ange optimeringsmotorn du vill använda i AFL-formeln med OptimizerSetEngine-funktionen. Funktionen väljer extern optimeringsmotor definierad med namn. AmiBroker skickas för närvarande med 3 motorer: Standard Particle Swarm Optimizer (quotspsoquot), Stammar (quottribquot) och CMA-ES (quotcmaequot) - namnen i axlar ska användas i OptimizerSetEngine-samtal. Förutom att välja optimeringsmotor kanske du vill ställa in några av dess interna parametrar. För att göra så använd funktionen OptimizerSetOption. OptimizerSetOption (quotnamequot, value) funktion Funktionen anger ytterligare parametrar för extern optimeringsmotor. Parametrarna är motorberoende. Alla tre optimeringsmedel som skickas med AmiBroker (SPSO, Trib, CMAE) stöder två parametrar: quotRunsquot (antal körningar) och quotMaxEvalquot (maximal utvärdering (test) per enskild körning). Uppförandet av varje parameter är motorberoende, så samma värden kan och brukar ge olika resultat med olika använda motorer. Skillnaden mellan Runs och MaxEval är som följer. Utvärdering (eller test) är enkel backtest (eller utvärdering av objektivt funktionsvärde). RUN är en full körning av algoritmen (att hitta optimalt värde) - vanligtvis med många test (utvärderingar). Varje körning återställer helt enkelt hela optimeringsprocessen från den nya början (ny initial slumpmässig population). Därför kan varje körning leda till att hitta annan lokal maxmin (om den inte hittar global). Så Runs parameter definierar antal efterföljande algoritm körningar. MaxEval är det maximala antalet utvärderingar (bactests) i en enda körning. Om problemet är relativt enkelt och 1000 tester är tillräckliga för att hitta global max, är 5x1000 mer sannolikt att hitta globalt maximalt eftersom det finns mindre chanser att fastna i lokal max eftersom efterföljande körningar kommer att starta från olika initiala slumpmässiga populationer. Val av parametervärden kan vara knepig. Det beror på problem under testet, dess komplexitet osv. Varje stokastisk icke-uttömmande metod ger dig ingen garanti för att hitta global maxmin, oavsett antal test om det är mindre än uttömmande. Det enklaste svaret är att. Ange så stort antal tester som det är rimligt för dig när det gäller den tid som krävs för att slutföra. En annan enkel råd är att multiplicera med 10 antalet tester med att lägga till en ny dimension. Det kan leda till att överskatta antalet test som krävs, men det är ganska säkert. Avsända motorer är konstruerade för att vara enkla att använda, därför används kvotvärdesavvärdena defaulautomatiska värden, så optimering kan vanligtvis köras utan att ange något (accepterar standardinställningar). Det är viktigt att förstå att alla smarta optimeringsmetoder fungerar bäst i kontinuerliga parametrar och relativt smidiga objektivfunktioner. Om parameterutrymme är diskreta evolutionära algoritmer kan ha problem med att hitta optimalt värde. Det är särskilt sant för binära parametrar - de passar inte för någon sökmetod som använder gradienten av objektiv funktionsförändring (som de flesta smarta metoder gör). Om ditt handelssystem innehåller många binära parametrar, bör du inte använda smart optimizer direkt på dem. Istället försöker du optimera endast kontinuerliga parametrar med smart optimizer och byta binära parametrar manuellt eller via externt skript. SPSO - Standard Particle Swarm Optimizer Standard Particle Swarm Optimizer bygger på SPSO2007-kod som ska producera bra resultat förutsatt att korrekta parametrar (dvs Runs, MaxEval) tillhandahålls för ett speciellt problem. Att välja rätt alternativ för PSO optimizer kan vara svårt, därför kan resultaten skilja sig väsentligt från fall till fall. SPSO. dll levereras med fullständiga källkoder i quotADKquot-undermappen. Exempelkod för Standard Particle Swarm Optimizer: (Hitta bästa värde i 1000 test inom sökutrymmet på 10000 kombinationer) OptimizerSetEngine (quotspsoquot) OptimizerSetOption (quotRunsquot, 1) OptimizerSetOption (quotMaxEvalquot, 1000) sl Optimera (quotsquot, 26, 1, 100, 1 ) fa Optimera (quotfquot, 12, 1, 100, 1) Köp Cross (MACD (fa, sl), 0) Sälj Kors (0, MACD (fa, sl)) TRIBES - Adaptiv Parameter-mindre Partikel Swarm Optimizer Stammar är adaptiva , parameter-mindre version av PSO (partikel swarm optimering) icke-uttömmande optimizer. För vetenskaplig bakgrund se: particleswarm. infoTribes2006Cooren. pdf Teorin ska fungera bättre än vanlig PSO, eftersom den automatiskt kan anpassa svärmstorlekarna och algoritmstrategin så att problemet löses. Praktiken visar att dess prestanda är ganska lik PSO. Stammen DLL-plugin implementerar quotTribes-Dquot (dvs dimensionell) variant. Baserat på clerc. maurice. free. frpsoTribesTRIBES-D. zip av Maurice Clerc. Ursprungliga källkoder som används med tillstånd från författaren Tribes. DLL levereras med fullständig källkod (inuti quotADKquot-mappen) Stödda parametrar: quotMaxEvalquot - maximalt antal utvärderingar (backtests) per körning (standard 1000). Du bör öka antalet utvärderingar med ökande antal dimensioner (antal optimeringsparametrar). Standard 1000 är bra för 2 eller maximalt 3 dimensioner. quotRunsquot - antal körningar (omstartar). (standard 5) Du kan lämna antalet körningar till standardvärdet på 5. Standard antal körningar (eller omstart) är inställt på 5. För att använda Stammaroptimering behöver du bara lägga till en rad i din kod: OptimizerSetOption (quotMaxEvalquot , 5000) 5000 utvärderingar max CMA-ES - Covariance Matrix Adaptation Evolutionär Strategi Optimizer CMA-ES (Covariance Matrix Adaptation Evolutionary Strategy) är avancerad, icke-uttömmande optimizer. För vetenskaplig bakgrund se: bionik. tu-berlin. deusernikocmaesintro. html Enligt vetenskapliga riktmärken överträffar nio andra, mest populära evolutionära strategier (som PSO, Genetisk och Differential evolution). bionik. tu-berlin. deusernikocec2005.html CMAE. DLL-plugin implementerar quotGlobalquot-variant av sökning med flera omstart med ökande befolkningsstorlek CMAE. DLL levereras med fullständig källkod (inuti quotADKquot-mappen) Som standard är antalet körningar (eller omstartar) inställda till 5. Det rekommenderas att lämna standardnumret för omstart. Du kan variera det med OptimizerSetOption (quotRunsquot, N) call, där N ska ligga inom intervall 1..10. Att ange mer än 10 körningar rekommenderas inte, även om det är möjligt. Observera att varje körning använder TWICE storleken på befolkningen i föregående körning så att den växer exponentiellt. Därför slutar du med 10 körningar med befolkningen 210 större (1024 gånger) än första försöket. Det finns en annan parameter quotMaxEvalquot. Standardvärdet är NOLL vilket innebär att plugin automatiskt beräknar MaxEval som krävs. Det rekommenderas att INTE definiera MaxEval själv som standard fungerar bra. Algoritmen är smart nog för att minimera antalet utvärderingar som krävs och det konvergerar mycket snabbt till lösningspunkten, så det hittar ofta lösningar snabbare än andra strategier. Det är normalt att plugin hoppa över några utvärderingssteg, om det upptäcker att lösningen hittades, därför borde du inte bli förvånad över att optimeringsfältet kan röra sig mycket snabbt vid vissa punkter. Pluggen har också förmåga att öka antalet steg över initialt uppskattat värde om det behövs för att hitta lösningen. På grund av sin adaptiva karaktär är den kvotimerade tiden kvarvarande kvoten och eller kvoten av stegquot som visas av framdriftsdialogen endast kvot gissning vid timequot och kan variera under optimeringskursen. För att använda CMA-ES Optimizer behöver du bara lägga till en rad i din kod: Detta kommer att köra optimeringen med standardinställningar som är bra för de flesta fall. Det bör noteras, som det är fallet med många continouos-space-sökalgoritmer, att den minskande quotstepquot-parametern i Optimize () funciton-samtal inte signifikant påverkar optimeringstiderna. Det enda som betyder något är problemet quotdimensionquot, dvs antalet olika parametrar (antal optimera funktionssamtal). Antalet quotstepsquot per parameter kan ställas in utan att påverka optimeringstiden, så använd den finaste upplösningen du vill ha. I teorin borde algoritmen kunna hitta lösningar på högst 900 (N3) (N3) backtests där quotNquot är dimensionen. I praktiken konvergerar det en hel del snabbare. Till exempel kan lösningen i 3 (N3) dimensionsparametrarutrymme (säg 100100100 1 miljoner uttömmande steg) hittas i så få som 500-900 CMA-ES-steg. Multi-threaded individuell optimering Börjar från AmiBroker 5.70 utöver multi-symbol multithreading. du kan utföra multi-threaded single-symbol optimering. För att komma åt den här funktionaliteten klickar du på nedrullningspilen bredvid quotOptimizequot-knappen i fönstret Ny analys och välj Citat för individuell optimering. quotIndividual Optimizequot kommer att använda alla tillgängliga processorkärnor för att utföra enkelsymboloptimering, vilket gör det mycket snabbare än vanlig optimering. I quotCurrent symbolquot läge utförs optimering på en symbol. I alla symboler och quotFilterquot-lägen bearbetas alla symboler i följd, dvs första fullständiga optimering för första symbolen, optimering på andra symbol etc. Begränsningar: 1. Anpassad backtester stöds INTE (ännu) 2. Smart optimeringsmotorer stöds INTE - Endast EXHAUSTIVE optimering fungerar. Så småningom kan vi bli av med begränsning (1) - när AmiBroker ändras så använder inte custom backtester OLE längre. Men (2) är förmodligen här för att stanna länge. Trading System: Så här kodar du en Moving Average Crossover som återvände 28 per år Ah, det ödmjuka rörliga genomsnittliga crossover trading system Som en av de första (om inte den första själv) handelssystem skapad och använd av Richard Donchian och Ed Seykota redan i slutet av 1960-talet har du förmodligen hört talas om ett glidande medelvärde i någon form eller form under din tid på marknaderna. En av de vanligaste är 8220Golden Cross8221 och 8220Dead Cross8221, där 50-dagars glidande medelvärde passerar över (eller under) 200-dagars glidande medelvärde. Den här i den här videon är en 61 dagars och 93 dagars glidande genomsnittlig crossover, där vi också lägger till en 10 stop-förlust med ApplyStop-funktionen i Amibroker. Detta hjälper till att minska maximalt dra ner lite, för att göra systemet lite bekvämare. Du kan om du vill, även om du använder ett 60 dagars och 90 dagars glidande medelvärde 8211, är resultaten lika. Totalt sett returnerade systemet i genomsnitt 28 per år under de senaste 13 åren. Naturligtvis är det som du vet inte en garanti för framtida prestanda, men kan ge dig idéer för att skapa egna handelssystem. Kolla in videoklippet nedan Resultatet av Moving Average Crossover-handelssystemet: På en ASX 200-lista över 13 år: Vinn Procent: 49 Genomsnittlig årlig avkastning: 36 p. a. Maximal System Drawdown: 45 Efter att ha tillsatt 10 Stopp förlust: Vinn Procent: 41 Genomsnittlig årlig avkastning: 28 p. a. Maximal systemuträkning: 37 Det är självklart att klara sig själv att testa detta handelssystem, lägga till delar eller modifiera för att passa dina egna behov, vara medveten om din maximala tröskelvärde för uttagsgräns och förstå behovet av att testa på externa data. Men det är ett bra blick på ett annat handelssystem och hur man kodar det i Amibroker. Vi kan även se resultat för testresultat inom några sekunder, istället för att testa det själva och ta veckor eller månader. Det här är de stora fördelarna med automatisk provning snabbt, gratis och enkelt. Jag hoppas det hjälper, glad trender och njut av 8211 Dave McLachlan Videos i FREE Amibroker Course: GRATIS Trading System Video Lessons: GRATIS Amibroker Q Amp A Videos: 6 Responses Lämna ett svarStock Market Timing Strategy: The Moving Average Crossover Det rörliga genomsnittet är en extremt användbar indikator som används i många olika branscher, inte bara finansiering. Och it8217s makt som en aktiemarknadsstrategi är viktigt att veta. På marknaderna överlåter handlarna glidande medelvärden på sina prisdiagram för att visa när en marknad trender och att tillhandahålla objektiva köp - och säljsignaler. Prisdiagram med glidande medelvärden överlagrade. Src: IG-index. Om ett glidande medel flyttas uppåt visar det sig att marknaden i allmänhet trender högre, medan om ett glidande medel går nedåt visar det sig att marknaden trender lägre. Flytta genomsnittliga övergångar används också för att identifiera förändringar i trenden. Så om ett snabbrörande medelvärde, som 50 dagars glidande medelvärde, passerar över ett långsammare glidande medelvärde, som 200 dagars glidande medelvärde, kan marknaden sägas ha förändrats från en nedåtgående trend till en ny uppåtgående trend. Och detta är känt för handlare som ett gyllene kors. Motsatsen till detta inträffar när 50 dagars glidande medelvärde passerar under 200 dagars glidande medelvärde och detta kallas Death Cross. Använda det rörliga genomsnittet som ett filter Vissa handelsmän tror att Gyllene Korset är en stark signal för att köpa aktiemarknaden och ett Death Cross är en stark signal att sälja, baserat på antagandet att de finansiella marknaderna rör sig i medellång och långsiktig utveckling. Om du använder dessa två signaler kan du fånga vinster när marknaden rör sig högre och flytta till kontanter när marknaden går lägre. Så laddar vi upp några data nu och ser hur den här strategin för aktiemarknaden har spelat ut under de senaste 100 åren. Så jag ska först och främst ladda upp några historiska dagliga data för Dow Jones Industrial Average i Amibroker och Im kommer att beräkna köp och hålla avkastning mellan 1900 och 2014. Såsom du kan se från resultaten nedan är den årliga nominella Återgå från köp och håll med Dow Jones är 5,22. och den maximala drawdownen är 89. som inträffade under den stora depressionen. (Drawdown är ett sätt att mäta topp-till-kassaförlusten av en investering. Så i det här fallet skulle investeringen i köp och innehav ha gått förlorad 89 från toppen 1929 till tråget 1932). Det är värt att nämna att dessa är de nominella avkastningarna. För att få den verkliga realtidsavkastningen är det nödvändigt att justera uppgifterna för återinvesterade utdelningar såväl som för inflationen. Det är möjligt att göra denna justering, men för dagliga data som behövs här är det inte så lätt. Därför kommer den nominella avkastningen att användas. Tänk bara på att avkastningen kan vara något högre i det verkliga livet på grund av utdelningar. I allmänhet har aktiemarknaden visat sig återgå runt 6-7 på mycket lång sikt. 89 neddragning under den stora depressionen. Köra crossover-strategin Nu, i stället för att använda en buy and hold-strategi, köper vi bara Dow när 50-dagars glidande medelvärde passerar över 200-dagars glidande medelvärde (ett gyllene kors). Och vi kommer att sälja marknaden när 50-dagars MA korsar under 200-dagars MA (a Death Cross). Du kan se från de nedanstående resultaten att det glidande medelfiltret har fungerat: Så, i stället för att bara köpa och hålla indexet, har vi faktiskt gjort 81 affärer över tidsperioden. Och nästa diagram visar på de senaste branscherna. Gröna pilar är köpsignaler och röda pilar är säljsignaler. Du kan se att det rörliga genomsnittet faktiskt fick oss ur marknaden precis före kreditkrisen. Och det fick oss tillbaka till marknaden den 1 juli 2009. Nu kan vi göra samma sak men på en annan dataset. Så i det här fallet kör jag köp och håller strategi på SampP 500 Index mellan 1955 och 2014. Och du kan se från resultaten att den årliga avkastningen från köp och håll är 6,65 med en drawdown på -57 för perioden. Och här ger köp och håll oss en 1,65 årsavkastning och en drawdown från kreditkrisen på -57. Detta resulterar i en väldigt instabil kapitalkurva som du kan se nedan: Samtidigt resulterar den glidande genomsnittliga övergångsstrategin i en årlig avkastning på 6.06 med en drawdown på bara 20. Och som du kan se är aktiekurvan med den glidande genomsnittliga crossoveren mycket mindre skrämmande. Återigen har den glidande genomsnittliga strategin hållit oss ute från marknaden under större delen av marknadskraschen år 2008. MA crossover-strategi: Sammanfattning Id säger att detta är en vinst för den glidande genomsnittliga crossover som en aktiemarknadsstrategi. Vi har kört tre tester och den populära Golden Cross-strategin har hjälpt oss att göra marknaden bättre än att köpa och hålla fast vid varje tillfälle. För mig är det viktigaste att det har minskat vår exponering för förluster under björnmarknaderna kraftigt. Självklart kan vi gå längre ner i den här vägen och titta på olika rörliga genomsnittshastigheter och olika tidsramar, men jag vill inte göra för mycket optimering så jag lämnar det upp till dig att undersöka dig själv. Använda den bredare marknaden till en portfölj Så nu har vi sett hur det enkla rörliga genomsnittet kan hjälpa till när timing på aktiemarknaden. Men vad händer om vi inte är intresserade av att köpa aktiemarknaden i sig utan snarare en portfölj med olika lager. Kanske kan den bredare aktiemarknaden hjälpa oss även våra enskilda aktieaffärer. För att testa detta har jag skapat en mycket enkel aktieportföljstrategi baserat på momentum och 52 veckor höga. Mycket enkelt, när ett lager stänger vid en ny 52-veckors hög som lagras till portföljen vid nästa öppning. När det stängs till en ny 26 veckors låga, såldes stocken på nästa öppna och den släpper av portföljen. Portföljen kan innehålla högst 10 lager varje gång och var och en viktas lika med ingen marginal som används. Strategin väljer aktier från SampP 500-universum och provisionerna är satt till 10 per handel med startkapital på 10 000. Genomförandet av denna grundläggande portföljstrategi resulterade i en årlig avkastning på 9,69 mellan 2000 och 2014, vilket är ganska bra. Använda SampP 500 som ett filter Många utövare tror att det är bäst att bara köpa aktier när den bredare marknaden trender uppåt och att sälja dessa aktier när marknaden går söderut eller i en björnutveckling. Ett marknadsfilter kan därför kunna förbättra en enkel momentumstrategi som den här genom att ta portföljen i kontanter när den bredare aktiemarknaden går lägre. Så vad händer om vi introducerar ett marknadsfilter som tidigare så att vi bara köper aktier när SampP 500 är i en uptrend För nästa test köps lagren bara och läggs till portföljen om 50-dagars glidande medelvärde för SampP 500 är över det8217s 200-dagars glidande medelvärde. Om 50-dagars glidande medelvärde av SampP 500 passerar under det8217s 200-dagars glidande medelvärdet, såldes alla aktier och portföljen flyttas till kontanter. Så snart ett nytt gyllene kors inträffar i SampP 500 får systemet börja köpa aktier igen. Att köra den här strategin med SampP 500-marknadsfilteret gav resultat i en avkastning på 7,47 och en drawdown på -12. Så trots att den årliga avkastningen har gått ner, är utbetalningen väsentligt förbättrad och aktiekurvan är mycket mjukare. Den här gången köper systemet ett lager när det gör 52 veckor högt, precis som det första testet. Den kommer då att sälja alla aktier i portföljen när en Death Cross inträffar i SampP 500. På så sätt sänks positionerna när den bredare marknaden minskar. Det finns dock inget filter för långa affärer som test två. Med andra ord behöver marknaden inte vara fullt utbildad för att initiera nya affärer, vilket ger strategin lite mer flexibilitet och exponering. Köra detta test gav en årlig avkastning på 5,49 och en drawdown på -38. Jämfört med den ursprungliga strategin har nedräkningen minskat men den årliga avkastningen har också drabbats. Det verkar för mig att problemet med test tre är att systemet är spännande vinnande positioner för tidigt. Bara för att den bredare marknaden går ner betyder det inte att det inte finns enskilda aktier som överträffar referensvärdet. Därför gör jag det motsatta i nästa test. Stocks are only bought if the SampP 500 is in an uptrend (the 50 MA is above the 200 MA) but they are not sold if the SampP 500 moves into a downtrend. This gives a better annual return of 8.78 and a maximum drawdown of -29. Next I will quickly take each of these tests back to the beginning of the data set to see what happens on a longer time frame. (By the way, I am using stocks from the SampP 500 universe that includes historical constituents, this is provided by Norgate Premium Data .) Test 1, between 1985 and 2014, produced an annual return of 10.01 with a maximum drawdown of -33 . This is the original system with no market timing filter. Test 2, between 1985 and 2014, produced an annual return of 6.93 with a -34 drawdown so this was much much worse than our previous result. From looking at the results and equity curve, the buy criteria may be too strict. Test 3, between 1985 and 2014, produced an annual return of 3.73 with a maximum drawdown of -31 . Again, this is a bad result for the market timing filter. Test 4, between 1985 and 2014, produced an annual return of 8.71 and a maximum drawdown of -31 . Portfolio filter: Summary Overall, the moving average filter appears to have some merit when used to trade the broader stock market. However, the case is not so clear-cut when used as part of a portfolio strategy. When timing the overall market, the crossover strategy improves both drawdown and return in most cases. But when using the crossover as a filter for a momentum portfolio strategy, there is no clear improvement in either. One reason for this could be that the momentum portfolio already has it8217s own exit criteria built into the system. Using an extra market filter adds extra complexity and might therefore be overkill. One thing the momentum portfolio needs to succeed is to be able to capture long tail profits in stocks so the cutting short of trades is not always helpful. It is also possible that the market filter criteria is simply too strict and by changing the parameters slightly, we might be able to improve results. That may be so, but these results do suggest one thing at least that the market filter strategy is not necessarily a magic bullet for portfolio systems, and this also confirms my own previous findings. Charts provided by Amibroker. Dow Jones data from Measuring Worth. All other stock market data from Norgate Premium Data . JB MarwoodSimple Triple Moving Average Crossover 8211 Amibroker AFL Code Here is the very simple and classical example to build a triple EMA (Exponential Moving Average Crossover system). System is quite popular if anyone (traderinvestor) is a newbie to classical technical analysis. In this AFL the triple moving average buy, sell signals are coded and comes with Scanning and Exploration functionality. It is a simple trend following system where the system shows buy signal if 3 EMA 13 EMA 34 EMA and shows a sell signal if 3 EMA Averages and applydrag-and-drop the Triple Moving Average Crossover code over blank chart. 7)Bingo you are done. Now you will be able to see the triple moving average crossover with buy and sell indicators. Relaterade läsningar och observationer Om Rajandran Rajandran är en fulltidshandlare och grundare av Marketcalls, mycket intresserad av att bygga timing modeller, algos. diskretionära handelskoncept och Trading Sentimental analysis. Han instruerar nu användare över hela världen, från erfarna handlare, professionella handlare till enskilda handlare. Rajandran deltog i college i Chennai där han fick en BE i elektronik och kommunikation. Rajandran har en bred förståelse för handel med mjukvaror som Amibroker, Ninjatrader, Esignal, Metastock, Motivewave, Market Analyst (Optuma), Metatrader, Tradingivew, Python och förstår individuella behov hos näringsidkare och investerare som använder ett brett spektrum av metoder. Thanks very much. Obligatorisk amerikanska regeringens ansvarsfriskrivning CTFC regel 4.41 Futures trading innehåller väsentlig risk och är inte lämplig för alla investerare. En investerare kan eventuellt förlora hela eller mer än den ursprungliga investeringen. Riskkapital är pengar som kan gå vilse utan att äventyra dem ekonomisk säkerhet eller livsstil. Överväga endast riskkapital som ska användas för handel och endast de som har tillräckligt med riskkapital bör överväga att handla. Tidigare resultat är inte nödvändigtvis en indikation på framtida resultat. CTFC-regel 4.41 HYPOTETISKA ELLER SIMULERADE RESULTATRESULTAT HAR SÄRSKILDA BEGRÄNSNINGAR. I likhet med en verklig prestationsrekord, representerar SIMULERADE RESULTAT INTE VERKLIGT HANDEL. Också eftersom handelarna inte har genomförts kan resultaten ha underförstått för konsekvenserna, om några av vissa marknadsfaktorer, såsom likviditet. SIMULERADE HANDELSPROGRAMMER I ALLMÄNT ÄR ÄVEN FAKTISKT ATT DE DESIGNERAS MED FÖRDELNINGEN AV HINDSIGHT. INGEN REPRESENTATION GÖRAS ATT ANTAL KONKURRERAR ELLER ÄR LIKTIGT FÖR ATT FÖRVÄNDA RESULTAT ELLER TABELL SOM LIKNAR TILL DE VISADE. Alla affärer, mönster, diagram, system etc. som diskuteras på denna webbplats eller annonsering är endast illustrativa och inte tolkas som specifika rådgivande rekommendationer. Alla idéer och material som presenteras här är endast avsedda för information och utbildning. Inget system eller handelsmetodik har någonsin utvecklats som kan garantera vinst eller förhindra förluster. De vittnesmål och exempel som används här är exceptionella resultat som inte gäller genomsnittliga personer och är inte avsedda att representera eller garantera att någon kommer att uppnå samma eller liknande resultat. Handlar placerade på Trend Methods-systemets tillförlitlighet tas på egen risk för eget konto. Detta är inte ett erbjudande att köpa eller sälja framtidsintressen. Upphovsrätt 2015 Marketcalls Financial Services Pvt Ltd mitten Alla rättigheter reserverade mitten och vår webbplatskarta Alla logotyper är varumärken som tillhör deras respekterande ägare. Data och information tillhandahålls endast i informationssyfte och är inte avsedda för handelsändamål. Varken marketcalls. in webbplatsen eller någon av dess promotorer ansvarar för eventuella fel eller förseningar i innehållet eller för åtgärder som vidtas i beroende av det.

Comments