0
119
Переменные
В этой главе кратко описано что такое переменная, каких они бывают типов и
как с ними работать.
Массивы и структуры (это тоже переменные) описаны в общих чертах.
Подробный экскурс в массив массивов и
структур будет сделан позже, это отдельная большая тема.
На первых порах можно успешно писать роботов не используя массивы и
структуры. _______________________________________________________________________________________________________________________
Содержание
- Введение
- Первый шаг
- Основы языка
- Переменные
- Функции
- Учимся читать
- Обучение методом "Ломаем/строим". Модификация чужого кода
- Работа над ошибками
- Как найти "иголку" в стоге кода функции которую якобы можно использовать "как есть"?
- Графический интерфейс
- Пишем простой советник с нуля
- Пишем сеточный советник с Мартингейлом
- Перечень вложений
В предыдущей главе были перечислены основные типы данных. Они же являются и типами
переменных. Ниже более длинный список возможных типов переменных: • char, short, int, long, uchar, ushort, uint, ulong – целые числа; • color – целое число, представляющее RGB-цвет; • datetime – дата и время, число равное количеству секунд, прошедших с 1 января 1970г. • bool – логические значения true и false; • double – числа двойной точности с плавающей точкой; • float – числа одинарной точности с плавающей точкой; • string – символьные строки. Объявление переменных Имена переменных должны быть уникальными и написаны латиницей. Имя обязательно
должно начинаться с буквы (строчной или прописной - неважно) или знака подчеркивания. Начиная со второго знака можно
использовать цифры. Настоятельно рекомендую давать переменным осмысленные имена, иначе вы очень скоро начнете с трудом понимать свой собственный код. Переменные должны быть объявлены перед их использованием, иначе ошибка. Переменные бывают локальными и глобальными. Локальные переменные это те, которые объявлены внутри функции или составного выражения. Они видны только там где объявлены. В другой функции может быть объявлена локальная переменная с тем же именем. Пример объявления локальных переменных: int open(double lot=0,double tpVal=0,double slVal=0, int mag=0, string comment="") { // Переменные принимающие данные объявляются в () после имени функции double LastMar=ND2(AccountMargin()); //локальные переменные используемые только в этой функции. int max_allowed_orders=(int)AccountInfoInteger(ACCOUNT_LIMIT_ORDERS); int orderNumber=0; /* Блок операторов */ return(orderNumber); } //-- int open Глобальные переменные объявляются за пределами функций, в так называемом глобальном пространстве. Переменные входящих параметров это глобальные переменные. Переменные объявленные ниже входных параметров или еще ниже, в промежутках между функциями - это тоже глобальные переменные. Где бы они ни были размещены (хоть после самой последней функции), они всегда будут выше, так как программа вначале читает глобальное пространство и только потом OnInit(), OnTick() и вызванные из них пользовательские функции. Глобальные переменные видны из любого места программы. Пример объявления глобальных переменных: .... .... sinput string d01="====== DrawDown close ================"; input int LossTP =-250; sinput bool ByClose =false; sinput bool SeClose =false; sinput bool SecondToClose =false; input int TaxStartClosing =35; //taxStartСlosing input int DropConstant =50; sinput bool TaxClosing =true; input int TaxPercent =50; sinput bool NextClosing =true; input int NextPercent =65; input int Lot4cls =30; //% Unit for nextClose input double pairClsAll =1; //% ClsAll_on_Pair <0 ==OFF input int EquityDifferClsALL =5; //% EquityDifferClsALL <0 ==OFF sinput int ZeroPercent =10; // ========================================== int SleepPage=15; string txt=""; double dk, spr, taxPerc=0, nextPerc=0, rsiDif,osDif, MK; bool BSok=0,SSok=0, BLok=0,SLok=0, maON, fastON, shortON, rsiON, osON, bigLimON,minLimON, BLmini=0,SLmini=0, miniBLcheck=0,miniSLcheck=0, stopBScheck=0,stopSScheck=0, bl_check=0,sl_check=0, check_step=true, bAuto1, sAuto1, bAuto2, sAuto2, LevTr_ON; bool diagram=true, stLineShow=true, LimLineShow=false, pyrLnShow=false, arrDeleted=false, reInvest, TradeStop=false, TradeStart=false; int sp, pyrLimPer, nextOrdLim, firstLevPer,LevNLper, nextLevPer, bigLimPer, minLimPer, offset,maPer,fPer,maDif,fastDif, shortDif,sPer, rsiTF,rsiPer=0, osTF, osPer=0, bs_TP=0,ss_TP=0, bl_TP=0,sl_TP=0, bNxtTP=0,sNxtTP=0, next_FixTP, next_SafeTP, Lim_PyrTP=0, bs_Dist=0,ss_Dist=0, fixStep, safeStep, LimStep=0, bl_Dist=0,sl_Dist=0, interval=0, bTrSt=0, sTrSt=0, bNxtSt=0,sNxtSt=0, BaseDist=0, LevTrDist=0,NextLev_TrDist=0, bigLimDif=0, minLimDif=0, pyrLimDif=0, startClose; // ========================================================================== int OnInit() { //-- { .... } { .... } //----------- return(INIT_SUCCEEDED); } //-- Наверняка кто-то да обратил внимание на комментарий в конце нескольких строк входящих параметров. input int Lot4cls =30; //% Unit for nextCloseВ этом случае это не совсем комментарий. В обновленной версии языка Это второе имя переменной, которое видит пользователь, но не программа. Писать можно любой текст на любом языке, с пробелами, знаками умножения, деления, доллара, процента и т.п. Длина строки не лимитируется. Эту же строку я мог написать так: input int Lot4cls =30; //Квант объема для функции nextClose. % от начального лота. Инициализация переменных, это присваивание им какого-то начального
значения. Инициализацию можно не делать если при первом обращении к переменной ей присваивается значение. Вот так,
например: |
О структурах буду писать где-то в конце учебника. Если по чесноку, то за те почти 12 лет, что я пишу на MQL4, структуры использовал считанные разы. И не потому что не смог разобраться - разобрался, разложил все по полочкам еще в конце первого года писательства (когда впервые понадобилось). Следующий раз был года через 3-4 и так далее. В этом году тоже использовал структуру!!! (аж один раз - для закрытия профитных сделок и выключения советника перед концом сессии когда километровым спредом начинают стопы сбивать и включения где-то в 1:30 по терминальному - то и другое задается из менюшки ) И шо ви себе думаете - это таки была структура типа Дата-Время ;-) А вот если у вас хватит "мудрости" перейти на MQL5, то вы там буквально с первого шага (попытки адаптировать MQL4 под MQL5) столкнетесь со структурами которые напихали везде где тока мона - фиг сделку откроешь без использования структуры. Зачем?!!! Не понимаю... Ученость свою показать? Показать программеру где обитает кузькина мать? Глупо как то. |
ЗЫ
Черновой вариант. Будет правиться.
Ранее опубликованные посты (с августа 2014) |