Geagte mede coders, Im met ernstige probleme met die opwekking van 'n eenvoudige bewegende gemiddelde oor 'n persoonlike wyser. Om meer konkrete wees sy die VHF aanwyser wat kan gevind word deur die skakel te volg: SVOS Multi-aanwyser EA Indien u enige voorstelle / aanbevelings of 'n wenk oor waar ek moet begin, ek sou dankbaar wees. Ek wonder of dit moontlik is om die IMA funksie van die MQL4 gebruik of dit voltooi is nie-sin. Ek sien daarna uit om te hoor van jou. As jy werk met 'n aanduiding probeer beweeg die VHF data om 'n skikking, en gebruik dan iMAonArray. Wees net bewus daarvan dat iMAonArray het 'n paar probleme as dit gebruik word in 'n EA. 'N Moontlike oplossing in 'n EA kan wees om na te boots SMA deur die toevoeging N VHF monsters, dan verdeel som deur N. In die eerste plek - Dankie vir die vinnige en bruikbare antwoord, ek voel dat die maak van 'n toevoeging tot die oorspronklike persoonlike aanwyser deur die byvoeging van N veranderlikes pas my beter op die oomblik. Sy meer van 'n hier en nou oplossing, as 'n groot verandering Im op soek na. As enigiemand anders het voorstelle of kommentaar - asseblief hit me (of eerder hierdie draad). Wil jy dalk 'n bietjie te speel met hierdie filter kode. Die filter het 'n effense terugvoer (herindeling), maar dit kan uitgeskakel word deur die gebruik van 'n toegewyde sommering veranderlike hier: MOPos4 MOPos4 MO2Pos4i2 / SMAfilterMoving Gemiddeld Tegniese aanwyser bewegende gemiddeldes Tegniese aanwyser toon die gemiddelde instrument prys waarde vir 'n sekere tydperk van die tyd. Wanneer 'n mens word bereken dat die bewegende gemiddelde, een gemiddeldes uit die instrument prys vir hierdie tydperk. As die prys veranderinge, sy bewegende gemiddelde óf verhoog, of verminder. Daar is vier verskillende tipes bewegende gemiddeldes: Eenvoudige (ook na verwys as Rekenkundige). Eksponensiële. Reëlmatige en Lineêre Geweegde. Bewegende gemiddeldes kan bereken word vir enige opeenvolgende datastel, insluitend die opening en sluiting pryse, hoogste en laagste pryse, handel volume of enige ander aanwysers. Dit is dikwels die geval wanneer dubbel bewegende gemiddeldes gebruik. Die enigste ding wat waar bewegende gemiddeldes van verskillende tipes divergeer aansienlik van mekaar, is wanneer gewig koëffisiënte, wat die jongste data is opgedra, is anders. In geval praat ons van 'n eenvoudige bewegende gemiddelde, alle pryse van die tydperk ter sprake, is gelyk in waarde. Eksponensiële en Lineêre Geweegde bewegende gemiddeldes heg meer waarde aan die nuutste pryse. Die mees algemene manier om die interpretasie van die prys bewegende gemiddelde is om sy dinamika vergelyk met die prys aksie. Wanneer die instrument prys bo sy bewegende gemiddelde styg, blyk 'n koopsein, indien die prys val onder sy bewegende gemiddelde, wat ons het, is 'n sell sein. Dit handel stelsel, wat gebaseer is op die bewegende gemiddelde, is nie ontwerp om toegang tot die mark te voorsien reg in sy laagste punt, en sy uitgang regs op die piek. Dit maak dit moontlik om op te tree volgens die volgende tendens: te koop kort nadat die pryse die bodem bereik, en om gou te verkoop nadat die pryse hul hoogtepunt bereik het. Bewegende gemiddeldes kan ook toegepas word op aanwysers. Dit is hier waar die interpretasie van aanwyser bewegende gemiddeldes is soortgelyk aan die interpretasie van die prys bewegende gemiddeldes: As die aanwyser styg bo sy bewegende gemiddelde, wat beteken dat die stygende aanwyser beweging is waarskynlik om voort te gaan: as die aanwyser val onder sy bewegende gemiddelde, hierdie beteken dat dit waarskynlik om voort te gaan gaan afwaarts. Hier is die tipes bewegende gemiddeldes op die grafiek: Eenvoudige bewegende gemiddelde (SMA) Eksponensiële bewegende gemiddelde (EMA) Reëlmatige bewegende gemiddelde (SMMA) Lineêre Geweegde bewegende gemiddelde (LWMA) Berekening: Eenvoudige bewegende gemiddelde (SMA) Eenvoudige, met ander woorde, rekenkundige bewegende gemiddelde word bereken deur 'n opsomming van die pryse van sluiting instrument oor 'n sekere aantal enkele periodes (byvoorbeeld 12 uur). Hierdie waarde word dan gedeel deur die getal van sodanige tydperke. Waar: N is die aantal periodes berekening. Eksponensiële bewegende gemiddelde (EMA) eksponensieel stryk bewegende gemiddelde word bereken deur die bewegende gemiddelde van 'n sekere deel van die huidige sluitingsprys op die vorige waarde. Met eksponensieel stryk bewegende gemiddeldes, die jongste pryse is meer werd. P-persent eksponensiële bewegende gemiddelde sal lyk: Waar: BESLOTE (i) die prys van die huidige tydperk sluiting EMO (i-1) eksponensieel bewegende gemiddelde van die vorige tydperk sluiting P die persentasie van die gebruik van die prys waarde. Reëlmatige bewegende gemiddelde (SMMA) Die eerste waarde van hierdie stryk bewegende gemiddelde word bereken as die eenvoudige bewegende gemiddelde (SMA): Die tweede en daaropvolgende bewegende gemiddeldes word bereken volgens die formule: Waar: sum1 is die totale bedrag van die sluiting van pryse vir N tydperke PREVSUM is die reëlmatige som van die vorige bar SMMA1 is die reëlmatige bewegende gemiddelde van die eerste bar SMMA (i) is die reëlmatige bewegende gemiddelde van die huidige bar (behalwe vir die eerste een) sluit (i) is die huidige sluitingsprys N is die smoothing tydperk. Lineêre geweegde bewegende gemiddelde (LWMA) In die geval van geweegde bewegende gemiddelde, die jongste data is meer werd as meer vroeë data. Geweegde bewegende gemiddelde bereken word deur elkeen van die sluitingstyd pryse binne die oorweeg reeks, deur 'n sekere gewig koëffisiënt. Waar: som (i, N) is die totale bedrag van die gewig koëffisiënte. Bronkode Full MQL4 bron van Moving gemiddeldes is beskikbaar in die Kode Base: Moving Gemiddeldes Waarskuwing: Alle regte op hierdie materiaal word voorbehou deur MetaQuotes Software Corp. kopiëring of herdruk van hierdie materiaal in sy geheel of gedeeltelik is prohibited. Creation van Custom Indicators Wanneer skep van 'n handel strategie n ontwikkelaar gesigte dikwels die noodsaaklikheid om grafies te trek in 'n sekuriteits venster 'n sekere afhanklikheid bereken deur 'n gebruiker (programmeerder). Vir hierdie doel MQL4 bied die moontlikheid van die skep van persoonlike aanwysers. Custom aanwyser is 'n aansoek program gekodeer in MQL4 Dit is basies bedoel vir grafiese vertoon van voorlopig bereken dependences. Custom aanwyser Struktuur Noodsaaklikheid van Buffers Die belangrikste beginsel onderliggend aan persoonlike aanwysers is verby waardes van aanwyser skikkings aan 'n kliënt terminale (vir die opstel aanwyser lyne) via ruil buffers. Buffer is 'n geheue gebied met numeriese waardes van 'n aanwyser skikking. MQL4 standaard impliseer die moontlikheid van die opstel van tot agt aanwyser lyne met behulp van 'n persoonlike wyser. Een aanwyser verskeidenheid en een buffer is in ooreenstemming met elke aanwyser lyn gebring. Elke buffer het sy eie indeks. Die indeks van die eerste buffer is 0, van die tweede een - 1, en so aan, die laaste een het die indeks 7. Fig. 115 toon hoe die inligting uit 'n persoonlike wyser via buffers is geslaag om 'n kliënt terminale vir die opstel aanwyser lyne. Fig. 115. slaag waardes van aanwyser skikkings via 'n buffer aan 'n kliënt terminale. Die algemene orde van die bou aanwyser lyne is die volgende: 1. Berekenings word gedoen in 'n persoonlike wyser as gevolg numeriese waardes word om aanwyser verskeidenheid elemente wat. 2. Waardes van aanwyser verskeidenheid elemente via buffers aan 'n kliënt terminale gestuur. 3. Op die basis van waarde skikkings ontvang van buffer 'n kliënt terminale uitstallings aanwyser lyne. Komponente van 'n Custom aanwyser Kom ontleed 'n eenvoudige persoonlike aanwyser wat twee lyne toon - 'n reël is te bou wat gebaseer is op maksimale bar pryse, die tweede een gebruik minimale pryse. Voorbeeld van 'n eenvoudige persoonlike aanwyser userindicator. mq4 Kom ontleed besonderhede die aanwyser dele. In 'n aansoek program wat geskryf is in MQL4 kan jy die opstel van parameters wat die korrekte program diens verskaf deur 'n kliënt terminale aandui. In hierdie voorbeeld is die hoof program deel (sien programstruktuur) bevat verskeie lyne met voorskrifte eiendom. Die eerste richtlijn dui in watter venster van die kliënt terminale die aanwyser lyne moet teken: In MQL4 daar twee variante van die tekens aanwyser lyne: in die hoof sekuriteit venster en in 'n aparte venster. Hoof venster is die venster met 'n sekuriteit grafiek. In hierdie voorbeeld parameter indicatorchartwindow in eiendom gids dui aan dat 'n kliënt terminale aanwyser lyne in die hoof venster moet trek. Die volgende lyn toon die aantal buffers gebruik in die aanwyser: In die ontleed byvoorbeeld twee aanwyser lyne getrek word. Een buffer aan elke buffer, sodat die totale aantal buffers is twee. Die volgende reëls beskryf kleure van die aanwyser lyne. Parameters indicatorcolor1 en indicatorcolor2 kleur omgewing te definieer vir ooreenstemmende buffers - in hierdie geval vir buffers met indekse 0 (Blou) en 1 (Red). Let daarop dat syfers in parameter name indicatorcolor1 en indicatorcolor2 nie indekse buffer. Hierdie syfers is dele van konstante name wat gestel word in ooreenstemming met buffers. Vir elke konstante kleur kan ingestel word volgens die diskresie van 'n gebruiker. In die volgende lyn aanwyser skikkings verklaar: Die aanwyser is bedoel vir die opstel twee aanwyser lyne, sodat ons nodig het om twee globale een-dimensie skikkings, een vir elke lyn verklaar. Name van aanwyser skikkings is tot die gebruiker. In hierdie geval verskeidenheid name Buf0 en Buf1 gebruik word, in ander gevalle ander name gebruik kan word, byvoorbeeld, Regel1, Alfa, Integrale ens Dit is nodig om skikkings te verklaar op 'n globale vlak, omdat verskeidenheid elemente waardes moet bewaar tussen oproepe van die spesiale funksie begin (). Die beskryf persoonlike aanwyser is gebou op die basis van twee spesiale funksies - init () en begin (). Die funksie init () bevat die deel van die kode wat op die program net een keer (sien Vir Spesiale funksies). 'N Baie belangrike aksie uitgevoer in die lyn: Die gebruik van die funksie SetIndexBuffer () 'n noodsaaklike buffer (in hierdie geval met die indeks 0) is met 'n verskeidenheid in korrespondensie sit (in hierdie geval Buf0). Dit beteken vir die bou van die eerste aanwyser lyn 'n kliënt terminale sal data wat in die skikking Buf0 met behulp van die nul buffer daarvoor te aanvaar. Verdere die lyn styl gedefinieer: Vir die nul buffer (0) 'n kliënt terminale moet die volgende teken style gebruik: eenvoudige lyn (DRAWLINE), soliede lyn (STYLESOLID), lyn breedte 2. Die volgende twee reëls bevat instellings vir die tweede reël : So, volgens die kode van die spesiale funksie init () sowel aanwyser lyne sal in die belangrikste sekuriteit venster getrek. Die eerste een sal 'n stewige blou lyn met die breedte 2 wees, die tweede een is 'n rooi stippellyn (STYLEDOT) van 'n gewone breedte. Aanwyser lyne getrek kan word deur ander style asook (sien Styles van aanwyser Lines). Berekening Waardes van aanwyser Skikkings elemente (luister) Waardes van aanwyser skikkings elemente word bereken in die spesiale funksie begin (). Om reg te kan verstaan die inhoud van begin () kode aandag te gee aan die orde van kruip bars. Die artikel Skikkings beskryf in besonderhede die metode van kruip skikkings-tijdreeksen. Volgens hierdie metode bar kruip begin van nul. Die nul bar is 'n huidige nog ongevormde bar. Die naaste bars indeks is 1. Die volgende kinders is 2 en so aan. Soos nuwe bars verskyn in 'n sekuriteit venster, word indekse van reeds gevorm (geskiedenis) bars verander. Die nuwe (huidige, net gevorm, regterkantste) bar kry die nul-indeks, die een aan die linkerkant van hom (wat net ten volle gevorm) kry die indeks 1 en waardes van indekse van alle geskiedenis bars is ook verhoog deur een. Die beskryf metode van kruip bars is die enigste een moontlike vir die hele on-line handel stelsel Meta Trader, en dit word in ag geneem wanneer lyne gebruik van beide tegniese en persoonlike aanwysers. Dit is vroeër gesê dat aanwyser lyne is gebou op die basis van numeriese inligting vervat in aanwyser skikkings. 'N aanduiding verskeidenheid bevat inligting oor die kolletjies koördineer waarop 'n aanduiding lyn getrek word. En die Y koördineer van elke dot is die waarde van 'n aanwyser verskeidenheid element. en X koördineer is die waarde van 'n aanwyser verskeidenheid element indeks. In die ontleed byvoorbeeld die eerste aanwyser lyn getrek word met behulp van maksimum waardes van bars. Fig, 116 shows hierdie aanwyser lyn (blou kleur) in 'n sekuriteits venster, dit is gebou op die basis van die aanwyser verskeidenheid Buf0. Fig. 116. Korrespondensie van koördinate van 'n aanwyser lyn waardes van 'n aanwyser skikking. Indeks waarde van 'n aanwyser skikking is deur 'n kliënt terminale in korrespondensie met 'n bar-indeks - hierdie indekswaardes is gelyk. Dit moet ook in ag neem dat die proses van die bou van aanwyser lyne gaan aan in reële tyd af onder toestande wanneer 'n sekuriteit venster nuwe bars verskyn van tyd tot tyd geneem word. En die hele geskiedenis bars verskuif na links. Om die aanwyser lyn korrek geteken (elke lyn dot bo sy bar) dit moet ook saam geskuif met bars het. Daar is dus behoefte (tegniese behoefte) weer kruip 'n aanduiding skikking. Die fundamentele verskil van 'n aanwyser verskeidenheid van 'n gewone skikking is die volgende: Op die oomblik wanneer 'n nuwe bar is geskep, word indekswaardes van aanwyser verskeidenheid elemente outomaties verander word deur die kliënt terminale, naamlik - waarde van elke aanwyser verskeidenheid indeks het met een en die aanwyser verskeidenheid grootte verhoog deur een element (met 'n nul-indeks). Byvoorbeeld, die nul bar in Fig. 116 (tydraamwerk H1) het die opening tyd 06:00. Op 07:00 sal 'n nuwe bar verskyn in die venster sekuriteit. Die bar oopgemaak by 06:00 sal outomaties die indeks 1. Om die aanwyser lyn korrek op hierdie bar getrek het, sal die kliënt terminale die indeks van die aanwyser verskeidenheid element wat ooreenstem met die bar oopgemaak by 06:00 verander. In die tabel in Fig. 116 hierdie element is geskryf in die eerste reël. Saam met dié indekse van alle verskeidenheid elemente sal verhoog word deur die kliënt terminale vir een. 'N indeks van die skikking element wat ooreenstem met die bar op 06:00 oop sal die waarde 1 te kry (voor dat dit gelyk is aan 0 is). Die aanwyser skikking groter een element geword. Die indeks van 'n nuwe bygevoeg element sal gelyk wees aan 0 wees, sal die waarde van hierdie element 'n nuwe waarde weerspieël koördineer van die aanwyser lyn op 'n nul bar wees. Hierdie waarde word bereken in die spesiale funksie begin () op elke blok. Berekeninge in die spesiale funksie begin () moet gedoen word sodat geen ekstra aksies is uitgevoer. Voordat die aanwyser op 'n grafiek aangebring word, beteken dit nie enige aanduiding lyne reflekteer (omdat waardes van aanwyser skikkings nog gedefinieer). Dis hoekom die eerste begin van die spesiale funksie begin () aanwyser verskeidenheid waardes moet bereken word vir alle bars, waarop die aanwyser lyn getrek moet word. In die ontleed voorbeeld hiervan is almal teenwoordig op 'n grafiek bars (die aanvanklike berekeninge kan nie vir alle beskikbare bars gedoen, maar vir 'n paar laaste deel van die geskiedenis dit word beskryf in verdere voorbeelde). Ar al verder begin van die spesiale funksie begin () is daar geen behoefte om waardes van aanwyser verskeidenheid weer bereken vir alle bars. Hierdie waardes is reeds bereken en is vervat in die aanwyser skikking. Dit is nodig om die huidige waarde van die aanwyser te bereken net op elke nuwe blok van die bar nul. Vir die implementering van die beskryf tegnologie is daar 'n baie nuttige standaard funksie in MQL4 - IndicatorCounted (). Funksioneer IndicatorCounted () Hierdie funksie gee terug Die nommer van kolomme wat nie verander het sedert die laaste aanwyser oproep. As die aanwyser het nooit 'n grafiek is aangeheg, by die eerste begin () uitvoering van die waarde van Countedbars sal gelyk wees aan nul: Dit beteken die aanwyser verskeidenheid geen element met vroeër gedefinieerde waarde bevat, wat is die rede waarom die hele aanwyser verskeidenheid moet bereken word van begin tot einde. Die aanwyser verskeidenheid word bereken uit die oudste kroeg aan die een nul. Indeks van die oudste kroeg, vanaf wat berekeninge moet begin, word bereken deur die volgende manier: Veronderstel op die oomblik van die bevestiging van die aanwyser daar 300 bars in 'n grafiek venster. Dit is die waarde van die gedefinieerde veranderlike Drinkplekke. Soos vroeër gedefinieer, Countedbars is gelyk aan 0. Dus, as 'n resultaat wat ons kry dat ek indeks van die eerste ontelbare bar (die jongste een, vanaf wat berekeninge gedoen moet word) is gelyk aan 299. Alle waardes van aanwyser verskeidenheid elemente bereken in die lus, terwyl (): terwyl ek is binne die omvang van die eerste ontelbare bar (299) om die huidige een (0) inklusief, is waardes van aanwyser verskeidenheid elemente bereken vir beide aanwyser lyne. Let ontbrekende waardes van aanwyser verskeidenheid elemente word bereken tydens een (die eerste) begin van die spesiale funksie begin (). Tydens berekeninge onthou die kliënt terminale elemente, waarvoor waardes is bereken. Die laaste iterasie in terwyl () uitgevoer word wanneer ek gelyk is aan 0, is maw waardes van aanwyser skikkings bereken vir die bar nul. Wanneer die lus verby is, die spesiale funksie begin () eindig die uitvoering daarvan en beheer word geslaag om die kliënt terminale. Die kliënt terminale op sy beurt sal gelykop (in hierdie geval twee) aanwyser lyne in ooreenstemming met die berekende waardes van verskeidenheid elemente. Op die volgende blok begin () sal begin deur die kliënt terminale weer. Verdere optrede sal afhang van die situasie (sal ons voortgaan ontleding van die voorbeeld vir 300 bars). Variant 1. 'n nuwe blok kom tydens die vorming van die huidige nul bar (die mees algemene situasie). Fig. 117 toon twee bosluise deur die terminaal by oomblikke van tyd t 1 en t 2. ontvang Die ontleed situasie sal dieselfde vir beide bosluise wees. Kom ons trek die uitvoering van begin () wat van stapel gestuur is op die oomblik t 2. Tydens die uitvoering van die funksie begin () die volgende reël sal uitgevoer word: IndicatorCounted () sal die waarde 299, dit wil sê terugkeer sedert die laaste begin () oproep 299 vorige bars is nie verander nie. As gevolg hiervan het ek indekswaarde gelyk aan 0 (300-299-1) sal wees: Dit beteken in die volgende terwyl () lus om die waardes van verskeidenheid elemente met die nul-indeks word bereken. Met ander woorde, sal die nuwe posisie van 'n aanwyser lyn op die bar nul bereken. Wanneer die siklus klaar is, begin () sal ophou uitvoering en sal beheer relevant tot die kliënt terminale slaag. Variant 2. 'n nuwe blok is die eerste blok van 'n nul bar (gebeur van tyd tot tyd). In hierdie geval is die feit van die voorkoms van 'n nuwe bar is belangrik. Voordat beheer relevant tot die spesiale funksie begin is verby (), kliënt terminale sal weer trek al bars teenwoordig is in die venster sekuriteit en weer kruip al verklaar aanwyser skikkings (stel in ooreenstemming met buffers). Naas, sal die kliënt terminale onthou dat daar reeds 301 bars, nie 300 in 'n grafiek venster. Fig. 118 bevat situasie wanneer die laaste blok van die vorige bar (op die oomblik t 2) die funksie begin () is suksesvol begin en uitgevoer. Dis hoekom, al word julle nou die eerste bar (met indeks 1) klaar op die oomblik t 2 is bereken deur die aanwyser, funksioneer IndicatorCounted () sal waarde wat op die vorige bar terugkeer. dws 299: In die volgende lyn indeks Ek sal bereken word, in hierdie geval vir die eerste blok van 'n nuwe bar dit gelyk wees om 1 (301-299-1): Dit beteken berekening van aanwyser verskeidenheid waardes in terwyl () lus by die verskyning van 'n nuwe bar sal uitgevoer word vir beide die laaste bar en vir die nuwe nul bar. 'N bietjie vroeër tydens die re-indexatie van aanwyser skikkings die kliënt terminale verhoog groottes van hierdie skikkings. Waardes van verskeidenheid elemente met 'n nul indekse is nie gedefinieer voor die berekeninge in die lus. Tydens berekeninge in die lus kry hierdie elemente 'n paar waardes. Wanneer berekeninge in aanvang () is verby, is beheer terug na die kliënt terminale. Daarna het die kliënt terminale aanwyser lyne op die nul bar gebaseer op net berekende waardes van verskeidenheid elemente met 'n nul indekse sal trek. Variant 3. 'n nuwe blok is die eerste blok van 'n nuwe nul bar, maar die laaste maar een regmerkie nie verwerk (seldsame geval). Fig. 119 toon die situasie wanneer begin () is van stapel gestuur op die eerste blok van 'n nuwe bar op die oomblik t 5. Vorige keer funksie begin op die oomblik t 2. Merk dat die terminale op die oomblik t 3 kom (rooi pyl ) is nie verwerk deur die aanwyser. Dit het gebeur as gevolg begin () uitvoering tyd t 2 - t 4 is groter as die interval tussen bosluise t 2 - t 3. Hierdie feit sal deur die kliënt terminale opgespoor tydens die uitvoering van die begin () van stapel gestuur op die oomblik t 5. Gedurende berekeninge in die lyn: IndicatorCounted () sal die waarde 299 terug te keer (). Hierdie waarde is waar - vanaf die oomblik van die laaste aanwyser oproep is 299 bars nie verander na (nou reeds) 301. Dit is die rede waarom die berekende indeks van die eerste (linker) bar, waaruit berekeninge van verskeidenheid element waardes moet begin, sal gelyk wees aan 1 (301-299-1) wees: dit beteken tydens terwyl () uitvoering twee iterasies sal uitgevoer word. Gedurende die eerste een waardes van verskeidenheid elemente met die indeks i 1 sal bereken word, dit wil sê Buf01 en Buf11. Nie, deur die oomblik berekeninge begin, bars en aanwyser skikkings is reeds weer kruip deur die kliënt terminale (omdat 'n nuwe bar begin, tussen begin van die spesiale funksie begin ()). Dit is waarom berekeninge vir elemente van skikkings met indeks 1 sal bereken word op grond van verskeidenheid-tijdreeksen (maksimum en minimum waardes van 'n bar prys) ook met die indeks 1: Gedurende die tweede iterasie van terwyl () waardes vir elemente met 'n nul indekse, dit wil sê vir die bar nul, word bereken op die basis van die vorige bekende waardes van skikkings-tijdreeksen. Die gebruik van die beskryf tegnologie vir die berekening van persoonlike aanwysers toelaat, eerste, berekening van waardes van alle aanwyser verskeidenheid elemente, ongeag die spesifieke aard van bosluis geskiedenis waarborg, en tweedens, om berekeninge uit te voer net vir ontelbare bars, dws gebruik ekonomies berekening hulpbronne . Nie, is 'n kroeg beskou ontelbare as berekening van element waardes van 'n aanwyser skikkings ten minste vir 'n laaste blok van die kroeg nie uitgevoer word. n dik blou lyn gebou op bar maksimums en 'n stippellyn rooi lyn gebou op sy minimums (Fig 120.) - Begin die gewoonte aanwyser userindicator. mq4 in 'n grafiek venster sal jy twee lyne sien. Daar moet kennis geneem, dat 'n mens het 'n persoonlike wyser, wyser lyne waarvan saamval met die lyne van 'n analoog tegniese aanwyser. Dit kan maklik gedoen word as as berekening formules in die persoonlike aanwyser, dieselfde formules soos in die tegniese aanwyser gebruik. Om dit te illustreer kan verbeter die program kode in die vorige voorbeeld ontleed. Laat die aanwyser lyne op gemiddelde waardes van maksimums en minimums van verskeie laaste bars trek. Dit is maklik om te nodige berekeninge te doen: ons moet net gemiddelde waardes van skikkings-tijdreeksen elemente vind. Byvoorbeeld, waarde van 'n aanwyser verskeidenheid met die indeks 3 (dws aanwyser lyn te koördineer vir die derde bar) aan die hand van die afgelope vyf maksimums bereken die volgende manier: Buf03 (High3 High4 High5 High6 High7) / 5 Analogiese berekeninge kan wees uitgevoer word vir 'n aanduiding lyne gebou op minimums. Voorbeeld van 'n eenvoudige persoonlike aanwyser averagevalue. mq4. Aanwyser lyne gebou op gemiddelde minimale en maksimum waardes van N bars. In hierdie voorbeeld is daar 'n eksterne veranderlike AverBars. Die gebruik van hierdie veranderlike 'n gebruiker kan die aantal bars, waarvoor 'n gemiddelde waarde word bereken aan te dui. In die begin () hierdie waarde word gebruik vir die berekening van 'n gemiddelde waarde. In die loop van die som van maksimale en minimale waardes is bereken vir die aantal bars wat ooreenstem met die waarde van die veranderlike AverBars. In die volgende twee programme lyne waardes van aanwyser verskeidenheid elemente word bereken vir aanwyser lyne wat ooreenstem met 'n minimale en maksimum waardes. Die gemiddelde metode wat hier gebruik word ook aansoek gedoen om berekeninge in die tegniese aanwyser bewegende gemiddelde. As ons heg die ontleed persoonlike aanwyser averagevalue. mq4 en die tegniese aanwyser bewegende gemiddelde, sal ons sien drie aanwyser lyne. As dieselfde tydperk van gemiddelde opgestel vir beide aanwysers, sal bewegende gemiddelde lyn saamval met een van die persoonlike aanwyser lyne (vir hierdie doel parameters in Fig beskryf. 121 moet gespesifiseer in die tegniese aanwyser instellings). Fig. 121. Samevallende lyne van 'n tegniese aanwyser en 'n persoonlike wyser (rooi lyn). Dus, met behulp van tegniese aanwyser n gebruiker kan die weerspieëling van enige reëlmatighede nodige praktiese werk op te rig. Custom aanwyser Options Drawing aanwyser Lines in Afsonderlike Windows MQL4 bied 'n groot diens vir die bou van persoonlike aanwysers wat maak gebruik van hulle baie gerieflik. In die besonder, kan aanwyser lyne in 'n aparte venster getrek. Dit is handig wanneer absolute waardes van die aanwyser lyn amplitude is aansienlik kleiner (of groter) as sekuriteit pryse. Byvoorbeeld, as ons belangstel in die verskil tussen gemiddelde waardes van bar maksimums en minimums in 'n sekere historiese interval is, na gelang van tydraamwerk hierdie waarde sal gelyk wees aan ongeveer 0-50 punte (byvoorbeeld, vir M15). Dit is nie moeilik om 'n aanduiding lyn te bou, maar in 'n sekuriteits venster hierdie lyn in die reeks 0 getrek - 50 punte van 'n sekuriteit prys, maw aansienlik laer as die grafiek area wat op die skerm. Dit is baie ongerieflik. Om aanwyser lyne in 'n aparte venster (wat in die onderste deel van 'n sekuriteit venster) trek, in die richtlijn eiendom (op die program begin) parameter indicatorseparatewindow moet gespesifiseer: Op die oomblik wanneer so 'n aanduiding van 'n sekuriteit venster is aangeheg , kliënt terminale skep 'n aparte venster onder 'n grafiek, waarin aanwyser lyne bereken in die aanwyser sal getrek word. Afhangende van kleur instellings en vorme van aanwyser lyne sal hulle in die een of ander styl getrek. Beperking Berekening Geskiedenis In die meeste gevalle aanwyser reëls bevat nuttige inligting net in die mees onlangse geskiedenis. Die deel van aanwyser lyne gebou op ou bars (byvoorbeeld 1 maand oud minuut tydraamwerk) kan skaars nuttig vir die maak van handel besluite beskou. Behalwe, indien daar is 'n baie bars in 'n grafiek venster, tyd belê in die berekening en tekening van aanwyser lyne is onredelik groot. Dit kan van kritieke belang in program debugging wees, wanneer 'n program dikwels word saamgestel en dan begin. Dit is waarom dit nodig is om berekeninge nie uit te voer vir die hele geskiedenis, maar vir die beperkte deel van die mees onlangse bar geskiedenis. Vir hierdie doel 'n eksterne veranderlike geskiedenis word in die volgende program. Waarde van hierdie veranderlike in ag geneem word by die berekening van die indeks van die eerste (linker) bar, vanaf watter elemente van aanwyser skikkings moet bereken word. Verdere berekeninge in terwyl () lus sal gedoen word vir die aantal onlangse geskiedenis bars nie groter as Geskiedenis waarde. Let die ontleed metode van die beperking van 'n berekening geskiedenis kommer net die deel van berekeninge wat uitgevoer word in die eerste begin van die spesiale funksie begin (). Verdere, wanneer nuwe bars verskyn, nuwe dele van aanwyser lyne sal bygevoeg word in die regte deel, terwyl die beeld in die linker deel sal bewaar word. So het die aanwyser lyn lengte sal verhoog word gedurende die hele aanwyser werking tyd. Gemeenskaplike waarde van Geskiedenis parameter word beskou as ongeveer 5000 bars. Voorbeeld van 'n eenvoudige persoonlike aanwyser separatewindow. mq4. Aanwyser lyne getrek word in 'n aparte venster. Soortgelyke berekening van 'n aanwyser lyn is uitgevoer in die tegniese aanwyser AverageTrue Range. Fig. 122 toon 'n aanduiding lyn gebou deur die persoonlike aanwyser separatewindow. mq4 in 'n aparte venster en 'n aanduiding lyn gebou deur ATR in 'n ander venster. In hierdie geval lyne is ten volle identies omdat tydperk van gemiddelde is dieselfde vir beide aanwysers - 5. As hierdie parameter is verander in enige van die aanwysers, sal die ooreenstemmende aanwyser lyn ook verander. Fig. 122. tekens van 'n persoonlike wyser lyn in 'n aparte venster. Identiese lyne van 'n tegniese aanwyser (ATR) en 'n persoonlike wyser (separatewindow. mq4). Dit is ook duidelik dat persoonlike aanwyser lyn nie gebou vir die hele skerm breedte, maar vir 50 jongste bars soos in die eksterne veranderlike Geskiedenis. As 'n handelaar moet groter geskiedenis interval gebruik, kan waarde van die eksterne veranderlike maklik verander via die venster persoonlike aanwyser instellings. Fig. 123 toon 'n sekuriteit venster, waarin die aanwyser lyn ons in 'n ander styl getrek - as 'n histogram. Vir kry so 'n resultaat 'n reël verander in die program kode separatewindow. mq4 - is ander lyn style aangedui: Alle ander kode dele is onveranderd. Fig. 123. Tekening persoonlike aanwyser lyn in 'n aparte venster (histogram). Gelykvormigheid van tekeninge van 'n tegniese aanwyser (ATR) en 'n persoonlike wyser (separatewindow. mq4). Verskuiwing aanwyser Lines vertikaal en horisontaal In sommige gevalle is dit nodig om 'n aanduiding lyn verskuif. Dit kan maklik gedoen word deur MQL4 middel. Kom ons ontleed 'n voorbeeld, in watter posisie van aanwyser lyne in 'n sekuriteits venster word bereken in ooreenstemming met waardes wat deur 'n gebruiker. Voorbeeld van 'n persoonlike wyser displacement. mq4. Verskuiwing aanwyser lyne horisontaal en vertikaal. Vir die aanpassing van lyne skuif in 'n grafiek, is daar twee eksterne veranderlikes - LeftRight vir horisontale verskuiwing van al die lyne en UpDown vir die verskuiwing twee stippellyne vertikaal. Die algoritme wat gebruik word vir die berekening van waardes van ooreenstemmende verskeidenheid elemente is gebaseer op 'n baie eenvoudige reëls: vir die verskuiwing van 'n lyn horisontaal, die berekende waarde toeken aan 'n verskeidenheid element, die indeks van wat groter deur LeftRight (vir die verskuiwing na regs en minder vir die verskuiwing na regs) as die indeks van 'n kroeg, waarvoor berekeninge uitgevoer word vir die verskuiwing van 'n lyn vertikaal, moet UpDownPoint bygevoeg (vir die verskuiwing opwaarts of afbreuk vir afwaarts verskuif) aan elke waarde van 'n aanwyser verskeidenheid wat kenmerkend aanvanklike lyn posisie in die ontleed byvoorbeeld indekse bereken word in die lyn: Hier is ek is die indeks van 'n kroeg, waarvoor berekeninge uitgevoer word, k is 'n indeks van 'n aanwyser verskeidenheid element. Rooi aanwyser lyn vertoon deur die kliënt terminale gebaseer op die aanwyser verskeidenheid Line0 is verskuif na die linker 5 bars (volgens persoonlike voorkeure, sien Fig. 124) van die aanvanklike lyn. In hierdie geval is die aanvanklike lyn is 'n bewegende gemiddelde met die tydperk van gelyke gemiddeld tot 5 die formule van MA berekening is (HighiLowi) / 2. In hierdie voorbeeld is die posisie van die rooi lyn is die basis vir die berekening van aanwyser verskeidenheid waardes vir twee ander lyne, dit wil sê hul posisie op die kaart. Stippellyne word bereken op hierdie manier: Gebruik van indeks k elemente van al aanwyser skikkings toelaat om berekeninge te doen vir elemente van skikkings Regel1, Regel2 op dieselfde bar as wat gebruik word vir die berekening van waardes van die ooreenstemmende basiese verskeidenheid Line0. As gevolg hiervan stippellyne verskuif met betrekking tot die rooi lyn van die geld in die venster aanwyser instellings waarde, in hierdie geval met 30 punte (Fig 124.). Fig. 124. Rooi aanwyser lyn na links geskuif met 5 tralies. Stippellyn aanwyser lyne relatief tot die rooi lyn verskuif met 30 punte. Beperkings van Custom Indicators Daar is 'n paar beperkinge in MQL4 wat in ag geneem in die ontwikkeling van persoonlike aanwysers geneem moet word. Daar is 'n groep van funksies wat gebruik kan word net in persoonlike aanwysers en kan nie gebruik word in Expert Adviseurs en skrifte: IndicatorBuffers (), IndicatorCounted (), IndicatorDigits (), IndicatorShortName (), SetIndexArrow (), SetIndexBuffer (), SetIndexDrawBegin ( ), SetIndexEmptyValue (), SetIndexLabel (), SetIndexShift (), SetIndexStyle (), SetLevelStyle (), SetLevelValue (). Aan die ander kant, kan handel funksies nie gebruik word in aanwysers: OrderSend (), OrderClose (), OrderCloseBy (), OrderDelete () en OrderModify (). Dit is omdat aanwysers bedryf in die koppelvlak vloei (in teenstelling met Expert Adviseurs en skrifte wat werk in hul eie vloei). Dit is ook die rede waarom algoritmes gebaseer op herhaling nie gebruik kan word in persoonlike aanwysers. Begin van 'n persoonlike aanwyser wat 'n oneindige lus (in terme van die werklike uitvoering tyd) kan lei tot die kliënt terminale hang met verdere noodsaaklikheid om 'n rekenaar herlaai. Die algemene vergelykende eienskappe van deskundige adviseurs, draaiboeke en aanwysers is vervat in Tabel 2 gekombineer gebruik van programme Dit is vroeër gesê dat volgens MQL4 reëls handel funksies kan nie gebruik word in persoonlike aanwysers, dit is hoekom vir outomatiese handel Expert Adviseurs of skrifte moet wees gebruik. Maar die hulpbronne spaar tegnologie wat gebruik word vir berekeninge in aanwysers (sien skepping van persoonlike Indicators) word algemeen gebruik wanneer die skep van handel programme. In die meeste gevalle in persoonlike aanwysers kan 'n mens doeltreffend waardes van aanwyser verskeidenheid elemente wat nodig is vir die vorming van die saak kriteria en maak van handel besluite in Expert Adviseurs bereken. Berekeninge uitgevoer in persoonlike aanwysers tegnies kan ook in Expert Adviseurs geïmplementeer, maar dit kan lei tot die duplisering van berekeninge in verskillende toepassingsprogramme en onredelik vermorsing van hulpbronne, en in sommige gevalle (wanneer 'n lang hulpbron-intensiewe berekeninge gedoen) - om 'n handelsmerk besluit laat maak. In die gevalle waar dit nodig is om die berekening resultate van persoonlike aanwysers te gebruik in 'n kundige adviseur of script, kan funksioneer iCustom () gebruik word. Funksie iCustom () Berekening van die gegewe persoonlike aanwyser. Die persoonlike aanwyser moet opgestel (.ex4 lêer) en is geleë in die gids Terminalcatalogueexpertsindicators. simbool - simbool naam van 'n sekuriteit, op die data wat 'n aanduiding sal bereken word. NULL dui die huidige simbool. tydraamwerk - tydperk. Kan een van grafiek tydperke. 0 beteken die tydperk van die huidige grafiek. naam - naam van die persoonlike aanwyser. . - Lys van parameters (indien nodig). Geslaag parameters moet ooreenstem met die einde van verklaar en die tipe eksterne veranderlikes van 'n persoonlike wyser. modus - indeks van 'n aanwyser lyn. Kan wees van - tot 7 en moet ooreenstem met die indeks wat gebruik word deur enige van SetIndexBar funksies. skuif - indeks van verkry waarde van 'n aanwyser buffer (skuif terug in vergelyking met 'n huidige bar met 'n gespesifiseerde aantal bars). Kom ons kyk hoe iCustom () gebruik kan word in die praktyk. Laat ons die volgende probleem op te los: Probleem 30. 'n handel strategie is gebaseer op die data van persoonlike aanwyser rocseparate. mq4. As ROC lyn in die huidige tydperk (oranje) kruisies 'n reëlmatige gemiddelde koers lyn (dik rooi) onder 'n sekere vlak van onder na bo, dit is 'n toepaslike maatstaf te koop (oop Koop en naby verkoop). As daar staan teenoor toestande, van mening dat dit 'n relevante maatstaf om te verkoop. Skryf 'n kode implementering van hierdie strategie. Die beginsel van konstruksie van die persoonlike aanwyser rocseparate. mq4 beskryf in besonderhede in die artikel Custom aanwyser ROC (Prys tempo van verandering). Fig. 131 illustreer twee punte, waarin ROC lyn in die huidige tydperk (M15) kruisies die reëlmatige tempo van verandering lyn. In punt A gaan oor die oranje lyn die rooi een van onder na bo en die plek van die eerste kruising is onder die vlak -0,001. In punt B gaan oor die oranje lyn die rooi een in die afwaartse rigting en die kruis punt bo die vlak 0.001. Die feit van hierdie kruising moet opgespoor word in die Expert Adviseur en as 'n sein te koop in ag geneem word (punt A - naby te verkoop en oop Koop) of te verkoop (punt B - naby Koop en oop Sell). Fig. 131. Crossing van persoonlike aanwyser lyne word beskou as 'n handelspos maatstaf. Wanneer die oplossing van sulke probleme met bereidwilligheid Expert adviseur gebruik kan word, te verander aan die orde van die berekening handel kriteria daarin. 'N Mens moet in gedagte hou: die piering sein gegenereer wanneer die kolomgrafiek sy rigting omgekeer uit die afwaartse om boontoe. Die tweede kolom is laer as die eerste een en is rooi gekleur. Die derde kolom is hoër as die tweede en is groen gekleur. vir die piering sein te genereer moet die kolomgrafiek ten minste drie kolomme het. Hou in gedagte, dat alle awesome Ossillator kolomme oor die lyn nul moet wees vir die piering sein te gebruik. Zero lyn kruising van die sein te koop gegenereer wanneer die kolomgrafiek gaan uit die gebied van negatiewe waardes aan dié van positiewe. Dit kom wanneer die kolomgrafiek oor die lyn nul. Met betrekking tot hierdie sein, want hierdie sein te genereer, wat nodig is die eerste kolom is om te wees onder die lyn nul slegs twee kolomme is, die tweede een is om dit (die oorgang van 'n negatiewe waarde tot 'n positiewe een) gelyktydige generasie van seine oor te steek te koop en te verkoop is onmoontlik. Twin Peaks Dit is die enigste sein te koop wat gegenereer kan word wanneer die kolomgrafiek waardes is onder die lyn nul. Met betrekking tot hierdie sein, asseblief, hou in gedagte: 'n ander deur gevolg is en lyn nul die onderstaande waarin minimum laagste (die af te wys piek n het jy toe gegenereer sein die af-wys) piek wat is 'n bietjie hoër ( 'n negatiewe figuur met 'n mindere absolute waarde, wat is dus nader aan die lyn nul), as die vorige af-soek piek. die kolomgrafiek is om te wees onder die lyn nul tussen die twee pieke. As die kolomgrafiek oor die lyn nul in die gedeelte tussen die pieke, die sein na die geval funksie te koop. Dit sal egter 'n ander sein te koop gegenereer nul lyn kruising. elke nuwe hoogtepunt van die kolomgrafiek is om hoër ( 'n negatiewe getal in 'n mindere absolute waarde wat nader aan die lyn nul) as die vorige hoogtepunt wees. As 'n bykomende hoër piek gevorm (dit is nader aan die lyn nul) en die kolomgrafiek het nie oor die lyn nul, sal 'n bykomende sein te koop gegenereer. Seine na awesome Ossillator seine te verkoop om te verkoop is identies aan die seine te koop. Die piering sein omgekeer en is onder vriespunt. Zero lyn kruising is op die afname die eerste kolom van dit oor die nul, die tweede een is daaronder. Die tweeling pieke sein is hoër as die lyn nul en is ook omgekeer. Berekening: AO is 'n 34-tydperk eenvoudige bewegende gemiddelde, gestip deur die sentrale punte van die bars (HT) / 2, en afgetrek van die 5-tydperk eenvoudige bewegende gemiddelde, weergegee in die sentrale punte van die bars (HT) / 2 .
No comments:
Post a Comment