Tipuri de variabile - Variabile - tutorial pe MQL4 - manual pe MQL4

Un program de aplicație în MQL4 poate conține zeci sau sute de variabile. O proprietate foarte importantă a oricărei variabile este abilitatea de a folosi programul din valoarea sa. Limitarea o astfel de oportunitate este direct legată de domeniul de aplicare al variabilelor.







Domeniul variabilei - un loc în program în cazul în care variabila este disponibil. Fiecare variabilă are domeniul său de aplicare. Conform domeniului de aplicare, MQL4 există două tipuri de variabile: locale și globale.

Variabilele locale și globale

variabilă locală - o variabilă declarată într-o funcție. Domeniul de aplicare al variabilelor locale este corpul funcției în care este declarată variabila. O variabilă locală poate fi inițializat cu constanta sau expresie corespunzătoare tipului acestuia.

Global variabilă - o variabilă declarată în afara tuturor funcțiilor. Domeniul de aplicare al variabilelor globale este întregul program. O variabilă globală nu este localizată la orice nivel. O variabilă globală poate fi inițializat cu doar o constantă (dar nu și expresia) corespunzătoare. Variabilele globale sunt inițializate doar o singură dată, înainte de executarea funcțiilor speciale.

În cazul în care programul de control se află în interiorul unei funcții, valorile variabilelor locale declarate în celelalte funcții nu sunt disponibile. Valoarea oricare dintre variabila globală este disponibilă, precum și orice funcții speciale personalizate. Să considerăm un exemplu simplu.

Problema 22. Crearea unui program care contează căpușe.

Algoritmi pentru rezolvarea problemelor 22 folosind o variabilă globală (countticks.mq4).

Acest program utilizează doar o singură variabilă Tick globală. Este pentru că la nivel mondial a declarat în afara început definiția unei funcții (). Acest lucru înseamnă că, de la tick pentru a bifa valoarea acestei variabile vor fi stocate. Luați în considerare detaliile executării programului.

În funcțiile speciale, am luat în considerare criteriile pe baza cărora rula pe executarea funcțiilor speciale. Să ne amintim pe scurt că începutul funcția specială () în Expert Advisors a început de către un terminal client atunci când un nou tick. La momentul atașamentului de experți într-o fereastră de securitate, următoarele evenimente:

2. Controlul este ținut în veniturile client terminal la tec.

3. primite: capusa. Controlul este trecut la functia start specială ().

3.1. Ca parte a executării start funcții speciale (), se trece la operatorul:

Ca urmare a executării operatorului Valoare Tick este crescut cu 1 (unitate de ansamblu).

3.2. Controlul este trecut la operatorul:

Executarea functie standard Comentariu () va afișa alerta:

tick Introdus № 1

3.3. Controlul este trecut la operatorul:

Ca rezultat al execuției sale de start () anunță treaba, se trece la terminalul client. Variabila globală continuă să existe, valoarea acesteia fiind egală cu 1.

Evenimente ulterioare se va repeta de la pasul 2. Variabila Tick va participa din nou în calcul, dar pe a doua capuse, atunci când rula pe executarea functia start (), valoarea sa este de 1, astfel încât rezultatul executării operatorului:

va fi noua valoare a căpușei variabilă - va crește cu 1 și va fi acum egal cu 2 și executarea Comentariu () funcția va afișa alerta:

tick Introdus № 2

Astfel, variabila Tick va crește cu 1 la fiecare pornire a funcției speciale start (), adică la fiecare tick. Solutia acestor probleme este posibilă numai în cazul utilizării variabilelor care păstrează valorile lor după ieșirea funcției (în acest caz, se folosește variabila globală). Folosit în același scop variabile locale inutile: variabila locală își pierde valoarea după executarea funcției în care este declarată.

Acest lucru este foarte ușor de a face începe un consultant expert, în care variabila Tick este deschis ca o variabilă locală (de exemplu, programul conține o eroare algoritmică):

În ceea ce privește erorile de sintaxă din codul nr. Acest program poate fi compilat cu succes și a lansat pentru execuție. Și va funcționa, dar tot timpul va spune același rezultat:

tick Introdus № 1

Și este destul de natural, deoarece variabila Tick va fi inițializat la zero la începutul start funcții speciale () de fiecare dată când începe. creșterea în continuare a acesteia de către unul va duce doar la faptul că, la momentul valorii de alertă Tick va fi întotdeauna egal cu 1.

variabile statice

Mai jos este o soluție de 22 Problema folosind o variabilă statică (expert staticvar.mq4):

Variabilele statice sunt inițializate doar o singură dată. Fiecare variabilă statică poate fi inițializat printr-o constantă corespunzătoare (în opoziție cu o variabilă locală simplu care poate fi inițializat prin orice expresie). În cazul în care nu initializare explicita, variabila statica este inițializat la zero. Variabilele statice sunt stocate într-o memorie permanentă, valorile lor nu sunt pierdute atunci când ieșirile funcției. Cu toate acestea, variabilele statice au limite tipice ale variabilelor locale - Domeniul de vizibilitate rămâne funcție variabilă statică în care este declarată variabila, spre deosebire de variabilele globale, a căror valoare este disponibil de la orice program. Este ușor de observat că programele countticks.mq4 și staticvar.mq4 dau același rezultat.







Toate matricele sunt inițial statice, adică au un fel de statică, chiar dacă inițializarea nu este menționat în mod explicit (a se vedea. Arrays).

variabilele externe

Variabilele externe sunt specificate în partea capului de program, și anume înainte de orice funcție în care există un apel în funcție externă. Utilizarea variabilelor externe este foarte convenabil, în cazul în care din când în când este necesar pentru a rula programul pentru a rula cu valori diferite ale variabilelor.

Problema 23. Scrieți un program în cazul în care se realizează următoarele condiții: În cazul în care prețul a atins un anumit nivel și a coborât sub acest nivel în n puncte, apoi o dată raportează faptul comerciantului.

Este clar că problema necesită modificarea setărilor, pentru că astăzi prețurile nu sunt același ieri, și mâine nu va fi ceea ce sunt astăzi. Pentru a putea modifica setările din externvar.mq4 expert utilizate variabile externe:

În acest program, variabilele externe sunt stabilite în linii:

Valorile variabilelor externe sunt disponibile din fereastra de proprietăți ale programului. Valoarea acestor variabile este faptul că acestea pot fi schimbate în orice moment - și în etapa de la înscrierea în program în fereastra de securitate și în cursul programului.

Tipuri de variabile - Variabile - tutorial pe MQL4 - manual pe MQL4

Fig. 54. Fereastra de proprietăți a programului; Aici puteți modifica valorile variabilelor.

La momentul aderării programului într-o diagramă, valorile variabilelor vor fi specificate în fereastra Preferințe după cum se specifică în codul de program. Utilizatorul poate, la discreția sa, de a modifica aceste valori. Din momentul în care utilizatorul a făcut clic pe butonul OK din panoul Setări, programul va fi pornit de către terminalul client. În acest caz, valorile inițiale ale variabilelor externe vor fi așa cum au fost specificate de către utilizator. În timpul programului valorile acestor variabile pot fi schimbate prin rularea programului.

În cazul în care un utilizator trebuie să se schimbe valorile variabilelor externe în timpul programului, aveți nevoie pentru a deschide fereastra de setări și de a face modificări. Este important să ne amintim că bara de instrumente de proprietăți de program pot fi afișate numai în perioada când programul (Expert Advisor sau un indicator) este în așteptare pentru un nou capusa, și anume nici una dintre caracteristicile speciale nu vor fi executate. În timpul executării tollbar program nu poate fi. Prin urmare, în cazul în care programul este conceput în așa fel încât timpul lung (câteva secunde sau zeci de secunde), utilizatorul poate experimenta dificultăți în a accesa fereastra de proprietăți ale programului. Valorile variabilelor externe ale script-ul este disponibil doar în momentul aderării sale la fereastra simbol, dar procesul nu poate fi schimbat. Dacă fereastra de proprietăți program este deschis, expertul nu funcționează - managementul este deținut de către terminalul de client și a trecut la programul pentru a rula sarcini specifice.

Vă rugăm să rețineți, într-un moment când un proprietăți EA fereastra și utilizatorul decide asupra valorilor variabilelor externe, un expert (sau un indicator) nu funcționează. Stabilirea valorilor variabilelor externe și făcând clic pe OK pentru a programa panoul de setări, utilizatorul re-începe funcționarea sa.

În acest caz, terminalul client începe performanța secvențială deinit funcție specială (), apoi init funcție specială (), și, ulterior, la momentul primirii unui nou tick, incepe sa execute functia start speciala (). În exercitarea funcției deinit (), programul final, variabilele externe vor avea valorile obținute în sesiunea anterioară, și anume, cei care au fost cu ei înainte de deschiderea setărilor panoului de experți. Înainte de executarea init funcții speciale () variabilele externe vor avea valorile stabilite de către utilizator în bara de instrumente de setări și în exercitarea funcției init () variabilele externe vor avea valori noi stabilite de către utilizator. Astfel, noile valori ale variabilelor externe intră în vigoare de la data noii sesiuni (de inițializare - start - deinit) de expert, începând cu executarea init ().

deschiderea faptului fereastra cu setări de experți privind variabilele globale nu sunt afectate. În timpul tot timpul, fereastra este deschisă, iar după închiderea acesteia, variabilele globale păstrează valorile lor, disponibile la data anterioară deschiderii bara de instrumente.

Externvar.mq4 program folosit doua la nivel mondial și o variabilă locală.

soluție algoritmic a problemei este după cum urmează. Identificate prin două evenimente: prima - faptul de a ajunge la nivel, al doilea - faptul că mesajul (de nivel mai mic decât în ​​n puncte) au fost deja emise. Aceste evoluții se reflectă în valorile variabilelor și Fact_1 Fact_2: în cazul în care evenimentul nu a avut loc, atunci valoarea acestei variabile este falsă, iar dacă sa întâmplat - adevărat. linii:

determinată de fapt de primul eveniment. Funcția standard NormalizeDouble () permite calcularea valorilor variabilelor reale, cu o anumită precizie (precizie instrument financiar corespunzător). În cazul în care prețul a fost egal sau mai mare decât un nivel predeterminat, faptul că primul eveniment este considerat a fi realizată, însă Fact_1 variabilă globală este setată la true. Programul este conceput astfel încât variabila Fact_1, a primit o zi valoarea reală, nu-l schimba pe o minciună - în acest scop, în program nu există nici un cod corespunzător.

Acesta identifică necesitatea de a emite un mesaj. În cazul în care primul eveniment sa intamplat deja, iar prețul a scăzut cu n puncte (mai mici sau egale cu) un nivel predeterminat, este necesar să se dea un mesaj - un apel este în executarea funcției My_Alert utilizator (). Funcția definită de utilizator după alerta faptul că mesajul a fost deja eliberat, prin atribuirea valorii unei variabile globale Fact_2 adevărat. După aceea, utilizatorul termină funcția și după începerea funcția specială ().

După Fact_2 variabilă este setată la true, programul va termina de fiecare dată când funcționarea sa, astfel încât mesajul, odată făcut, niciodată în timpul acestei sesiuni a programului nu se va repeta:

Ilustrativă acestui program este faptul că valorile variabilelor globale pot fi modificate în orice locație (în funcție specială și utilizatorul) și stocate pe întreaga perioadă a programului - între căpușe, după modificarea valorilor variabilelor externe sau ca urmare a intervalul de timp de comutare .

În general, valorile variabilelor globale pot fi modificate în oricare din funcția specială. De aceea, trebuie să fim deosebit de atenți, indicând operatorii care se modifică valorile variabilelor globale în funcția de inițializare () și deinit (). De exemplu, în cazul în care funcțiile init () reseta valoarea unei variabile globale, valoarea acestei funcții de pornire variabilă () în prima variantă va fi zero, adică valoarea acestei variabile este atinsă în timpul pornirii de execuție anterioară (), vor fi pierdute (adică, după schimbarea setărilor program extern).