Wednesday 15 November 2017

Crossing Flytting Gjennomsnittet Ekspert Rådgiver


Enkel Expert Advisor Problem 29. Opprett en handelsekspertrådgiver. Foreløpige argumenter Før du begynner å programmere en handelsekspertrådgiver, er det nødvendig å definere generelle prinsipper for et fremtidig program. Det er ingen strenge programskapende regler. Men når en gang har opprettet et program, fortsetter en programmerer vanligvis å forbedre den. For å kunne forstå programmet i fremtiden, må det opprettes i henhold til et godt gjennomtenkt og lettforståelig system (det er spesielt viktig om et program vil bli ytterligere forbedret av en annen programmerer). Det mest praktiske programmet er det som består av funksjonelle blokker, som hver er ansvarlig for sin del av beregningene. For å opprette en algoritme til en handelsekspertrådgiver, kan vi analysere hva et operasjonsprogram bør gjøre. En av de viktigste dataene i dannelsen av handelsordrer er informasjonen om ordre som allerede finnes i en klientterminal. Noen av handelsstrategiene tillater bare en ensrettet ordre. Vanligvis, hvis en handelsstrategi tillater det, kan flere bestillinger være åpne i en terminal samtidig, men deres nummer skal være begrenset begrenset. Ved bruk av en strategi bør handelsbeslutninger treffes under hensyntagen til den nåværende situasjonen. Før en handelsavgjørelse gjøres i et program, er det nødvendig å vite hvilke handelsordre som allerede er åpnet eller plassert. Først av alt må et program inneholde en blokk med ordreregnskap som er blant de første som skal utføres. I løpet av en EA bør det gjennomføres handelsbeslutninger, hvor gjennomføringen av dem fører til utførelse av handelsvirksomhet. Kodedel ansvarlig for handelsordreformasjon er bedre skrevet i en egen blokk. En ekspertrådgiver kan danne en handelsforespørsel om å åpne en ny ventende eller markedsordre, lukk eller modifiser eksisterende bestillinger eller utfør ingen handlinger i det hele tatt. En EA må også beregne bestillingspriser avhengig av brukerens ønske. Handelsbeslutninger bør gjøres i et program på grunnlag av handelskriterier. Suksessen til hele programmet er avhengig av korrektheten av å oppdage handelskriterier i programmet. Ved beregning av handelskriterier kan et program (og må) ta hensyn til all informasjon som kan være nyttig. Eksempelvis kan en ekspertrådgiver analysere kombinasjon av tekniske indikatorverdier, tidspunkt for viktige nyhetsmeldinger, nåværende tid, verdier av enkelte prisnivåer osv. For enkelhets skyld bør programdelen som er ansvarlig for beregning av handelskriterier, skrives i en separat blokkere. En handelsekspertrådgiver må nødvendigvis inneholde feilbehandlingsblokk. Ved å analysere feil som kan oppstå i utførelsen av handelsoperasjonen, kan man på den ene siden gjenta en handelsforespørsel, og på den annen side informere en bruker om en mulig konfliktsituasjon. Struktur av en enkel ekspertrådgiver Nedenfor er en strukturplan av en enkel ekspertrådgiver konstruert på grunnlag av flere funksjonelle blokker, i hver blokk en viss løsrevet del av beregningene. På følgende EA-utviklingsstadium er det ingen programkode ennå. Samtidig er algoritmen til et program i stor grad dannet. Hvordan EA bygget på basene av den tilbudte ordningen vil operere kan lett forstås, bare å se på skjemaet og orientere seg om blokknavn og relasjonsarrayer (kontrolloverføring) mellom dem. Etter programstart er kontrollen overført til prosesseringsblokken. I denne blokken kan noen generelle parametere analyseres. For eksempel, hvis det ikke er nok barer i et vindu (barer som er nødvendige for å beregne parametere for tekniske indikatorer), vil en EA ikke kunne fungere tilfredsstillende. I et slikt tilfelle må en EA avslutte operasjonen for tidlig å informere en bruker om det og rapportere om årsaken til oppsigelsen. Hvis det ikke foreligger kontraindikatoner av generell karakter, blir kontrollen bestått for å bestille regnskapsblokk. I blokke med regnskapsordrer oppdages antallet og kvaliteten på bestillinger som finnes i en klientterminal for en sikkerhet (til vinduet som EA er vedlagt) på. I denne blokken skal ordre av andre verdipapirer fjernes. Hvis en programmert handelsstrategi krever bruk av bare markedsordrer (og ikke bruker ventende ordrer), må faktumet for tilstedeværelse av ventende ordrer oppdages. Hvis en strategi innrømmer bare en markedsordre og det faktisk er flere ordrer, bør dette faktum også være kjent. Oppgaven til bestillingsregnskapsblokken (i denne ordningen) er å definere om nåværende handelssituasjon tilsvarer en forventet, dvs. den hvor EA kan tilstrekkelig operere. Hvis situasjonen tilsvarer, må kontrollen overføres til neste blokk for å fortsette EAs-operasjonen, hvis ikke, må EA-operasjonen avsluttes, og dette faktum må rapporteres til en bruker. Hvis det ikke er noen ordre i terminalen, eller antall og kvalitet på eksisterende ordrer, tilsvarer det som var forventet, blir kontrollen overført til blokken med definerte handelskriterier. I denne kvarteret beregnes alle kriteriene som er nødvendige for å utføre handelsbeslutninger, nemlig kriterier for åpning, lukning og endring av ordrer. Ytterligere kontroll overføres til blokk med avsluttende ordrer. Det er lett å forstå hvorfor i den tilbudte ordningen er blokkering av avsluttende ordrer utført tidligere enn blokk for åpningsordrer. Det er alltid mer rimelig å behandle første eksisterende ordrer (lukk eller modifiser) og først etter det for å åpne nye ordrer. Generelt er det riktig å bli styrt av ønsket om å ha så lite ordre som mulig. Under utførelsen av denne blokken må alle ordrer, for hvilke lukkekriteriet er aktivert, være stengt. Etter at alle nødvendige bestillinger er stengt, blir kontrollen overført til en blokk med ny ordre størrelse beregning. Det er mange algoritmer for å beregne et ordrevolum. Den enkleste av dem bruker en konstant, fast masse størrelse. Det er praktisk å bruke denne algoritmen i et program for testingstrategier. Mer populær metode for å definere en ordrestørrelse er å angi antall masse, avhengig av mengden ledig margin, for eksempel 30-40 av den. Hvis fri marginal ikke er nok, avslutter programmet operasjonen etter å ha informert brukeren om årsaken. Etter at antall antall for å åpne nye ordrer er definert, blir kontrollen bestått til bestillingsåpningsblokken. Hvis noen av kriteriene som er beregnet tidligere peker på nødvendigheten av å åpne en ordre av en bestemt type, dannes en handelsforespørsel om å åpne en ordre i denne blokken. Det er også feilanalyserende blokk i en ekspertrådgiver. Hvis en handelstransaksjon feilet, blir kontrollen (bare i dette tilfellet) sendt til feilbehandlingsblokken. Hvis en feil som returneres av en server eller klientterminal, ikke er avgjørende, gjøres det et forsøk på å utføre en handelsoperasjon. Hvis en avgjørende feil returneres (for eksempel en konto er blokkert), må en EA avslutte operasjonen. Husk at i MQL4 er det ingen mulighet for at programmet avslutter en EA-operasjon i et sikkerhetsvindu (forskjellig fra skript, se Spesialfunksjoner). Hva som kan gjøres på et program måten er oppsigelsen av start (). Ved en ny start av funksjonen start () på et nytt kryss kan verdien av et bestemt variabel flagg som forbyder handel (i dette tilfellet aktivert som følge av en kritisk feil) analyseres og kontroll kan bestås for avslutning av Spesialfunksjonsoperasjon er derfor ikke dannelse av ny handelsforespørsel tillatt. I den tilbudte ordningen blir flaggverdien analysert i blokken av foreløpig behandling. Handelsstrategi Markedsprisene beveger seg konstant. Markedstilstanden kan til enhver tid karakteriseres enten som en trend - sterk ensrettet prisendring (stigning eller fall), eller som en flat-sidet prisbevegelse med svake avvik fra et visst gjennomsnitt. Disse markedsegenskapene er betingede, fordi det ikke er noen klare kriterier, i henhold til hvilken trend eller flat som kan identifiseres. For eksempel lange langsgående bevegelser med sterke avvik som ikke kan spores til en flat eller en trend. Generelt antas det at markedet hovedsakelig befinner seg i lateral bevegelsestilstand, og trender finner vanligvis sted 15-20 av tiden. Alle handelsstrategier kan også konvensjonelt deles inn i to hovedgrupper. Den første gruppen inneholder flatorienterte strategier. Hovedideen til slike strategier er at etter at en tydelig avvikspris må gå tilbake til forrige posisjon, er derfor bestillinger åpnet i retningen i strid med den siste prisbevegelsen. De andre gruppestrategier er trendstrategier, når ordrer åpnes i samme retning som saltprisbevegelsen. Det er mer kompliserte (kombinerte) strategier. Slike strategier tar hensyn til mange forskjellige faktorer som karakteriserer markedet som et resultat handel kan utføres både på flat og trend. Det er ikke vanskelig å implementere handel i henhold til denne eller den strategiske teknikken - MQL4 inneholder alle nødvendige midler for det. Hovedarbeidet i etableringen av en gang egen strategi består i å søke etter handelskriterier. Handelskriterier I dette eksemplet vil vi forsøke å bygge en trend Expert Advisor, dvs. den som vil åpne ordrer i prisbevegelsesretningen. Så, vi må finne blant ulike tekniske indikatorer de som oppdager en trendbegynnelse. En av de enkleste metodene for å søke handelskriterier er basert på analysen av kombinasjonen av MA med ulike gjennomsnittlige perioder. Fig. 111 og Fig. 112 viser stillingen til to forskjellige MA (med perioder med gjennomsnittlig 11 og 31) på forskjellige markedsdeler. Gjennomsnitt med liten gjennomsnittstid (røde linjer) er nærmere et prisdiagram, vridd og bevegelig. Flytte gjennomsnitt med større gjennomsnittsperiode (blå linje) er mer inerte, har større lag og ligger lenger fra markedsprisene. La oss være oppmerksom på steder der MA med ulike gjennomsnittsperioder krysser og prøver å bestemme om MA-krysset kan brukes som lesekriterium. Fig. 111. Kryssing av MA (11) og MA (31) når prisbevegelsesretningen endrer seg. I figur 111 ser vi en markedsdel hvor åpningsordrer i retning av prisbevegelse ved MA-krysset er berettiget. I punkt A krysser den røde linjen den blå fra bunnen oppover, etter at markedsprisen fortsetter å vokse i noen tid. Videre omvendt MA-kryssing indikerer endringen i prisbevegelsesretningen. Hvis vi åpner en kjøpsordre ved punkt A og lukker den ved B, vil vi få fortjeneste proporsjonal med forskjellen på A og B priser. Fig. 112. Kryssing av MA (11) og MA (31) når prisbevegelsesretningen endrer seg. Samtidig er det andre øyeblikk i markedet når MA krysser, men dette fører ikke til ytterligere betydelig prisvekst eller fall (figur 112). Ordrer åpnet ved MA-krysset på slike øyeblikk vil føre til tap. Dersom Selg er åpnet ved A og stengt ved B, vil slik handel medføre tap. Det samme kan sies om en kjøpsordre åpnet ved B og stengt ved C. Suksessen til hele strategien implementert på grunnlag av MA-krysset avhenger av antall deler som kan karakteriseres som trend og flat. I flat ofte er MA-kryssing en vanlig begivenhet som forstyrrer enhver trendstrategi. Tallrike falske signaler fører som regel til tap. Derfor kan dette tegnkrysset av MA med forskjellig gjennomsnittlig periode brukes til å bygge handelsstrategier bare i kombinasjon med andre tegn som viser en trend. I dette eksemplet (for å bygge en enkel ekspertrådgiver) må vi nekte å bruke dette tegnet. Vi vil bruke et annet tegn. Ved å analysere visuelt tegnet av prisendringer i markedet, kan vi se at en lang en-retningsprisstigning eller - fall ofte ser ut som følge av en kort sterk bevegelse. Med andre ord, hvis det i løpet av kort tid skjedde en sterk bevegelse, kan vi forvente at det fortsetter på mellomlang sikt. Fig. 113 viser markedsperioden da en sterk bevegelse førte til fortsatt prisendring i samme retning. Som kvoten sterk bevegelseskvot kan vi bruke forskjellen på MA med ulike gjennomsnittsperioder. Jo sterkere bevegelsen, desto større er lagret av MA med større gjennomsnittsperiode fra MA med en liten gjennomsnittlig gjennomsnittstid. Dessuten gir selv sterke diskontinuerlige prisbevegelser med videre avkastning ikke en stor forskjell mellom MAs, det vil si at mange falske signaler ikke vises. For eksempel medførte prishopping med 50 poeng med videre avkastning (i midten i figur 113) økning av forskjellen mellom MA med 20 poeng. Samtidig har en veldig sterk bevegelse (som vanligvis ikke er ledsaget av en betydelig korreksjon) i punkt A resultert i forskjellen øker opp til 25-30 poeng. Hvis kjøpsordren åpnes når en viss verdi av differansen mellom MA er nådd, for eksempel i A, vil sannsynligvis det være lønnsomt når en pris når en forhåndsinnstilt Stoppordreverdi. La oss bruke denne verdien som et handelskriterium i vår ekspertrådgiver. Antall ordrer I dette eksemplet analyserer vi en ekspertrådgiver som innrømmer tilstedeværelse av bare én markedsordre, og ventende ordrer leveres ikke. En slik tilnærming er rettferdiggjort ikke bare i dette bestemte eksemplet, men kan brukes som grunnlag for enhver strategi. Venter på ordrer blir vanligvis brukt når en utvikler har et ganske pålitelig kriterium for å prognostisere fremtidig prisendring med høy sannsynlighet. Hvis det ikke er et slikt kriterium, trenger du ikke å bruke ventende ordrer. Situasjonen når flere motsatte bestillinger for en sikkerhet er åpne, kan heller ikke anses som fornuftige. Det var tidligere skrevet at motsatte bestillinger fra økonomisk synspunkt anses å være meningsløse, spesielt hvis ordreprisene er like (se Avslutt og slette ordrer). I så fall bør vi lukke en bestilling av en annen og vente på et signal for å åpne en markedsordre i en bestemt retning. Forholdet til handelskriterier Fra denne posisjonen blir det klart hvilke forhold som er mulige mellom handelskriteriene. Fig. 114 viser tre varianter av korrelasjon av handelskriterier, når hvert kriterium er viktig (gyldig). Handlinger (åpne og lukke markedsordrer) finner sted med klokken på følgende bilder. Fig. 114. Ordningsåpning og avsluttende kriterier korrelasjon (a og b - korrekt, c - feil). Den mest populære varianten av et korrekt dannet handelskriterium er varianten a. Etter å ha blitt åpnet en markedsordre, holdes kjøpet fram til det øyeblikk da kriteriet krever at det lukkes. Deretter oppstår en pause når det ikke åpnes ordrer. Videre en markedsordre Selg kan åpnes. Betingelser for å stenge en salgsordre (i samsvar med korrekt dannede kriterier) skjer tidligere, enn vilkår for å åpne en kjøpsordre. En kjøpsordre kan imidlertid åpnes igjen, dersom et handelskriterium krever dette. Men ifølge denne varianten kan en markedsordre ikke åpnes dersom det er en åpen markedsordre i motsatt retning. Lignende kriterier korrelasjon er i varianten b. Forskjellen er at et kriterium for å åpne noen markedsordre samtidig er et kriterium for å lukke motsatt rekkefølge. Denne varianten som varianten a tillater ikke at flere bestillinger åpnes i terminalen samtidig på en sikkerhet. Varianten av kriteriekorrelasjonen er feil. I følge denne varianten er åpning av en markedsordre tillatt når stridsbestillinger ikke er stengt ennå, noe som er meningsløst. Det kan være sjeldne tilfeller når denne varianten er delvis berettiget. Åpning av en motsatt ordre er noen ganger akseptabel for å kompensere tap som oppstår ved små korreksjoner etter sterke prisbevegelser. I slike tilfeller kan en motsatt rekkefølge åpnes med samme eller mindre verdi enn den allerede eksisterende og deretter stenges når korrigeringen er over. En slik taktikk tillater ikke å forstyrre kvoteringskontoen åpnet i trendretningen. Generelt er det også mulig å bestille flere en-retninger. Dette kan være berettiget når en tidligere åpnet ordre er beskyttet av en Stop-ordre og kriteriet som peker på prisutviklingen i samme retning utløses igjen. Når en slik strategi opprettes, må en utvikler imidlertid være fullt oppmerksom på at i tilfelle av skarp prisbevegelse endres de stoppede bestillingsbestemmelsene kan bli unexecuted av noen meglere ved første prisberøring. Og tapet vil være proporsjonalt med den totale verdien av en-retningsordre markedsordrer. I vårt eksempel bruker vi variant b av handelskriterier korrelasjon. Alle åpne markedsordrer er stengt enten med en stoppordre eller etter et kriterium for å åpne en ordre i motsatt retning utløser (her gjelder kriteriet for å lukke Kjøp sammenfallende med åpningssalg og omvendt). Størrelse på åpne ordrer I hvilken som helst handelsstrategi skal ordrestørrelser være begrenset begrenset. I et enkelt tilfelle brukes en fast ordre størrelse i en ekspertrådgiver. Før EA-operasjonen starter, kan en bruker angi størrelsen på fremtidige ordrer og la den være uendret i noen tid. Videre hvis saldoen endres, kan en bruker sette opp en ny verdi på antall tall for åpnede ordrer. En for liten ordstørrelse gir mer tillit til drift ved uforutsigbar markedsendring, men fortjenesten i tilfelle suksess vil ikke være så stor. Hvis bestillingsstørrelsen er for stor, kan du få stor fortjeneste, men en slik EA vil være for risikabelt. Vanligvis er størrelsen på åpnede ordrer satt opp, slik at marginkravene ikke overstiger 2-35 prosent av balansen eller fri marginen (hvis en strategi tillater at en åpnet ordre, balanse og fri marginal for øyeblikket er åpen før ordreåpningen blir lik). I dette eksemplet implementeres begge varianter. En bruker kan velge enten å angi direkte verdier av ordrer eller angi verdien i prosent fra fri marginen. Programmeringsdetaljer En enkel trend Expert Advisor tradingexpert. mq4 konstruert på grunnlag av tidligere argumenter kan se slik ut: Beskrive variabler Et annet kriterium i programoverslag er dets lesbarhet. Et program anses å være skrevet riktig, hvis det lett kan leses av andre programmerere, derfor må alle hovedprogramdeler og hovedmomenter som kjennetegner strategien, kommenteres. Dette er også grunnen til at det anbefales å erklære og kommentere alle variabler i begynnelsen av programmet. I blokk 1-2 beskrives eksterne og globale variabler. I henhold til reglene må eksterne og globale variabler åpnes før deres første bruk (se Types of Variables), derfor er de deklarert i programhoveddelen. Alle lokale variabler av funksjonstarten () samles og beskrives i den øvre funksjonsdelen (blokk 2-3) umiddelbart etter funksjonsoverskriften. Regler for å erklære lokale variabler krever ikke det, men forbud ikke heller. Hvis en programmerer står overfor vanskeligheter med å forstå betydningen av en variabel når han leser programmet, kan han referere til den øvre programdelen og finne ut hvilken betydning og hvilken type som helst av variabelen. Det er veldig praktisk i programmeringspraksis. Forberedelsesblokk I dette eksemplet består forbehandlingen av to deler (blokk 3-4). Programmet avslutter operasjonen hvis det ikke er nok stenger i et sikkerhetsvindu, i så fall er det umulig å oppdage riktig (i blokk 5-6) verdier av bevegelige gjennomsnitt som er nødvendige for beregning av kriterier. I tillegg analyseres verdien av det variable arbeidet. I den normale EA-operasjonen er variabelverdien alltid sann (den er satt en gang under initialisering). Hvis det oppstår en kritisk feil i programoperasjonen, er falsk tilordnet denne variabelen, og start () fullfører operasjonen. Denne verdien endres ikke i fremtiden, derfor er følgende kode ikke utført. I slike tilfeller må programoperasjonen stoppes, og årsaken til den kritiske feilen må oppdages (om nødvendig må et forretningssenter kontaktes). Etter at situasjonen er løst, kan programmet startes igjen, det vil si at EA kan festes til et sikkerhetsvindu. Regnskapsordrer Den beskrevne ekspertrådgiver tillater bare å jobbe med en markedsordre. Oppgaven til ordreregnskapsblokken (blokk 4-5) er å definere egenskaper for en åpnet rekkefølge, hvis det er en. I løkken går gjennom bestillinger for alle eksisterende markeder og ventende ordrer blir sjekket, nemlig fra den første (int i1) til den siste (iampltOrdersTotal ()). I hver syklus-iterasjon velges neste rekkefølge med funksjonen OrderSelect (). Valget er gjort fra en kilde til åpne og ventende ordrer (SELECTBYPOS). Hvis valget utføres vellykket (det er en ordre i terminalen), må denne rekkefølgen og situasjonen videre analyseres: om bestillingen er åpnet for sikkerheten, der EA opererer, om bestillingen er marked eller ventende det må også tas hensyn til når du teller ordrer. På linjen: Alle bestillinger åpnet for en annen sikkerhet er eliminert. Operatøren fortsetter å stoppe iterasjonen, og egenskaper for en slik ordre blir ikke behandlet. Men hvis bestillingen åpnes for sikkerheten, blir det videre analysert i vinduet som EA er vedlagt. Hvis OrderType () returnerer verdien mer enn 1 (se Typer av handler), er den valgte bestillingen en ventende. Men i denne ekspertrådgiveren er det ikke gitt ordre om ventende ordrer. Det betyr at utførelsen av start () må avsluttes, fordi det oppstod en konfliktsituasjon. I et slikt tilfelle etter at en melding om operasjonstermineringen startet () blir kjøringen stoppet av operatørens retur. Hvis den siste sjekken viste at den analyserte bestillingen er en markedsordre, beregnes og analyseres det totale antall bestillinger for en sikkerhet. For den første av slike ordrer er alle nødvendige egenskaper definert. Hvis i neste iterasjon finner rekkefølgen (variabel Total) den andre markedsordren, anses situasjonen også for å være konflikt, fordi EA ikke klarer å administrere mer enn én markedsordre. I et slikt tilfelle starter () kjøringen stoppet etter å ha vist en tilsvarende melding. Som følge av bestillingsblokkutførelsen (hvis alle kontrollene var vellykkede), beholder variabelen Total sin nullverdi dersom det ikke er noen markedsordrer, eller får verdien 1 hvis det er en markedsordre for vår sikkerhet. I sistnevnte tilfelle får noen verdier som er angitt i korrespondanse med ordreegenskapene (tall, type, åpningspris, stoppnivå og ordreverdi) også sine verdier. Beregning av handelskriterier I den analyserte eksempeldefinisjonen av handelskriterier (blokk 5-6) beregnes på grunnlag av forskjellen mellom Flytte gjennomsnitt med ulike perioder av gjennomsnitt. I henhold til aksepterte kriterier er et diagram bull-directed hvis dagens verdi av MA med mindre periode er større enn verdien av MA med større periode, og forskjellen mellom verdiene er større enn en bestemt verdi. I en bjørnebevegelse er MA med mindre periode lavere enn MA med større periode, og forskjellen er også større enn en viss kritisk verdi. Ved blokkbegynnelsesverdiene for MA med gjennomsnittlige perioder beregnes PeriodMA1 og PeriodMA2. Fakta om betydningen av ethvert handelskriterium uttrykkes via verdien av en tilsvarende variabel. Variabler OpnB og OpnS angir kriteriet utløsende for å åpne Kjøp og selg bestillinger, variabler Cls og ClsS - for lukking. For eksempel, hvis et kriterium for å åpne Buy ikke har utløst, forblir verdien av OpnB false (sett til variabelinitialiseringen) hvis den har utløst, får OpnB verdien sant. I dette tilfellet kriteriet for å lukke Selger sammenfaller med det for å åpne Kjøp, kriterium for åpning Selg falder sammen med det for å lukke Kjøp. Handelsvilkår akseptert i dette eksemplet brukes kun til utdanningsformål og må ikke betraktes som en retningslinje når det handles på en reell konto. Avsluttende bestillinger Det ble tidligere skrevet at denne ekspertrådgiveren kun er beregnet til operasjon med en markedsordre åpnet for sikkerhet, hvilket vindu EA er knyttet til. For øyeblikket når kontrollen i programmet sendes til ordreavslutningsblokken, er det sikkert kjent at det for øyeblikket ikke er noen ordrer for sikkerheten, eller det er bare en markedsordre. Det er derfor koden i ordreavslutningsblokk er skrevet slik at bare en ordre kan lukkes med hell. Denne blokken er basert på den uendelige sløyfen mens kroppen består av to analoge deler: en for å lukke en kjøpsordre, en annen for å lukke en salgsordre. Mens det brukes her med det formål at det i tilfelle av en svikt i handelen kan det gjentas igjen. I overskriften til den første operatøren dersom betingelsen for å lukke en kjøpsordre er beregnet (Selg ordre er lukket på analog måte). Hvis typen av en tidligere åpnet ordre tilsvarer Kjøpe (se Typer av handler) og tegnet for å lukke Kjøp er relevant, sendes kontrollen til kroppen hvis operatøren der en forespørsel om å lukke er dannet. Som en ordre sluttkurs i funksjonen OrderClose () er verdien av et tosidig sitat tilsvarende ordretypen angitt (se Krav og begrensninger i å gjøre handler). Hvis en handelstransaksjon utføres vellykket, vises en melding om rekkefølgeavslutningen den nåværende mens iterasjonen er stoppet, og utførelsen av bestillingslukkeblokken er over. Men hvis operasjonen mislykkes, blir den brukerdefinerte funksjonen for å behandle feil FunError () kalt (blokk 10-11). Behandling av feil Som en passordparameter i FunError () brukes den siste feilkoden beregnet av GetLastError (). Avhengig av feilkoden FunError () returnerer 1 hvis feilen ikke er kritisk, og operasjonen kan gjentas, og 0 hvis feilen er kritisk. Kritiske feil er delt inn i to typer - de, hvorpå en programkjøring kan fortsettes (for eksempel en vanlig feil) og de, hvorefter utførelsen av noen handelsoperasjoner må stoppes (for eksempel blokkert konto). Hvis den brukerdefinerte funksjonen returnerer 1, blir den nåværende mens iterasjonen avsluttes, og i løpet av den neste iterasjonen, blir det forsøkt å utføre operasjonen - for å lukke ordren. Hvis funksjonen returnerer 0, er den nåværende starten () - komponeringen stoppet. På neste kryss start () vil bli startet av klient terminalen igjen, og hvis betingelsene for å lukke ordre blir bevart, vil et annet forsøk på å lukke ordren bli gjort. Hvis det under feilsøking oppdages at videre programgjennomføring er meningsløs (for eksempel programmet opererer på en gammel klientterminalversjon) under neste start, vil utførelsen av den spesielle funksjonstart () bli avsluttet i prosesseringsblokken når analysere verdien av det variable arbeidet. Beregning av masse for nye ordrer Antall partier kan beregnes i henhold til en brukerinnstilling som følger en av de to varianter. Den første varianten er en bestemt konstant verdi satt opp av en bruker. I henhold til den andre varianten beregnes mengden av partier på grunnlag av en sum som er lik en viss prosentandel (angitt av en bruker) med en fri margin. I begynnelsen av blokken med å definere mengden partier for nye ordrer (blokk 7-8) beregnes nødvendige verdier av enkelte variabler - minimal tillatt mengde og trinn for mye endring satt opp av megler, fri marginal og pris på ett parti for sikkerheten. I dette eksemplet er følgende gitt. Hvis en bruker har opprettet en viss ikke-null-verdi av den eksterne variabelen Lts, for eksempel 0,5, blir den akseptert som mengden partier Lts når en handelsforespørsel om å åpne en bestilling dannes. Hvis 0 er tilordnet Lts, defineres antall masse Lts på grunnlag av variabelen Prots (prosent), fri marginal og betingelser satt opp av en megler. Etter at Lt er beregnet, utføres en sjekk. Hvis denne verdien er lavere enn den minimale tillatte verdien, aksepteres den minste tillatte verdien. men hvis fri marginal ikke er nok, etter en tilsvarende melding, avsluttes start () - bekreftelsen. Åpningsordre Blokken av åpningsordrer (blokk 8-9) som blokken for åpningsordrer er en uendelig løkke mens. I overskriften til den første operatøren beregnes betingelsene for å åpne en kjøpsordre: hvis det ikke er noen ordre for sikkerheten (variabel Totalt er lik 0) og tegnet for å åpne en Kjøpsordre er relevant (OpnB er sant), kontroll sendes til dersom operatørskap for å åpne en bestilling. I et slikt tilfelle etterprisene blir oppdaterte priser for stoppnivåer beregnet. Verdier av stoppnivåer settes opprinnelig av en bruker i eksterne variabler, StopLoss og TakeProfit. I en generell sak kan en bruker sette verdier for disse parameterne mindre som en megler tillater. I tillegg kan en megler endre den minste tillatte avstanden når som helst (det er ofte tilfelle ved sterke markedsbevegelser, for eksempel før viktig nyhetsutgave). Dvs hvorfor før hver ordreåpning må stoppnivåene beregnes med hensyn til verdier som er satt til en bruker og den minimale tillatte verdien satt opp av en megler. For å beregne stoppnivåer brukes den brukerdefinerte funksjonen NewStop () som en passert parameter, stoppverdien som er satt av en bruker, blir brukt. I NewStop () først beregnes nåværende minimal tillatt avstand. Hvis verdien som er satt av en bruker, tilsvarer en meglerkrav, returneres denne verdien. Hvis den er mindre enn den tillatte verdien, brukes verdien som tillates av en megler. Prisene på stoppforespørsler er beregnet ut fra det tilsvarende tosidige sitatet (se Krav og begrensninger i å gjøre handler). En handelsforespørsel om å åpne en bestilling dannes ved hjelp av funksjonen OrderSend (). Ved beregning av bestillingsåpningspris og priser på stoppforespørsler, benyttes de tosidige sitatverdiene som svarer til ordretypen. Hvis en handelsoperasjon var vellykket (det vil si en server returnerte nummeret til en åpnet rekkefølge) etter at en melding om en vellykket ordreåpning er vist. start () kjøringen er fullført. Hvis en bestilling ikke ble åpnet og klientterminalen returnerte en feil, behandles feilen i henhold til algoritmen beskrevet tidligere. Noen Kode Egenheter Den analyserte Expert Advisor-koden er orientert for gjennomføringen av en bestemt strategi. Merk, noen programlinjer inneholder variabler og beregninger som ville bli endret, hvis strategien ble endret. For eksempel, ifølge den aksepterte strategien, er Expert Advisor utviklet for å fungere bare med en ordre. Dette tillot å benytte variabelen Billett både for identifikasjon av et avsluttende bestillingsnummer (i blokk med lukking 6-7) og for identifisering av en suksess av en operasjonsoperasjon når en bestilling åpnes (i åpningsblokken 8-9 ). I dette tilfellet er en slik løsning akseptabel. Men hvis vi tar den analyserte koden som grunnlag for implementering av en annen strategi (for eksempel tillater motsatte ordrer), må vi innføre en eller flere variabler for å kunne gjenkjenne antall åpnede ordrer og identifisere suksess for handel. I videre strategiendringer må vi endre kom-programlinjer som inneholder en del av logikken som finnes i kildestrategien. Nemlig i ordrebehandlingsblokken trenger vi ikke å avslutte programoperasjonen dersom det er flere åpne bestillinger for sikkerhet. Dessuten vil vilkårene for åpning og avsluttende ordre bli endret. Dette vil medføre at koden endres i blokker av åpnings - og avsluttingsordrer. På grunnlag av denne analysen kan vi lett konkludere med at den beskrevne enkle ekspertrådgiveren ikke er perfekt. 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. Den bruker to eller flere bevegelige gjennomsnitt av forskjellige perioder for å bestemme retningen av trenden. Når det raskere bevegelige gjennomsnittet (e) er over det langsommere bevegelige gjennomsnittet (e), åpnes en lang posisjon, og omvendt for en kort posisjon. Det bevegelige gjennomsnittskorset utmerker seg under lange, vedvarende trender som en middels lang handelsstrategi. Strategier basert på det bevegelige gjennomsnittskorset har alltid blitt ofte forespurt av våre kunder, og derfor tilbyr vi den bevegelige, gjennomsnittlige kryssekspertrådgiver. Du kan nå kjøpe denne populære ekspertrådgiveren for over 50 av tidligere 45, deluxe Moving Average Cross ekspertrådgiver er nå bare 19,95 Opptil 3 Flytte Gjennomsnittlig Linjer. Use two moving averages, or add a third to filter out long-term trends. Moving Average Types . Enkelt. Eksponentiell. Glatt eller Lineærvektet. Prisdata. Velg mellom Lukk, Åpne, Høy, Lav, Median, Typisk eller Vektet Lukk. Shift. Skift de bevegelige gjennomsnittslinjene fremover eller bakover. Flere tidsrammer. Each moving average can be set to any chart timeframe. Money Management - Lotstørrelsen beregnes automatisk slik at maksimal risiko per handel er begrenset til en prosentandel av egenkapitalen. Trailing Stop Break Selv Stopp - Juster automatisk stoppet mens handelen beveger seg inn i profitt. Angi minimumsgevinstnivå, trinnvis stopp i trinn og mer Daglig handelstimer - Begrens intradaghandelen til de timene som markedet er mest aktiv. Du kan eventuelt lukke alle åpne bestillinger på slutten av dagen. Manuell bestillingskontroll - Plasser manuelle ordrer på diagrammet ditt med en spesifisert handelskommentare, og MA Cross EA vil spore stoppetapet og lukke ordren automatisk på motsatt kryss. Kjør en gang per bar eller hvert kryss. Velg hvor ofte du vil kontrollere bestillingsåpnings - og lukkevilkårene. Du kan handle på hvert kryss, eller bare på slutten av hver bar. Lukk på kryss - Lukk den nåværende åpnede posisjonen på et glidende gjennombrudd i motsatt retning. If disabled, orders will only close on a stop loss or manually. Robust. Full feilhåndtering og varsling, prøv på krav og mye mer. Fullt kompatibel med ECN og 5-siffermeglere. Alerts - Choose between audio alerts, the built-in alert dialog, email alerts or notifications sent to your smartphone. You can purchase the Moving Average Cross EA instantly for only 19.95Adjustable MA Expert Advisor Adjustable MA Forex expert advisor is a customizable moving average EA that offers flexible tuning of the traditional 2-MA cross strategy. You can set different MA periods, MA types, minimum difference, stop-loss, take-profit, trailing stop and slippage. This expert advisor always opens position on cross and closes it on the next cross. The back-test of the Adjustable MA MetaTrader expert advisor has shown 12.2 profit with 12.6 maximum drawdown during a 6-year period. The used position39s volume was set to 0.1 standard lots. The EA made 647 trades, of which 56.41 were profitable. The default settings were used in this back-test on EURUSD M5 chart. As you can see, the results are not very good. It is not recommended to use this EA on live account. What are the stop-loss and take-profit used by this EA By default it uses fixed stop-loss at 100 pips and take-profit at 70 pips. The trailing stop is turned off by default. How often does it trade On 5-minute EURUSD chart (the back-test settings) this EA will trade once every day on average. Any settings other than default can be used The limited forward test (which should be more reliable than a back-test) on AUDUSD M5 chart showed some profitable set-up for this expert advisor. These parameters should be changed from default: StopLoss mdash 30 TakeProfit mdash 50 TrailingStop mdash 20 Period1 mdash 50 Period2 mdash 10 This EA is ECN-compatible. You must set ECNMode input parameter to true in order to enable ECN-compatibility for this expert advisor. Otherwise, you will most likely be seeing OrderSend Error 130 messages when EA will be trying to open positions. This is because, if you are trading with an ECN broker (with market execution for orders), you cannot set SLTP on position opening. You have to open a position first without SLTP and only then modify it, adding stop-loss andor take-profit level. Discussion Warning Before you ask basic questions regarding installation of the expert advisors, please, read this MT4 Expert Advisors Tutorial to get the elementary knowledge on handling them. Do you have your own trading results or any other remarks regarding this expert advisor Discuss Adjustable MA with other traders and MQL programmers on the experts forums. Stochastic Oscillator EA v2 About the Stochastic Oscillator The Stochastic Oscillator Indicator was developed in the late 1950s by Dr. George Lane. The term stochastic refers to the point of a current price in relation to its price range over a period of time. The stochastic oscillator show 2 lines (Main and Signal line) and s support and resistance level. He is included in Metatrader. The default settings are: K 5, D 3 Slowing 3. Trade logic of this forex robot The Stochastic Oscillator EA is a forex robot based on the Stochastic Oscillator with its Main Line, Signal Line and the Support and Resistance levels. He included 5 Stochastic based entry and 3 exit strategies. Crossover in OversoldOverbought Level: Trades if the Main and Signal lines crosses above or below the Support and Resistance levels. Main Line BreakIn: Opens a long trade if the Main Line breaks into the above Level. Vice versa for short trade. Main Line BreakOut: Opens a long trade if the Main Line breaks out of the above Level. Vice versa for short trade. Signal Line BreakIn: Opens a long trade if the Signal Line breaks into the above Level. Vice versa for short trade. Signal Line BreakOut: Opens a long trade if the Signal Line breaks out of the above Level. Vice versa for short trade. Exit On Crossover: Closes the trade on a crossover of the main and signal lines. Main Line BreakThrough: Closes the trade if the Main Line crosses the predefined level. Signal Line BreakThrough: Closes the trade if the Signal Line crosses the predefined level. Stochastic Level Mode If you set the Stochastic Level Mode to 8220Use only buy level8221 the Sell Entry Level and Sell Exit Levels will be calculated based on the Buy Levels like this: Sell Entry Level 100-Buy Entry Level. Sell Exit Level 100-Sell Entry Level. Included functions All versions have variable Magic Number, Take Profit, Stop Loss, Lot Size and Slippage. Does the inverse strategy initiate trades on the same cross, i. e. crossing support from above or resistance from below. I bought your EA but am looking for an inverse stoch strategy that initiates a sell when stoch crosses down from above resistance and initates a buy when it crosses up from below support. Any way to use this EA to do that I would also like to add an MACD filter ( only when buying, 8211 only when selling) This is the closest I8217ve gotten to any EA that would do this for me. Could I pay you to Mod it for these specs The inverse strategy works exactly the same way as the normal strategy does, but it only opens a sell trade instaed of a buy trade and a buy instaed of a sell. I am not planning to add a MACD filter. But I can make a modification for you. Please contact me here .

No comments:

Post a Comment