Saturday, 4 November 2017

Glidande medelvärde kod prov


MetaTrader 4 - Experts Moving Average - expert för MetaTrader 4 Den rörliga genomsnittliga experten för att skapa handelssignaler använder ett glidande medelvärde. Öppning och stängning av positioner utförs när det glidande medelvärdet uppfyller priset vid den nyligen bildade baren (barindex är lika med 1). Partikelstorleken optimeras enligt en speciell algoritm. Expertrådgivaren analyserar samtidigt det rörliga genomsnittet och marknadsprisgrafen. Kontrollen utförs av CheckForOpen () - funktionen. Om det glidande medelvärdet möter stången på ett sådant sätt att den tidigare är högre än Öppet pris men lägre än Stäng pris, öppnas KÖP-positionen. Om det glidande medelvärdet möter stången på ett sådant sätt att den förstnämnda är lägre än Öppet pris men högre än Stäng pris, öppnas SÄLJ-positionen. Pengarhantering som används av experten är mycket enkel men effektiv: kontrollen över varje positionsvolym utförs beroende på tidigare transaktionsresultat. Denna algoritm implementeras av funktionen LotsOptimized (). Grundlotsstorleken beräknas utifrån den maximala tillåtna risken: Parametern MaximumRisk visar den grundläggande riskprocenten för varje transaktion. Den har vanligtvis ett värde mellan 0,01 (1) och 1 (100). Till exempel, om fri marginal (AccountFreeMargin) motsvarar 20 500 och regler för kapitalhantering föreskriver att man använder risk för 2, kommer den grundläggande partikelstorleken att göra 20500 0,02 1000 0,41. Det är mycket viktigt att man kontrollerar storleksnoggrannheten och normaliserar resultatet med tillåtna värden. Normalt är fraktionella partier med steg om 0,1 tillåtet. En transaktion med en volym på 0,41 kommer inte att utföras. För normalisering används funktionen NormalizeDouble () med noggrannhet upp till 1 tecken efter punkten. Detta resulterar i det grundläggande partiet av 0,4. Grundvärdesberäkning på grundval av fri marginal tillåter att öka i volymer av operation beroende på handelns framgång, dvs att handla med återinvestering. Detta är den grundläggande mekanismen med obligatorisk kapitalförvaltning för att öka effektiviteten i handeln. DecreaseFactor är i vilken utsträckning partiets storlek kommer att minskas efter olönsam handel. Normala värden är 2,3,4,5. Om de föregående transaktionerna var olönsamma minskar de efterföljande volymerna med en faktor av minskningsfaktor för att vänta genom den obetydliga perioden. Detta är huvudfaktorn i kapitalhanteringsalgoritmen. Tanken är väldigt enkel: om handeln ökar med framgång, arbetar experten med det grundläggande partiet och ger maximal vinst. Efter den allra första olönsam transaktionen kommer experten att minska hastigheten tills en ny positiv transaktion har gjorts. Algoritmen tillåter att inaktivera hastighetsminskning, för att göra det måste man ange minskningsfaktor 0. Mängden av de senast påföljande olönsamma transaktionerna beräknas i handelshistoriken. Grundvärdet kommer att beräknas enligt följande: Algoritmen möjliggör sålunda att effektivt minska risken som uppstår till följd av en serie olönsamma transaktioner. Lotstorleken är obligatoriskt kontrollerad för den minsta tillåtna storleken i slutet av funktionen eftersom De tidigare gjorda beräkningarna kan resultera i parti 0: Experten är huvudsakligen avsedd att arbeta med daglig och i testläge - för att göra till nära priser. Det kommer endast att handla vid öppnandet av en ny stapel, det är därför det inte är nödvändigt att använda varje kryssmodell. Testresultatet är representerat i rapporten. Jag vet att detta är möjligt med boost enligt: ​​Men jag vill verkligen undvika att använda boost. Jag har googled och inte hittat några lämpliga eller läsbara exempel. I grund och botten vill jag spåra det rörliga genomsnittet av en pågående ström av en ström av flytande punkttal med de senaste 1000 siffrorna som ett dataprov. Vad är det enklaste sättet att uppnå detta jag experimenterade med att använda ett cirkulärt array, exponentiellt glidande medelvärde och ett enklare glidande medelvärde och fann att resultaten från den cirkulära gruppen passade mina behov bäst. Frågade 12 juni 12 kl 4:38 Om dina behov är enkla kan du bara försöka använda ett exponentiellt glidande medelvärde. Enkelt, du gör en ackumulatorvariabel, och när din kod tittar på varje prov uppdateras koden med ackumulatorn med det nya värdet. Du väljer en konstant alfa som ligger mellan 0 och 1 och beräknar det här: Du behöver bara hitta ett värde av alfa där effekten av ett visst prov endast varar för cirka 1000 prover. Hmm, jag är inte säker på att det här passar dig, nu när jag har lagt den här. Problemet är att 1000 är ett ganska långt fönster för ett exponentiellt rörligt medelvärde. Jag är inte säker på att det finns en alfa som skulle sprida genomsnittet över de senaste 1000 siffrorna, utan underflöde i flytpunktsberäkningen. Men om du ville ha ett mindre medelvärde, som 30 nummer eller så, är det här ett mycket enkelt och snabbt sätt att göra det. Svarade 12 jun 12 kl 4:44 1 på ditt inlägg. Det exponentiella glidande medlet kan tillåta att alfabetet är variabelt. Så det här låter det användas för att beräkna tidbasvärdena (t ex byte per sekund). Om tiden sedan den senaste ackumulatorns uppdatering är mer än 1 sekund, låter du alfa vara 1,0. Annars kan du låta alpha vara (usecs sedan senaste uppdateringen1000000). ndash jxh Jun 12 12 at 6:21 I grund och botten vill jag spåra det rörliga genomsnittet av en pågående ström av en ström av flytande punkttal med de senaste 1000 numren som ett dataprov. Observera att nedanstående uppdaterar summan som element som läggs till, vilket undviker kostnadskrävande O (N) - korsning för att beräkna summan som behövs för genomsnittet - efterfrågan. Totalt görs en annan parameter från T för att stödja t. ex. Använder en lång lång när totalt 1000 lång s, ett int för char s, eller en dubbel till totalt float s. Det här är lite bristfälligt, eftersom numsamples kan gå förbi INTMAX - om du bryr dig att du kan använda en unsigned long long. eller använd en extra bool data medlem för att spela in när behållaren fylls första gången medan cykeltalsprover runt arrayen (bäst omnämndes något oskadd som pos). svarade den 12 juni 12 kl 5:19 antar man att kvoträttsoperatören (T-prov) citationstecken är faktiskt quotvoid operatorltlt (T-prov) citat. Ndash oPless 8 juni 14 kl 11:52 oPless ahhh. Välspotted. egentligen menade jag att det skulle vara tomt operatör () (T-prov) men självklart kan du använda vilken anteckning du helst tyckte. Kommer att fixa, tack. ndash Tony D 8 juni kl 14: 27 Jag vill utveckla beräkningen för aktiekurs glidande medelvärde. Men mycket komplex beräkning har planerats senare. Mitt första steg för att veta hur man beräknar rörligt medelvärde effektivt. Jag behöver veta hur man tar in ingången och returnerar effekten effektivt. anses ingående datum och pris. Consudered output Datum, Pris och Flyttande Genomsnitt. Om jag har 500 poster och jag vill beräkna Rörande medelvärde i 5 dagar, vad är det effektiva sättet istället för att gå fram och tillbaka i arrayet med datum och pris igen, snälla söka vad är det bästa sättet att få inmatning (ArrayList, Table, array etc) och returutgång. Obs! Dagens MA på 5 dagar kommer att vara genomsnittet för senaste 5 dagarna inklusive dagens pris. Igår kommer MA att vara genomsnittlig för de senaste 5 dagarna från igår. Jag vill hålla dagarna flexibla istället för 5 det kan vara 9, 14, 20 etc. Torsdag 10 april 2008 15:21 Om du behöver enkel beräkning utan din ansträngning än du kan använda TA-Lib. Men om du vill att din beräkning ska vara effektivare än TA-Lib, kan du skapa din egen tekniska indikator. TA-Lib är bra, men problemet är att det här biblioteket bara har statiska metoder. Det betyder att när du behöver beräkna SMA-arrayvärden baserat på 500 prisstänger, skickar du hela satsen med staplar och det kommer att returnera en rad SMA-värden. Men om du får ett nytt 501-st värde så ska du skicka igen hela arrayen och TA-Lib kommer igen att beräkna och returnera SMA-arrayen av värden. Föreställ dig nu att du behöver en sådan indikator på realt prismatning, och för varje prisändring behöver du nytt indikatorvärde. Om du har en indikator är inte ett stort problem, men om du har hundratals indikatorer som fungerar kan det vara ett prestandaproblem. Jag var i en sådan situation och börja utveckla realtidsindikatorer som är effektiva och gör ytterligare beräkningar för ny prisfält eller endast för ändrade prisfält. Tyvärr behövde jag aldrig SMA-indikator för mina handelssystem, men jag har sådana för EMA, WMA, AD och andra. En sådan indikator AD publiceras på min blogg och du kan se därifrån vad är den grundläggande strukturen i min realtime-indikatorklass. Jag hoppas att du behöver små förändringar för att genomföra SMA-indikatorn, för att det är en av de enklaste. Logiken är enkel. För att beräkna SMA behöver du bara n sista prisvärden. Så klassen instans kommer att ha samling av priser, som kommer att lagra hålla bara sista n antal priser som SMA definieras (i ditt fall 5). Så när du har en ny stapel tar du bort äldsta och lägger till en ny och skapar beräkning. Torsdag 10 april 2008 16:04 Alla svar Det finns ett bibliotek som heter TA-Lib som gör allt det för dig och det är öppen källkod. Den har ungefär 50 indikatorer som jag tror. Weve använde det i produktionsmiljö och det är mycket effektivt och realiserbart. Du kan använda den i C, Java, C, etc. Om du behöver enkel beräkning utan din ansträngning än du kan använda TA-Lib. Men om du vill att din beräkning ska vara effektivare än TA-Lib, kan du skapa din egen tekniska indikator. TA-Lib är bra, men problemet är att det här biblioteket bara har statiska metoder. Det betyder att när du behöver beräkna SMA-arrayvärden baserat på 500 prisstänger, skickar du hela satsen med staplar och det kommer att returnera en rad SMA-värden. Men om du får ett nytt 501-st värde så ska du skicka igen hela arrayen och TA-Lib kommer igen att beräkna och returnera SMA-arrayen av värden. Föreställ dig nu att du behöver en sådan indikator på realt prismatning, och för varje prisändring behöver du nytt indikatorvärde. Om du har en indikator är inte ett stort problem, men om du har hundratals indikatorer som fungerar kan det vara ett prestandaproblem. Jag var i en sådan situation och börja utveckla realtidsindikatorer som är effektiva och gör ytterligare beräkningar för ny prisfält eller endast för ändrade prisfält. Tyvärr behövde jag aldrig SMA-indikator för mina handelssystem, men jag har sådana för EMA, WMA, AD och andra. En sådan indikator AD publiceras på min blogg och du kan se därifrån vad är den grundläggande strukturen i min realtime-indikatorklass. Jag hoppas att du behöver små förändringar för att genomföra SMA-indikatorn, för att det är en av de enklaste. Logiken är enkel. För att beräkna SMA behöver du bara n sista prisvärden. Så klassen instans kommer att ha samling av priser, som kommer att lagra hålla bara sista n antal priser som SMA definieras (i ditt fall 5). Så när du har en ny stapel tar du bort äldsta och lägger till en ny och skapar beräkning. Torsdag 10 april 2008 16:04 Jag skulle beräkna det glidande genomsnittet i databasen via en lagrad procedur eller i en kub. Har du tittat på Analysis Services, har den möjlighet att beräkna glidande medelvärden. Torsdag 10 april 2008 16:05 Ja. TA-LIB är bra men kanske inte lämplig för mig. När jag lägger till nytt värde eller uppdaterat värde för historik över poster kommer jag att göra beräkningen i en separat funktion endast för det nya citatet och lagra det i databasen. Jag planerar att uppdatera citatet varje timme. Jag behöver göra ca 25-30 tekniska indikatorer för 2200 aktier. Torsdagen den 10 april 2008 17:51 Utförandetiden för ett TA-Lib-samtal på en serie av 10000 element tar cirka 15 millisekunder (på en Intel Core Duo 2.13 Ghz). Detta är medelvärdet av alla funktioner. Bland de snabbaste tar SMA mindre än 2,5 millisekunder. Den långsammaste, HTTRENDMODE, tar 450 millisekunder. Med mindre element är det snabbare. SMA tar cirka 0,22 millisekunder för 1000 ingångselement. Hastighetsförstärkningen är nästan linjär (överhuvudet för att utföra funktionsanropet är försumbar). I samband med din ansökan är TA-Lib mycket osannolikt att vara din flaskhals för snabb prestanda. Också jag rekommenderar inte generellt en sådan quadrat-lösning. Läs nedan för detaljer. Först en korrigering till Boban. s uttalande Alla funktioner i TA-Lib kan också beräkna ett enda slutvärde genom att använda ett minimum av kvoterade nquot-element. Du kan ha en uppsättning av storlek 10000, ha data initialiserad endast för de första 500 elementen, lägg till ett element och ring TA-Lib för att beräkna SMA endast för det nya elementet. TA-Lib kommer att se bakåt inte mer än behövs (om SMA med 5, kommer TA-Lib att beräkna en enda SMA med de senaste 5 värdena). Detta görs möjligt med parametern startIdx och endIdx. Du kan ange ett intervall som ska beräknas eller ett enda värde. I detta scenario skulle du göra startIdx endIdx 500 för att beräkna 501st-elementet. Varför är en sådan kvotas nquot-lösning potentiellt farlig för vissa Oavsett val av Boban. s lösning eller TA-Lib anser att det med ett litet ändligt antal tidigare data inte fungerar bra med de flesta TA-funktioner. Med SMA är det uppenbart att du bara behöver n element för att beräkna ett medelvärde över n element. Det är inte lika enkelt med EMA (och många andra TA-funktioner). Algoet beror ofta på föregående värde för att beräkna det nya värdet. Funktionen är rekursiv. Det betyder att alla tidigare värden påverkar framtida värden. Om du bestämmer dig för att quotlimitquot ditt algo för att bara använda en liten mängd tidigare n-värde, får du inte samma resultat som någon som beräknar över ett stort antal tidigare värden. Lösningen är en kompromiss mellan hastighet och precision. Jag har ofta diskuterat detta i samband med TA-Lib (jag kallar det det citronerade kvartalet i dokumentationen och forumet). För att hålla det enkelt är min allmänna rekommendation om du inte kan göra skillnaden mellan ett algo med ett ändlöst impulsrespons (FIR) från ett algo med ett oändligt impulsrespons (IIR), du kommer att vara säkrare att beräkna över alla data du har tillgängliga. TA-Lib anger i koden vilken av dess funktioner har en instabil period (IIR). Redigerad av mfortier Fredag ​​15 augusti 2008 4:25 Korrekt engelsk mening Fredag ​​den 15 augusti 2008 4:20 AM Provkoden på fliken Fullständig kod illustrerar hur man beräknar det rörliga genomsnittet av en variabel genom en hel dataset, över de sista N-observationerna i en dataset eller över de sista N-observationerna inom en BY-grupp. Dessa samplingsfiler och kodexempel tillhandahålls av SAS Institute Inc., utan garantin av något slag, varken uttryckligt eller underförstått, inklusive men inte begränsat till de underförstådda garantierna för säljbarhet och lämplighet för ett visst ändamål. Mottagarna bekräftar och godkänner att SAS Institute inte är ansvarigt för eventuella skador som uppstår på grund av deras användning av detta material. Dessutom kommer SAS Institute att inte ge något stöd för materialet som ingår i häri. Dessa samplingsfiler och kodexempel tillhandahålls av SAS Institute Inc., utan garantin av något slag, varken uttryckligt eller underförstått, inklusive men inte begränsat till de underförstådda garantierna för säljbarhet och lämplighet för ett visst ändamål. Mottagarna bekräftar och godkänner att SAS Institute inte är ansvarigt för eventuella skador som uppstår på grund av deras användning av detta material. Dessutom kommer SAS Institute att inte ge något stöd för materialet som ingår i häri. Beräkna det rörliga genomsnittet av en variabel genom en hel dataset, över de sista N-observationerna i en dataset eller över de sista N-observationerna inom en BY-grupp.

No comments:

Post a Comment