Первый класс. Учимся писать и считать.

Vladimirjurav

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

double iTrend0 = iCustom(NULL, PERIOD_M15, "SuperTrend", 0, 1);

Первое слово в этой строке - это тип данных с которыми мы будем работать, это могут быть целые числа, числа с запятой, текстовые данные, значеная - Да или Нет (true или false).

"double" - означает что числа которые мы получим из индикатора могут быть не целые, т.е. число с запятой. Например 1,5 или 0,002, в общем всякие с запятой.
Еще типы данных с которыми мы встретимся в советнике:
int - только целые числа. Например: int MagicNumber = 33315;
bool - это когда потом пишется true или false (да или нет, разрешить или запретить).
Например: bool LongTrade = TRUE; //--- Выключатель длинных позиций
string - это текстовые данные, например название советника: string Name = " EA Angel";
Да.. с одним словом сколько провозились. Ну дальше проще.

iTrend - Это просто имя или название ними придуманное , того что мы получим.
0 - это номер буфера;
iCustom - функция говорит компьютеру, что мы сейчас будем считывать данные с внешнего индикатора.
NULL - говорит о том что мы будем считывать данные применительно к текущей паре. (на которой мы запускаем советник). Но можем конкретно указать пару, например EURUSD, или GPBUSD).
PERIOD_M15 - это тайм фрейм на котором индикатор будет работать, когда мы будем считывать данные. Т.е. открыв график на М5, данные все равно будут считываться с М15.
"SuperTrend" обязательно в кавычках. Наименование советника, нужно перенести очень точно как в терминале. А то бывает мы видим вроде бы название не латинице. А оказывается, хитрый прогер написал часть букв на кириллице. В результате мы не можем считать данные с индикатора.
0 - это номер буфера.
1 - это бар на котором снимаются данные ( внимание.. 1 означает что данные снимаются не с текущего бара, а с уже закрытого, с предыдущего. Это для того что бы избежать перерисовки. Если будет стоять 0, то будет сниматься с текущего бара, но эти данные постоянно меняются. т.к. бар не закрыт.)

Далее самое веселое здесь.. сейчас между наименованием индикатора и номером буфера ничего нет, не считая разделительной запятой.
Это означает что все настройки индикатора берутся те, что указаны в коде индикатора. Но мы ведь хотим менять настройки индикатора в советнике. Так вот, для этого, в это место надо прописать настройки индикатора, обязательно в том порядке и так как они записаны в индикаторе. Но опять же это можно сделать двумя способами.
1.Просто перенести данные из входных параметров индикатора и наша строка будет выглядеть вот так:

double iTrend0 = iCustom(NULL, PERIOD_M15, "SuperTrend", 10, 3.0, 0, 1
Да, тогда настройки индикатора мы сможем менять в советнике, но только в самом коде.

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

double iTrend0 = iCustom(NULL, PERIOD_M15, "SuperTrend", Nbr_Periods, Multiplier, 0, 1
А в настройки советника, это в самом верху в коде советника где прописываются его настройки, добавить, просто скопировав из кода индикатора:
extern int Nbr_Periods = 10;
extern double Multiplier = 3.0;
Дальше компилируем и видим в журнале кучу ошибок, если забыли скопировать какую ни будь точку с запятой ( ; ). Если не забыли, то все ОК! Ошибок нет.. Проверяем работу советника в тестере.
Вот так мы и будем прописывать наши Граальные индикаторы в рабочем советнике.
В каком советнике это делать и как прописать что бы советник увидел команды нашего индикатора, об этом будет далее..
 

Vladimirjurav

Активный участник
.. вопросов пока нет. Но интересно.

Dimdimich, спасибо за поддержку. А то грустно. Не понимаешь, то ли впустую все это пишу. То ли это кому ни будь надо. Теперь будет повеселее :)
.. учиться быстрее получится, если взять какую-то простенькую рабочую программку (сова или индикатор), алгоритм работы которой вы знаете..
Последуем этому совету.. А так как мы не прогеры, нам это будет, не зазорно. Тем более знаем, что мы то уж точно создадим граальный советник. Тем более у нас есть обалденная индикаторная стратегия и ты прекрасно видишь, индикаторы тебе подсказывают. Вот тут открыть, вот тут закрыть. Теперь нужно все это вставить в советник.. И все.. капуста сама будет складываться в мешки.. Осталось немного подучиться. Вот и займемся этим дальше, что бы не умер гениальный трейдер, еще не родившись..
 
Последнее редактирование:

Vladimirjurav

Активный участник
Думаю, у каждого, кто этим занимается, есть свои любимые советники для тестирования индикаторов. От простеньких до более сложных. Или вообще есть такой советник, так и называется "iCustom" Просто вставляешь в его настройки нужные индикаторы, не заморачиваясь, и тестируешь сова. Но мне интереснее поразбираться, а что же там внутри..? Я лично пользуюсь старым добрым советником: Angel EA". Есть куча модификаций и темы на этом форуме начиная с "Wall Street". А все почему. На мой взгляд это самый логичный индикаторный советник. И если вы посмотрите, практически во всех модификациях, а их не меньше десятка, один и тот же код открытия и закрытия позиций, и алгоритм использования индикаторов. И мы не будем изобретать велосипед.
Я использую одну из последних модификаций, очень красиво модифицированную и русифицированную участником этого форума: Joker62. Принеся ему огромную благодарность, будем курочить этот сов.. Что в этом советнике есть. Все что мне нужно, все отключается и включается:
1. SL и TP;
2. Без убыток;
3. Увеличение лота, при увеличении депозита;
4. Небольшой мартин, Увеличивается следующий лот, при закрытии в минус предыдущего...
Ну и другие штучки. Как то, запрет на одновременное открытие нескольких позиции, фильтры по волатильности, ограничение работы по спреду и проскальзыванию, и т. д. есть модификации с новостным фильтром и фильтром по времени открытия. С тралом, но я к тралу отношусь отрицательно. Видел на форуме только один действительно интересный трал, прогера Vladradon. Но это отдельная тема. В общем это полноценный взрослый советник на котором можно реализовать серьезные индикаторные стратегии.
Мы практически все с вами изучили. Осталось только вставить данные буферов интересующих вас индикаторов в этот сов. Предлагаю день другой повозиться с этим совом, посмотреть работу, настройки, попробовать оптимизировать. Сов прилагается. Потом будем выкидывать индикаторы которые подключены и вставлять другие.
В коде обратите внимание на разделы открытие и закрытие позиций начиная с 1437 строки. Они в основном нам и понадобятся. Остальное трогать практически не будем. Не будем ломать работающий механизм.
 

Вложения

  • Ангел Менадель_v.2.0.4_mod_Joker62.mq4
    212,1 КБ · Просмотры: 72
  • Angel Menadel_v.2.0.4_mod_Joker62.ex4
    101 КБ · Просмотры: 40

Ugar

Гуру форума
Я думал вы тут собираетесь действительно начать писать свой первый класс. В смысле объектно ориентированный подход будете рассматривать. А тут даже процедурным не пахнет. Подобных веток здесь было не одна.
 
Верх