Видове променливи - променливи - урок за MQL4 - учебник по MQL4

Приложна програма в MQL4 може да съдържа десетки или стотици променливи. Много важно свойство на всяка променлива е възможността да използвате програмата в своята стойност. Ограничаване на такава възможност е пряко свързана с обхвата на променливи.







Променлива обхват - място в програмата, където променливата е на разположение. Всяка променлива има своя обхват. Според обхвата, MQL4 има два вида променливи: локални и глобални.

Местните и глобални променливи

Местна променлива - променлива декларирана в рамките на една функция. Обхватът на локални променливи е тялото на функцията, в която се декларира променлива. Локална променлива може да се инициализира с постоянна или експресия, съответстващо на тип.

Глобалната променлива - променлива декларирана извън всички функции. Обхватът на глобални променливи е цялата програма. Една глобална променлива не е локализиран на всяко ниво. Една глобална променлива може да се инициализира само от съответното постоянно (но не и на израза). Глобалните променливи се инициализират само веднъж преди изпълнението на специални функции.

Ако програмата за управление е вътре във функция, стойностите на локалните променливи, декларирани в другите функции не са налични. Стойността на всеки от глобалната променлива е на разположение, както и всяка специална потребителска функция. Помислете за един прост пример.

Проблем 22. Създаване на програма, която брои кърлежи.

Алгоритми за решаване на проблемите 22 с помощта на глобалната променлива (countticks.mq4).

Тази програма използва само една глобална променлива Tick. Това е глобална, защото обявена извън началото на дефиниция функция (). Това означава, че от кърлеж да отбележете стойността на тази променлива ще бъде съхранена. Обърнете внимание на детайлите на изпълнението на програмата.

В специални функции, които взехме под внимание критериите, по които се движат по изпълнението на специални функции. Нека да припомним, че за кратко специален началото на функцията () в Експертни започната от търговския терминал, когато пристигането на нов тик. По време на експертната привързаност към прозореца за сигурност, от следните събития:

2. контрол се провежда в клиентския терминал постъпленията от тиково дърво на.

3. Получени: кърлеж. Контрол се предава на специален старт функция ().

3.1. Като част от изпълнението на старта на специална функция (), управлението се предава на оператора:

В резултат на изпълнението на оператор Tick стойност се увеличава с 1 (цялата единица).

3.2. Контрол се предава на оператора:

Изпълнение на стандартната функция Коментар () ще се появи на сигнала:

Вписана кърлеж № 1

3.3. Контрол се предава на оператора:

Като резултат от създаването му изпълнение () приключва своята работа, управлението се предава на клиентския терминал. Глобалната променлива продължава да съществува, стойността му е равна на 1.

Други събития, ще бъдат повторени от стъпка 2. променлива Тик отново ще участва в изчислението, но на втория кърлежа, когато се движат по изпълнението на старта на функцията (), стойността му е 1, така че в резултат на изпълнението на оператора:

ще бъде новата стойност на променливата Тик - тя ще се увеличи с 1, а сега ще бъде равен на 2 и изпълнение на коментар () функция ще се появи на сигнала:

Въведен тик № 2

Така, променливата Tick ще се увеличи с 1 във всеки старт на специална функция започне (), т.е. при всеки тик. Разтворът на такива проблеми е възможно само в случай на използване на променливи, които запазват техните стойности след излизане функцията (в този случай, глобална променлива се използва). Използва се за същите цели локални променливи безсмислено: локалната променлива губи стойността си след изпълнението на функцията, в която е обявена.

Това е много лесно да се направи започнете експертна система, в която променлива Тик се отваря като локална променлива (т.е. програмата съдържа алгоритмичен грешка):

От гледна точка на синтактични грешки в кода не. Тази програма може да бъде успешно компилиран и стартира за изпълнение. И тя ще работи, но през цялото време ще покаже същия резултат:

Вписана кърлеж № 1

И това е съвсем естествено, тъй като променлива Tick ще се инициализира с нула в началото на специалната началото функция () всеки път, когато тя започва. По-нататъшното увеличение с един само ще доведе до факта, че в момента на сигнал стойност Tick винаги ще бъде равен 1.

статични променливи

По-долу е решение на проблема с помощта на 22 статична променлива (staticvar.mq4 експерт):

Статичните променливи се инициализират само веднъж. Всяка Статично променлива може да се инициализира чрез съответен константа (за разлика от обикновено местна променлива, която може да се инициализира с всеки израз). Ако няма изрично инициализация, статичната променлива се инициализира с нула. Статичните променливи се съхраняват в постоянна памет, техните стойности не се губят Когато функцията изходите. Въпреки това, статични променливи имат ограничения, характерни за местните променливи - видимост домейн остава статична променлива функция в рамките на който променливата е декларирана, за разлика от глобалните променливи, стойността на които е налична от всяка програма. Лесно е да се види, че countticks.mq4 програми и staticvar.mq4 дават един и същ резултат.







Всички масиви са първоначално статичен, т.е. има вид на статично, дори и ако инициализация не е изрично посочено (вж. Масивите).

външни променливи

Външни променливи са описани в частта на програмния ръководител, а именно преди всяка функция, в която има външен извикване на функция. Използване на външни променливи е много удобно, ако от време на време е необходимо да се стартира програмата да работи с различни стойности на променливите.

Проблем 23. Съставете програма, в която се реализира на следните условия: Ако цената е достигнал определено ниво и слезе под това ниво в н точки, а след това, след като докладва на факта на търговеца.

Ясно е, че проблемът изисква промяна на настройките, защото днес цените не са същият вчера, а утре няма да бъде това, което са днес. За да можете да промените настройките в експертен externvar.mq4 използва външни променливи:

В тази програма, външни променливи се задават в реда:

Стойностите на външни променливи са достъпни от прозореца на програмата свойства. Стойността на тези променливи е, че те могат да бъдат променяни по всяко време - и на етапа на включване в програмата, в прозореца за сигурност и в хода на програмата.

Видове променливи - променливи - урок за MQL4 - учебник по MQL4

Фиг. 54. прозореца със свойства на програмата; Тук можете да промените стойностите на променливи.

В момента на включване в програмата на диаграма, стойностите на променливите ще бъдат уточнени в прозореца Preferences, както е посочено в програмния код. Потребителят може по свое усмотрение, да се променят тези стойности. От момента, когато потребителят кликне върху бутона OK в панела за настройки, програмата ще се стартира от клиентския терминал. В този случай, на първоначалните стойности на външните променливи ще бъдат както са били, зададен от потребителя. По време на програмата на стойностите на тези променливи могат да бъдат променяни от изпълнението на програмата.

Ако даден потребител трябва да се промени на стойностите на външните променливи по време на програмата, ще трябва да отворите прозореца за настройки и да правите промени. Важно е да се помни, че лентата с инструменти на програмата свойства може да се показва само по време на периода, когато програмата (Expert Advisor или показател) е в очакване на нова отметка, т.е. нито една от специалните функции няма да бъде изпълнена. По време на изпълнение на tollbar на програмата не може да бъде. Ето защо, ако програмата е проектирана по такъв начин, че дълго време (няколко секунди или десетки секунди), потребителят може да изпитат затруднения при достъпа до прозореца на програмата свойства. Стойности на външните променливи на сценария е достъпна само в момента на присъединяването си към прозореца на символ, но в процеса не могат да бъдат променяни. Ако свойства на програмния прозорец е отворен, експертът не работи - управлението се държи от клиентския терминал и я пусна към програмата да работи на конкретни задачи.

Моля, обърнете внимание, в момент, когато прозореца със свойства на ЕА и потребителят реши на ценностите на външни променливи, експерт (или показател) не работи. Настройка на стойностите на външните променливи и кликнете върху OK, за да програмирате панел за настройки на завръщане на потребителите започва своята дейност.

В този случай клиентският терминал започва изпълнение последователно специална функция deinit (), а след това на специална функция първоначален (), а след това, по време на получаване на нова отметка, започва да се изпълни специална функция старт (). При изпълнението на deinit (функция), окончателната програма, външни променливи ще имат стойностите, получени в предишната сесия, т.е. онези, които бяха с тях, преди откриването на настройките на експертната група. Преди изпълнението на специална функция първоначален () външни променливи ще имат стойностите, определени от потребителя в лентата с инструменти на настройки и при упражняване на първоначален функцията () външни променливи ще имат нови стойности, определени от потребителя. По този начин, на новите стойности на външните променливи влизат в сила от датата на новата сесия (първоначален - старт - deinit) работа на експерта, като се започне с първоначален () изпълнението на.

откриването на факта на прозореца експертни настройки на глобални променливи не са засегнати. През цялото време, прозорецът е отворен, и след неговото закриване, глобални променливи запазват техните стойности, налични към датата, предхождаща откриването на лентата с инструменти.

externvar.mq4 Програмата използва два глобално и локална променлива.

Математически алгоритъм решение на проблема е следният. Идентифицирана от две събития: първият - на факта на достигайки ниво, а вторият - на факта, че вече са били издадени на съобщението (на по-ниско от нивото в н точки). Тези промени са отразени в стойностите на променливи и Fact_1 Fact_2: ако събитието не се случи, тогава стойността на тази променлива е лъжа, а ако това се случи - вярно. линии:

определя от факта на първото събитие. Стандартна функция NormalizeDouble () позволява да се изчислят стойностите на реалните променливи с определена точност (точност, съответстваща цена на финансов инструмент). Ако цената е равна или надвишава предварително определено ниво, на факта, че първото събитие се счита за да бъде постигнато, обаче Fact_1 глобална променлива се сбъдне. Програмата е разработена така, че променливата Fact_1, получи един ден истинската стойност, никога не го промените на една лъжа - за тази цел в програмата няма съответстваща код.

Той посочва необходимостта да се издаде съобщение. Ако първото събитие вече се е случило и цената падна с N точки (по-малка или равна на) предварително определено ниво, е необходимо да се даде съобщение - покана е за изпълнение на функцията на потребителя My_Alert (). Дефинирани от потребителя функция след сигнала на факта, че съобщението е било отправено, чрез присвояване на стойността на глобална променлива Fact_2 вярно. След това потребителят прекрати функцията и след това специален началото на функцията ().

След Fact_2 променлива се вярно, програмата ще всеки път, когато завърши своята работа, така че съобщението, след като направи, никога повече време на тази сесия на програмата няма да се повтори:

Илюстрация на тази програма е, че стойностите на глобални променливи могат да бъдат променени по никакъв място (и в специалната функция и потребителя) и се съхранява за целия период на програмата - между кърлежи, след промяна на стойности за външните променливи или в резултат на смяна на времевата рамка ,

Като цяло, стойностите на глобални променливи могат да бъдат променяни по какъвто и на специалната функция. Ето защо, ние трябва да бъдем особено внимателни, което показва, оператори, които се променят стойностите на глобални променливи във функцията първоначален () и deinit (). Например, ако INIT функциите () нулиране на стойността на глобална променлива, стойността на тази функция променлива старт () в първият пример ще бъде нула, т.е. стойността на тази променлива се достига по време на началото на предишния изпълнение (), ще се загуби (т.е. след смяната на външни настройки на програмата).