|
В этой статье я попытаюсь предельно простым
языком научить вас писать торговых роботов. Не проблема если ранее ничего подобного вы не делали. Также я дам вам "кирпичики"
- готовый код основных функций необходимых для сборки простого робота. И не бойтесь начинать, только идущий в состоянии
осилить путь каким бы длинным он ни был. Страшно и страшно-непонятно будет только первые пару дней, потом попустит. |
- Введение
- Первый шаг
- Основы языка
- Переменные
- Функции
- Учимся читать
- Обучение методом "Ломаем/строим". Модификация чужого кода
- Работа над ошибками
- Как найти "иголку" в стоге кода функции которую якобы можно использовать "как есть"?
- Графический интерфейс
- Пишем простой советник с нуля
- Пишем сеточный советник с Мартингейлом
- Перечень вложений
Введение Это не учебник в его классическом виде - формат блога не позволяет это сделать, а
скорее всего что-то вроде "Букварь MQL4", который позволит вам сделать первые шаги в сторону понимания языка, научит
работать с Документацией. Принцип обучения тоже будет примерно такой же - первой учим букву "М", второй букву "А". Как
только выучим, тут же пишем по слогам первое слово "Ма-ма" (пишем одноклеточный, но работающий советник). Выучив еще
несколько букв напишем: "Ма-ма мы-ла ра-му" - напишем простой советник, который можно использовать в реальной
торговле. |
Первый шаг Работа всех программ базируется на анализе условий и выполнении
каких либо действий или расчетов по результатам этого анализа. // input parameters (menu) input int a =1; input int b =2; input int CorrectSum =3; //-------------------------------------- void OnTick() { //--- int sum=0; bool CalculationResult=false; string txt=""; //--- sum=a+b; // calculation of the sum of variables //--- if(sum==CorrectSum) CalculationResult=true; else CalculationResult=false; if(CalculationResult==true) txt="it is right"; if(CalculationResult==false) txt="it is not right"; // if(CalculationResult) txt="it is right"; else txt="it is not right"; //--- Comment( "\n a= ",a, "\n b= ",b, "\n sum= ",sum, "\n CorrectSum= ",CorrectSum, "\n CalculationResult= ",txt ); //-- //--- } //-- OnTick()
Изменяя значения входных параметров вы увидите как изменяются выводимые данные. И что же написано в этом коде
советника-калькулятора? Как это прочесть? input int a =1; input int b =2; input int CorrectSum =3; От того что вы видите открывая советник отличается тем что: - перед переменными стоит понятное слово input(входной, вводимый) - непонятное int - знак "=" перед цифрой intэто тип переменной хранящей значения целых чисел. Еще бывают: - double десятичные числа - bool переключатели - string текст - color цвет - datetime дата и время и много других типов. Ниже я скажу где об этом прочесть. Оператор = присваивает значение переменной. Не путать с оператором == - этот оператор применяется для сравнивания двух переменных. А если видите != то сие значит "не равно". Восклицательный знак, это оператор отрицания. Сразу после слов void OnTick() (обязательная стандартная функция,) видим: int sum=0; bool CalculationResult=false; string txt="";Это объявление переменных. Переменная любого типа обязательно должна быть объявлена. Причем объявлять ее нужно ранее, чем она впервые будет использована. Иначе ошибка. Только одно уточнение: после любого составного оператора обязательно должна стоять точка с запятой. Далее следует основной "работающий" код нашего примитивного советника-калькулятора: 1. if(sum==CorrectSum) CalculationResult=true; 2. else CalculationResult=false; 3. if(CalculationResult==true) txt="it is right"; 4. if(CalculationResult==false) txt="it is not right"; 1-2 строки это не что иное как условный оператор if-else в простом классическом виде. Перевожу на русский: 1. "Если (sum равна CorrectSum) то присвоить переменной CalculationResult значение правда"; 2. иначе присвоить переменной CalculationResult значение ложь; 3-4 строки переводятся так: если(CalculationResult ==правда) то присвоить переменной txt значение =" правильно"; если(CalculationResult ==ложь)то присвоить переменной txt значение ="неправильно"; Будь это не учебный код, а рабочий советник, то эти две строки я написал бы одной строкой такого вида: if(CalculationResult) txt="it is right"; else txt="it is not right"; Работает это точно так же как и предыдущая редакция. Непонятно? На самом деле все очень просто: для bool-переменных if(CalculationResult) это точно то же самое что и if(CalculationResult == true) а если впереди стоит восклицательный знак if(!CalculationResult) , то это то же самое что и if(CalculationResult == false) Что такое else вы уже знаете. Идущая далее функция Comment() выводит на график результат наших вычислений. Comment( "\n a= ",a, "\n b= ",b, "\n sum= ",sum, "\n CorrectSum= ",CorrectSum, "\n CalculationResult= ",txt ); //--- текст, который вы хотите вывести на график, обязательно нужно заключать в двойные кавычки - \n это перевод строки - если после текстового ввода стоит запятая, то после нее можно писать переменную, ее значение будет выведено на график - если это не последнее выражение, то после переменной также нужно поставить запятую. А вот запятая после последнего выражения будет ошибкой. - функция обязательно должна закрываться круглой скобкой и двоеточием. ________________________________________________________________________________________________________________ Если вы внимательно все это прочли, то язык MQL4 наверняка уже не кажется вам чем-то непостижимым. Бейсик проще, но и в С-подобном MQL4 тоже нет ничего что нельзя было бы понять человеку не имеющему специального образования, но имеющему мозги. Код несложного советника открывающего сделки, устанавливающего ТП и СЛ через некоторое время покажется вам таким же простым и понятным. И вы его скоро самостоятельно напишете. Пожалуйста, не стесняйтесь писать комментарии. Неважно что это - отзыв или вопрос. Важно (для меня) - буду видеть что к работе есть интерес. На все вопросы обязательно отвечу. При этом поправлю текст с тем чтобы вновь о том же не спрашивали. Букварь публикуется "с листа". Это значит что правки неизбежны. Изучив главу 15 (например) не поленитесь пролистать все предыдущие. Высока вероятность что там появилась новая (очень важная) информация или поправлены ошибки. |
Если это кому то интересно, то ниже ссылка на все мои посты опубликованные в блоге начиная с августа 2014 Ранее опубликованные посты Не все в них так, то таких которые категорически нужно удалить не обнаружил (пока не обнаружил) |