Thursday 9 November 2017

Skrive Forex Ekspert Rådgivere


MetaTrader 5 - Trading Systems Steg-for-trinns guide til å skrive en ekspertrådgiver i MQL5 for nybegynnere Innledning Denne artikkelen er rettet mot nybegynnere som ønsker å lære å skrive enkle ekspertrådgivere i det nye MQL5-språket. Vi vil begynne først ved å definere hva vi vil ha vår EA (Expertrådgiver) å gjøre, og deretter gå videre til hvordan vi vil at EA skal gjøre det. 1. Handelsstrategi Hva vår EA vil gjøre: Det vil overvåke en bestemt indikator, og når en bestemt betingelse er oppfylt (eller visse betingelser er oppfylt), vil den legge handel (enten ShortSell eller LongBuy), avhengig av nåværende tilstand det har blitt møtt. Ovenstående kalles en handelsstrategi. Før du kan skrive en EA, må du først utvikle strategien du vil automatisere i EA. Så i dette tilfellet, la oss endre ovennevnte uttalelse slik at den reflekterer strategien vi ønsker å utvikle seg til en EA. Vi vil bruke en indikator som heter Moving Average med en periode på 8 (Du kan velge hvilken periode som helst, men i henhold til vår strategi vil vi bruke 8) Vi vil at vår EA skal legge en lang (kjøp) handel når Moving Average - 8 (for vår diskusjonens skyld vil jeg referere til det som MA-8) øker oppover og prisen ligger nær den og det vil plassere en kort (selg) når MA-8 faller nedover og prisen er nær under den. Vi skal også bruke en annen indikator som kalles Average Directional Movement (ADX) med periode 8, for å hjelpe oss med å avgjøre om markedet er trending eller ikke. Vi gjør dette fordi vi bare ønsker å gå inn i handel når markedet trender og slapp av når markedet er i gang (det vil si ikke trend). For å oppnå dette vil vi bare plassere vår handel (Kjøp eller Selg) når betingelsene ovenfor er oppfylt, og ADX-verdien er større enn 22. Hvis ADX er større enn 22, men reduserer, eller ADX er mindre enn 22, vil vi ikke handle, selv om betingelsen B er blitt oppfylt. Vi ønsker også å beskytte oss selv ved å sette et Stopp tap på 30 pips, og for vårt Profit mål vil vi målrette et overskudd på 100 pips. Vi vil at vår EA bare skal se etter BuySell-muligheter når en ny linje er blitt dannet, og vi vil også sørge for at vi åpner en kjøpsposisjon hvis kjøpsbetingelsene er oppfylt, og vi har ikke allerede åpnet en åpning, og åpne en Selg-posisjon når Salgsbetingelsene er oppfylt, og vi har ikke allerede åpnet en. Vi har nå utviklet vår strategi. Det er nå på tide å begynne å skrive vår kode. 2. Skrive en ekspertrådgiver Begynn med å lansere MetaQuotes Language Editor 5. Trykk deretter CtrlN eller klikk på Ny knapp på menylinjen. Figur 1. Starte et nytt MQL5-dokument I MQL5-veiviser-vinduet velger du Expert Advisor og klikker Neste som vist på figur 2: Figur 2. Velge programtype I det neste vinduet skriver du inn navnet du vil gi til EA i boksen Navn. I dette tilfellet skrev jeg MyFirstEA. Du kan deretter skrive inn navnet ditt i Forfatter-boksen og også din webadresse eller e-postadresse i Link-boksen (hvis du har en). Figur 3. Generelle egenskaper til Expert Advisor Siden vi vil kunne endre noen av parametrene for vår EA for å se hvilke verdier som kan gi oss det beste resultatet, legger vi til dem ved å klikke på Legg til-knappen. Figur 4. Innstilling av EA-inngangsparametere I vår EA ønsker vi å kunne eksperimentere med innstillingene for Stop Loss, Take Profit, ADX Period og Moving Average Period, slik at vi definerer dem på dette punktet. Dobbeltklikk under Navn-delen og skriv inn navnet på parameteren, dobbeltklikk under Type for å velge datatypen for parameteren, og dobbeltklikk under delen Innledende verdi og skriv inn startverdien for parameteren. Når du er ferdig, bør den se slik ut: Figur 5. Datatyper EA-inngangsparametere Som du kan se ovenfor valgte jeg heltall (int) datatype for alle parametrene. La oss snakke litt om datatyper. char: Karetypen tar 1 byte minne (8 biter) og tillater uttrykk i binær notasjon 28256 verdier. Karetypen kan inneholde både positive og negative verdier. Verdien av verdier er fra -128 til 127. uchar: Uchar-integertypen opptar også 1 byte minne, samt karbontype, men i motsetning til det er uchar kun ment for positive verdier. Minsteverdien er null, maksimumverdien er 255. Det første bokstaven du i navnet på uchar-typen er forkortelsen for usignert. kort: Størrelsen på den korte typen er 2 byte (16 biter), og kan derfor uttrykke rekkevidden av verdier som er lik 2 til kraften 16: 216 65 536. Siden den korte typen er et tegn en og inneholder begge positive og negative verdier, verdiområdet er mellom -32 768 og 32 767. ushort: Den usignerte korte typen er typen ushort. som også har en størrelse på 2 byte. Minsteverdien er 0, maksimumverdien er 65 535. int: Størrelsen på int-typen er 4 byte (32 biter). Minimalverdien er -2 147 483 648, den maksimale er 2 147 483 647. uint: Den usignerte heltall typen er uint. Det tar 4 byte minne og lar uttrykk heltall fra 0 til 4 294 967 295. lang: Størrelsen på den lange typen er 8 byte (64 bits). Minsteverdien er -9 223 372 036 854 775 808, maksimumsverdien er 9 223 372 036 854 775 807. ulong: Den ulong typen inntar også 8 byte og kan lagre verdier fra 0 til 18 446 744 073 709 551 615. Fra Ovennevnte beskrivelse av de ulike datatyper, er de usignerte heltalltypene ikke utformet for å lagre negative verdier, noe forsøk på å angi en negativ verdi kan føre til uventede konsekvenser. Hvis du for eksempel vil lagre negative verdier, kan du ikke lagre dem i de usignerte typene (dvs. uchar, uint, ushort, ulong). Tilbake til vår EA. Når du ser på datatyper, vil du være enig med meg om at vi antar å bruke char eller uchar datatyper siden dataene vi har til hensikt å lagre i disse parametrene, er mindre enn 127 eller 255 henholdsvis. For god minnehåndtering er dette det beste å gjøre. Men for diskusjonens skyld holder vi oss fortsatt til int type. Når du er ferdig med å sette alle nødvendige parametere, klikker du på Ferdig-knappen og MetaQuotes Editor vil opprette skjelettet til koden for deg som vist i neste figur. Vi kan bryte koden inn i de ulike seksjonene for bedre forståelse. Kodens øverste del (Overskrift) er hvor eiendommen til EA er definert. Du kan se at her er verdiene du fyllte i MQL5-veiviseren i figur 3. I denne delen av koden kan du definere flere parametere som beskrivelse (kortfattet beskrivelse av EA), erklære konstanter, inkludere tilleggsfiler eller importfunksjoner . Når en setning begynner med et symbol, kalles det et preprosessor-direktiv, og det slutter ikke med et semikolon. Et annet eksempel på preprosessor-direktiver inkluderer: Definisjonsdirektivet brukes til konstantdeklarasjon. Det er skrevet i skjemaet definer identifiserer tokenstring. Hva dette gjør er å erstatte hver forekomst av identifikator i koden din med verdien tokenstring. definere ABC 100 definere COMPANYNAME MetaQuotes Software Corp. Det vil erstatte alle forekomster av COMPANYNAME med strengen MetaQuotes Software Corp., eller den vil erstatte alle forekomster av ABC med karbon (eller heltallet) 100 i koden din. Du kan lese mer om preprosessorene i MQL5 Manual. La oss nå fortsette med vår diskusjon. Den andre delen av overskriften til koden vår er inngangsparameterseksjonen: Vi angir alle parametere, som vil bli brukt i vår EA i denne delen. Disse inkluderer alle variabler som vil bli brukt av alle funksjonene vi skal skrive i vår EA. Variabler erklært på dette nivået kalles globale variabler fordi de er tilgjengelige for alle funksjoner i vår EA som kan trenge dem. Inngangsparametrene er parametere som bare kan endres utenfor vår EA. Vi kan også erklære andre variabler som vi vil manipulere i løpet av vårt EA, men vil ikke være tilgjengelig utenfor vår EA i denne delen. Neste er EA-initialiseringsfunksjonen. Dette er den første funksjonen som kalles når EA er lansert eller knyttet til et diagram, og det kalles bare én gang. Denne delen er det beste stedet å gjøre noen viktige kontroller for å sikre at vår EA fungerer veldig bra. Vi kan bestemme om kartet har nok barer for vår EA til å jobbe osv. Det er også det beste stedet å få håndtakene vi skal bruke til våre indikatorer (ADX og Moving Average indicators). For vår EA, vil vi frigjøre håndtakene som er opprettet for våre indikatorer under initialiseringen i denne delen. Denne funksjonen behandler NewTick-arrangementet. som genereres når et nytt tilbud er mottatt for et symbol. Merk at Expert Advisor ikke kan utføre handelsoperasjoner dersom bruk av ekspertrådgivere i klientterminalen ikke er tillatt (Button Auto Trading). Figur 6. Autotrading er aktivert De fleste kodene våre som implementerer vår handelsstrategi, utviklet tidligere, vil bli skrevet i denne delen. Nå som vi har sett på de ulike delene av koden for vår EA, la oss begynne å legge kjøtt til skjelettet. 2.2 INPUT PARAMETERS SECTION Som du ser, har vi lagt til flere parametere. Før vi fortsetter å diskutere de nye parameterne, la oss diskutere noe du kan se nå. De to fremre skråstrekkene gir oss mulighet til å legge inn kommentarer i kodene våre. Med kommentarer kan vi vite hva våre variabler står for, eller hva vi gjør på det tidspunktet i koden vår. Det gir også en bedre forståelse av koden vår. Det er to grunnleggende måter å skrive kommentarer på: Dette er en linje med en linje Dette er en linje med flere linjer Dette er en linje med flere linjer. Multi-line kommentarer starter med symbolet og slutter med det ene. Kompilatoren ignorerer alle kommentarer når du samler koden din. Ved å bruke enkeltlinjeproblemer for inngangsparametrene er det en god måte å gjøre våre EA-brukere forstå hva disse parameterne står for. På EA Input-egenskapene vil brukerne ikke se parameteren selv, men i stedet ser de kommentarene som vist nedenfor: Figur 7. Ekspertparametere-innstillingsparametere Nå, tilbake til koden Vi har besluttet å legge til flere parametere for vår EA. EAMagic er det magiske nummeret for alle bestillinger fra vår EA. Minimum ADX-verdi (AdxMin) er oppgitt som en dobbel datatype. En dobbel brukes til å lagre flytpunktkonstanter, som inneholder et heltall, et desimaltegn og en brøkdel. double mysum 123.5678 double b7 0.09876 Partiet til handel (Lot) representerer volumet av det finansielle instrumentet vi ønsker å handle. Da erklærte vi andre parametere som vi skal bruke: AdxHandle skal brukes til å lagre ADX-indikatorhåndtaket, mens maHandle vil lagre håndtaket for Moving Average-indikatoren. PlsDI, minDI, adxVal er dynamiske arrays som vil holde verdiene for DI, - DI og hoved ADX (av ADX-indikatoren) for hver linje på diagrammet. MaVal er et dynamisk array som vil holde verdiene for den flytende gjennomsnittlige indikatoren for hver linje på diagrammet. Forresten, hva er dynamiske arrays Et dynamisk array er en array deklarert uten en dimensjon. Med andre ord er ingen verdi spesifisert i paret av firkantede parenteser. En statisk matrise har derimot sine dimensjoner definert ved utsagnspunktet. double allbars 20 dette vil ta 20 elementer pclose er en variabel vi vil bruke til å lagre Lukk pris for linjen vi skal overvåke for å sjekke våre BuySell-handler. STP og TKP skal brukes til å lagre stop-loss og ta fortjenesteverdiene i vår EA. 2.3. EA INTELLISASJONSNITT Her får vi håndtakene til vår indikator ved hjelp av de respektive indikatorfunksjonene. ADX-indikatorhåndtaket oppnås ved å bruke iADX-funksjonen. Det tar diagrammet symbolet (NULL betyr også det nåværende symbolet på det nåværende diagrammet), diagrammet periodimetramme (0 betyr også den nåværende tidsrammen på det nåværende diagrammet), ADX-gjennomsnittet for beregning av indeksen (som vi tidligere definerte under inngangsparametere seksjon) som parametere eller argumenter. int iADX (strengsymbol, symbolnavn ENUMTIMEFRAMES periode, periode int adxperiode gjennomsnittlig periode) Moving Average indikatorhåndtaket oppnås ved å bruke iMA-funksjonen. Den har følgende argumenter: diagrammet symbolet (som kan fås ved hjelp av symbolet symbolet () eller NULL for det nåværende symbolet på det nåværende diagrammet), diagramperioden-tidsrammen (som kan oppnås ved hjelp av perioden.) Periode () eller 0 for den nåværende tidsrammen på det nåværende diagrammet), gjennomsnittlig gjennomsnittlig gjennomsnittsperiode (som vi definerte tidligere under inngangsparameterseksjonen), skiftet av indikatoren i forhold til prisdiagrammet (skift her er 0), flytende gjennomsnittlig utjevningstype (kan være noen av følgende gjennomsnittlige metoder: Enkel gjennomsnittlig-MODESMA, eksponentiell gjennomsnittlig-MODEEMA, glatt gjennomsnittlig-MODESMMA eller lineærvektet gjennomsnittlig-MODELWMA), og prisen som brukes for gjennomsnittet (her bruker vi nærprisen). int iMA (streng symbol. symbolnavn ENUMTIMEFRAMES periode. periode int karteriod. gjennomsnittlig periode int mashift. horisontal skift ENUMMAMETHOD mamethod. utjevning type ENUMAPPLIEDPRICE appliedprice type pris eller håndtak) Les MQL5 manualen for å få mer informasjon om disse indikatorfunksjonene. Det vil gi deg en bedre forståelse av hvordan du bruker hver indikator. Vi prøver igjen å sjekke om det er feil hvis funksjonen ikke klarte å returnere håndtaket, vi får en feilmelding. Vi bruker varselfunksjonen til å vise feilen ved hjelp av GetlastError-funksjonen. Vi bestemmer oss for å lagre stoppfallet og ta fortjenesteverdiene i variablene STP og TKP vi erklærte tidligere. Hvorfor gjør vi dette Dens fordi verdiene som er lagret i INPUT-parametrene, er skrivebeskyttet, kan de ikke endres. Så her vil vi sørge for at vår EA fungerer veldig bra med alle meglere. Digits eller Digits () r eturns antall desimaltall som bestemmer nøyaktigheten av prisen på det nåværende diagramsymbolet. For et 5-sifret eller 3-sifret prisdiagram multiplicerer vi både Stop Loss og Take Profit med 10. 2.4. EA DEINTIALISERINGSDELING Siden denne funksjonen kalles når EA er deaktivert eller fjernet fra et diagram, slipper vi alle indikatorhåndtakene som ble opprettet under initialiseringsprosessen her. Vi opprettet to håndtak, en for ADX-indikator og et annet håndtak for Moving Average-indikatoren. Vi bruker funksjonen IndicatorRelease () for å oppnå dette. Det tar bare ett argument (indikatorhåndtaket) bool IndikatorRelease (int indikatorhåndtak indikatorhåndtak) Funksjonen fjerner et indikatorhåndtak og frigjør beregningsblokken på indikatoren, hvis den ikke er brukt. 2.5 EA KONTROLL AV AVSNITT Det første vi må gjøre her er å sjekke om vi har nok barer på det nåværende diagrammet. Vi kan få de totale stengene i historien til et diagram ved hjelp av Bars-funksjonen. Det tar to parametere, symbolet (kan fås ved hjelp av Symbol eller Symbol (). Disse to returnerer det nåværende symbolet for det nåværende diagrammet som vår EA er vedlagt) og perioden eller tidsrammen for det nåværende diagrammet (kan fås ved å bruke Periode eller periode (). Disse to returnerer tidsrammen for det nåværende diagrammet som EA er vedlagt). Hvis de totale tilgjengelige stengene er mindre enn 60, vil vi at vår EA skal slappe av til vi har nok barer tilgjengelig på diagrammet. Alarmen-funksjonen viser en melding i et eget vindu. Det tar noen verdier adskilt av komma som parameterargumenter. I dette tilfellet har vi bare en strengverdi. Returen går ut av initialiseringen av vår EA. Ekspertrådgiveren utfører handelsoperasjoner i begynnelsen av en ny bar, så det er nødvendig å løse problemet med den nye baridentifikasjonen. I ord ord vil vi være sikre på at vår EA ikke ser etter LongShort-oppsett på hvert kryss, vi vil bare at vår EA skal sjekke for LongShort-stillinger når det er en ny bar. Vi begynner med å erklære en statisk datetime-variabel OldTime. som vil lagre Bar tid. Vi erklærte det som statisk fordi vi vil at verdien skal beholdes i minnet til neste anrop av OnTick-funksjonen. Da vil vi kunne sammenligne verdien med NewTime-variabelen (også datetime datatype), som er en matrise av ett element for å holde den nye (nåværende) stangtiden. Vi erklærte også en bool datatype variabel IsNewBar og setter verdien til falsk. Dette skyldes at vi vil ha verdien til å være SANTE bare når vi har en ny linje. Vi bruker CopyTime-funksjonen for å få tiden til den nåværende linjen. Det kopierer bartiden til arrayet NewTime med ett element hvis det lykkes, sammenligner vi tiden til en ny linje med den forrige barstiden. Hvis tidene arent er like, betyr det at vi har en ny linje, og vi stiller variabelen IsNewBar til TRUE og lagrer verdien av gjeldende bar tid til variabelen OldTime. IsNewBar-variabelen indikerer at vi har en ny linje. Hvis det er FALSK, fullfører vi utførelsen av OnTick-funksjonen. Ta en titt på koden den sjekker for feilsøkingseksjonen, den vil skrive ut meldingen om stangtider når feilsøkingsmodus, vil vi vurdere det videre. Den neste tingen vi vil gjøre her er å sjekke om vi har nok barer til å jobbe med. Hvorfor gjenta det Vi vil bare være sikre på at vår EA fungerer riktig. Det skal bemerkes at mens OnInit-funksjonen bare kalles en gang når EA er koblet til et diagram, blir OnTick-funksjonen kalt hver gang det er nytt kryss (prisnotering). Du observerer at vi har gjort det igjen annerledes her. Vi bestemmer oss for å lagre totalstengene i historien som vi oppnådde fra uttrykket i en ny variabel, Mybars. deklarert i OnTick-funksjonen. Denne typen variabel er en lokal variabel, i motsetning til variabelen vi erklærte på INPUT PARAMETERS-delen av koden vår. Selv om variablene som er oppgitt i Input Parameters-delen av koden, er tilgjengelige for alle funksjoner, er det i vår kode som kan trenge dem variabler som er deklarert innenfor en enkelt funksjon, begrenset og tilgjengelig for den funksjonen alene. Det kan ikke brukes utenfor den funksjonen. Deretter erklærte vi noen få variabler av MQL5 strukturtyper som vil bli brukt i denne delen av vår EA. MQL5 har ganske mange innebygde strukturer som gjør ting ganske enkle for EA-utviklere. La oss ta strukturene etter hverandre. Dette er en struktur som brukes til å lagre de siste symbolskildene. struct MqlTick datetime tid Tid for de siste prisene oppdatering dobbeltbud Nåværende Budpris dobbelt spør Aktuell Spør pris dobbelt siste Pris på siste avtale (Siste) ulong volum Volum for nåværende Siste pris Enhver variabel som er oppgitt å være av typen MqlTick, kan enkelt være brukes til å oppnå nåværende verdier av Spør, Bud, Siste og Volum når du ringer SymbolInfoTick () - funksjonen. Så vi erklærte siste pris som en MqlTick-type slik at vi kunne bruke den til å få Ask og Bud-prisene. Denne strukturen brukes til å utføre alle handelsforespørsler for en handelsoperasjon. Den inneholder, i sin struktur, alle feltene som er nødvendige for å utføre en handelsavtale. struct MqlTradeRequest ENUMTRADEREQUESTACTIONS handling Handling type ulong magic Expert Advisor ID (magisk nummer) ulong rekkefølge Bestil billett streng symbol Handel symbol dobbeltvolum Ønsket volum for en avtale i mye dobbel pris Pris dobbelt stopplimit StopLimit nivå av rekkefølgen dobbel sl Stop Loss nivå av rekkefølge dobbelt tp Ta fortjenestenivå av bestillingen ulong avvik Maksimal mulig avvik fra forespurt pris ENUMORDERTYPE type Ordre type ENUMORDERTYPEFILLING typefilling Bestillingsutførelse type ENUMORDERTYPETIME typetid Ordreutførelsestid datetime utløp Bestill utløpetid (for ordrene av ORDERTIMESPECIFIED type) strengkommentar Bestill kommentar Enhver variabel som er erklært for å være av typen MqlTradeRequest, kan brukes til å sende ordrer til vår handel. Her erklærte vi mrequest som en MqlTradeRequest type. Resultatet av enhver handel operasjon returneres som en spesiell forhåndsdefinert struktur av MqlTradeResult type. Enhver variabel som er oppgitt for å være av typen MqlTradeResult, vil kunne få tilgang til handelsforespørselsresultatene. struct MqlTradeResult uint retcode Drift returkode ulong deal Avtale billett, hvis det utføres ulong rekkefølge Bestill billett, dersom det er plassert dobbeltvolum Avtale volum, bekreftet av megler dobbelt pris Avtale pris, bekreftet av megler dobbelt bud Nåværende Bud pris dobbelt spør Gjeldende forespørsel pris streng kommentator Broker kommentar til operasjon (som standard er det fylt av operasjonsbeskrivelsen) Prisen (Åpne, Lukk, Høy, Lav), Tiden, Volumene på hver linje og spredningen for et symbol lagres i denne strukturen. Ethvert array som er oppgitt å være av typen MqlRates, kan brukes til å lagre pris, volumer og spredningshistorikk for et symbol. struktur MqlRates datetime tid Periode starttid dobbelt åpen Åpent pris dobbel høy Høyeste pris på perioden dobbelt lav Laveste pris på perioden dobbelt lukk Lukk pris lang tickvolume Tick volum int spredning Spred lang realvolume Handelsvolum Her har vi erklært en matrisen som vil bli brukt til å lagre denne informasjonen. Deretter bestemmer vi for å sette alle arraysene vi skal bruke for å lagre Bars-detaljer som serier. Dette er for å sikre at verdiene som skal kopieres til arrayene, blir indeksert som tidsserier, det vil si 0, 1, 2, 3 (for å korrespondere med bar-indeksen. Så vi bruker funksjonen ArraySetAsSeries (). ArraySetAsSeries (tomrom array. Array ved referanse bool set true angir omvendt rekkefølge av indeksering) Det skal bemerkes at dette også kan gjøres en gang ved initialiseringsdelen av koden. Men jeg har bestemt meg for å vise det på dette punktet for skyld av vår forklaring. Vi bruker nå SymbolInfoTick-funksjonen for å få det siste pristilbudet. Denne funksjonen tar to argumenter-diagramsymboler og MqlTick-strukturvariabelen (siste pris).Ingen, hvis det er feil, rapporterte vi det. Deretter kopierte vi informasjonen om de siste tre linjene i vårt Mqlrates-type-array ved hjelp av Copy Rates-funksjonen. Copy Rates-funksjonen brukes til å få historikkdata for MqlRates-strukturen til en spesifisert Symbol-periode i spesifisert antall i en MqlRates-type array. olname. symbolnavn ENUMTIMEFRAMES tidsramme. periode int startpos. startposisjon int telling. datatelling for å kopiere MqlRates ratesarray target array for å kopiere) Symbolnavnet er oppnådd ved å bruke symbol. Nåværende periodtimeframe er oppnådd ved bruk av periode. For startposisjonen starter vi fra den nåværende linjen, Bar 0, og vi teller bare tre barer, barer 0, 1 og 2. Resultatet vil bli lagret i vårt utvalg, mrate. Mrate-arrayet inneholder nå all pris, tid, volum og spredningsinformasjon for stolper 0. 1 og 2. For å få detaljene i en hvilken som helst linje, bruker vi følgende: For eksempel kan vi få følgende informasjon om hver stolpe : mrate1.time Bar 1 Starttid mrate1.open Bar 1 Åpne pris mrate0.high Bar 0 (nåværende bar) høy pris, osv. Deretter kopierte vi alle indikatorverdiene til de dynamiske arrayene vi har erklært med CopyBuffer-funksjonen. int CopyBuffer (int indikatorhåndtak, indikatorhåndtak int buffernum, indikatorbuffertall int startpos, startposisjon int tell, beløp for kopiering dobbeltbuffermålgruppe for å kopiere) Indikatorhåndtaket er håndtaket vi opprettet i OnInit-delen. Når det gjelder buffertall, har ADX-indikatoren tre (3) buffere: Den bevegelige gjennomsnittlige indikatoren har bare en buffer: Vi kopierer fra nåværende linje (0) til de to siste linjene. Så antall poster som skal kopieres er 3 (linjer 0, 1 og 2). Bufferen er måldynamiske arrayene vi tidligere hadde erklært adxVal, plsDI, minDI og maVal. Som du kan se her igjen, prøver vi å fange opp en feil som kan oppstå i kopieringsprosessen. Hvis det er feil, trenger du ikke å gå videre. Det er viktig å merke seg at CopyBuffer () og CopyRates () - funksjonen returnerer totalt antall poster som er kopiert på suksess mens det returneres -1 inklusiv en feil. Det er derfor vi ser etter en verdi mindre enn 0 (null) i feilkontrollfunksjonene her. På dette punktet ønsker vi å sjekke om vi allerede har en Kjøp eller Selg posisjon åpnet, i ord ord, vi vil sørge for at vi kun har en SALG eller Kjøp handel åpnet om gangen. Vi ønsker ikke å åpne en ny Kjøp hvis vi allerede har en, og vi ønsker ikke å åpne en ny Selg hvis vi allerede har åpnet en. For å oppnå vil vi først og fremst erklære to bool datatypevariabler (Buyopened og Sellopened) som vil ha en sann verdi hvis vi allerede har en posisjon åpnet for enten Kjøp eller Selg. Vi bruker handelsfunksjonen PositionSelect for å vite om vi har en åpen posisjon. Denne funksjonen returnerer TRUE hvis vi har en posisjon allerede åpnet og FALSK hvis vi ikke har noen. Det tar som det viktigste argumentparameteret symbolet (valutaparet) vi vil sjekke. Her bruker vi symbol fordi vi sjekker gjeldende symbol (valutapar). Hvis dette uttrykket returnerer TRUE, vil vi sjekke om åpnet posisjon er en Kjøp eller en Selg. Vi bruker PosisjonGetInteger-funksjonen for dette. Det gir oss den typen posisjon som åpnes når vi bruker den med POSITIONTYPE-modifikatoren. Den returnerer posisjonstypidentifikatoren som enten kan være POSITIONTYPEBUY eller POSITIONTYPESELL. I vårt tilfelle brukte vi det til å bestemme hvilken av posisjonen vi allerede har åpnet. Hvis det er en Selg, lagrer vi en sann verdi i Sellopened, og hvis den er en Kjøp, lagrer vi en sann verdi i Buyopened. Vi vil være i stand til å bruke disse to variablene senere når vi sjekker for selg eller kjøpsbetingelser senere i vår kode. Det er nå på tide å lagre den nære prisen for linjen vi skal bruke til vårt BuySell-oppsett. Husk vi erklærte en variabel for det tidligere. Etter å ha gjort dette, vil vi nå gå videre til neste trinn. Det er nå på tide å begynne å sjekke for en kjøpsmulighet. La oss analysere uttrykket ovenfor som det representerer strategien vi designet tidligere. Vi erklærer en bool type variabel for hver av våre forhold som må oppfylles før en ordre kan plasseres. En bool type variabel kan bare inneholde SANT eller FALSK. Så, vår Kjøpsstrategi er delt inn i fire forhold. Hvis noen av betingelsene er oppfylt eller tilfredsstilt, lagres en verdi av SANT i vår bool-type variabel, ellers blir en verdi av FALSE lagret. La oss se på dem en etter en. Her ser vi på MA-8-verdiene på stolper 0, 1 og 2. Hvis verdien av MA-8 på den nåværende linjen er større enn verdien på den forrige linjen 1, og også MA-8-verdien på Linje 1 er større enn verdien på Linje 2. det betyr at MA-8 øker oppover. Dette tilfredsstiller en av våre betingelser for et kjøpssett. Dette uttrykket kontrollerer for å se om Bar 1 Lukk pris er høyere enn verdien av MA-8 i samme periode (Bar 1-periode). Hvis prisen er høyere, så er vår andre betingelse også fornøyd, så kan vi sjekke om andre forhold. Men hvis de to forholdene vi nettopp har vurdert ikke var oppfylt, vil det ikke være nødvendig å sjekke andre forhold. Det er derfor vi bestemmer oss for å inkludere de neste uttrykkene i disse to innledende forholdene (uttrykk). Nå vil vi kontrollere om nåværende verdi for ADX (ADX-verdi på Bar 0) er større enn Minimum ADX-verdien som er angitt i inngangsparametrene. Hvis dette uttrykket er sant, er den nåværende verdien av ADX større enn Minimum Required-verdien, vi vil også være sikker på at plusDI-verdien er større enn minusDI-verdien. Dette er det vi oppnådde i neste uttrykk Hvis alle disse betingelsene er oppfylt, er det, hvis de returnerer sanne, så vil vi være sikre på at vi ikke åpner en ny kjøpsposisjon hvis vi allerede har en. Det er nå på tide å sjekke verdien av Buyopened-variabelen som vi erklærte tidligere i vår kode. Hvis Buyopened er sant, ønsker vi ikke å åpne en annen Kjøp-posisjon, så vi viser et varsel for å informere oss og så returnere slik at vår EA nå venter på neste Tick. Men hvis Buyopened er FALSK, utarbeider vi våre poster ved hjelp av variabelen MqlTradeRequest (mrequest) som vi erklærte tidligere for å sende vår bestilling. Handlingen her, som er handelsoperasjonstypen, er TRADEACTIONDEAL fordi vi plasserer en handelsordre for en umiddelbar utførelse. Hvis vi endrer en bestilling, så bruker vi TRADEACTIONMODIFY. For å slette en ordre vil vi bruke TRADEACTIONREMOVE. Vi brukte vår nyeste MqlTick-type for å få den siste Ask-prisen. Bestillingen Stopp tap pris er oppnådd ved å trekke vår StopLoss i poeng fra Ask pris mens bestillingen ta fortjeneste prisen er oppnådd ved å legge vår TakeProfit i poeng til Ask pris. Du vil også observere at vi brukte NormalizeDouble-funksjonen for Ask pris, StopLoss og TakeProfit-verdiene, det er god praksis å alltid normalisere disse prisene til antall sifre i valutapar før du sender det til handelsserveren. Symbolet er det nåværende symbolet (Symbol eller Symbol ()). Bestillings typen er hvilken type ordre vi plasserer, her legger vi en bestillingsordre ORDERTYPEBUY. For en salgsordre blir det ORDERTYPESELL. Ordre-typefilen er ordreutførelsestypen ORDERFILLINGFOK betyr at avtalen kan utføres utelukkende med et spesifisert volum til lik eller bedre pris enn den angitte bestillingsprisen. Hvis det ikke er nok volum av tilbud på ordresymbolet, vil bestillingen ikke bli utført. OrderSend () - funksjonen tar to argumenter, typen MqlTradeRequest-typen og typen MqlTradeResult-typen. Som du kan se brukte vi vår variabel MqlTradeRequest type og variabelen MqlTradeResult i å plassere bestillingen vår ved hjelp av OrderSend. Etter å ha sendt vår bestilling, vil vi nå bruke variabelen MqlTradeResult for å sjekke resultatet av vår bestilling. Hvis bestillingen vår blir utført, vil vi bli informert, og hvis ikke, vil vi også vite det. Med MqlTradeResult-typen variabel mresult kan vi få tilgang til returkode for drift og også bestillingsbillettnummeret hvis bestillingen er plassert. Returkoden 10009 viser at OrderSend-forespørselen ble fullført, mens 10008 viser at bestillingen vår er plassert. Det er derfor vi har sjekket for noen av disse to returkoder. Hvis vi har noen av dem, er vi sikre på at bestillingen vår er fullført eller den er plassert. For å se etter salgsmulighet, kontrollerer vi for motsatt av hva vi gjorde for kjøpsmulighet unntatt vår ADX som må være større enn den angitte minimumsverdien. Akkurat som vi gjorde i kjøpsseksjonen, erklærer vi en bool type variabel for hver av våre forhold som må oppfylles før en bestilling kan plasseres. En bool type variabel kan bare inneholde SANT eller FALSK. Så, vår salgsstrategi er delt inn i fire forhold. Hvis noen av betingelsene er oppfylt eller tilfredsstilt, lagres en verdi av SANT i vår bool-type variabel, ellers blir en verdi av FALSE lagret. La oss se på dem en etter en som vi gjorde for kjøpeseksjonen Her ser vi på MA-8-verdiene på stolper 0, 1 og 2. Hvis verdien på MA-8 på den nåværende linjen er mindre enn verdien på den forrige linjen 1, og også MA-8-verdien på Linje 1 er mindre enn verdien på Linje 2. det betyr at MA-8 faller nedover. Dette tilfredsstiller en av våre betingelser for en Sell-oppsett. This expression is checking to see if Bar 1 Close price is lower than the value of MA-8 at the same period (Bar 1 period). If the price is lower, then our second condition has also been satisfied, then we can check for other conditions. However, if the two conditions we have just considered were not met, then there will be no need to check other conditions. That is why we decide to include the next expressions within these two initial conditions (expressions). Now we want to check if the current value of ADX (ADX value on Bar 0) is greater than the Minimum ADX value declared in the input parameters. If this expression is true, that is, the current value of ADX is greater than the Minimum required value we also want to be sure that the MinusDI value is greater than the plusDI value. This is what we achieved in the next expression If these conditions are met, that is, if they return true, then we want to be sure that we do not open a new Buy position if we already have one. It is now time to check the value of the Buyopened variable we declared earlier in our code. If Sellopened is true, we do not want to open another Sell position, so, we display an alert to inform us and then return so that our EA will now wait for the next Tick. However, if Sellopened is FALSE, then we setup our Sell trade request as we did for Buying order. The major difference here is the way we calculated our stop loss price and take profit price. Also since we are selling, we sell at the Bid price that is why we used our MqlTick type variable latestprice to get the latest bid price. The other type here, as explained earlier, is ORDERTYPESELL. Also here, we used the NormalizeDouble function for the Bid price, the StopLoss and TakeProfit values, it is good practice to always normalize these prices to the number of digits of currency pair before sending it to the trade server. Just as we did for our Buy order, we must also check if our Sell order is successful or not. So we used the same expression as in our Buy order. 3. Debugging and Testing our Expert Advisor At this point, we need to test our EA to know it our strategy works or not. Also, it is possible that there are one or two errors in our EA code. This will be discovered in the next step. Debugging our code helps us to see how our code performs line by line (if we set breakpoints) and there and then we can notice any error or bug in our code and quickly make the necessary corrections before using our code in real trade. Here, we are going to go through the step by step process of debugging our Expert Advisor, first of all, by setting breakpoints and secondly, without breakpoints. To do this, Make sure you have not closed the Editor. First of all, let us select the chart we want to use to test our EA. On the Editor Menu bar, click on Tools and click on Options as shown below: Figure 8. Setting Debugging options Once the Options window appears, select the currency pair, and the periodtimeframe to use and click the OK button: Before we start the debugger, let us set breakpoints. Breakpoints allow us to monitor the behaviorperformance of our code at certain selected locations or lines. Rather than running through all the code at once, the debugger will stop whenever it see a breakpoint, waiting for your net action. By this we will be able to analyze our code and monitor its behavior as it reaches every set break-points. We will also be able to evaluate the values of some of our variables to see if things are actually the way we envisaged. To insert a breakpoint, go to the line in your code where you want to set the breakpoint. By the left hand side, on the gray field near the border of the code line, double-click and you will see a small round blue button with a white square inside it. Or on the alternative, place the cursor of your mouse anywhere on the code line where you want the breakpoint to appear and press F9 . To remove the breakpoint, press F9 again or double-click on it. Figure 10. Setting a breakpoint For our code, we are going to set breakpoint on five different lines. I will also label them form 1 to 5 for the sake of explanation. To continue, set breakpoint at the seven code lines as shown in the figure below. Breakpoint 1 is the one we have created above. Figure 11. Setting additional breakpoints Once we have finished setting our breakpoints, we are now set to start debugging our code. To start the debugger, press F5 or click the green button on the Toolbar of the MetaEditor: Figure 12. Starting the Debugger The first thing the editor does is to compile the code, if there is any error at the point, it will display it and if no error, it will let you know that the code compiled successfully. Figure 13. Compilation Report Please note that the fact that the code compiled successfully does not mean there may not be errors in your code. Depending on how your code is written, there may be runtime errors. For example, if any of our expressions does not evaluate correctly due to any little oversight, the code will compile correctly but may not run correctly. Too much of the talk, lets see it in action Once the debugger has finished compiling the code, it takes you to the trading terminal, and attach the EA to the chart you have specified on the MetaEditor Options settings. At the same time, it shows you the Input parameters section of the EA. Since we are not adjusting anything yet, just click the OK button. Figure 14. Expert Advisor Input Parameters for Debugging You will now see the EA clearly on the top-right hand corner of the chart. Once it starts the OnTick() . it will stop as soon as it gets to our breakpoint 1. Figure 15. Debugger stops at the first breakpoint You will notice a green arrow at that code line. That tells you that previous code line had been executed we are now ready to execute the present line. Let me make some explanations before we proceed. If you look at the Editors Tool Bar, you will observe that the three buttons with curved arrows which were earlier grayed out are now activated. This is because we are now running the debugger. These buttonscommands are used to step through our code (Step into, Step over or Step out) Figure 16. Step into command The Step Into is used to go from one step of the program execution into the next step, entering into any called functions within that code line. Click on the button or press F11 to invoke the command. (We will use this command in our Step-by-Step debugging of our code.) Figure 17. Step over command The Step over . on the other hand does not enter into any called function within that code line. Click on the button or press F10 to invoke the command Figure 18. Step out command To execute a program step that is one level higher, you click this button or press ShiftF11 . Also, at the lower part of the Editor, you will see the Toolbox window . The Debug tab in this window has the following headings: File : This displays the name of the file been called Function : This displays the present function from the file been called Line : This displays the number of the code line in the file from which the function is called. Expression : This is where you can type the name of any expressionvariable you are interested in monitoring from our code. Value : This will display the value of the expressionvariable we typed at the Expression area. Type : This will display the data type of the expressionvariable been monitored. Back to our debugging process The next thing we want to do is now to type in the variablesexpressions from our code that we are interested in monitoring. Make sure you only monitor the variablesexpressions that really matters in your code. For our example, we will monitor the following: OldTime (old bar time) NewTime0 (current bar time) IsNewBar (flag that indicates the new bar) Mybars (Total bars in History) Our EA depends on it You can add other ones like the ADX values, the MA-8 values, etc. To add the expressionvariable, double-click under the Expressions area or right-click under the Expressions area and select Add as shown in the figure above. Type the expressionvariable to monitor or watch. Figure 19. The expressions watching window Type all the necessary variablesexpressions Figure 20. Adding expressions or variables to watch If the variable hasnt been declared yet, its type is Unknown identifier (except the static variables). Now, lets move on Figure 21. Step into command in action Click the Step into button or press F11 and observe what happens. Keep on pressing this button or F11 until you get to breakpoint no 2 . continue until you get to breakpoint no 4 as shown below and observe the expressions watching window. Figure 22. Watching the expressions or variables Figure 23. Watching the expressions or variables Figure 24. Watching the expressions or variables Once there is a new tick, it will return to the fist code line of the OnTick() function. And all the values of our variablesexpression will now be reset because this is a new tick except if any of them is declared as a static variable. In our case we have one static variable OldTime. Figure 25. Values of variables on NewTick event To go over the process again, continue pressing the F11 key and keep monitoring the variables at the expressions watching window. You can stop the debugger and then remove all the breakpoints. As we see, in Debug mode it prints the message We have new bar here. . Figure 26. Expert Advisor prints the message in Debug mode Start the debugging process again but this time without breakpoints. Keep watching at every tick and if any of our BuySell condition is met, it will place a trade and since we have written our code to tell us if an order is placed successful or otherwise, we will see an alert. Figure 27. Expert Advisor places trade during debugging I think you can leave the EA to work for a few more minutes while you take a coffee. Once you are back and you have made some money ( just kidding ), then click the STOP (Red) button on the MetaEditor to stop debugging. Figure 28. Stopping the debugger What we have actually done here is to see that our EA only checks for a trade at the opening of a new Bar and that our EA actually works. There is still a lot of room for adjustments to our EA code. Let me make it clear, at this point that, the Trading terminal must be connected to the internet, otherwise, debugging will not work because the terminal will not be able to trade. 3.2 TESTING OUR EA STRATEGY At this point we now want to test our EA using the Strategy Tester built into the Trading Terminal. To start the Strategy Tester, press CONTROLR or click the View menu on the Terminal Menu Bar and click on Strategy Tester as shown below Figure 26. Starting the Strategy Testing The Tester (Strategy Tester) is shown at the lower part of the terminal. For you to see all the Testers settings, you need to expandresize it. To do this, move your mouse pointer to the point shown by the red arrow (as shown below) Figure 27. The Strategy Tester window The mouse pointer changes to a double-end arrow, hold down the mouse and drag the line upwards. Stop when you discover that you can see everything on the settings tab. Figure 28. The Strategy Tester Settings Tab Select the EA you want to test Select the Currency pair to use for the test Select the PeriodTimeframe to use for the test Select Custom Period and set the dates in 5 Set the dates for the custom period to be used for the test Execution is Normal Select the deposit amount in USD to be used for the test Set Optimization to Disable (We are not optimizing now, we just want to test) Click this button when you are ready to start test. Before we click the Start button, lets look at the other tabs on the Tester The processor used by the Tester for the Test. Depending on your Computers processor type. Mine is only one (1) core processor. Figure 29. The Strategy Tester Agents tab Once the agent, you will see something similar to the figure below Figure 30. The Strategy Tester Agents tab during a test This is where all the events going on during the test period is displayed Figure 31. The Strategy Tester Journal tab showing trade activities This is where you can specify the input parameters for the EA. Figure 32. The Strategy Tester Inputs tab If we are optimizing our EA, then we will need to set the values in the circled area. The Start is the values you want the Tester to begin with. The Step is the increment rate for the value you selected, and The Stop is the value at which the Tester will stop incrementing the value for that parameter. However, in our case we are not optimizing our EA, so we will not need to touch that for now. Once everything is set, we now go back to the Settings tab and click the Start button. Then the tester begins its work. All you need to do now is to go and take another cup of coffee if you like, or, if you are like me, you may want to monitor every event, then turn to the Journal tab. Once you begin to see messages about orders been sent on the Journal Tab, you may then wish to turn to a NEW tab named Graph which has just been created. Once you switch to the Graph tab, you will see the graph keep on increasing or decreasing as the case may be depending on the outcome of your trades. Figure 33. The graph result for the Expert Advisor Test Once the test is completed, you will see another tab called Results . Switch to the Results tab and you will see the summary of the test we have just carried out. Figure 34. The Strategy Tester Results tab showing test results summary You can see the total Gross Profit, Net Profit, total trades total loss trades and many more. Its really interesting to see that we have about USD 1,450.0 within the period we selected for our test. At least we have some profit. Let me make something very clear to you here. You will discover that the settings for the EA parameters that you see in the Strategy tester is different from the initial settings in the Input parameters of the EA. I have just demonstrated to you that you can change any of those input parameters to get the best out of your EA. Instead of using a period of 8 each for the Moving Average and ADX, I changed it to 10 for Moving Average and 14 for ADX. I also change the Stop Loss from 30 to 35. Last but not the least, I decided to use 2 Hour timeframe. Remember, this is the Strategy Tester. If you want to view a complete report of the test, then right-click on anywhere in the Results tab, you will see a menu. From this menu, Select Save as Report . Figure 35. Saving the result of the test The save dialog window will appear, type a name for your report (if you want, otherwise leave the default name) and click the save button. The whole report will be saved in HTML format for you. To view the chart for the test that was carried out, click Open Chart and you will see the chart displayed Figure 36. The chart showing the test Thats it, we have successfully written and tested our EA and we now have a result to work with. You can now go back to the strategy tester Settings tab and make the test for other TimeframesPeriod. I want you to carry out the test using different currency pairs, different timeframes, different Stop Loss, different Take profit and see how the EA performs. You can even try new Moving Average and ADX values. As I said earlier, that is the essence of the Strategy tester. I will also like you to share your results with me. Conclusion In this step by step guide, we have been able to look at the basic steps required in writing a simple Expert Advisor based on a developed trading strategy. We have also looked at how we check our EA for errors using the debugger. We also discussed how to test the performance of our EA using the Strategy Tester. With this, we have been able to see the power and robustness of the new MQL5 language. Our EA is not yet perfect or complete as many more adjustments must still be made in order to used it for real trading. There is still more to learn and I want you to read the article over again together with the MQL5 manual, and try everything you have learn in this article, I can assure you that you will be a great EA developer in no distant future. Forex Expert Advisor Inexperienced beginners are always interested in finding a trade robot that does all the work, so that the trader does not have to lift a finger. This idea has been pursued by all traders of the computer age. The burden of responsibility for decision making, which wears out a traders nerves, now falls squarely on the trading forex expert advisors. What is a Forex Expert Advisor The forex expert advisor is a program capable of performing in the terminal any action following the instructions of a trader, without his direct involvement. All tasks are performed automatically or mechanically, which is why the advisors are called experts or mechanical trading systems (MTS). Simply put, this is a program sending applications to a broker without any intervention on the part of the trader. You install a profit forex expert advisor to the existing forex online trading platform, which is connected to the server broker, adjust all the settings, and the advisor will begin trading according to a preset strategy. Benefits of Forex Expert Advisors From a psychological point of view, the forex expert advisor is irreplaceable. A trader decreases the responsibility for decision-making, and the trades become less stressful. The trader does not need to have an in-depth knowledge of technical and fundamental analysis, since all the calculations are already included in the program. Besides, the advisor is able to handle the trading signals even when the trader is absent from the workplace. Writing An Forex Expert Advisor Forex Expert Advisors for MetaTrader4 are written in the MQL4 programming language. This language was developed by the manufacturer of the trading terminal specifically for writing expert advisors. It allows the trader to program the trading system without any difficulty, which will trade in online mode day and night. Programmers familiar with this language will not have any difficulty in doing the job. For ordinary users this will be a more difficult task. Forex Expert Advisors Indicators You can create your own technical indicators for more effective work by the advisors. They will be a great addition to the existing indicators in the MetaTrader4 terminal. The purpose of using advisors indicators is to implement analytic functions and generate trading signals. Built-in And Own Forex Expert Advisors The MetaTrader4 trading terminal has several built-in expert advisors. They have the function of an independent trading system and dub the trading signals. They are very popular among beginners and were created specifically to demonstrate the abilities of programming the MetaTrader 4 Client Terminal. The possibilities in creating your own advisor are simply dazzling. You can set various orders by price and time, automatically open the counter orders, etc. These programs are able to replace the trader at their workplace. Testing Forex Expert Advisors The trading terminal can not only write advisors, but also check them on historical data before using, which is another unique feature of using the advisors. Testing is very useful, since it helps to measure the ability and effectiveness of a mechanical trading system on historical data, estimating the chances of future earnings and errors. If you have tested the advisor, and know how it will behave in different market conditions, you can begin trading without needing to intervene. For this purpose, the terminal has a special window where you can also optimize the input parameters of advisors. Parting Words For Beginners Beginners may think that trading with advisors is it very complicated. It is not so. After about a month any trader can begin to program their own automated trading system. Even if you are hesitant about trusting your money to a computer program, you can configure the advisor to five sound alerts, which will greatly facilitate your work so that you spend less time on graphical analysis expecting a signal to open and close positions. You can find lots of advisors on the Internet, but getting a profitable one is very difficult, and using every single one is exhausting and may result in depleting your deposit. That is why you are advised against buying the first advisor you come across. Many advisors demonstrate excellent results when tested on one currency pair, but perform poorly on others. It is better to use the advisor for those instruments that you have tested on. quotVIP clientquot program Get exceptional privileges by joining our VIP program. Create your own trading robot in 5 minutes even if you donrsquot have programming skills stock. roboforex Direct access from 100 USD to the real stock market. quotRebates (Cashback)quot program Trade and receive monthly rebates to your account Up to 10 on account balance Receive additional profit for the trading volume you make. Risk Warning There is a high level of risk involved when trading leveraged products such as ForexCFDs. You should not risk more than you can afford to lose, it is possible that you may lose the entire amount of your account balance. You should not trade or invest unless you fully understand the true extent of your exposure to the risk of loss. Når du handler eller investerer, må du alltid ta hensyn til nivået på din erfaring. Copy-trading services imply additional risks to your investment due to nature of such products. If the risks involved seem unclear to you, please apply to an outside specialist for an independent advice. Advanced Guide To MetaTrader 4 - Expert Advisors Expert Advisor Creation Expert Advisors are programs that allow automation of the analytical and trading processes in the MT4 platform. To create an Expert Advisor (or Expert), the expert editing program - MetaEditor - has to be opened from within the MT4 platform. To open the editor (see Figure 1):13 In the Navigator window, right-click on Expert Advisors and select Create or In the Main Menu gt Tools gt MetaQuotes Language Editor or Click on the MetaEditor icon in the Standard Toolbar: or Press F4 on the computer keyboard. 13 13 Figure 1 - There are several ways to open the MetaEditor. 13Any of these actions will open the Expert Creation Wizard. The Wizard can be used to create Expert Advisors, Custom Indicators, Scripts and DLLs. To create an Expert Advisor, select Expert Advisor and click Next to continue, as shown in Figure 2. 13 Figure 2 - MT4s Expert Advisor Wizard is used to create Expert Advisors, Custom Indicators, Scripts and Libraries (DLLs). 13The General Properties of the Expert Advisor window appears. Here, traders must specify the: Name - A user-created name for the Expert. Developer - The developers name. Link - To the developers website, if applicable. Inputs - the list of Expert inputs 13 13To add a new parameter to the Inputs field, press the Add button. For each Parameter, the trader must specify the Name, Type and Initial Value, as shown in Figure 3. To delete a parameter, highlight the parameter and press Delete. These become the Input Variables within the Expert. Once all the inputs have been listed, click Finish to continue.13 Figure 3 - Create the input variables by identifying Name, Type and Initial Value. 13A new window appears in the programming environment. The Experts name appears at the top of the window, and the previously entered input parameters are listed near the top of the code, as shown in Figure 4. 13 Figure 4 - The Expert name and inputs appear in the code window. 13From here, the Expert code can be entered into the window using the MQL4 programming language and syntax (see Figure 5). Merk . Specifics regarding programming are outside the scope of this tutorial understanding programming logic and learning a specific language require significant effort. Traders can learn more about programming in the MQL4 environment by reading the MT4 Help Guides and participating in the active MQL4 community forums. MQL4, like other proprietary languages, has a list of Reserved Words and Standard Constants that are used during programming. Examples of constants for trade operations, along with their descriptions, include:13 OPBUY - Buying position OPSELL - Selling position OPBUYLIMIT - Buy limit pending position OPSELLLIMIT - Sell limit pending position OPBUYSTOP - Buy stop pending position OPSELLSTOP - Sell stop pending position 13 13 Figure 5 - part of the code for an Expert Advisor. Certain words have predefined uses here, OPSELL instructs the computer to sell if other criteria are met ( if statements). Traders can find a MQL4 Reference in the Help tab of the Toolbox in the MetaEditor window. This Reference includes information that is helpful to beginner and experienced programmers including: Expert Advisor Compiling After the Expert development has been completed, it must be compiled in order to ensure that the code has been written in the proper format needed to run the Expert. To compile the Expert: Select File gt Compile (see Figure 6) or Click the Compile button on the toolbar or Press F5 on the computer keyboard. 13 13Once compiling has been initiated, an update appears in the Toolbox beneath the code in the MetaEditor window, as shown in Figure 6. An errors or warnings will be listed.13 Figure 6 - Successful compiling with zero errors and zero warnings. 13After successful compilation, the new Expert will appear in the Navigator - Expert Advisors window, as shown in Figure 7. If the Expert did not compile successfully, it will still appear but its icon will be gray and the Expert cannot be used. 13 Figure 7 - The new Expert now appears in the Navigator-Expert Advisors window. Expert Advisor Setup Before the Expert can be used, its parameters must be defined in the Terminal Settings window. Å åpne vinduet: 13 I hovedmenyen gt Verktøy gt Alternativer eller Trykk CTRL O på datamaskinens tastatur. Either action will open the Options window. Select the Expert Advisors tab, as shown in Figure 8. 13 Figure 8 - Select the Expert Advisors tab in the Options window to define an Experts parameters. 13 13The following settings are available in the Expert Advisors tab: Enable Expert Advisors - this option allows the user to enable (check) or disable (uncheck) the use of all Experts. Disable experts when the account has been changed - this option disables the Expert if the account has been changes, such as from a demo to a live account. Disable experts when the profile has been changed - this option prevents Experts from launching if the profile has changed. Allow live trading - to enable Experts in real-time mode (rather than testing an Expert on historical data). Spør manuell bekreftelse - for å sende handelsbekreftelse før du sender inn bestillingen. Tillat DLL-import - for å bruke DLLer for å forbedre Expert-funksjonaliteten. Bekreft DLL-funksjonssamtaler - for å tillate kontroll over utførelsen av hver kalt funksjon. Tillat ekstern ekspert import - for å tillate Expert å få tilgang til funksjoner fra andre eksperter eller MQL4 biblioteker. 13 13Once the selections have been made, click OK to close the window. Expert Advisor Launch 13 After the Expert has been created and setup, it is ready to be launched. To launch an Expert: 13 Right-click on the Expert in the Navigator - Expert Advisors window and select Attach to a chart or13 Double-click on the Expert in the Navigator - Expert Advisors window or13 Drag-and-drop the Expert to the desired chart.13 13A window appears with Common and Inputs tabs, as shown in Figure 9. Review the settings in each tab and make any necessary changes, and then click OK to attach the Expert to the active price chart.13 Figure 9 - Make any changes to the Common and Inputs tabs before attaching the Expert to the active price chart. 13The Expert will now be attached to the price chart. Its name will appear in the upper right-hand corner of the chart. The Experts name will be followed by a smiley face, as shown in Figure 10, if live trading is enabled. Otherwise, the Experts name will appear with a frowny face, a dagger after the name indicates that all experts are disabled. 13 Figure 10 - An Expert with a smiley face indicates that live trading has been enabled. 13The Expert is now ready to begin analytical and trading functions. Expert Advisor Shutdown To shut down an Expert, it has to be removed from the chart. To remove an Expert, right-click on the active price chart, select Expert Advisors and then Remove, as shown in Figure 11. 13 Figure 11 - To remove an Expert, right-click the active price chart, select Expert Advisors from the drop-down menu, and then select Remove. Notes About Expert Advisors All Experts are shutdown if the Terminal is closed. If a chart is closed, the Expert attached to the chart will shut down as well. Adding another Expert to a chart will remove the previous one (a confirmation appears). Deleting the Expert from the Navigator window does not shut down an Expert of the same name on an active price chart. 13 13SEE: Trading Systems CodingWriting a Forex Expert Advisor Forex Expert Advisors for MetaTrader4 are written in the MQL4 software design language. This linguistic was industrialized by the constructor of the trading fatal definitely for writing forex ea . It permits the trader to plug-in the trading structure without any struggle, which will trade in online style day and night. Computer operator familiar with this linguistic will not have any trouble in doing the job. For normal users this will be an extra trying job. Forex Expert Generator is an instrument with which you can produce your own forex expert advisor for your strategy. You need to have at least MQL4 software design knowledge to use this tool. MQL4 is the software designing language that is rummage-sale to write forex expert advisors . If you are a single designer and would comparable to view the MQL4 code also for the forex ea you made, you must to purchase expert edition single certificate which is 139. If you purchase the normal edition you cannot interpretation the program. I accepted the expert version single certificate and after emerging my forex expert advisor I usually copy the code and paste it in the MQL 4 publishing superior and save it with some name, collect it and back trial it. This is a very easy tool as you dont actually essential to write the code but use the lumps on the left hand side and make your forex expert advisor . Once you collect it if there any mistakes you can see those mistakes below the Compilation tab at the lowest. If there are no mistakes you can vision the code below the tab Source Code . MT4 Expert Advisor Programming If you are a Forex trader and are in need of an experienced programmer to convert your trading strategy into an Expert Advisor (EA) then you have come to the right place. We would be happy to consider your idea and have the experience and knowledge to make it happen. Feel free to contact us any time.

No comments:

Post a Comment