Mql4 Bevegelig Gjennomsnitt Indikator Kode


MetaTrader 4 - Indikatorer Flytende gjennomsnitt, MA-indikator for MetaTrader 4 Den bevegelige gjennomsnittlige tekniske indikatoren viser gjennomsnittlig instrumentprisverdi for en bestemt tidsperiode. Når man beregner glidende gjennomsnitt, utregner man instrumentprisen for denne tidsperioden. Etter hvert som prisen endres, øker eller øker det glidende gjennomsnittet. Det er fire forskjellige typer bevegelige gjennomsnitt: Enkelt (også referert til som aritmetisk), eksponentiell, glatt og lineærvektet. Flytte gjennomsnitt kan beregnes for et sekvensielt datasett, inkludert åpnings - og sluttpriser, høyeste og laveste priser, handelsvolum eller andre indikatorer. Det er ofte tilfellet når dobbeltflyttende gjennomsnitt blir brukt. Det eneste der flytende gjennomsnitt av forskjellige typer avviger vesentlig fra hverandre, er når vektkoeffisienter, som tilordnes de nyeste dataene, er forskjellige. I tilfelle vi snakker om enkle glidende gjennomsnitt, er alle priser for den aktuelle tidsperioden likeverdige. Eksponentielle og lineære vektede flytteverdier legger til mer verdi til de siste prisene. Den vanligste måten å tolke prisgjennomsnittet på er å sammenligne dynamikken med prishandlingen. Når instrumentprisen stiger over det bevegelige gjennomsnittet, vises et kjøpesignal, hvis prisen faller under det bevegelige gjennomsnittet, er det et salgssignal. Dette handelssystemet, som er basert på det bevegelige gjennomsnittet, er ikke utformet for å gi inngang til markedet rett i sitt laveste punkt, og dens utgang rett på toppen. Det gjør det mulig å handle i henhold til følgende trend: Å kjøpe snart etter at prisene når bunnen, og å selge snart etter at prisene har nådd sin topp. Simple Moving Average (SMA) Enkelt, med andre ord beregnes aritmetisk glidende gjennomsnitt ved å oppsummere prisene på instrumentlukking over et bestemt antall enkeltperioder (for eksempel 12 timer). Denne verdien er så delt med antall slike perioder. SMA SUM (CLOSE, N) N Hvor: N er antall beregningsperioder. Eksponentiell flytende gjennomsnitt (EMA) Eksponentielt glatt glidende gjennomsnitt beregnes ved å legge det glidende gjennomsnittet av en viss andel av gjeldende sluttkurs til forrige verdi. Med eksponensielt glattede glidende gjennomsnitt, er de siste prisene mer verdifulle. P-prosent eksponensielt glidende gjennomsnitt vil se ut: Hvor: Lukk (i) prisen på den nåværende perioden lukkingen EMA (i-1) Eksponentielt Flytende Gjennomsnittlig for forrige periode lukking P andelen av å bruke prisverdien. Smoothed Moving Average (SMMA) Den første verdien av dette glatte glidende gjennomsnittet beregnes som det enkle glidende gjennomsnittet (SMA): SUM1 SUM (CLOSE, N) Det andre og følgende glidende gjennomsnitt beregnes i henhold til denne formelen: Hvor: SUM1 er summen av sluttkurs for N-perioder SMMA1 er det glattede glidende gjennomsnittet på den første linjen SMMA (i) er det glattede glidende gjennomsnittet for den nåværende linjen (unntatt den første) CLOSE (i) er den nåværende sluttkursen N er utjevningsperiode. Lineærvektet Flytende Gjennomsnitt (LWMA) Ved vektet glidende gjennomsnitt er de nyeste dataene av mer verdi enn mer tidlige data. Vektet glidende gjennomsnitt beregnes ved å multiplisere hver av sluttkursene i den vurderte serien, med en bestemt vektkoeffisient. LWMA SUM (Lukk (i) I, N) SUM (jeg, N) Hvor: SUM (jeg, N) er summen av vektkoeffisientene. Flytte gjennomsnitt kan også brukes på indikatorer. Det er her tolkningen av indikatorens glidende gjennomsnitt er i likhet med tolkningen av prisgennomsnittet: hvis indikatoren stiger over det glidende gjennomsnittet, betyr det at den stigende indikatorbevegelsen sannsynligvis vil fortsette: hvis indikatoren faller under glidende gjennomsnitt, vil dette betyr at det er sannsynlig å fortsette å gå nedover. Her er typene av bevegelige gjennomsnitt på diagrammet: Gjennomsnittlig flytende gjennomsnittlig (SMA) eksponentiell flytende gjennomsnitt (EMA) Smoothed Moving Average (SMMA) Lineærvektet Moving Average (LWMA) Opprettelse av egendefinerte indikatorer Når en handelsstrategi opprettes, møter en utvikler ofte nødvendighet for å tegne grafisk i et sikkerhetsvindu en viss avhengighet beregnet av en bruker (programmerer). For dette formål tilbyr MQL4 muligheten til å skape tilpassede indikatorer. Tilpasset indikator er et applikasjonsprogram kodet i MQL4. Det er i utgangspunktet ment for grafisk visning av foreløpig beregnede avhengigheter. Tilpasset indikatorstruktur Behov for buffere Hovedprinsippet som ligger til grunn for egendefinerte indikatorer, passerer verdier av indikatorarrayer til en klientterminal (for tegning av indikatorlinjer) via utvekslingsbuffere. Buffer er et minneområde som inneholder numeriske verdier for en indikator array. MQL4 standard innebærer muligheten for å tegne opptil åtte indikatorlinjer ved hjelp av en tilpasset indikator. Én indikatorgruppe og en buffer bringes i korrespondanse med hver indikatorlinje. Hver buffer har sin egen indeks. Indeksen for den første bufferen er 0, av den andre 1 - og så videre, den siste har indeksen 7. Fig. 115 viser hvordan informasjonen fra en tilpasset indikator sendes via buffere til en klientterminal for tegningsindikator linjer. Fig. 115. Passerende verdier av indikatorrapporteringer via en buffer til en klientterminal. Den generelle rekkefølgen på byggindikatorlinjene er følgende: 1. Beregninger utføres i en tilpasset indikator som følge av at numeriske verdier er tilordnet indikator array elementer. 2. Verdier av indikator array elementer sendes til en klient terminal via buffere. 3. På basis av verdi-arrays mottatt fra buffere viser en klient terminal indikatorlinjer. Komponenter av en tilpasset indikator Lar oss analysere en enkel tilpasset indikator som viser to linjer - en linje er bygget basert på maksimale barpriser, den andre bruker minimalpriser. Eksempel på en enkel tilpasset indikator userindicator. mq4 Lar oss analysere detaljer indikatordelene. I et hvilket som helst applikasjonsprogram som er skrevet i MQL4, kan du angi oppsettparametere som gir riktig programbetjening av en klientterminal. I dette eksemplet inneholder hovedprogramdelen (se Programstruktur) flere linjer med direktiveregenskaper. Det første direktivet angir i hvilket vindu klientterminalen skal tegne indikatorlinjene: I MQL4 er det to varianter av tegningsindikatorlinjer: i hovedvinduet og i et eget vindu. Hovedvinduet er vinduet som inneholder et sikkerhetsdiagram. I dette eksemplet angir parameter indikatorblinkvindu i egenskapskatalogen at en klientterminal skal tegne indikatorlinjer i hovedvinduet. Neste linje viser antall buffere som brukes i indikatoren: I det analyserte eksemplet trekkes to indikatorlinjer. En buffer er tilordnet hver buffer, så totalt antall buffere er to. De neste linjene beskriver farger på indikatorlinjene. Parametere indicatorcolor1 og indicatorcolor2 definerer fargeinnstilling for tilsvarende buffere - i dette tilfellet for buffere med indekser 0 (Blå) og 1 (Rød). Merk at tall i parameternavn indicatorcolor1 og indicatorcolor2 ikke er bufferindekser. Disse tallene er deler av konstante navn som er satt i samsvar med buffere. For hver konstant farge kan settes etter brukernes skjønn. I neste linje indikeres arrays: Indikatoren er beregnet for å tegne to indikatorlinjer, så vi må erklære to globale endimensjonale arrays, en for hver linje. Navne på indikatorarrayer er opp til brukeren. I dette tilfellet brukes arraynavn Buf0 og Buf1, i andre tilfeller kan andre navn brukes, for eksempel Line1, Alfa, Integral etc. Det er nødvendig å deklarere arrayer på globalt nivå fordi arrayelementverdier må opprettholdes mellom samtaler av den spesielle funksjonstart (). Den beskrevne tilpassede indikatoren er bygget på grunnlag av to spesielle funksjoner - init () og start (). Funksjonen init () inneholder den delen av koden som brukes på programmet bare en gang (se Spesialfunksjoner). En veldig viktig handling utføres i linjen: Ved hjelp av funksjonen SetIndexBuffer () blir en nødvendig buffer (i dette tilfellet med indeksen 0) satt i korrespondanse med en matrise (i dette tilfellet Buf0). Det betyr for å konstruere den første indikatorlinjen en klientterminal vil akseptere data som finnes i array Buf0 ved hjelp av nullbufferen for den. Videre er linjestilen definert: For nullbufferen (0) skal en klientterminal bruke følgende tegningstiler: enkel linje (DRAWLINE), solid linje (STYLESOLID), linjebredde 2. De neste to linjene inneholder innstillinger for den andre linjen : Således, i henhold til koden til den spesielle funksjonen init () vil begge indikatorlinjer trekkes i hoved sikkerhetsvinduet. Den første vil være en solid blå linje med bredden 2, den andre er en rød prikket linje (STYLEDOT) med en vanlig bredde. Indikatorliner kan også tegnes av andre stilarter (se stiler av indikatorlinjer). Beregning av verdier for indikatorraderelementer (Vær oppmerksom) Verdier av indikatorarrayelementer beregnes i den spesielle funksjonstart (). For å forstå riktig innholdet i startkoden () må du være oppmerksom på rekkefølgen på indekseringsfeltene. Avsnittet Arrays beskriver i detalj metoden for indeksering av arrays-timeseries. Etter denne metoden begynner barindeksering fra null. Nulllinjen er en nåværende, uformet bar. Den nærmeste bar-indeksen er 1. De neste er 2 og så videre. Når nye barer vises i et sikkerhetsvindu, endres indeksene av allerede dannede (historikk) linjer. Den nye (nåværende, bare dannede, høyre) stangen får nullindeksen, den ene til venstre for ham (som nettopp har blitt dannet), får indeksen 1, og verdiene av indeksene for alle historikkstenger økes også med en. Den beskrevne metoden for indekseringsstenger er den eneste som er mulig for hele on-line trading system MetaTrader, og det tas hensyn til når tegningslinjer bruker både tekniske og tilpassede indikatorer. Det ble tidligere sagt at indikatorlinjer er konstruert på grunnlag av numerisk informasjon som finnes i indikatorarrayer. En indikatorgruppe inneholder informasjon om punkter koordinater hvor en indikatorlinje er tegnet. Og Y-koordinaten til hver prikk er verdien av et indikator array element. og X-koordinat er verdien av en indikator-arrayelementindeks. I det analyserte eksemplet tegnes den første indikatorlinjen ved å bruke maksimale sverdverdier. Fig. 116 viser denne indikatorlinjen (med blå farge) i et sikkerhetsvindu, den er bygd ut fra indikatorarrayen Buf0. Fig. 116. Korrespondanse av koordinater for en indikatorlinje til verdier av en indikatorgruppe. Indeksverdien til en indikatormatrise er ut av en klientterminal i korrespondanse med en stangindeks - disse indeksverdiene er like. Det må også tas i betraktning at prosessen med å konstruere indikatorlinjer fortsetter i sanntidsmodus under forhold når i et sikkerhetsvindu nye stenger vises fra tid til annen. Og alle historiskangene blir flyttet til venstre. For å få indikatorlinjen trukket riktig (hver linjepunkt over dens bar) må den også forskyves sammen med stolper. Så det er behov (teknisk behov) for å indeksere en indikator array. Den grunnleggende forskjellen i en indikator array fra et vanlig array er følgende: I øyeblikket når en ny linje er opprettet, endres indeksverdier for indikator array elementer automatisk av klientterminalen, nemlig - verdien av hver indikator array indeks økes med en og indikator array størrelsen økes med ett element (med null-indeks). For eksempel har nullstangen i figur 116 (tidsramme H1) åpningstiden 6:00. Klokka 7:00 vises en ny linje i sikkerhetsvinduet. Baren åpnet klokka 6:00 vil automatisk få indeksen 1. For å få indikatorlinjen trukket riktig på denne linjen, endrer klientterminalen indeksen for indikatorarrayelementet som svarer til linjen åpnet klokka 6:00. I tabellen i figur 116 er dette elementet skrevet i første linje. Sammen med at indeksene for alle arrayelementene vil bli økt av klientterminalen med en. En indeks for array-elementet som svarer til linjen åpnet klokka 6:00, vil få verdien 1 (før den var lik 0). Indikatorarrayen blir større med ett element. Indeksen for et nytt lagt element vil være lik 0, verdien av dette elementet vil være en ny verdi som reflekterer koordinaten til indikatorlinjen på en nullstang. Denne verdien beregnes i den spesielle funksjonstart () på hvert kryss. Beregninger i den spesielle funksjonstart () skal utføres slik at det ikke utføres ekstra handlinger. Før indikatoren er koblet til et diagram, gjenspeiler det ikke indikatorlinjer (fordi verdier av indikatorarrayer ikke er definert ennå). Det er derfor ved første start av den spesielle funksjonen start () indikator arrayverdier må beregnes for alle stolper som indikatorlinjen skal tegnes på. I det analyserte eksemplet er disse alle stolpene som er til stede på et diagram (de første beregningene kan utføres ikke for alle tilgjengelige linjer, men for noen siste del av historien er det beskrevet i flere eksempler). Ar alle videre starter av den spesielle funksjonstart () er det ikke nødvendig å beregne verdier for indikatoroppsett for alle stolper igjen. Disse verdiene er allerede beregnet og er inneholdt i indikatorarrayen. Det er nødvendig å beregne nåverdien av indikatorlinjen bare på hvert nytt kryss i nulllinjen. For implementeringen av den beskrevne teknologien er det en veldig nyttig standardfunksjon i MQL4 - IndicatorCounted (). FunksjonsindikatorCounted () Denne funksjonen returnerer antall barer som ikke er endret siden siste indikatoranrop. Hvis indikatoren aldri har blitt koblet til et diagram, vil ved utførelsen av første start () kjøringen være lik null: Det betyr at indikatorarrayen ikke inneholder noe element med tidligere forhåndsdefinert verdi, derfor er hele indikatorarrayen må beregnes fra begynnelse til slutt. Indikatorfeltet beregnes fra den eldste linjen til null. Indeksen for den eldste linjen, hvorfra beregninger må startes, beregnes på følgende måte: Anta at når indikatoren festes, er det 300 barer i et diagramvindu. Dette er verdien av den forhåndsdefinerte variabelen Bars. Som definert tidligere, er Countedbars lik 0. Så vi oppnår derfor at jeg indekserer den første utelukkede linjen (den siste, hvorfra beregninger skal utføres) er lik 299. Alle verdier av indikator array elementer er beregnet i løkken mens (): Mens jeg er innenfor rekkevidden fra den første ikke-beregnede linjen (299) til den nåværende (0) inkludert, beregnes verdier av indikator array elementer for begge indikator linjene. Merk, manglende verdier av indikator array elementer beregnes under en (første) start av spesialfunksjonen start (). Under beregningene husker klientterminalen elementer, for hvilke verdier ble beregnet. Den siste iterasjonen i mens () utføres når jeg er lik 0, det vil si verdier av indikatorarrayer beregnes for nulllinjen. Når sløyfen er over, starter den spesielle funksjonen () ferdig, og kontrollen overføres til klientterminalen. Klientterminalen vil i sin tur trekke alle (i dette tilfelle to) indikatorlinjer i samsvar med de beregnede verdiene for arrayelementene. På neste kryss start () vil bli startet av klient terminalen igjen. Ytterligere handlinger vil avhenge av situasjonen (vi fortsetter å analysere eksemplet for 300 bar). Variant 1. Et nytt kryss kommer under dannelsen av nåværende nullstang (den vanligste situasjonen). Fig. 117 viser to flått mottatt av terminalen i øyeblikk av tid t 1 og t 2. Den analyserte situasjonen vil være den samme for begge flåttene. Lets spore utførelsen av start () som ble lansert for øyeblikket t 2. Under utførelsen av funksjonstart () vil følgende linje bli utført: IndicatorCounted () vil returnere verdien 299, det vil si siden siste start () samtale 299 tidligere barer ble ikke endret. Som et resultat vil indeksverdien være lik 0 (300-299-1): Det betyr at i neste runde () sløyfen beregnes verdiene for arrayelementer med nullindeksen. Med andre ord vil den nye posisjonen til en indikatorlinje på nullstangen beregnes. Når syklusen er ferdig, vil start () stoppe å utføre og vil overføre kontroll til klientterminalen. Variant 2. Et nytt kryss er det første krysset av en nullstang (skjer fra tid til annen). I dette tilfellet er utseendet på en ny bar viktig. Før kontrollen overføres til den spesielle funksjonstart (), vil klientterminalen trekke igjen alle stolpene som er tilstede i sikkerhetsvinduet og omregistrere alle deklarerte indikatorarrayer (angitt i samsvar med buffere). Dessuten vil klientterminalen huske at det allerede er 301 barer, ikke 300 i et diagramvindu. Fig. 118 inneholder situasjon når det siste krysset i forrige felt (for øyeblikket t 2) ble funksjonstart () startet og utført. Det er derfor, selv om nå den første linjen (med indeks 1) ferdig for øyeblikket t 2 ble beregnet av indikatoren, vil funksjon IndicatorCounted () returnere verdien som var på forrige linje. det vil si 299: I neste linjeindeks blir jeg beregnet, i dette tilfellet for det første krysset av en ny linje vil det være lik 1 (301-299-1): Det betyr beregning av indikator array verdier i mens () loop Ved utseendet på en ny bar vil det bli utført både for den siste linjen og for den nye nulllinjen. Litt tidligere under re-indeksering av indikator arrayer klient terminalen økte størrelser av disse arrays. Verdier av arrayelementer med nullindekser ble ikke definert før beregningene i løkken. Under beregninger i løkken får disse elementene noen verdier. Når beregningene i start () er over, blir kontrollen returnert til klientterminalen. Etter dette vil klientterminalen trekke indikatorlinjer på nulllinjen basert på bare beregnede verdier av arrayelementer med nullindekser. Variant 3. Et nytt kryss er det første krysset av en ny nulllinje, men det siste, men ett kryss blir ikke behandlet (sjeldne tilfeller). Fig. 119 viser situasjonen når start () ble lansert på første kryss av en ny bar for øyeblikket t 5. Tidligere ble denne funksjonen startet for øyeblikket t 2. Tick som kom til terminalen for øyeblikket t 3 ( rød pil) ble ikke behandlet av indikatoren. Dette skjedde fordi start () kjøretid t 2 - t 4 er større enn intervallet mellom flått t 2 - t 3. Dette faktum vil bli detektert av klientterminalen under utførelsen av start () lansert for øyeblikket t 5. Under Beregninger i linjen: IndicatorCounted () returnerer verdien 299 (). Denne verdien er sant - fra øyeblikket til det siste indikatorsamtalen ble 299 barer ikke endret etter (nå allerede) 301. Derfor er den beregnede indeksen for den første (venstre) stangen, hvorfra beregninger av arrayelementverdier skal startes, vil være lik 1 (301-299-1): det betyr at under to () kjøring vil det bli utført to iterasjoner. Under de første blir verdier av arrayelementer med indeksen i 1 beregnet, dvs. Buf01 og Buf11. Ikke, for øyeblikket er beregningene startet, blir rekker og indikatorarrayer allerede re-indeksert av klientterminalen (fordi en ny bar startet, mellom start av spesiell funksjonstart ()). Derfor beregnes beregninger for elementene i arrays med indeks 1 på grunnlag av array-timeseries (maksimale og minimale verdier av en bar-pris) også med indeksen 1: Under den andre iterasjonen av mens () - verdier for elementer med null indekser, dvs. for nulllinjen, beregnes på grunnlag av sist kjente verdier av array-timeseries. Bruk av den beskrevne teknologien for beregning av tilpassede indikatorer tillater for det første å garantere beregning av verdier av alle indikator array elementer uavhengig av spesifikke karakter av tick historie, og for det andre å utføre beregninger bare for uncounted barer, dvs. bruke økonomisk beregne ressurser . Ikke en bar regnes som ubestemt hvis beregning av elementverdier for en indikator arrays minst for et siste kryss av stangen, utføres ikke. Starte den egendefinerte indikatoren userindicator. mq4 i et diagramvindu, du vil se to linjer - en tykk blå linje som er bygd på maksimaltall og en prikket rød linje bygget på minimumene (Fig. 120). Det skal bemerkes at man kan bygge en tilpasset indikator, hvor indikatorlinjene vil falle sammen med linjene i en analog teknisk indikator. Det kan lett gjøres hvis det brukes som beregningsformler i den tilpassede indikatoren, brukes de samme formlene som i den tekniske indikatoren. For å illustrere dette kan vi forbedre programkoden som ble analysert i det forrige eksempelet. La indikatoren tegne linjer på gjennomsnittlige verdier av maksimum og minimum av flere siste stenger. Det er enkelt å utføre nødvendige beregninger: vi trenger bare å finne gjennomsnittsverdier av array-timeseries-elementer. For eksempel beregnes verdien av en indikatorgruppe med indeksen 3 (dvs. indikatorlinjekoordinat for den tredje linjen) på grunnlag av de fem siste maksimumene: Buf03 (High3 High4 High5 High6 High7) 5 Analoge beregninger kan utføres for en indikator linjer bygget på minimum. Eksempel på en enkel tilpasset indikator averagevalue. mq4. Indikatorliner er bygd på gjennomsnittlig minimal og maksimal verdi av N-stolper. I dette eksemplet er det en ekstern variabel AverBars. Ved å bruke denne variabelen kan en bruker angi antall barer, for hvilke en gjennomsnittsverdi beregnes. I start () brukes denne verdien til å beregne en gjennomsnittsverdi. I løkken for summen av maksimale og minimale verdier beregnes for antall barer som svarer til verdien av variabelen AverBars. I de neste to programlinjene beregnes verdier av indikator array elementer for indikatorlinjer som svarer til minimale og maksimale verdier. Den gjennomsnittlige metoden som brukes her, er også brukt for beregninger i den tekniske indikatoren Moving Average. Hvis vi legger til den analyserte tilpassede indikatoren averagevalue. mq4 og den tekniske indikatoren Moving Average, ser vi tre indikatorlinjer. Hvis samme periode for gjennomsnitt er satt opp for begge indikatorene, vil Flytte gjennomsnittlig linje falle sammen med en av de tilpassede indikatorlinjene (for dette formål skal parametere beskrevet i figur 121 angis i de tekniske indikatorinnstillingene). Fig. 121. Sammenfallende linjer med en teknisk indikator og en tilpasset indikator (rød linje). Ved bruk av teknisk indikator kan en bruker derfor konstruere refleksjonen av eventuelle regelmessigheter som er nødvendige i praktisk arbeid. Tilpassede indikatoralternativer Tegningsindikatorlinjer i separat Windows MQL4 tilbyr en stor tjeneste for å bygge tilpassede indikatorer som gjør at de er veldig praktiske. Spesielt kan indikatorlinjer trekkes i et eget vindu. Dette er praktisk når absolutte verdier for indikatorlinjens amplitude er vesentlig mindre (eller større) enn sikkerhetspriser. For eksempel, hvis vi er interessert i forskjellen mellom gjennomsnittsverdier for bar maksimum og minimum i et bestemt historisk intervall, vil denne verdien avhengig av tidsramme være omtrentlig fra 0 til 50 poeng (for eksempel for M15). Det er ikke vanskelig å bygge en indikatorlinje, men i et sikkerhetsvindu blir denne linjen trukket i området 0 - 50 poeng av en sikkerhetspris, dvs. vesentlig lavere enn diagramområdet reflektert på skjermen. Det er svært ubeleilig. For å tegne indikatorlinjer i et eget vindu (i nederste del av et sikkerhetsvindu), skal i parameteregenskapen (ved programbegynnelsen) parameterindikatorparametervindu angis: I øyeblikket når en slik indikator er festet til et sikkerhetsvindu , klientterminalen oppretter et eget vindu under et diagram, der indikatorlinjer beregnet i indikatoren vil bli tegnet. Avhengig av fargeinnstillinger og typer indikatorlinjer blir de trukket i denne eller den stilen. Begrensende beregningshistorikk I de fleste tilfeller inneholder indikatorlinjer bare nyttig informasjon i den siste historien. Den delen av indikatorlinjene som er bygd på gamle barer (for eksempel 1 måned gammelt minutt) kan nesten ikke anses som nyttig for å gjøre handelsbeslutninger. Dessuten, hvis det er mange barer i et diagramvindu, er tiden investert i beregning og tegning av indikatorlinjene urimelig stor. Dette kan være avgjørende for programfeil, når et program ofte blir kompilert og deretter startet. Derfor er det nødvendig å utføre beregninger ikke for hele historien, men for den begrensede delen av den nyeste barhistorikken. Til dette formål brukes en ekstern variabelhistorikk i følgende program. Verdien av denne variabelen er tatt i betraktning ved beregning av indeksen for den første (venstre) stangen, med utgangspunkt i hvilke elementer av indikatorarrayer må beregnes. Ytterligere beregninger i mens () sløyfe vil bli utført for antall nyere historikkfelt ikke større enn historikkverdien. Merk, den analyserte metoden for å begrense en beregningshistorikk gjelder bare den delen av beregninger som utføres i den første starten av den spesielle funksjonstart (). Videre, når nye stenger vises, vil nye deler av indikatorlinjer bli lagt til høyre, mens bildet i venstre del blir bevart. Dermed blir indikatorlinjelengden økt i hele indikatorens driftstid. Felles verdi av History-parameter anses å være omtrent 5000 barer. Eksempel på en enkel tilpasset indikator separatewindow. mq4. Indikatorlinjer trekkes i et eget vindu. Lignende beregning av en indikatorlinje utføres i den tekniske indikatoren AverageTrue Range. Fig. 122 viser en indikatorlinje konstruert av den tilpassede indikator separatewindow. mq4 i et eget vindu og en indikatorlinje konstruert av ATR i et annet vindu. I dette tilfellet er linjene helt identiske fordi gjennomsnittsperioden er den samme for begge indikatorene - 5. Hvis denne parameteren endres i noen av indikatorene, vil tilsvarende indikatorlinje også endres. Fig. 122. Tegne en tilpasset indikatorlinje i et eget vindu. Identiske linjer av en teknisk indikator (ATR) og en tilpasset indikator (separatewindow. mq4). Det er også tydelig at tilpasset indikatorlinje er konstruert ikke for hele skjermbredden, men for 50 siste stenger som angitt i den eksterne variabelen Historikk. Hvis en forhandler trenger å bruke større historikkintervall, kan verdien av den eksterne variabelen enkelt endres via det tilpassede indikatorinnstillingsvinduet. Fig. 123 viser et sikkerhetsvindu, der indikatorlinjen oss tegnet i en annen stil - som et histogram. For å få et slikt resultat, ble en linje endret i programkoden separatewindow. mq4 - andre linjestiler er angitt: Alle andre kodedeler er uendrede. Fig. 123. Tegning tilpasset indikatorlinje i et eget vindu (histogram). Likhet med tegninger av en teknisk indikator (ATR) og en tilpasset indikator (separatewindow. mq4). Skiftende indikatorlinjer vertikalt og horisontalt I noen tilfeller er det nødvendig å skifte en indikatorlinje. Det kan lett gjøres med MQL4 betyr. Lar analysere et eksempel, i hvilken posisjon indikatorlinjer i et sikkerhetsvindu beregnes i samsvar med verdier oppgitt av en bruker. Eksempel på en tilpasset indikator displacement. mq4. Skiftende indikatorlinjer horisontalt og vertikalt. For å justere linjer skiftes i et diagram, er det to eksterne variabler - LeftRight for horisontal skift av alle linjer og UpDown for å skifte to punkterte linjer loddrett. Algoritmen som brukes til å beregne verdier av tilsvarende arrayelementer, er basert på veldig enkle regler: for å skifte en linje horisontalt, tilordne den beregnede verdien til et arrayelement, hvis indeks er større av LeftRight (for å skifte til høyre og mindre for å skifte til høyre) enn indeksen for en bar, for hvilken beregninger utføres for å skifte en linje vertikalt, må UpDownPoint legges til (for å skifte oppover eller forringes for å skifte nedover) til hver verdi av en indikatorgruppe som karakteriserer startlinjeposisjonen I analysen Eksempelindekser beregnes i linjen: Her er jeg indeksen for en linje, for hvilken beregninger utføres, k er en indeks for et indikator array element. Rød indikatorlinje som vises av klientterminalen basert på indikatoroppstillingen Line0, blir forskjøvet til venstre med 5 barer (i henhold til tilpassede innstillinger, se figur 124) fra startlinjen. I dette tilfellet er startlinjen et flytende gjennomsnitt med gjennomsnittlig gjennomsnittlig 5 formelen for MA-beregning er (HighiLowi) 2. I dette eksemplet er plasseringen av den røde linjen grunnlaget for beregningen av indikatorarrayverdier for to andre linjer, dvs. deres posisjon på diagrammet. Stiplede linjer beregnes på denne måten: Bruk av indeks k for elementer av alle indikatorarrayer gjør det mulig å utføre beregninger for elementene i array Line1, Line2 på samme linje som brukes til å beregne verdier av den tilsvarende grunnleggende array Line0. Som et resultat blir stiplede linjer forskjøvet i forhold til den røde linjen med verdien som er angitt i indikatorinnstillingsvinduet, i dette tilfellet med 30 punkter (figur 124). Fig. 124. Rød indikatorlinje forskyves til venstre med 5 barer. Stiplede indikatorlinjer forskyves i forhold til den røde linjen med 30 poeng. Begrensninger av tilpassede indikatorer Det er noen begrensninger i MQL4 som bør tas i betraktning ved programmering av tilpassede indikatorer. Det finnes en gruppe funksjoner som kun kan brukes i tilpassede indikatorer og kan ikke brukes i Expert Advisors og skript: IndicatorBuffers (), IndicatorCounted (), IndicatorDigits (), IndicatorShortName (), SetIndexArrow (), SetIndexBuffer (), SetIndexDrawBegin () ), SetIndexEmptyValue (), SetIndexLabel (), SetIndexShift (), SetIndexStyle (), SetLevelStyle (), SetLevelValue (). På den annen side kan handelsfunksjoner ikke brukes i indikatorer: OrderSend (), OrderClose (), OrderCloseBy (), OrderDelete () og OrderModify (). Dette skyldes at indikatorer opererer i grensesnittstrømmen (som skiller seg fra ekspertrådgivere og skript som opererer i egen strømning). Dette er også grunnen til at algoritmer basert på looping ikke kan brukes i tilpassede indikatorer. Start av en tilpasset indikator som inneholder en endeløs sløyfe (i forhold til faktisk utførelsestid) kan føre til at klientterminalen holder opp med ytterligere nødvendighet for å starte en datamaskin på nytt. De generelle sammenligningsegenskapene til ekspertrådgivere, skript og indikatorer finnes i tabell 2. Bruk av tekniske indikatorer Ifølge tilhørende nettbasert handelssystem MetaTrader 4 finnes det to typer indikatorer i MQL4 - teknisk og tilpasset. Teknisk indikator er en integrert del av on-line trading system MetaTrader, innebygd funksjon som gjør det mulig å tegne en viss avhengighet på skjermen. Egenskaper for tekniske indikatorer Tegn i sikkerhetsvinduet Hver teknisk indikator beregner en bestemt forhåndsdefinert avhengighet. For å tegne denne avhengigheten grafisk på skjermen, bør en teknisk indikator være knyttet til et diagram. Dette kan gjøres via systemmenyen Sett inn gtgt-indikatorer eller via Navigator-vinduet til en klientterminal. For å feste en teknisk indikator på et diagram fra Navigator-vinduet, brukes en veldig enkel metode - dra-amp-drop av det tekniske indikatornavnet fra Navigator-vinduet til et diagramvindu. Som et resultat vil en eller flere linjer beregnet i denne indikatoren vises i diagramvinduet. Indikatorlinjer av en teknisk indikator kan trekkes både i hovedkortvinduet og i et eget vindu i nedre del av et sikkerhetsvindu. I figur 104 er teknisk indikator Alligator trukket i et diagramvindu. Kode Utveksling Alle tekniske indikatorer er innebygd, koden er ikke tilgjengelig for å gjøre endringer. Så en bruker er sikret fra en feilt modifikasjon av innebygde tekniske indikatorer. Kilden koden, som en teknisk indikator er beregnet på, er imidlertid tilgjengelig på programvareutviklerens nettsted (MetaQuotes Software Corp.) i avsnittet Tekniske indikatorer. Hvis det er nødvendig, kan en programmerer bruke hele koden eller en del av den til å opprette egendefinerte indikatorer (se Oppretting av egendefinerte indikatorer). Ringefunksjoner for tekniske indikatorer Grafisk representasjon synlig for en bruker vises av en klientterminal. For ytterligere bekvemmelighet vil vi kalle slike tegninger indikatorlinjer. Indikatorlinje er en grafisk visning av en viss avhengighet basert på numeriske verdier som inngår i en indikatorgruppe. Indikatorlinjetype er satt opp av en bruker. Indikatorlinjen kan vises i form av en solid eller strekket linje, med en angitt farge, samt i form av en kjede av bestemte tegn (prikker, firkanter, ringer, etc.). Under indikatorberegninger beregnes sett med numeriske verdier i det indikatorlinjene vil bli tegnet i samsvar med disse beregningene. Disse verdisettene lagres i indikatorarrayer. Indikator Array er et endimensjonalt array som inneholder numeriske verdier, i samsvar med hvilke indikatorlinjer er konstruert. Numeriske verdier av indikator array elementer er punkter koordinater, der en indikator linje er tegnet. Y-koordinaten for hver prikk er verdien av et indikator array element, X-koordinat er indeksverdien til indikator array elementet. Data lagringsteknologi i indikatorarrayer er grunnlaget for å bygge tekniske og tilpassede indikatorer. Verdier av indikator array elementer av tekniske indikatorer er tilgjengelige fra alle applikasjonsprogrammer, inkludert Expert Advisors, skript og tilpassede indikatorer. For å få en verdi av et indikator array element med en bestemt indeks i et program, er det nødvendig å ringe en innebygd funksjon, hvis navn er satt i samsvar med et teknisk indikatornavn. For utførelse av en teknisk indikatorfunksjon skal den tilhørende indikatoren ikke nødvendigvis festes til et sikkerhetsvindu. Også teknisk indikatorfunksjonssamtale fra et applikasjonsprogram fører ikke til vedlegg av en tilsvarende indikator til et sikkerhetsvindu. Vedlegg av en teknisk indikator til et sikkerhetsvindu resulterer heller ikke i et teknisk indikatoranrop i et programprogram. En rekke tekniske indikatorer inngår i klientterminalen på online handelssystemet MetaTrader 4. Lar analysere noen av dem. Moving Average, MA Teknisk indikator Moving Average, MA viser gjennomsnittlig instrumentprisverdi for en viss tidsperiode. Indikatoren reflekterer den generelle markedsutviklingen - kan øke, redusere eller vise noen svingninger nær en pris. For å få verdier av MA indikatorlinjen på et bestemt tidspunkt, bruk standardfunksjonen: symbol - symbolnavn på en sikkerhet, på dataene som indikatoren skal beregnes for. NULL betyr det nåværende symbolet. tidsramme - periode. Kan være en av diagramperioder. 0 betyr perioden for det nåværende diagrammet. periode - gjennomsnittlig gjennomsnitt for MA beregninger. Mashift - indikatorforskyvning i forhold til et prisdiagram. mamethod - gjennomsnittlig metode. Kan være en av MA metoder verdier. appliedprice - brukt pris. Kan være noen av priskonstanter. Skift - verdiindeks oppnådd fra en indikator array (skift tilbake i forhold til en nåværende bar med et spesifisert antall barer). Nedenfor er et eksempel på å ringe en teknisk indikatorfunksjon fra Expert Advisor callindicator. mq4: I funksjonen EA callindicator. mq4 iMA () brukes funksjon (funksjon av teknisk indikator Moving Average). Lar analysere denne programdelen i detaljer: NULL angir at beregning av et bevegelige gjennomsnitt er gjort for et sikkerhetsvindu, som EA er vedlagt (i dette tilfellet er det EA, generelt kan det være et hvilket som helst applikasjonsprogram) 0 - det er beregnet for tidsrammen som er angitt i sikkerhetsvinduet som EA er tilknyttet PeriodMA - gjennomsnittlig periodeverdi er angitt i en ekstern variabel hvis etter at EA er festet til et sikkerhetsvindu, endrer ikke en bruker denne verdien i innstillingene til EA-eksterne variabler , verdien er lik 5 0 - indikator-arrayet blir ikke skiftet i forhold til et diagram, dvs. verdier av indikator arrayelementer inneholder MA-verdier beregnet for stenger som indikatorlinjen er tegnet MODESMA - metode for et enkelt glidende gjennomsnitt brukes til beregninger PRICECLOSE - bar sluttkurs brukes til beregninger 0 - indikator array element indeksen, for hvilken verdien er kjøpt - i dette tilfellet er det null element. Med tanke på at indikatormatrise ikke skiftes i forhold til diagrammet, oppnås MA-verdi for nullstangen. Funksjonen iMA () returnerer en verdi som tilordnes variabel MA. I flere programlinjer sammenlignes denne verdien med den nåværende budprisen. Hvis den nåværende prisen er høyere eller lavere enn den oppnådde MA-verdien, vises et varsel. Bruk av variabler FactUp og FactDn gjør det mulig å vise varselet først etter første krysning av MA-linjen. (Merk at den blå indikatorlinjen i et sikkerhetsvindu er tegnet, ikke fordi den tekniske indikatorfunksjonen ble kalt fra programmet, men fordi en bruker har vedlagt indikatoren til diagrammet, fig. 104). Det skal bemerkes her at med utseendet på nye stolper indekserer historikkfeltene, den nåværende formede linjen har alltid 0-indeksen. I Expert Advisor callindicator. mq4 returnerer den tekniske indikatorfunksjonen iMA () verdien som er beregnet for nulllinjen. Selv om indeksverdien aldri blir endret under EA-kjøringen (det vil si at beregninger alltid utføres for på den nåværende linjen), vil verdien som returneres av iMA () alltid svare til den sist beregnede, dvs. beregnet for den nåværende nulllinjen. Hvis det for enkelte beregninger i programmet vi trenger å oppnå verdien av en teknisk indikatorverdi ikke for den nåværende linjen, bur for en historisk, skal den nødvendige indikator array indeksen spesifiseres i funksjonssamtalen. La oss se et eksempel på EA historybars. mq4. der MA er beregnet på fjerde bar: I EA historybars. mq4 beregnes MA verdier for nåværende bar (indeks 0) og for fjerde bar (indeks 4). De angitte indeksene 0 og 4 endres ikke under denne programoperasjonen, og programmet kan operere uendelig lang hver gang man beregner MA-verdier for null og fjerde søyle. Husk, selv om beregninger er gjort for MA på stenger med samme indekser, vil MA bli endret, dvs. vil svare til gjeldende MA-verdier på nåværende null-bar og den nåværende fjerde linjen. I figur 106 er det klart at etter hvert som prisene vokser på lasestangene, går MA opp. Forskjellen mellom MA-verdiene på null og fjerde stenger vokser også, noe som gjenspeiles i de viste varslene. Tekniske indikatorer kan gjenspeile ikke bare en, men også to eller flere indikatorlinjer. Teknisk indikator Stokastisk oscillator sammenligner nåværende sluttkurs med prisklassen for en valgt tidsperiode. Indikatoren er vanligvis representert av to indikatorlinjer. Hovednavnet kalles K. Den andre D-signallinjen er det bevegelige gjennomsnittet for K. Vanligvis blir K tegnet som en solid linje, D-dashed. I henhold til en av indikatorforklaringsvarianter, bør vi kjøpe hvis K er høyere enn D og selge hvis K går lavere enn D. Det gunstigste øyeblikket for å utføre en handelstransaksjon anses å være tidspunktet for sammenfall av linjer. symbol symbol navn på en sikkerhet, på dataene som indikatoren vil bli beregnet. NULL betyr det nåværende symbolet. tidsramme - periode. Kan være en av diagramperioder. 0 betyr perioden for et aktuelt diagram. Kperiod - periode (antall barer) for beregning av K. D periode - gjennomsnittlig gjennomsnitt av D. Sakte - verdi av bremsing. metode - gjennomsnittlig metode. Kan være en av MA metoder verdier. prisfelt - parameter for valg av priser for beregninger. Kan være en av følgende verdier: 0 - LowHigh eller 1 - CloseClose. modus - indeks for indikator linjer. Kan være en av følgende verdier: MODEMAIN eller MODESIGNAL. skift - indeks av den oppnådde verdien fra en indikatorbuffer (skift tilbake i forhold til en nåværende bar ved et spesifisert antall barer). Ved hjelp av stokastisk oscillator er det nødvendig å analysere de relative linjeposisjonene. For å beregne hvilken handelsavgjørelse som skal utføres, må verdien av hver linje på nåværende og forrige stolper tas i betraktning (se figur 107). Når linjene krysser i punktet A (grønn linje krysser den røde en oppover), skal salgsordren være lukket og kjøpsordren skal åpnes. Under delen A - B (ingen linjeskift, grønn linje er høyere enn den røde linjen) Kjøpsordren skal holdes åpen. I punkt B (grønn linje krysser den røde en nedover) Kjøper skal lukkes og Selg skal åpnes. Så selg bør være åpen til neste kryssing (ingen kryss, grønn linje under den røde linjen). Fig. 107. Sammenfall av hoved - og signallinjene til stokastisk oscillator. Det neste eksemplet inneholder implementeringen av en enkel algoritme som viser hvordan nødvendige verdier av hver linje kan oppnås og handelskriterier kan dannes. Til dette formål brukes verdier for tekniske indikatorfunksjoner iStochastic () i EA callstohastic. mq4: For å oppnå K-linjeverdi (solid grønn) på nulllinjen, brukes følgende beregningslinje: Her angir parameter MODEMAIN linjen, verdien hvorav blir spurt, den siste parameteren 0 er stangindeksen, for hvilken linjeværdien skal beregnes. I de tre følgende programlinjene beregnes andre variabler analogt - for D-linjen (rød strekk linje, parameter MODESIGNAL) for null og den første linjen. I neste blokk analyseres korrelasjonen av oppnådde verdier, og EA rapporterer om gjeldende tilstand på hvert kryss. For eksempel, i linjer: det faktum at en rød linje blir krysset av den grønne en oppover, oppdages. Hvis den grønne linjen i den forrige linjen var under den røde (dvs. uttrykket M1 lt S1 er sant), og i den nåværende linjen stiger den grønne linjen over den røde eller deres verdier er like (dvs. uttrykket M0 gt S0 er sant) betyr det at fra den forrige barformasjonen til nåværende tidspunkt krysset den grønne lone den røde en oppover. Dermed er tilstanden beregnet i hvis operatøren er sant, det er derfor kontrollen overføres til operatørlegemet, som et resultat Alert () utføres for å vise den tilsvarende meldingen. I en ekspertrådgiver som er ment for handel i hvis operatørorganet er en handelsfunksjon for å åpne en kjøpsordre, bør det angis. I dette tilfellet vil den analyserte varianten av indikatorlinjens kryssing føre til dannelse av en handelsordre og til slutt til utførelsen av en handelsoperasjon. For varianten når den grønne linjen krysser den røde en nedover, i hvis kroppen en handelsfunksjon for å åpne en Selgordre bør angis. Fig. 108 viser resultatet av callstohastic. mq4-operasjonen. Bruke funksjoner av tekniske indikatorer for å skape handel Ekspertrådgivere og skript er veldig praktisk. Antall tekniske indikatorfunksjoner som brukes i en ekspertrådgiver, er ubegrenset. En handelsstrategiutvikler kan bestemme seg for å definere ulike handelskriterier basert på kombinasjonen av tekniske indikatorverdier. Eksempel på en enkel handel Expert Advisor, handelskriterier som er basert på tekniske indikatorer, analyseres i avsnittet Simple Expert Advisor.

Comments

Popular posts from this blog

Hawkeye Trading System Gjennomgang

Ghana Forex Byrå Priser

New Zealand Dollar Forex Kortet