Информация

Все разделы форума доступны для просмотра всем желающим, без регистрации. Если вы хотите оставлять комментарии на форуме, вам необходимо создать учетную запись или авторизоваться.

Close
Авторизация
Sorros offline
#21
19 окт 2010, 21:16
Аватар пользователя
Сообщений: 235
Поблагодарили: 0 раз(а) в 0 сообщениях
Зарегистрирован: 29 июл 2010, 14:07
Итак. Ну для начала хотел бы выразить благодарность Вам, Forex трейдер, рад, что Вы мою позицию поняли, с Вашего благосклонного позволения я продолжу тему.

Игорь, спасибо за поддержку, Мила - не бойтесь, смысл этой темы как раз в том, чтобы облегчить изучение языка "чайникам" настолько, насколько это возможно. В первом уроке я вам показал, как написать скрипт с технической стороны. Еще раз обобщим.
1. Пишем в редакторе

2. Удаляем оттуда весь код, оставляем только

int start()
{


return(0);}


(между открывающей фигурной скобкой "{" и словом return я в прошлый раз вставил две строки такого содержания "//------------", смысловой нагрузки эти строки не несут, просто написал для удобства, чтобы было легко понять, где писать код, запомните, пожалуйста, что если в коде встречаются две подряд идущие .... эмм., ну назовем это наклонными чертами (слэшами), то вся строка после этих двух черт не читается редактором, то есть он не видит эту строку. Поэтому вы спокойно пишите --------------------- вот такую линию после этих слэшей, чтобы для себя отделить пространство для кода, но редактор не видит эти строки, и, следовательно, при исполнении кода программы такие строки игнорируются, в них вы можете писать все, что душе угодно, обычно даются пояснения программиста к определенным частям кода, для того, чтобы было легче далее его редактировать)

3. После написания кода его нужно превратить в работоспособную программу, для этого нажимаем компилировать (если в коде имеются ошибки, при компиляции это будет указано, отчет компилятора может помочь в исправлении этих ошибок).

4. Теперь программа "в терминале" (по сути в папке с терминалом, в experts, scripts или indicators - в зависимости от типа программы).

5. Для исполнения скрипта необходимо по нему нажать (или выбрать в контекстном меню к этому скрипту "исполнить на графике")

6. Для испольнения советника необходимо по нему нажать (выбрать меню "присоединить к графику"), после чего нажать на кнопку "Советники" над графиком. Вы узнаете, что советник запущен по характерной улыбающейся рожице в правой верхней чести графика. К тому же кнопка , на которую вы нажали, получит зеленый значок, вместо красного.

===
Это пока все с технической стороны. Поэкспериментируйте с запуском скриптов, а также того скрипта, который вы сами написали, затем измените что-либо в коде скрипта, к примеру удалите одну из скобок, посмотрите, что вам скажет компилятор. И отписывайтесь, что вам понятно.
Влад offline
#22
20 окт 2010, 14:28
Аватар пользователя
Сообщений: 2220
Поблагодарили: 171 раз(а) в 134 сообщениях
Зарегистрирован: 13 окт 2010, 11:22
Sorros offline
#23
20 окт 2010, 23:06
Аватар пользователя
Сообщений: 235
Поблагодарили: 0 раз(а) в 0 сообщениях
Зарегистрирован: 29 июл 2010, 14:07
mszeus offline
#24
21 окт 2010, 09:38
Аватар пользователя
Сообщений: 551
Поблагодарили: 7 раз(а) в 7 сообщениях
Зарегистрирован: 20 окт 2010, 21:03
Написал советника по стратегии OzFX, возник вопрос, можно ли текущие переменные, лоси, профиты хранить в файле. Соответственно при надобности и читать их из файла. Хотя язык MQL4 это язык СИ, то теоретически можно.
Дайте кусок кода пожалуйста, если возможно это.
----------------------------------------------------------------------
Есть 9-ти дневный Курс активного трейдера 2008. А.М. Герчика. Обращаться в личку.
Sorros offline
#25
24 окт 2010, 23:26
Аватар пользователя
Сообщений: 235
Поблагодарили: 0 раз(а) в 0 сообщениях
Зарегистрирован: 29 июл 2010, 14:07
Это вполне возможно, функции: FileOpen, FileWriteInteger(Double и т.д.), FileReadString(Integer,Number и т.д.), FileClose для закрытия. Заходим в руководство в редакторе, идем в файловые функции и смотрим синтаксис функций, пример кода как я могу дать? Смотря зачем Вы хотите использовать функции и какие данные читать или записывать.
Sorros offline
#26
26 окт 2010, 20:09
Аватар пользователя
Сообщений: 235
Поблагодарили: 0 раз(а) в 0 сообщениях
Зарегистрирован: 29 июл 2010, 14:07
УРОК 2

Переменные в MQL4

Если вы читали и делали все, что написано в постах выше, вы должны уже уметь
1) открывать редактор
2) компилировать код
3) запускать скрипт на графике.

Теперь начнем изучать непосредственно сам код. Весь код вашей программы может состоять только из тех символов, с которыми редактор знаком, если редактор не знаком с каким-нибудь словом, буквой и т.д. - мы должны его познакомить с этим элементом (переменные).

Все знакомые редактору слова обычно выделены определенным цветом, а если вы начнете писать это слово - редактор вам поможет посредством вывода на экран окна с возможными вариантами слова, которое вы, возможно, пытаетесь ввести. Например в случае с функцией Messagebox вы могли просто ввести Mes .. и затем нажать Enter.

Давайте подробнее остановимся на таких элементах кода как переменные. Пусть вас не пугает это трудное слово, оно означает лишь некий элемент, который редактор изначально не знает, но можно познакомить редактор с этой переменной, и он будет ее легко узнавать и производить с ней различные действия. Обычно переменные используют, чтобы присваивать им какие-либо значения и изменять эти значения для определенных целей.

Например, как нам заставить редактор посчитать количество бычьих свечей на графике из 20 свечей? Давайте пока без кода скрипта, напишем его чуть позже. Итак, мы должны сказать скрипту, чтобы он сравнил Open (цена открытия) и Close (цена закрытия) свечи, если цена открытия выше, чем цена закрытия, то у нас медвежья свеча, если наоборот - то бычья. Чтобы редактор не путался, предусмотрена система нумерации по порядковым номерам, самый новый элемент (свеча, значение индикатора и т.д.) имеет всегда значение 0, запомните это. И далее идет порядковая нумерация, то есть предыдущая свеча будет иметь номер 1, третья по счету от конца будет иметь значение 2 и т.д. То есть Начинается нумерация с самого нового элемента и проходит справа налева, от более нового к более раннему, самый правый элемент получает номер 0, второй с конца - 1 , третий 2, благодаря чему последний элемент в последовательности из 20 свечей будет 19-тый по номеру. Надеюсь понятно. Но с этим чуть позже разберемся.

Вернемся к подсчету бычьих свечей. Ведь если вы попробуете посчитать их, вы тоже будете действовать по определенному алгоритму. Сначала вы анализируете самую новую свечу. Сравниваете Open и Close, если свеча медвежья - вы пропускаете ее и переходите на следующую. Снова анализируете. Если на этот раз свеча бычья, вы пишите на листочке плюс. после того, как вы прошли все свечи, у вас определенное количество "плюсов", подсчитав их, вы будете знать, сколько бычьих свечей в последовательности.

Теперь к чему я это. Редактор знает все слова, которые вы будете использовать для теста свечей, он знает слова Close, Open, знаки <, >, = и другие, но он не сможет вести подсчет этих свечей, так как ему негде записывать бычьи свечи, если он их найдет. То есть нет "листка" для записи. В качестве такого листка вы можете использовать переменную, скажем b, и присвоить ей значение 0. То есть нужно познакомить редактор с b и сказать ему, что b=0. Зачем? Все просто - при каждом нахождении программой бычьей свечи мы должны сказать скрипту, чтобы он прибавлял к b единицу. Таким образом, после того, как скрипт просмотрит все свечи - переменная b уже изменит значение (на то она и переменная) и ее значение будет равно количеству найденных свечей.

Затем мы используем уже знакомую функцию MessageBox и выведем эту переменную в конце подсчета на экран. Окно покажет нам значение переменной и мы будем знать сколько бычьих свечей было из 20 протестированных.


Таким образом в переменных можно хранить различные данные, изменять их и использовать для вычислений и других действий.

Кстати, для того, чтобы написать этот скрипт, мы должны ввести аж две переменные. Первая для подсчета бычьих свечей, а вторая для подсчета количества свечей, которые скрипт анализирует, ведь откуда он узнает, что надо протестировать именно 20 свечей?

Представьте, что скрипт умеет производить одно и то же действие множество раз. Как нам заставить скрипт анализировать свечи поочередно? Нужно опять же ввести переменную, равную нулю (допустим переменную а, которая равна 0), и сказать скрипту - проанализируй свечу а (скрипт поймет это как "проанализируй элемент 0", ведь а=0), затем мы скажем скрипту : как проанализируешь свечу а, прибавь к а единицу и снова проанализируй свечу а, на этот раз скрипт будет смотреть на другую свечу, так как он изменит а с 0 на 1. Думаю это ясно. И теперь осталось сказать ему: "когда а будет = 19 остановись". Так как нумерация элементов идет с 0, то когда а будет равна 19, скрипт закончит анализировать двадцатую свечу.


Этот скрипт мы напишем в следующий раз, когда изучим типы данных в языке MQL4, пока поймите, что такое переменная. Это очень важно.

----------------
Если кому-то есть что написать для новичков в этой теме - все будут рады, только постепенно с пошаговостью и размерностью, и без перегрузки информацией - этого полно в учебниках. Спасибо
Влад offline
#27
26 окт 2010, 21:14
Аватар пользователя
Сообщений: 2220
Поблагодарили: 171 раз(а) в 134 сообщениях
Зарегистрирован: 13 окт 2010, 11:22
в MetaEditor есть две важные функции поиска:
1. навигатор для поиска функций, ошибок, стандартных индикаторов и т.п.
2. поиск в теле советника - правка - поиск в файлах CTRL+Shift+F - очень сокращает время перемещения по коду
mika3316 offline
#28
27 окт 2010, 23:03
Аватар пользователя
Сообщений: 1156
Поблагодарили: 1 раз(а) в 1 сообщениях
Зарегистрирован: 27 июл 2010, 22:13
Вопросы:
Если нажала "компилировать", и мне пишет про предупреждение или ошибку - как с этим бороться?
Не поняла, что значит Messagebox?
Обозначения для переменных выбираем по своему вкусу?
Прибавить - это 0+1, а посчитать - тоже 0+1?
Как скрипт будет знать, с какой свечи начинать отсчет или он всегда автоматически будет считать с той свечи, что последней нарисовалась?
Sorros offline
#29
28 окт 2010, 17:59
Аватар пользователя
Сообщений: 235
Поблагодарили: 0 раз(а) в 0 сообщениях
Зарегистрирован: 29 июл 2010, 14:07
Мурыч offline
#30
04 ноя 2010, 12:41
Аватар пользователя

Клиент FreshForex
Сообщений: 1882
Поблагодарили: 210 раз(а) в 151 сообщениях
Зарегистрирован: 04 ноя 2010, 12:04
Откуда: Барниаполь
Уже долгое время в поиске програмиста. Пытался самостоятельно научиться, однако знаний маловато и боязнь из программы сделать кашу. На фороксе с 2007 г. и за это время наработал стратегию скальпирования. Немечтаю о советнике, хотябы скрипт который закрывал бы ордер на условиях. Утомительно сидеть в засаде, следить только за одной парой, кроме этого есть и другие дела.
PS. Хотелось бы увидеть напарника в своём городе.
Если Чеширский Кот улыбается, значит, это кому-нибудь нужно.

BBCode ВЫКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ

   

Если Вы не хотите добавлять вложения, оставьте поля пустыми.

Пред.След.

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Список форумов

Часовой пояс: UTC + 4 часа (Russia: MSK) по летнему времени Удалить cookies форума

В вашем браузере отключена поддержка cookie. При отключенной поддержке cookie в браузере у вас могут возникнуть проблемы с отображением Личного кабинета. Как включить (активировать) поддержку cookie.