ФОРЕКС 21 Четверг, 02.05.2024, 23:25
Главная | Регистрация | Вход Приветствую Вас Гость | RSS
Меню сайта

Главная » 2009 » Декабрь » 27 » Учимся писать эксперты для MetaTrade. Урок 4.
Учимся писать эксперты для MetaTrade. Урок 4.
19:52
Учимся писать эксперты для MetaTrade. Урок 4. Здравствуйте, дорогие читатели. Сегодня мы познакомимся с операторами циклов. И напишем новый эксперт. 3.1. Общие сведенья о циклах Цикл - это оператор, который повторяет фрагмент программы, заключенный в теле цикла до тех пор, пока не сработает условие, заданное пользователем. Циклы часто используются для работы с массивами, внашем случае это массивы из котировок или значения индикаторов. (c[0]+c[1]+c[2])/3 - это среднее арифметическое трех цен, или простая скользящая средняя с периодом усреднения 3. Но дело обстоит гораздо сложнее, если нужно взять среднее арифметическое с периодом 30, для этого гораздо проще использовать конструкцию вида: for i=0 to 30 {sr=sr+c[i];}; sr=sr/30; Также циклы позволят Вам выбрать нужный элемент из большого массива данных. Например, часто нужно найти максимальный High или минимальный Low, за несколько последних баров, для выставления стоплосса. Найдем минимальный Low, для установки стоплосса для лонга. Поиск будем осуществлять из 10 последних баров (сформированных). MinL=L[1]; For i=1 to 10 { if L[i]MaxH then MaxH=H[i];}; Теперь пока необходимо детально разобрать циклы имеющиеся вMQLII. 3.2. Цикл For Цикл For обеспечивает выполнение инструкций, заключённых в теле цикла указанное пользователем, число раз. for i= 1 to 10 begin // тело цикла end; I - это переменная, которая будет увеличиваться на единицу, на каждой итерации цикла. В нашем примере начальное значение переменной равно 1, конечное 10, т.е цикл будет 10 раз исполнять тело цикла. Начальное и конечное значение могут быть любыми, но конечное должно быть больше. Если Вы хотите что бы цикл отсчитывал переменную в другую сторону (в сторону уменьшения), то вместо ключевого слова To нужно использовать Downto. for i=10 downto 1 begin // тело цикла end; Этот цикл также исполнится 10 раз, только переменная будет уменьшаться от 10 до 1. 3.3. Цикл While Этот цикл, отличается от For тем, что количество итераций не известно заранее. Тело цикла выполняется, пока выполняется условие цикла. while a>b begin //тело цикла end; a>b - это условие цикла. 3.4. Инструкция Break Инструкция Break досрочно прерывает выполнение цикла For или While. Это актуально если цикл используется для поиска какого-то элемента, и он был найден. Эта инструкция может применяться только в теле цикла. Если несколько циклов вложены друг в друга, то прерывается ближайший цикл (цикл, в тело которого инструкция вложена непосредственно). for i=1 to 100 { if l[i]>l[i+1] and l[i+1 ] и <повешенный>, в самых сильных их проявлениях, когда цены открытия и закрытия равны (без тела). Алгоритм не сложный. Если после бычьего движения мы имеем свечу с длинной верхней тенью и короткой нижней, то мы дожидаемся следующей медвежьей свечи и по ее закрытию продаем. Если после медвежьего движения мы имеем свечку с длинной нижней тенью и короткой верхней, то мы дожидаемся бычьей свечки и покупаем. Стоплоссы расставляем по длинным теням плюс, указанное количество пунктов. /*[[ Name := Expert3 Author := Fxtest.ru Link := forextimes.ru Lots := 1.00 Stop Loss := 20 Take Profit := 40 Trailing Stop := 0 ]]*/ defines: tenmax1(10), tenmin1(5), telodo1(5);var:tenmax(0),tenmin(0),telodo(0); //домножаем все переменные не цену пункта tenmax=tenmax1*point; //длинная тень tenmin=tenmin1*point; //короткая тень telodo=telodo1*point; //тело бара до разворотной свечи if TotalTrades=1 then exit; //выходим если есть открытая позиция if ( (o[4]-c[4])>telodo and (o[3]-c[3])>telodo) ) or (o[3]-c[3])>2*telodo then { //2 средних или одна в 2 раза больше условие на покупку наличие низходящего тренда // из 2х не коротких свечей, или последней длинной медвежей if o[2]=c[2] and (h[2]-o[2])tenmax ando[1]>c[1] then {SetOrder(op_buy,1,ask,3,l[2]-StopLoss*point,bid+takeprofit*point,green);}; }; if ((c[4]-o[4])>telodo and (c[3]-o[3])>telodo) or ((c[3]-o[3])>telodo*3) then { //условие на продажу наличие возходящего тренда из 2х не коротких свечей, или последней длинной бычьей if o[2]=c[2] and (o[2]-l[2])tenmax ando[1] var container = document.getElementById('nativeroll_video_cont'); if (container) { var parent = container.parentElement; if (parent) { const wrapper = document.createElement('div'); wrapper.classList.add('js-teasers-wrapper'); parent.insertBefore(wrapper, container.nextSibling); } }
Просмотров: 361 | Добавил: forex21 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Календарь новостей
«  Декабрь 2009  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031

Поиск

Друзья сайта


Статистика

Copyright MyCorp © 2024 Бесплатный конструктор сайтов - uCoz