4er58 Опубликовано 2 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 ноября, 2017 Сергей ,будьте добры провести урок по написанию советника ( индикатора) "Экономический календарь " , я знаю готовые эксперты есть , но хочется самому писать такие штуки , которые строят календари и т.п. сайт желательно использовать investig.com или в связке несколько сайтов и кто первый обновит данные , те данные советник и покажет - главное скорость в получении информации . Чтобы в терминале были все нужные графы : Календарь.png Изменено 2 ноября, 2017 пользователем 4er58 Ссылка на сообщение Поделиться на другие сайты More sharing options...
SVS696 Опубликовано 7 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 ноября, 2017 Возник вопрос касаемо библиотек, мне надо, чтобы функции библиотеки использовали внешние (редактируемые перед запуском) переменные, в интернете видел, что достаточно в самой библиотеке продублировать необходимые extern/input переменные, но тогда во время работы программы они не подменяются переменными из основной программы, править каждую функцию как-то не очень хочется передавая кучу лишних параметров, особенно ели extern подразумевает под собой изменения в ходе выполнения. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 ноября, 2017 SVS696 может не понял вопрос...У меня во внешней библиотеке функции ММ и относящиеся к ним input переменные. библиотека подключается к сове - происходит тупо копирование кода библиотеки в то место совы, где была объявлена библиотека. Т.е. input переменные из библиотеки Вы можете увидеть среди переменных совы, если туда вставите вызов типа: #include <_mm.mqh>Кстати в сове переменные из библиотеки доступны как свои. Ссылка на сообщение Поделиться на другие сайты More sharing options...
SVS696 Опубликовано 7 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 ноября, 2017 SVS696 может не понял вопрос...У меня во внешней библиотеке функции ММ и относящиеся к ним input переменные. библиотека подключается к сове - происходит тупо копирование кода библиотеки в то место совы, где была объявлена библиотека. Т.е. input переменные из библиотеки Вы можете увидеть среди переменных совы, если туда вставите вызов типа: #include <_mm.mqh>Кстати в сове переменные из библиотеки доступны как свои. mqh же только заголовочный файл? Не, я знаю, что можно тупо туда код запихнуть, но это не совсем то.Проблема вся в том, что скомпилировать библиотеку не выйдет, если не указанны все переменные, как и программу...Добавлено: 07-11-2017 17:27:32если попытаться внешние переменные вставить внутри#import "lib.ex4"СЮДА Т.Е. вставить#import, то импорт рассыпается и компилятор ругается, что нет закрытия #import Изменено 7 ноября, 2017 пользователем SVS696 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 ноября, 2017 Значит не правильно понял...1. Вы хотите создать общие переменные для библиотеки и совы?2. Вы хотите непременно подключать компилированную библиотеку, а не компилированную не хотите?Если сейчас правильно понял, то не знаю чем помочь.Если это Ваша библиотека, то подключите её не компилированную и радуйтесь общим глобальным переменным - вообще не вижу препятствий. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
4er58 Опубликовано 9 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 ноября, 2017 Ребят открыл счет в альпари , и в терминале , при сделках стали выводиться комментарии типо таких 1[0] . Советники ни какие не висят , а счет стал комментироваться , что за ерунда , не отслеживает ли или не копирует ли сделки брокер ? хрень какая то ... комменты.png Ссылка на сообщение Поделиться на другие сайты More sharing options...
alex202 Опубликовано 11 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 ноября, 2017 Здравствуйте! Подскажите что не правильно в этом блоке (он проводит только один цикл )int GetProfitLoss()// Количество последних убыточных ордеров{ int Loss = 0; int N=30; datetime lastCloseTime = 0; int cnt = OrdersHistoryTotal(); for(int i = cnt-N; i { if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && lastCloseTime { lastCloseTime = OrderCloseTime(); } if (OrderProfit() if(OrderProfit()>0) break; } return(Loss);} Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 11 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 ноября, 2017 Подскажите что не правильно в этом блоке (он проводит только один цикл ) Вы считаете профит ордеров на всех парах и магиках? по коду не понятно...Вы считаете что ордера записываются в порядке их времени закрытия - зачем дополнительная проверка?Ну и наконец вишенка - после первого профитного ордера цикл заканчивается.По идее этого достаточно:int GetProfitLoss()// Количество последних убыточных ордеров{ int Loss = 0; int N=30; int cnt = OrdersHistoryTotal(); for(int i = cnt-N; i { if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderProfit() } return(Loss);} 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
alex202 Опубликовано 11 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 ноября, 2017 1. Да я считаю ордера на всех парах и магиках.Спасибо за ваш ответ. Не подскажете как сделать чтобы он считал количество последних убыточных ордеров, после профитных, а не N количество. Изменено 11 ноября, 2017 пользователем alex202 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 11 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 ноября, 2017 Так начните цикл с конца - с последнего закрытого, тогда Вы правильно написали условие if(OrderProfit()>0) break;т.е.:int cnt = OrdersHistoryTotal(); for ( int i = cnt-1; i >= 0; i-- ) Изменено 11 ноября, 2017 пользователем 0ll 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
alex202 Опубликовано 11 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 ноября, 2017 Сделал, только снова что то не так :-sint GetProfitLoss()// Убыток по закрытым ордерам (количество последних убыточных ордеров){ int Loss = 0; int cnt = OrdersHistoryTotal(); for( int i = cnt-1; i { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId) { if (OrderProfit() if(OrderProfit()>0) break; } } } return(Loss);} Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 11 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 ноября, 2017 Вы писали, что считаете ордера на всех парах и магиках, а зачем тогда проверка?Это условие напишите так: if ( OrderProfit() В остальном замечаний нет - будет работать. Изменено 11 ноября, 2017 пользователем 0ll 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
alex202 Опубликовано 11 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 ноября, 2017 Всё спасибо большое. В общем как то так, пришлось условие немного подкорректировать ( i >= 0, а не i int GetProfitLoss()// Убыток по закрытым ордерам (количество последних убыточных ордеров){ int Loss = 0; int cnt = OrdersHistoryTotal(); for( int i = cnt-1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId) { if (OrderProfit() } } } return(Loss);} 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Александр_F Опубликовано 11 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 ноября, 2017 Здравствуйте трейдеры! Помогите решить проблему с автоматизацией стратегии. Суть заключается в том, что бы входить в сделку лишь на первой свече пользовательского индикатора "Xo" (Скрин прилагаю). В данном советнике отображена функция входя в сделку на зеленых свечах и на продажу при красных (постоянное открытие). Однако мне нужно что бы вход был лишь по первой свече данного индикатора. Как обыграть эту задачу, просто ума не приложу ~x( ~x( ~x( Буду рад любой помощи. Заранее Спасибо. Xo.mq4Советник.mq4Безымянный.png Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 11 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 ноября, 2017 Как обыграть эту задачу, просто ума не приложу У индикатора 2 буфера - зелёный и красный. Условие на покупку:if ( red_buf[2] == 0 && green_buf[1] >=1 ) open_buy(); // переменные и функции вымышленные (на всякий)[2] - номер бара на котором брать значение индюка. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Александр_F Опубликовано 11 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 ноября, 2017 Извините, но я не совсем понял... После взятия значений индикатора, я пишу условие на наличие баров одного из цветов и присваиваю им массив (т.е. номер бара)... Это так должно выглядеть? (если да, то по какой причине возникает ошибка array required?) //+------------------------------------------------------------------+green_buf = iCustom (NULL,0,"Xo", KirPER , 0, 0);red_buf = iCustom (NULL,0,"Xo", KirPER , 1, 0);//+------------------------------------------------------------------+ Сделка на продажу if (red_buf[1] >= 1 && green_buf[2] == 0 ) { if (CountSell() == 0 && DoTrades == TRUE) //+ Проверка наличия ордеров в рынке { if (OrderSend (Symbol(), OP_SELL, Lots, Bid, Slippage, sl_s, tp_s, comment, Magic, 0, clrRed) { Print ("Ошибка открытия ордер на продажу"); } } }//+------------------------------------------------------------------+ Сделка на покупку if (red_buf[2] == 0 && green_buf[1] >=1) { if (CountBuy ()==0 && DoTrades == TRUE) //+ Проверка наличия ордеров в рынке { if (OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, sl_b, tp_b, comment, Magic, 0, clrBlue) { Print ("Ошибка открытия ордер на покупку"); } } }//+------------------------------------------------------------------+ Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 12 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 ноября, 2017 Александр_F всё немного сложнее. iCustom возвращает значение индикатора на запрашиваемом баре, нам нужно знать 4 значения: зелёный на 1 и 2 баре и красный на 1 и 2 баре. Как их получить, есть несколько способов, самый доступный для понимания, но затратный с точки зрения ресурсов компа:red_buf1 = iCustom (NULL,0,"Xo", KirPER , 1, 1);red_buf2 = iCustom (NULL,0,"Xo", KirPER , 1, 2);green_buf1 = iCustom (NULL,0,"Xo", KirPER , 0, 1);green_buf2 = iCustom (NULL,0,"Xo", KirPER , 0, 2);и далее без массивов - if (red_buf1 >= 1 && green_buf2 == 0 )я не советую использовать значение индюка на 0 баре, ибо там может быть хаос.если индюк перерисовывает, то входы, в итоге, будут не соответствовать картинке. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Александр_F Опубликовано 12 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 ноября, 2017 0ll, Спасибо за ваш ответ. Однако данная функция не решила проблему. Сделки стали открываться на третьей свече сигналов индикатора и в дальнейшем советник продолжает серию открытия ордеров (Скрин прилагаю)//+------------------------------------------------------------------+ red_buf1 = iCustom (NULL,0,"Xo", KirPER , 1, 1); red_buf2 = iCustom (NULL,0,"Xo", KirPER , 1, 2); green_buf1 = iCustom (NULL,0,"Xo", KirPER , 0, 1); green_buf2 = iCustom (NULL,0,"Xo", KirPER , 0, 2);//+------------------------------------------------------------------+ Сделка на продажу if (red_buf1 { if (CountSell() == 0 && DoTrades == TRUE) { if (OrderSend (Symbol(), OP_SELL, Lots, Bid, Slippage, sl_s, tp_s, comment, Magic, 0, clrRed) { Print ("Ошибка открытия ордер на продажу"); } } }//+------------------------------------------------------------------+ Сделка на покупку if (red_buf2 == 0 && green_buf1 >= 1) { if (CountBuy ()==0 && DoTrades == TRUE) { if (OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, sl_b, tp_b, comment, Magic, 0, clrBlue) { Print ("Ошибка открытия ордер на покупку"); } } }//+------------------------------------------------------------------+ Безымянный.png Изменено 12 ноября, 2017 пользователем Александр_F Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 12 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 ноября, 2017 Просто индюк слегка подрисовывает, имхо. Попробуйте погонять в визуальном режиме. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Александр_F Опубликовано 12 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 ноября, 2017 Да, вы правы, индюк действительно перерисовывает. Однако, все равно не понятно почему советник продолжает открывать ордера в одном из направлений. Суть вопроса именно в препятствии дальнейшему открытию сделок. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 12 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 ноября, 2017 red_buf1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
sniv Опубликовано 12 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 ноября, 2017 Не знаю поможет ли точно:можно попробовать на каждом баре писать значения индюка в boolshift_red_1 = shift_red_2 =shift_green_1 = shuft_green_2 = if(shift_red_1==true&&shift_red_2==true){...} Ссылка на сообщение Поделиться на другие сайты More sharing options...
Александр_F Опубликовано 12 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 ноября, 2017 0ll, Не помогло, да и тенденция открытия сделок существует как на Buy так и на Sell. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 12 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 ноября, 2017 Александр_F трудно стаказать что-то, надо изучать код. По своему опыту скажу, индюки показывающие направление торговли сами по себе бесполезны, их потолок - фильтрация сделок по другим сигналам. имхо. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Александр_F Опубликовано 12 ноября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 ноября, 2017 0ll, так то да, пользы в них очень мало. Но если их использовать в торговле бинарными опционами, где прибыль зависит от положения цены выше или ниже точки открытия. Такие советники могут быть очень полезны. Скажем в рамках 2-3 баров. П.э. я просто хотел поэкспериментировать с данными индикаторами. А уже потом перевести данный код в торговлю на БО (там всего горстка отличий) 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти