Glidande medelvärde expertrådgivare kod
Vanligtvis kan två glidande medelvärden användas för att skapa en forexstrategi (EA för MT4) med följande regler: Köp när den korta perioden glidande medelvärdet är över den långa perioden glidande medel Sälj när den långa glidande genomsnittet är över den korta perioden glidande medelvärdet I följande diagram från MetaTrader Terminal är den gula linjen det korta glidande medeltalet (Period 9) och den röda linjen är det långa glidande medeltalet (Period18). Analysera grafen kunde vi skriva om handelsreglerna eller valutasignalerna som: Köp när den gula linjen ligger över den röda linjen Sälj när den gula linjen ligger under den röda linjen Istället för att länge koda denna forexstrategi med Molanis Strategy Builder du kan skapa ett handelsdiagram som representerar den glidande genomsnittliga strategin på några minuter. Dra och släpp bara två tekniska analysblocks, ett köpblock och ett säljblock. Anslut dem och sätt in blockparametrarna för att få ett diagram som följande: Detta handelsdiagram har två handelsvägar. Den vänstra är markerad. Den går från START-blocket till END-blocket. Man kan läsa det som: Köp 1 mycket EURCAD (med 100 pip ta vinst och 50 pip stoppförlust) när den korta perioden glidande medelvärdet (9) ligger över den långa perioden glidande medelvärdet (18). Kom ihåg att läsa handelsdiagrammet i motsatt riktning till handelsflödet. Den rätta handelsvägen kunde läsas som: Sälj 1 mycket EURCAD (med 100 pip ta vinst och 50 pip stoppförlust) när den långa glidande genomsnittet (18) ligger över det korta glidande genomsnittet (9). Generera MQL-koden för MetaTrader med bara ett klick På handelsdiagrammenyn, klicka på Generera MQL4-kod för att få MQL4-kodfönstret. Molanis Strategy Builder låter dig öppna din expertrådgivare direkt med MetaTrader eller spara den som en MQ4-fil. Missa inte vår videohandledning onSimple Expert Advisor Problem 29. Skapa en handelsexpertrådgivare. Preliminära argument Innan du börjar programmera en handelsexpertrådgivare är det nödvändigt att definiera allmänna principer för ett framtida program. Det finns inga strikta regler för att skapa program. När en gång har skapat ett program fortsätter en programmerare emellertid att förbättra det. För att kunna förstå programmet i framtiden måste det skapas i enlighet med ett väl genomtänkt och lättförståeligt system (det är särskilt viktigt om ett program kommer att förbättras ytterligare av en annan programmerare). Det mest praktiska programmet är det som består av funktionella block, som var och en ansvarar för sin del av beräkningarna. För att skapa en algoritm för en handelsexpertrådgivare kan vi analysera vad ett operativprogram ska göra. En av de viktigaste uppgifterna i bildandet av handelsorder är informationen om order som redan finns i en klientterminal. Vissa handelsstrategier tillåter endast en enriktad order. I allmänhet, om en handelsstrategi tillåter, kan flera beställningar vara öppna i en terminal samtidigt, men deras antal bör vara rimligt begränsat. När man använder en strategi bör handelsbeslut fattas med hänsyn till den nuvarande situationen. Innan ett handelsbeslut fattas i ett program är det nödvändigt att veta vilka handelsorder som redan har öppnats eller placerats. Först och främst måste ett program innehålla en orderbok som är bland de första som ska utföras. Under ett EA-genomförande bör handelsbeslut fattas, vars genomförande leder till genomförandet av handelsverksamheten. Koddel ansvarig för handelsorderformation är bättre skrivet i ett separat block. En expertrådgivare kan bilda en handelsförfrågan om att öppna en ny väntande eller marknadsordnad, stäng eller ändra några av befintliga order eller utför inga åtgärder alls. En EA måste också beräkna orderpriserna beroende på användarnas önskan. Handelsbeslut bör fattas i ett program på grundval av handelskriterier. Framgången för hela programmet beror på korrektheten att upptäcka handelskriterier i programmet. Vid beräkning av handelskriterier kan ett program (och måste) ta hänsyn till all information som kan vara användbar. Exempelvis kan en expertrådgivare analysera kombinationen av tekniska indikatorvärden, tidpunkten för viktiga pressmeddelanden, aktuell tid, värden av vissa prisnivåer etc. För praktiskt taget bör den programdel som är ansvarig för beräkningen av handelskriterier skrivas i en separat blockera. En handelsexpertrådgivare måste nödvändigtvis innehålla felbehandlingsblock. Att analysera fel som kan inträffa vid genomförandet av handelstransaktionen gör det möjligt att upprepa en handelsförfrågan och å andra sidan informera en användare om en eventuell konfliktsituation. Struktur av en enkel expertrådgivare Nedan är ett strukturellt schema av en enkel expertrådgivare konstruerad på grundval av flera funktionella block, i varje block en viss fristående del av beräkningarna. På följande EA-utvecklingsstadium finns det ingen programkod än. Samtidigt bildas algoritmen för ett program i stor utsträckning. Hur EA byggd på baserna av det erbjudna systemet kommer att fungera kan lätt förstås, helt enkelt titta på schemat och orientera sig på blocknamn och relationsarrayer (kontrollöverföring) mellan dem. Efter att programstartkontrollen har passerat till förberedelseblocket. I det här blocket kan vissa allmänna parametrar analyseras. Till exempel, om det inte finns tillräckligt med staplar i ett fönster (staplar som är nödvändiga för att beräkna parametrar för tekniska indikatorer), kommer en EA inte att kunna fungera på ett tillfredsställande sätt. I ett sådant fall måste en EA avsluta verksamheten och informera en användare om detta preliminärt och rapportera om orsaken till uppsägning. Om det inte finns några kontraindikatoner av generell karaktär, överförs kontrollen för att beställa bokföringsblock. I blocken av bokföringsbeställningar detekteras antalet och kvaliteten på order som finns i en klientterminal för en säkerhet (till det fönster som EA är ansluten till). I detta block måste order av andra värdepapper elimineras. Om en programmerad handelsstrategi kräver att endast marknadsordningar används (och inte använder väntande beställningar) måste förekomsten av pågående order upptäckas. Om en strategi bara tillåter en marknadsordnad och det finns faktiskt flera order, bör detta faktum också vara känt. Uppgiften för orderbokslutsblocket (i detta schema) är att definiera huruvida den nuvarande handelssituationen motsvarar en förväntad, dvs. den där EA kan fungera på ett tillfredsställande sätt. Om situationen överensstämmer måste kontrollen överföras till nästa block för att fortsätta EAs-funktionen, om inte, måste EA-operationen avslutas och detta faktum måste rapporteras till en användare. Om det inte finns några beställningar i terminalen eller antalet och kvaliteten på befintliga order motsvarar vad som förväntades, överförs kontrollen till blocket av definierade handelskriterier. I detta block beräknas alla kriterier som krävs för att fatta handelsbeslut, nämligen kriterier för öppnande, stängning och ändring av order. Ytterligare kontroll överförs till blocken av stängningsorder. Det är lätt att förstå varför i det erbjudna systemet exekveras blockeringen av slutbeställningar tidigare än blocket med öppningsorder. Det är alltid mer rimligt att behandla första befintliga beställningar (stäng eller modifiera) och först efter det att öppna nya order. I allmänhet är det korrekt att styras av önskan om att få så lite order som möjligt. Under utförandet av detta block måste alla beställningar, för vilka stängningskriteriet har aktiverats, stängas. När alla nödvändiga order har stängts överförs kontrollen till ett block med ny order storlek beräkning. Det finns många algoritmer för att beräkna en ordervolym. Den enklaste av dem använder en konstant, fast parti storlek. Det är lämpligt att använda denna algoritm i ett program för teststrategier. Mer populär metod för att definiera en orderstorlek är att ange antalet partier beroende på hur mycket fri marginal, till exempel 30-40 av den. Om fri marginal inte räcker, avslutar programmet sin funktion efter att ha informerat en användare om orsaken. När antalet partier för att öppna nya order är definierad, överförs kontrollen till orderöppningsblocket. Om några av de tidigare beräknade kriterierna pekar på behovet av att öppna en order av en viss typ, bildas en handelsförfrågan om att öppna en order i detta block. Det finns också ett felanalyseringsblock i en expertrådgivare. Om någon handelshandling misslyckades, överförs kontrollen (endast i det här fallet) till felbehandlingsblocket. Om ett fel som returneras av en server eller klientterminal inte är avgörande görs ett försök att utföra en handelsoperation. Om ett avgörande fel returneras (till exempel ett konto är blockerat) måste en EA avsluta sin operation. Kom ihåg att i MQL4 finns det ingen möjlighet att programmet avslutar en EAs-operation i ett säkerhetsfönster (som skiljer sig från skript, se Specialfunktioner). Vad som kan göras på ett program sätt är uppsägningen av start (). Vid en ny start av funktionstart () på ett nytt fält kan värdet av en viss variabel flagga förbjuda handel (i det här fallet aktiveras som ett resultat av ett kritiskt fel) analyseras och kontrollen kan överföras för avslutandet av specialfunktionsoperation är det därför inte tillåtet att skapa en ny handelsförfrågan. I det erbjudna systemet analyseras flaggvärdet i blocket av preliminär bearbetning. Handelsstrategi Marknadspriserna ständigt rör sig. Marknadstillståndet kan när som helst präglas av villkoret, antingen som en trend - stark enriktad prisförändring (uppgång eller fall), eller som en plattsidig prisrörelse med svaga avvikelser från ett visst genomsnitt. Dessa marknadsegenskaper är villkorade, eftersom det inte finns några klara kriterier, enligt vilken trend eller lägenhet kan identifieras. Till exempel långa laterala rörelser med starka avvikelser som kan spåras varken till en plan eller till en trend. I allmänhet antas att marknaden huvudsakligen är i sidledningar och trender är vanligtvis 15-20 av tiden. Alla handelsstrategier kan också konventionellt indelas i två huvudgrupper. Den första gruppen innehåller plattorienterade strategier. Huvudideen för sådana strategier är att efter ett uppenbart avvikspris måste återgå till föregående position, så öppnas beställningar i riktning mot den sista prisrörelsen. De andra gruppstrategierna är trendstrategier, när order öppnas i samma riktning som saltprisrörelsen. Det finns mer komplicerade (kombinerade) strategier. Sådana strategier tar hänsyn till många olika faktorer som karakteriserar marknaden som ett resultat handel kan utföras både på platt och trend. Det är inte svårt att genomföra handel enligt denna eller den strategiska tekniken - MQL4 innehåller alla nödvändiga medel för det. Det huvudsakliga arbetet med att skapa en gång egen strategi består i att söka efter handelskriterier. Handelskriterier I det här exemplet kommer vi att försöka bygga en trend Expert Advisor, det vill säga den som kommer att öppna order i prisriktningsriktningen. Så vi måste hitta bland olika tekniska indikatorer de som upptäcker en trendstart. En av de enklaste metoderna för att söka handelskriterier är baserad på analysen av kombinationen av MA med olika medelvärden. Fig. 111 och Fig. 112 visar läget för två olika MA (med perioder med medelvärde 11 och 31) på olika marknadsdelar. Medeltal med liten medelvärde (röda linjer) är närmare ett prisdiagram, vridigt och rörligt. Flyttande medelvärden med större medelvärde (blå linje) är mer inerta, har större fördröjning och ligger längre från marknadspriserna. Låt oss vara uppmärksamma på platser där MAs med olika medelvärden går över och försöker bestämma om MA-korsningen kan användas som läsningskriterium. Fig. 111. Korsning av MA (11) och MA (31) när prisriktningsriktningen ändras. I figur 111 ser vi en marknadsdel där öppningsorder i riktning mot prisrörelsen vid MA-kryssningen är motiverad. I punkt A korsar den röda linjen den blå från botten uppåt, därefter fortsätter marknadspriset att växa under en tid. Ytterligare omvänd MA-kryssning indikerar förändringen av prisrörelser. Om vi öppnar en order på punkt A och stänger den vid B, får vi vinst proportionellt mot skillnaden mellan A - och B-priser. Fig. 112. Korsning av MA (11) och MA (31) när prisriktningsriktningen ändras. Samtidigt finns det andra ögonblick på marknaden när MA cross, men det leder inte till ytterligare betydande prishöjningar eller faller (bild 112). Beställningar som öppnats vid MA-kryssning vid sådana tillfällen leder till förluster. Om Sälj öppnas vid A och stängs vid B kommer sådan handel att medföra förluster. Samma sak kan sägas om en köporder öppnad vid B och stängd vid C. Framgången för hela strategin implementerad på grundval av MA-korsning beror på antalet delar som kan karakteriseras som trend och platt. I platt ofta är MA-kryssning en vanlig händelse som stör varje trendstrategi. Många falska signaler leder som regel till förluster. Det är därför som denna signering av MA med olika medeltal kan användas för att bygga handelsstrategier endast i kombination med andra tecken som visar en trend. I det här exemplet (för att bygga en enkel expertrådgivare) måste vi vägra använda detta tecken. Vi kommer att använda ett annat tecken. Genom att analysera visuellt prissättningsgraden på marknaden kan vi se att en lång enriktad prisökning eller - fall ofta framstår som ett resultat av en kort stark rörelse. Med andra ord, om en stark rörelse inträffade inom en kort period, kan vi förvänta oss att den fortsätter på en medellång sikt. Fig. 113 visar marknadsperioden när en stark rörelse resulterade i fortsatt prisförändring i samma riktning. Som kvotens starka rörelsekvot kan vi använda skillnaden mellan MAs med olika medelvärden. Ju starkare rörelsen är, desto större är lagret av MA med större medelvärde från MA med en liten period av medelvärde. Dessutom resulterar även starka diskontinuerliga prisrörelser med ytterligare avkastning inte en stor skillnad mellan MAs, dvs många falska signaler visas inte. Till exempel innebar prishopp med 50 poäng med ytterligare avkastning (i mitten i figur 113) en ökning av skillnaden mellan MAs endast med 20 poäng. Samtidigt har en väldigt stark rörelse (som vanligen åtföljs av en betydande korrigering) i punkt A resulterat i skillnaden ökar upp till 25-30 poäng. Om köporder öppnas när ett visst värde av skillnad mellan MAs är uppnått, till exempel i A, kommer förmodligen ordern att vara lönsam när ett pris når ett förinställt stoppordervärde. Låt oss använda detta värde som ett handelskriterium i vår expertrådgivare. Antal beställningar I det här exemplet analyserar vi en expertrådgivare som medger att endast en marknadsordnad finns, och inga pågående beställningar lämnas. Ett sådant tillvägagångssätt är motiverat inte bara i detta visst exempel, utan kan användas som grund för någon strategi. Väntande beställningar används vanligtvis när en utvecklare har ett ganska pålitligt kriterium för att förutse framtida prisförändringar med hög sannolikhet. Om det inte finns något sådant kriterium behöver du inte använda pågående beställningar. Situationen när flera motsatta order för en säkerhet är öppna kan inte heller anses vara rimliga. Det var tidigare skrivet att ekonomiskt sett motsatta beställningar anses vara meningslösa, särskilt om orderpriserna är lika (se Avsluta och radera order). I så fall bör vi stänga en order av en annan och vänta på en signal för att öppna en marknadsordnad i en viss riktning. Förhållande mellan handelskriterier Från denna position blir det klart vilka relationer som är möjliga mellan handelskriterier. Fig. 114 visar tre varianter av korrelation av handelskriterier, när varje kriterium är viktigt (giltigt). Åtgärder (öppnande och stängning av marknadsordningar) sker medsols på följande bilder. Fig. 114. Korrelation av ordning för öppning och stängning av order (a och b - korrekt, c - felaktigt). Den mest populära varianten av ett korrekt bildat handelskriterium är varianten a. Efter att ha öppnats en marknadsorder köps den till det ögonblick då kriteriet kräver stängningsutlösare. Därefter uppstår en paus när inga order öppnas. Vidare en marknadsorder Sälj kan öppnas. Villkor för att stänga en Säljorder (i enlighet med korrekt utformade kriterier) förekommer tidigare än villkor för att öppna en Köporder. En köporder kan dock öppnas igen om ett handelskriterium kräver detta. Men enligt denna variant kan en marknadsorder inte öppnas om det finns en öppen marknadsorder i motsatt riktning. Liknande kriterier korrelation finns i varianten b. Skillnaden är att ett kriterium för att öppna någon marknadsorder är samtidigt ett kriterium för att stänga motsatt order. Denna variant som varianten a tillåter inte att flera order öppnas i terminalen samtidigt på en säkerhet. Varianen av kriterier korrelation är felaktig. Enligt denna variant tillåts öppnandet av en marknadsorder när stridsbestämmelser inte är stängda ännu, vilket är meningslöst. Det kan vara sällsynta fall då denna variant är delvis berättigad. Öppnande av en motsatt order är ibland acceptabel för att kompensera förluster som uppstår vid små korrigeringar efter starka prisrörelser. I sådana fall kan en motsatt ordning öppnas med samma eller mindre värde än den redan befintliga och sedan stängas när korrigeringen är över. En sådan taktik gör det möjligt att inte störa den quotmainquot-order som öppnas i trendriktningen. I allmänhet är det också möjligt att beställa flera enriktningsordningar. Detta kan vara motiverat när en tidigare öppnad order skyddas av en Stop-order och kriteriet som pekar på prisutvecklingen i samma riktning utlöses än en gång. Men när man skapar en sådan strategi måste en utvecklare vara fullt medveten om att i händelse av en kraftig prisrörelseförändring kan de placerade stopporderna vara oexekverade av vissa mäklare vid första prissänkning. Och förlusten kommer att stå i proportion till det totala värdet av enriktad marknadsorder. I vårt exempel använder vi variant b av handelskriterier korrelation. Alla öppnade marknadsordningar stängs antingen av en stopporder eller efter ett kriterium för att öppna en order i motsatt riktning utlösare (här kriteriet för stängande köp sammanfaller med öppningsförsäljning och vice versa). Storlek på öppnade beställningar I någon handelsstrategi ska beställningsstorlekar vara rimligt begränsade. I ett enkelt fall används en fast orderstorlek i en expertrådgivare. Innan EA-operationen startar kan en användare ställa in alla storlekar av framtida beställningar och lämna det oförändrat under en tid. Vidare om balans ändras kan en användare ställa in ett nytt värde av mycket antal öppnade order. En för liten orderstorlek ger mer förtroende för driften vid oförutsägbar marknadsförändring, men vinsten vid framgång blir inte så stor. Om orderstorleken är för stor kan stor vinst förvärvas, men en sådan EA kommer att vara för riskabel. Normalt är storleken på öppnade beställningar inrättad så att marginalkraven inte överstiger 2-35 procent av saldot eller fri marginal (om en strategi tillåter endast en öppnad order, balans och fri marginal just nu innan orderingången kommer att vara lika). I detta exempel implementeras båda varianterna. En användare kan välja att antingen ange direkta värden av order eller ange värdet i procent från fri marginal. Programmeringsdetaljer En enkel trend Expert Advisor tradingexpert. mq4 konstruerad på grundval av tidigare argument kan se ut så här: Beskriv variabler Ett ytterligare kriterium i programuppskattningen är dess läsbarhet. Ett program anses vara korrekt skrivet, om det lätt kan läsas av andra programmerare, det är därför som alla viktiga programdelar och huvudmoment som kännetecknar strategin måste kommenteras. Det är också därför det rekommenderas att deklarera och kommentera alla variabler i början av programmet. I block 1-2 beskrivs externa och globala variabler. Enligt regler måste externa och globala variabler öppnas före första användningen (se Typ av variabler), det är därför de deklareras i programmets huvuddel. Alla lokala variabler av funktionsstart () samlas in och beskrivs i den övre delfunktionen (block 2-3) direkt efter funktionsrubriken. Regler för att deklarera lokala variabler kräver inte det, men förbjuder inte heller. Om en programmerare har svårigheter att förstå betydelsen av en variabel när han läser programmet kan han hänvisa till den övre programdelen och ta reda på vilken variabel som helst och vilken typ som helst. Det är mycket praktiskt i programmeringspraxis. Förberedelseblocket I detta exempel består förbehandlingen av två delar (block 3-4). Programmet avslutar operationen om det inte finns tillräckligt med staplar i ett säkerhetsfönster i ett sådant fall är det omöjligt att detektera korrekt (i block 5-6) värden av rörliga medelvärden som är nödvändiga för att beräkna kriterier. Dessutom analyseras värdet av det rörliga arbetet. I den normala EA-operationen är det variabla värdet alltid sant (det ställs in en gång under initialiseringen). Om ett kritiskt fel uppstår i programoperationen, är false tilldelat denna variabel och start () avslutar sin funktion. Det här värdet ändras inte i framtiden, varför följande kod inte exekveras. I så fall måste programoperationen stoppas och orsaken till det kritiska felet måste detekteras (om det behövs, måste ett handelscenter kontaktas). När situationen är löst kan programmet startas igen, det vill säga EA kan kopplas till ett säkerhetsfönster. Redovisningsorder Den beskrivna expertrådgivaren tillåter bara att arbeta med en marknadsordnad. Uppgiften för orderbokslutsblocket (block 4-5) är att definiera egenskaper hos en öppnad ordning, om det finns en. I slingan går igenom order för alla befintliga marknader, och beställningar kontrolleras, nämligen från första (int i1) till sista (iampltOrdersTotal ()). I varje cykeltering väljs nästa ordning med funktionen OrderSelect (). Urvalet är gjort från en källa till öppnade och väntande beställningar (SELECTBYPOS). Om valet utförs framgångsrikt (det finns ytterligare en order i terminalen), vidare måste denna order och situationen analyseras: huruvida ordern öppnas för säkerheten, där EA fungerar, om ordern är marknad eller väntande det måste också beaktas vid beställning av order. I raden: alla beställningar som öppnas för en annan säkerhet elimineras. Operatören fortsätter att stoppa iterationen och egenskaper hos en sådan order behandlas inte. Men om ordern öppnas för säkerheten, analyseras den till det fönster som EA är fäst vid. Om OrderType () returnerar värdet mer än 1 (se Typ av transaktioner) är den valda ordningen en väntande. Men i den här expertrådgivaren hanteras inte pågående beställningar. Det betyder att körningen av start () måste avslutas, eftersom en konfliktsituation inträffade. I ett sådant fall efter att ett meddelande om operationsterminalen startats () körs körningen av operatörsändringen. Om den sista kontrollen visade att den analyserade ordern är en marknadsorder, beräknas och analyseras det totala antalet order för en säkerhet. För det första av dessa order definieras alla nödvändiga egenskaper. Om i nästa iteration hittar orderräknaren (variabel Total) den andra marknadsordningen, anses situationen också vara konflikt, eftersom EA inte klarar av mer än en marknadsordnad. I så fall stoppas start () körningen efter att ha visat ett motsvarande meddelande. Som ett resultat av utförandet av orderbokföring (om alla kontroller var framgångsrika) behåller variabeln totalt nollvärdet om det inte finns några marknadsorder eller får värdet 1 om det finns en marknadsordning för vår säkerhet. I det senare fallet får vissa variabler som motsvarar orderegenskaperna (antal, typ, öppningspris, stoppnivåer och ordervärde) också sina värden. Beräkning av handelskriterier I det analyserade exemplet definieras handelskriterier (block 5-6) på grundval av skillnaden mellan rörliga medelvärden med olika perioder av medelvärde. Enligt accepterade kriterier är ett diagram bull-directed om det nuvarande värdet av MA med mindre period är större än värdet av MA med större period och skillnaden mellan värdena är större än ett visst värde. I en björnörelse är MA med mindre period lägre än MA med större period och skillnaden är också större än ett visst kritiskt värde. Vid blockets startvärden för MA med medelvärden beräknas PeriodMA1 och PeriodMA2. Faktumet av betydelsen av något handelskriterium uttrycks via värdet av en motsvarande variabel. Variabler OpnB och OpnS anger kriteriet utlösande för att öppna Köp och Sälj order, variabler Cl och ClsS - för stängning. Till exempel, om ett kriterium för att öppna Köp inte har utlösts, förblir värdet för OpnB falskt (inställt vid variabelinitialiseringen) om den har utlöst, får OpnB värdet sant. I detta fall kriteriet för att stänga Sälj sammanfaller med det för att öppna Köp, kriteriet för att öppna Sälj sammanfaller med det för att stänga Köp. Handelsvillkor accepterade i det här exemplet används endast för utbildningsändamål och får inte betraktas som en riktlinje vid handel på ett riktigt konto. Slutbeställningar Det var tidigare skrivet att denna expertrådgivare endast är avsedd för drift med en marknadsorder som öppnas för en säkerhet, vilket fönster EA bifogas. Till det ögonblick då kontrollen i programmet skickas till orderluckningsblokken är det säkert säkert att det för närvarande inte finns några order på säkerheten, eller det finns bara en marknadsordning. Det är därför som koden i orderens stängningsblock skrivs så att endast en order kan stängas med framgång. Detta block är baserat på oändlig slinga, vars kropp består av två analoga delar: en för att stänga en köporder, en annan för att stänga en säljorder. Medan används här för att i händelse av ett felsökning kan det upprepas igen. I den första operatörens rubrik om villkoret för stängning av en köporder beräknas (Säljordningar är stängda på analogt sätt). Om typen av en tidigare öppnad order motsvarar Köp (se Typ av transaktioner) och tecknet för att stänga Köp är relevant, överförs kontrollen till kroppen om operatören där en begäran om att stänga bildas. Som order slutkurs i funktionen OrderClose () anges värdet på ett tvåsidigt citat som motsvarar ordertypen (se Krav och begränsningar i att göra affärer). Om en handelstransaktion utförs framgångsrikt visas ett meddelande om orderavslutningen aktuell medan iterationen stoppas och exekveringen av orderens stängningsblock är över. Men om operationen misslyckas, kallas den användardefinierade funktionen för att behandla fel FunError () (block 10-11). Bearbetning av fel Som en godkänd parameter i FunError () används den senaste felkoden som beräknas av GetLastError (). Beroende på felkoden FunError () returnerar 1 om felet inte är kritiskt och åtgärden kan upprepas och 0 om felet är kritiskt. Kritiska fel är indelade i två typer - de, varefter ett programkörning kan fortsättas (till exempel ett vanligt fel) och de, varefter utförandet av någon handel måste stoppas (till exempel blockerat konto). om efter en misslyckad handelstransaktion returnerar den användardefinierade funktionen 1, strömmen medan iterationen avslutas och under nästa iteration görs ett annat försök att utföra operationen - för att stänga ordern. Om funktionen returnerar 0, stoppas nuvarande start () - exekveringen. På nästa kryssning startas () av klientterminalen igen och om villkor för orderlåsning bevaras, kommer ett annat försök att stänga ordern att göras. Om det vid felbehandling upptäcks att ytterligare programkörning är meningslöst (till exempel programmet körs på en gammal klientterminalversion) under nästa start kommer exekveringen av den speciella funktionstarten () att avslutas i blocket för förberedande bearbetning när analysera värdet av den variabla arbetet. Beräkna mängden tomter för nya beställningar Mängden partier kan beräknas enligt en användarinställningar som följer en av de två varianterna. Den första varianten är ett visst konstant värde som upprättats av en användare. Enligt den andra varianten beräknas mängden partier på grundval av en summa som är lika med en viss procentandel (inställd av en användare) av en fri marginal. I början av blocket för att definiera mängden partier för nya order (block 7-8) beräknas nödvändiga värden för vissa variabler - minimalt tillåtet antal partier och steg för lotbyte som upprättats av en mäklare, fri marginal och pris på en hel del för säkerheten. I detta exempel tillhandahålls följande. Om en användare har konfigurerat ett visst icke-nollvärde för den externa variabeln Lts, till exempel 0,5, accepteras den som mängden Lt när en handelsförfrågan om att öppna en order bildas. Om 0 är tilldelat Lt, definieras antalet partier Lts på basis av variabelprots (procent), fri marginal och villkor som ställts in av en mäklare. Efter att Lt har beräknats utförs en kontroll. Om detta värde är lägre än det minimala tillåtna värdet accepteras det minimala tillåtna värdet. men om fri marginal inte räcker, avslutas startet () efter ett motsvarande meddelande. Öppningsorder Blockeringsöppningen (block 8-9) som blocket of opening orders är en oändlig loop medan. I huvudet hos den första operatören beräknas villkor för att öppna en köporder: om det inte finns några order för säkerheten (variabel Totalt är lika med 0) och tecknet för att öppna en Köporder är relevant (OpnB är sant), kontroll skickas till om operatörsorgan för att öppna en order. I ett sådant fall efter skattesatser är uppdaterade priser för stoppnivåer beräknade. Värden av stoppnivåer ställs in initialt av en användare i externa variabler StopLoss och TakeProfit. I ett allmänt fall kan en användare ställa in värden för dessa parametrar mindre som en mäklare tillåter. Dessutom kan en mäklare ändra det minsta tillåtna avståndet när som helst (det är ofta fallet vid starka marknadsrörelser, till exempel före viktiga pressmeddelanden). Det är därför varför innan varje order öppnas måste stoppnivåer beräknas med hänsyn till värden som ställs in för en användare och det minimala tillåtna värdet som ställts in av en mäklare. För att beräkna stoppnivåer används den användardefinierade funktionen NewStop () som en godkänd parameter, det stoppvärdesvärde som en användare har bestämt används. I NewStop () först beräknas det nuvarande minimala tillåtna avståndet. Om värdet som ställts av en användare motsvarar kraven på mäklare returneras detta värde. Om det är mindre än det tillåtna värdet används det värde som en mäklare tillåter. Priserna på stoppförfrågningar beräknas utifrån motsvarande dubbelsidiga citat (se Krav och begränsningar i handel). En handelsförfrågan om att öppna en order bildas med funktionen OrderSend (). För beräkning av orderöppningspris och priser på stoppförfrågningar används de dubbelsatta värden som motsvarar ordertypen. Om en handelsoperation lyckades (det vill säga en server returnerade numret på en öppnad ordning) efter ett meddelande om en lyckad orderöppning visas. start () körningen är klar. Om en order inte öppnades och klientterminalen returnerade ett fel behandlas felet enligt den tidigare beskrivna algoritmen. Några Kod Egenheter Den analyserade Expert Advisor-koden är inriktad på genomförandet av en viss strategi. Observera, vissa programlinjer innehåller variabler och beräkningar som skulle ändras om strategin ändrades. Till exempel, enligt den accepterade strategin, är expertrådgivaren utvecklad för att bara arbeta med en order. Detta gjorde det möjligt att använda den variabla biljetten både för identifiering av ett slutbeställningsnummer (i block med stängning 6-7) och för identifiering av ett framgångsrikt utförande av en transaktionsoperation när en order öppnades (i öppningsblocket 8-9 ). I detta fall är en sådan lösning acceptabel. Om vi tar den analyserade koden som grund för genomförandet av en annan strategi (till exempel tillåter motsatta beställningar) måste vi introducera en eller flera variabler för att kunna identifiera antalet öppna order och identifiera framgången för handeln. In further strategy modifications we will have to change come program lines containing part of logics contained in the source strategy. Namely in the order accounting block we will not have to terminate the program operation if there are several open orders for a security. Besides, conditions for opening and closing orders will alslo change. This will entail the code changing in blocks of opening and closing orders. On the basis of this analysis we can easily conclude that the described simple Expert Advisor is not perfect. In a general case, for the implementation of order accounting one should use a universal function based on using data arrays and not containing logics of a certain strategy. The same can be said about the blocks of opening and closing orders. A more complete program must contain a main analytical function, all other user-defined functions must be subordinate to it. This analytical function must contain a program code, in which all conditions for the implementation of any strategy are analyzed all subordinate functions must perform limited actions. The function of accounting orders must only account orders, functions of opening and closing orders must only open and close orders, and the analytical function must quotthinkquot and manage all other functions, i. e. call them when needed. The Moving Average Cross Expert Advisor The moving average cross is one of the most popular basic trading strategies. Det använder två eller flera glidande medelvärden av olika perioder för att bestämma riktningen av trenden. När snabbare glidande medelvärden ligger över det långsammare glidande genomsnittet, öppnas en lång position och vice versa för en kort position. Det rörliga genomsnittliga korset utmärker sig under långa, långvariga trender som en mediumstrategisk handelsstrategi. Strategier baserade på det glidande medelkorset har alltid varit ofta efterfrågade av våra kunder, och det är därför vi erbjuder den glidande genomsnittliga korsexpertrådgivaren. Du kan nu köpa denna populära expertrådgivare för över 50 av tidigare 45, deluxe Moving Average Cross expertrådgivare är nu bara 19,95 upp till 3 rörliga medellinjer. Använd två glidande medelvärden, eller lägg till en tredjedel för att filtrera bort långsiktiga trender. Flytta genomsnittliga typer. Enkelt. Exponentiell. Slät eller linjär viktad Prisuppgifter. Välj mellan Stäng, Öppna, Hög, Låg, Median, Typisk eller Viktad Stäng. Shift. Flytta de rörliga genomsnittslinjerna framåt eller bakåt. Flera tidsramar. Varje glidande medelvärde kan ställas in på vilken tidsram som helst. Money Management - Partikelstorleken beräknas automatiskt så att den maximala risken per handel begränsas till en procentandel av eget kapital. Trailing Stop Break Even Stop - Justera automatiskt stoppavbrottet när handeln går in i vinst. Ställ in minsta vinstnivåer, steg efterföljande stopp i steg och mer Daily Trade Timer - Begränsa din intradaghandel till de timmar som marknaden är mest aktiv. Du kan valfritt stänga alla öppna order i slutet av dagen. Manuell beställningskontroll - Placera manuella order på ditt diagram med en angiven handelskommentation, och MA Cross EA spår stoppavbrottet och stänger ordern automatiskt på ett motsatt kors. Kör en gång per bar eller varje tick. Välj hur ofta du vill kontrollera ordningens öppnings - och stängningsförhållanden. Du kan handla på varje ficka eller bara i slutet av varje bar. Stäng på kors - Stäng den öppnade positionen på ett glidande medelvärde i motsatt riktning. Om det är avaktiverat, stänger ordern bara vid stoppavbrott eller manuellt. Robust. Fullständig felhantering och anmälan, försök igen på krav och mycket mer. Helt kompatibel med ECN och 5-siffriga mäklare. Varningar - Välj mellan ljudvarningar, den inbyggda varningsdialogrutan, e-postvarningar eller meddelanden som skickas till din smartphone. Du kan köpa Moving Average Cross EA direkt för endast 19.95
Comments
Post a Comment