Ваши вопросы по языку MQL4

OSS_5

Активный участник
1. Если известно как индикатор принимает решение и алгоритм простой, нет надобности применять тормозную iCustom
2. Если уж надо обязательно вызвать, то для экономии ресурсов процессора можно ограничить историю по которой вызывается индикатор. HistoryBars

3. А почему обе строчки одинаковые? Надо хотя бы буфера разные задать.

double UP = iCustom(NULL,0,"XXX_01",0,0,0);
double DOWN = iCustom(NULL,0,"XXX_01",0,0,0);

Мне не известно как индикатор принимает решение, я не программист (смотрю как другие это делают, так и сам делаю). А вот как без iCustom сделать, я не знаю (может покажите).
По поводу HistoryBars логично, согласен.
Если неправильно сделал поправьте:

double UP = iCustom(NULL,0,"XXX_01",0,0,0);
double DOWN = iCustom(NULL,0,"XXX_01",0,0,1);

так правильно?
 

Ugar

Гуру форума
Мне не известно как индикатор принимает решение, я не программист (смотрю как другие это делают, так и сам делаю). А вот как без iCustom сделать, я не знаю (может покажите).
По поводу HistoryBars логично, согласен.
Если неправильно сделал поправьте:

double UP = iCustom(NULL,0,"XXX_01",0,0,0);
double DOWN = iCustom(NULL,0,"XXX_01",0,0,1);

так правильно?
Нет. Последняя цифра это бар на котором смотреть значение индикатора. 0 это текущий бар, 1 это то что передним...
Предпоследняя цифра задаёт номер буфера.

Если задавать параметры индикатора, то задавать все до последнего значимого. Они перечисляются после имени.
Например если нужно ограничить историю, то это последний параметр, придётся перечислять все до последнего.
В этом индикаторе 1 буфер. В нём пишется 1, или -1, или значение прошлого бара.
Вот что получается с ограничением истории 100 барами.

double Ind=iCustom(NULL,0,"XXX_01","AGM1.3_",clrBlue,clrRed,5,100,0,0);

А так если параметры индикатора задавать не надо, будут по умолчанию.
double Ind=iCustom(NULL,0,"XXX_01",0,0);

А вот дальше надо проанализировать значение переменной Ind.
Если оно 1 то тренд вверх.
if(Ind>0.5)
{
//Здесь что он должен делать

}

Если оно -1 тренд вниз

if(Ind<-0.5)
{
//Здесь что он должен делать

}

Это так для общей грамотности. На самом деле индикатор не отображает линию буфера. Чёрточки которые он рисует, это маленькие трендовые линии, то есть графические объекты. Советник их может отлавливать на графике по именам, но тогда в тестере он работать не будет, так как тестер не работает с графическими объектами.
Единственный выход залезть в индикатор, посмотреть по какому принципу он расставляет линии и перенести этот алгоритм в советник.
А там всё довольно просто
Синяя линия ставится если :
if(High[2]<=High[1] && High[2]<=Low[0] && !(High[3]<=High[2] && High[3]<=Low[1]))
{
//Здесь действие которое должен делать советник в этом случае

}

Красная линия ставится если :
if(Low[2]>=Low[1] && Low[2]>=High[0] && !(Low[3]>=Low[2] && Low[3]>=High[1]))
{
//Здесь действие которое должен делать советник в этом случае

}

Смогёшь это вставить в советник? Если слабо, но ооочень хочется, то лучше обратиться к автору советника. Его координаты есть вверху самого кода. Он и здесь на форуме часто обитает.
 
Последнее редактирование:

procom

Новичок форума
Я понял так, что это советник с панелью. Или, как минимум, поле ввода на графике.

Идея заключается в том, чтобы в МТ4 использовать только терминал.
Управление открытием и закрытием ордеров передавать из другого софта ввиде числовых, может быть строковых переменных через dll.
 

OSS_5

Активный участник
Нет. Последняя цифра это бар на котором смотреть значение индикатора. 0 это текущий бар, 1 это то что передним...
Предпоследняя цифра задаёт номер буфера.

Смогёшь это вставить в советник? Если слабо, но ооочень хочется, то лучше обратиться к автору советника. Его координаты есть вверху самого кода. Он и здесь на форуме часто обитает.

Огромнейшее спасибо за столь исчерпывающий, развернутый ответ.

Сначала исправил на double Ind=iCustom(NULL,0,"XXX_01",0,0); скорость возросла в разы. Потом вставил расчет, взятый из индикатора. А ведь у меня и в мыслях не было, что можно брать расчет из индикатора и вставлять в советника (никогда не задумывался).

Прям почувствовал себя немножко программистом:). Ещё раз спасибо Вам, что подсказываете таким как я. С Уважением.
 

AlexeyVik

Программист mql4 mql5
Идея заключается в том, чтобы в МТ4 использовать только терминал.
Управление открытием и закрытием ордеров передавать из другого софта ввиде числовых, может быть строковых переменных через dll.
Тем более это должен быть советник.
Дальше надо понимать взаимодействие dll с терминалом. Очень важно расположение этой dll и как должно передаваться оттуда или как доставать эти переменные.
 

procom

Новичок форума
Тем более это должен быть советник.
Дальше надо понимать взаимодействие dll с терминалом. Очень важно расположение этой dll и как должно передаваться оттуда или как доставать эти переменные.

У меня такая связка работала почти 2 года. Месяц назад гавкнулся винт и мне не удалось вытащить хоть
что-то из него. В МТ4 работал советник, который мне помог доработать добрый человек, с которым
сейчас у меня нет контактов. На ноуте остались мои черновики, которые я сочинял, но в mql я не Копенгаген.
Вот теперь пытаюсь что-нить придумать.
По поводу dll там все довольно просто и надежно. Dll лежит в Libraries, в коде буквально
4 строчки текста, обмен происходит через собственные регистры Windows довольно быстро.
Вы сами без проблем можете это проверить буквально за 10 минут.
Здесь все написано : https://fx1.net/permvar.php .
 

procom

Новичок форума
Ну, уж если очень хочется попробовать скачай Download v3.1.1, остальное расскажу.
 

AlexanderG

Прохожий
Здравствуйте, искал информацию в гугле не смог найти. Подскажите пожалуйста: есть индикатор, ставит стрелки вверх и вниз по закрытию свечи, хочу добавить стрелку, условия которой: поза-позапрошлая свеча закрылась и имеет стрелку вниз И позапрошлая свеча закрылась и имеет стрелку вниз И прошлая свеча закрылась и имеет стрелку вниз и тогда на новой свече уже моя стрелка, т.е. 3 предыдущие свечи закрылись со стрелками, тогда появляется моя стрелка. Может есть ссылка на похожее или сможете подсказать как реализовать код (хотя бы направление в котором искать) Спасибо
 

AlexeyVik

Программист mql4 mql5
Здравствуйте, искал информацию в гугле не смог найти. Подскажите пожалуйста: есть индикатор, ставит стрелки вверх и вниз по закрытию свечи, хочу добавить стрелку, условия которой: поза-позапрошлая свеча закрылась и имеет стрелку вниз И позапрошлая свеча закрылась и имеет стрелку вниз И прошлая свеча закрылась и имеет стрелку вниз и тогда на новой свече уже моя стрелка, т.е. 3 предыдущие свечи закрылись со стрелками, тогда появляется моя стрелка. Может есть ссылка на похожее или сможете подсказать как реализовать код (хотя бы направление в котором искать) Спасибо
Сначала надо разобраться какие стрелки ставятся. Они могут быть просто графическими объектами и могут быть буферными отображениями.
В первом варианте надо искать объекты, проверять их время и код стрелки, потом на основании этой информации рисовать свою стрелку.
Во втором просто читается последние три бара и если все индексы буфера имеют значения, то в свой, дополнительный буфер заносить значение.
НО! Было-бы гораздо проще давать советы видя существующий код. И даже нашёлся-бы хороший человек который просто так, безвозмездно, сделал-бы так как надо.
 

Ugar

Гуру форума
Здравствуйте, искал информацию в гугле не смог найти. Подскажите пожалуйста: есть индикатор, ставит стрелки вверх и вниз по закрытию свечи, хочу добавить стрелку, условия которой: поза-позапрошлая свеча закрылась и имеет стрелку вниз И позапрошлая свеча закрылась и имеет стрелку вниз И прошлая свеча закрылась и имеет стрелку вниз и тогда на новой свече уже моя стрелка, т.е. 3 предыдущие свечи закрылись со стрелками, тогда появляется моя стрелка. Может есть ссылка на похожее или сможете подсказать как реализовать код (хотя бы направление в котором искать) Спасибо
Самое простое, это выполнить всё как описал.
Вызвать индикатор со стрелками по iCustom на i+1, i+2, i+3 барах и если на них всех есть стрелки, поставить свою на i баре.
Это самый простой, но не эффективный способ.
 

procom

Новичок форума
AlexeyVik, можешь проверять.

1. permvar2.dll копировать в C:\Program Files (x86)\ MT4\MQL4\Libraries\

2. #_Send 2xMA - индикатор, пересечение 2 МА, сигналы пересечения выводятся
в регистр Windows PermVar \ Trend 2xMA, имя - trenMA, для управления советником.
(В командной строке Windows запускаем regedit, поиск - Permvar).

3. #_Receive 2xMA - советник, колхозил (как выражаются проффи) сам, если что не так,
более продвинутые могут поправить.
Индикатор и советник устанавливаю на EUR 1 min, в другом окне открываю GBP 1 min и там тоже
запускаю этот же советник, который торгует по сигналам из EUR. Вроде отрабатывает правильно.
 

Вложения

Последнее редактирование:

AlexeyVik

Программист mql4 mql5
AlexeyVik, можешь проверять.

1. permvar2.dll копировать в C:\Program Files (x86)\ MT4\MQL4\Libraries\

2. #_Send 2xMA - индикатор, пересечение 2 МА, сигналы пересечения выводятся
в регистр Windows PermVar \ Trend 2xMA, имя - trenMA, для управления советником.
(В командной строке Windows запускаем regedit, поиск - Permvar).

3. #_Receive 2xMA - советник, колхозил (как выражаются проффи) сам, если что не так,
более продвинутые могут поправить.
Индикатор и советник устанавливаю на EUR 1 min, в другом окне открываю GBP 1 min и там тоже
запускаю этот же советник, который торгует по сигналам из EUR. Вроде отрабатывает правильно.
Спасибо, если когда-то будет это интересно, тогда и посмотрю, проверю.
 

dshk777

Интересующийся
Добавление мартингейла к советнику

Уважаемые тредеры, кто-нибудь подскажите как правильно дописать к советнику функцию "lot exponent" (множение лота при проигрыше)???
Сколько сам не пробовал, всеравно не работает сова. Заранее спасибо
 

eevviill2

Местный знаток
Уважаемые тредеры, кто-нибудь подскажите как правильно дописать к советнику функцию "lot exponent" (множение лота при проигрыше)???
Сколько сам не пробовал, всеравно не работает сова. Заранее спасибо

PHP:
Expand Collapse Copy
Lot*MathPow(Lot_multip,orders)
 

dshk777

Интересующийся
да я вставлял во внутренний код советника например extern double LotExponent = 2; и в сове отображается такое значение, но когда тестировал в тестере всеравно не удваивается. Может быть что-то еще дописать нужно???
 
Последнее редактирование:

OSS_5

Активный участник
да я вставлял во внутренний код советника например extern double LotExponent = 2; и в сове отображается такое значение, но когда тестировал в тестере всеравно не удваивается. Может быть что-то еще дописать нужно???

Посмотрите, как смиллион делает в эксперте https://forexsystemsru.com/1320396-post1.html

Только у него функция называется K_Lot.
 

MrGreen86

Гуру форума
да я вставлял во внутренний код советника например extern double LotExponent = 2; и в сове отображается такое значение, но когда тестировал в тестере всеравно не удваивается. Может быть что-то еще дописать нужно???

если вы добавите extern double LotExponent = 2; и на этом все, то ничего не изменится.

нужно посчитать серию убыточных ордеров
PHP:
Expand Collapse Copy
int loss_orders = 0;
for(i=OrdersHistoryTotal()-1;i>=0;i--) {
   if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
   if(OrderSymbol() != _Symbol) continue;
   if(OrderMagicNumber() != magic) continue;
   if(OrderProfit()>0) break;
   loss_orders++;
   }
затем, как уже подсказывали выше, посчитать новый лот.
PHP:
Expand Collapse Copy
double new_lot = NormalizeDouble(Lot*MathPow(LotExponent,loss_orders),lot_digits);
 

vladradon

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