Aleksey983 Опубликовано 28 июня, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 июня, 2014 Сделал вместо == Теперь открывает только Sell и не при смене цвета,а один за другим. Вы ранее писали : "А у меня гистограмма" - это означает, что индюк в подвале (отдельном окне под графиком) значение например = 45Вдумайтесь: КАК можно сравнивать Ask > 45 ??? Поэтому у Вас всегда Селл потому что Bid Ранее я писал КАК нужно сравнивать. Ведь значением буфера будут либо пусто (Empty_Value), либо некая цифра (например 45), поэтому нужно писать:if (мой_индюк_буф0 != Empty_Value && ... ) иif (мой_индюк_буф1 != Empty_Value && ... ). Понятно? ВОТ ОГРОМЕННОЕ СПАСИБО!!! бум пробовать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 29 июня, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 июня, 2014 Здраствуйте всем,подскажите как правильно записать строчку условия что бы советник закрывал сделки от процента баланса, я написал вот так :extern double Percent_Risk = 5.0; Close_loss=NormalizeDouble(OrderProfit()-AccountBalance()*100/Percent_Risk,2);if(Close_loss) {Close_Orders();}Получается что при открытии самым минимальным лотом,советник тут же закрывает все. Изменено 30 июня, 2014 пользователем denis77515 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 30 июня, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 июня, 2014 Здраствуйте всем,подскажите как правильно записать строчку условия что бы советник закрывал сделки от процента баланса, я написал вот так :extern double Percent_Risk = 5.0; Close_loss=NormalizeDouble(OrderProfit()-AccountBalance()*100/Percent_Risk,2);if(Close_loss) {Close_Orders();}Получается что при открытии самым минимальным лотом,советник тут же закрывает все.Да уж... Рассмотрим простой пример:Баланс 100$, Профит ордеров = -6$. Теперь смотрим на Вашу формулу:Close_loss= -6 - 100 * 100 / 5 = -6 - 2000 = -2006if (-2006) - что Вам даёт?Мой вариант:bool Close_loss = false;Close_loss= AccountBalance()/100*Percent_Risk + OrderProfit() if(Close_loss) {Close_Orders();} 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 30 июня, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 июня, 2014 Спасибо за критику но я пробовал записать условие таким образом Close_loss=NormalizeDouble(OrderProfit()-AccountBalance()*100/Percent_Risk,2); if(Close_loss && OrderProfit Close_loss=NormalizeDouble(OrderProfit()-AccountBalance()/Percent_Risk *100,2); if(Close_loss && OrderProfit Изменено 30 июня, 2014 пользователем denis77515 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 30 июня, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 июня, 2014 Close_loss=NormalizeDouble(OrderProfit()-AccountBalance()*100/Percent_Risk,2); if(Close_loss && OrderProfit Вы такое сами придумываете или копируете откуда-нибудь? (просто интересно)Как можно double (Close_loss=NormalizeDouble) без логической операции в if() засунуть? Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 30 июня, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 июня, 2014 :d скопировал на скору руку, а чего скопировал как теперь стало понятно сам не понял :d Ссылка на сообщение Поделиться на другие сайты More sharing options...
buch20 Опубликовано 2 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 июля, 2014 Добрый день . 3 урок . Пишет такие предупреждения в тестере :return value of 'OrderModify' should be checked return value of 'OrderClose' should be checked return value of 'OrderSelect' should be checked Подскажите что не так . Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 2 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 июля, 2014 Эти функции возвращают значение true/false - справилась/несправиласьПоэтому хочет чтоб Вы поинтересовались и похвалили ;)Можно вызвать так: bool res = OrderClose(...); 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
yasd810 Опубликовано 3 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 июля, 2014 Доброго времени сутокЕсть два вопроса, подскажите1. Может ли элемент массива содержать структуру. Например, есть структура из 3 элементов (тикет , объем и прибыль выбранного ордера). Может ли массив состоять из элементов, каждый из которых содержит в себе такую структуру?2. Если да, можно ли сортировать массив с помощью функции ArraySort по элементам структур (например расположить все элементы массива в порядке возрастания прибыли)?Если можно приведите пример Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 3 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 июля, 2014 Есть два вопроса, подскажите1. Может ли элемент массива содержать структуру?2. Если да, можно ли сортировать массив с помощью функции ArraySort?Если можно приведите примерЕсли Вас интересуют такие вопросы - значит Вы не новичок в MQL-программировании => можете самостоятельно забацать такой массивчик и попробовать отсортировать. Моё имхо (не проверял!): массив структур возможен (только вот не знаю: если структура содержит строки - то возможны варианты), а вот сортировка, да ещё и по конкретному полю структуры - нет. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
buch20 Опубликовано 3 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 июля, 2014 Добрый день . У меня опять несколько вопросов . 1) индикатор iMA .ma_shift - Сдвиг индикатора относительно ценового графика.Я так понимаю , что если поставить значение 0 , то сдвига не будет ?2) Для того чтобы проверить изменила МА направление движения надо написать код ?МА1 = double iMA(symbol, 0, 10, 0, MODE_SMA, PRICE_CLOSE, 1);МА2 = double iMA(symbol, 0, 10, 0, MODE_SMA, PRICE_CLOSE, 2); if МА1 И если, допустим, МА будет больше 2х значений, можно это описать в цикле или нужно выполнять сравнение каждый раз ?Если можно написать в цикле то примерно как это будет выглядеть . Так же если вместо MODE_SMA , PRICE_CLOSE написать значение 0 , то программа это поймет ? И можно ли эти переменные модифицировать ?3) И как сделать так , чтобы кидаешь сову на один ТФ , а часть индикаторов берет значения с другого ? Насколько я понимаю что в условиях индикатора в значении "период" указываем значение подходящего нам ТФ . например PERIOD_H4 , а сова на Н1 .Или эта информация есть в дальнейших уроках ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 3 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 июля, 2014 1) индикатор iMA .ma_shift - Сдвиг индикатора относительно ценового графика.Я так понимаю , что если поставить значение 0 , то сдвига не будет ?Да. Цитата 2) Для того чтобы проверить изменила МА направление движения надо написать код ? Да. Цитата МА1 = double iMA(symbol, 0, 10, 0, MODE_SMA, PRICE_CLOSE, 1);МА2 = double iMA(symbol, 0, 10, 0, MODE_SMA, PRICE_CLOSE, 2); if МА1 Этим Вы определите направление МА на последних барах. Смена направления смотрится на минимум 3 барах Цитата И если, допустим, МА будет больше 2х значений, можно это описать в цикле или нужно выполнять сравнение каждый раз ? Первую часть фразы не понял. Нужно сравнивать не в цикле - зачем?, а по закрытии текущего 0-бара Цитата Так же если вместо MODE_SMA , PRICE_CLOSE написать значение 0 , то программа это поймет ? И можно ли эти переменные модифицировать ? Это не переменные а именованные константы и у каждой есть своё значение смотри здесь Цитата 3) И как сделать так , чтобы кидаешь сову на один ТФ , а часть индикаторов берет значения с другого ? В коде совы вызываете индикатор с другого ТФ - если сделаете аккуратно - проблем нет. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Вячеслав_57 Опубликовано 8 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 июля, 2014 По прочтению этой темы, а так же просмотру уроков Сергея xbms (за, что Вам и благодарность) я написал своего первого советника. Советник написан на основе MACD. В общем не сложный, но тем не менее показывает (показывал бы) некоторую прибыльность, беда в том, что он не всегда открывает и что хуже не всегда закрывает ордера. Примерно из десяти открытых ордеров один не закрывается не смотря на то, что условия для закрытия ордера наступили. Аналогично не всегда открывает ордера, хотя все условия для открытия ордера есть. Я конечно могу ставить стоп лосс и он предусмотрен, но для получения статистики, при скольких пунктов в минусе будет срабатывать советник на закрытие я стоп лосс отодвинул заведомо дальше возможного срабатывания. Не много о советнике. Ордер на покупку или на продажу открывается сразу как совпадут движения цены на нескольких тайм фреймах. На каждую пару баров свой индикатор (Они все MACD только переименованные) Советник был установлен на 23 парах, потом уменьшил количество пар да шести и всё равно уже однажды ордер не был открыт. Вот и вопрос от чего не закрываются ордера и как с этим бороться? И второй вопрос на скольких валютных парах можно устанавливать советник, что бы они не мешали друг другу?И сразу третий вопрос сколько терминалов можно одновременно установить и запустить на компьютере, что бы они не конфликтовали? Заранее спасибо. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 8 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 июля, 2014 Вячеслав_57Сова не открывает/не закрывает ордера - прогоните в тестере в визуал мод. только придётся вручную установить индюк с аналогичными параметрами. Вопросы могут отпасть.По поводу загрузки терминала: Мт4 - однопоточный, т.е. все индюки и совы выполняются последовательно друг за другом после прихода тика. т.е. на спокойном рынке я думаю проблем не будет, а вот на новостях тики будет пропускать. Поэтому Вам никто не подскажет - сами решайте (мы ж не знаем насколько Ваши совы наворочены, да и производительность Ваших компов для нас загадка). Ссылка на сообщение Поделиться на другие сайты More sharing options...
pagatr Опубликовано 10 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 июля, 2014 Всем привет!Есть такая проблема...Объявляю переменнуюMqlRates mRates[];Далее в коде заполняю и обращаюсь к первому элементуRefreshRates(); CopyRates(s,PERIOD,0,1,mRates); Price=NormalizeDouble(mRates[0].open,digits);Всегда при первом запуске! эксперта появляется ошибка "array out of range" и указатель на mRates[0]В сети нашёл такое объяснение - "Да, динамические массивы надо явно распределять перед использованием."Подскажите, пжлст, как это сделать. Добавлено: 10-07-2014 11:01:46Советник был установлен на 23 парах, потом уменьшил количество пар да шести и всё равно уже однажды ордер не был открыт. Вот и вопрос от чего не закрываются ордера и как с этим бороться? И второй вопрос на скольких валютных парах можно устанавливать советник, что бы они не мешали друг другу?И сразу третий вопрос сколько терминалов можно одновременно установить и запустить на компьютере, что бы они не конфликтовали? Заранее спасибо. 1. У брокеров существует ограничение по количеству открытых ордеров, в т.ч. и отложенных. Обычно не больше 200 шт.Смотрите какую ошибку выдаёт эксперт.2. Мне не совсем понятно зачем устанавливать несколько советников? Скорее всего совы конфликтуют между собой. В терминале предусмотрен всего один поток для связи с сервером и если он занят каким нибудь экспертом или скриптом, то другой получает ошибку. Чтобы проверить занят ли поток используйте IsTradeAllowed(). Лучше пусть один эксперт торгует всеми парами...3. Точно сказать не могу, но у меня 6 работаю круглосуточно. Изменено 10 июля, 2014 пользователем pagatr Ссылка на сообщение Поделиться на другие сайты More sharing options...
blackmaloi Опубликовано 10 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 июля, 2014 Вопроса больше нет)Если кому интересно как синхронизировать терминалы, я нашел 3 способа:1)Файлы2)Pipe каналы3)Memory Mapped FilesЯ не силен в программировании, поэтому не знал как можно это сделать(синхронизацию терминалов). Изменено 14 июля, 2014 пользователем blackmaloi Ссылка на сообщение Поделиться на другие сайты More sharing options...
elruso Опубликовано 14 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 июля, 2014 Добрый день . 3 урок . Пишет такие предупреждения в тестере :return value of 'OrderModify' should be checked return value of 'OrderClose' should be checked return value of 'OrderSelect' should be checked Подскажите что не так . Возвращают булевые значения проверь короче:if(OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,Blue)){ Print("OK"); }else Print("NO"); или посмотри урок как переносить советники на новый билд! Ссылка на сообщение Поделиться на другие сайты More sharing options...
Enter Опубликовано 18 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 июля, 2014 Привет всем!!! Подскажите пожалуйста, Как программно, изменить обьем лота каждую неделю! Например каждый понедельник - увеличение лота на 0.1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
elruso Опубликовано 18 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 июля, 2014 Привет всем!!! Подскажите пожалуйста, Как программно, изменить обьем лота каждую неделю! Например каждый понедельник - увеличение лота на 0.1 А чё там сложного проверь на день неделиint DayOfWeek(); 0-воскресенье 1,2,3..... Загляни в документы и всё станет ясно! 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Enter Опубликовано 18 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 июля, 2014 ТИПА - if (DayOfWeek()==1) Lot=Lot+0.1;???Но надо ведь что бы сова запоминал обьем последнего лота и плюсовал после закрытия ордера! Ссылка на сообщение Поделиться на другие сайты More sharing options...
elruso Опубликовано 18 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 июля, 2014 ТИПА - if (DayOfWeek()==1) Lot=Lot+0.1;???Но надо ведь что бы сова запоминал обьем последнего лота и плюсовал после закрытия ордера! Сделай 2 переменные lot и fixLot fixLot выведи как эхтерн и её увеличивай! А потом просто приравнивай к lot 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Юра13 Опубликовано 18 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 июля, 2014 Здравствуйте!Я чуть чуть не в тему, есть ли версия курсов для Андроида, хотел на даче посмотреть, а то дома текучка заедает? Спасибо Юра. Ссылка на сообщение Поделиться на другие сайты More sharing options...
SERGOOS Опубликовано 19 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 июля, 2014 Здравствуйте, Сергей! Огромное спасибо за Ваш труд по созданию обучающих уроков.Напишите пожалуйста урок как переписать советник из МТ4 в МТ5. Очень нужно для увеличения скорости оптимизации.Спасибо! Ссылка на сообщение Поделиться на другие сайты More sharing options...
Вячеслав_57 Опубликовано 24 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 июля, 2014 Столкнулся с необъяснимым (мной) явлением - на Н4 советник работает прекрасно, как задумано открывает ордера, как задумано закрывает и трейлинг стоп работает, даже какие то пункты зарабатывает, мало только. Тестирую на меньшем тайм фрейме график идет устойчиво вниз с небольшими отклонениями вверх и тестер не оптимизирует параметры, соответствующие разделы пусты. И при этом выдаёт ошибку: 2014.07.24 17:59:12.880 TestGenerator: unmatched data error (volume limit 814 at 2014.07.22 06:00 exceeded). Гугл переводчик говорит "Бесподобная ошибка". Анализ сделок показывает там где нужно было Buy советник делает Sell и наоборот. С чем это может быть связано, как объяснить, на Н1 всё работает прекрасно? О советнике: третий урок + трейлинг стоп, индикаторы MA и SSRC, совсем простенький я только учусь. На всякий случай если кто нибудь заинтересуется прикладываю советник.И сразу второй вопрос: Как сделать, что бы алерт сигналил определённое количество раз, два, три пять, но не более чем задано?Заранее благодарю. TrailingStop.mq4 Изменено 25 июля, 2014 пользователем Вячеслав_57 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Enter Опубликовано 26 июля, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 июля, 2014 Привет ВСЕМ!!!Вопрос прогерам!Сначала о сове:Советник при определенных настройках, сам меняет свой Magic, в процессе работы.Все работает как надо, но есть проблема!В начале новой недели или при каких то сбоях в связи, он возвращается к первоначальному Magic, который прописан в настройках.Как сделать, например так что бы советник скидывал последние настройки во внешний файл, и подгружал при необходимости.При сбоях и в начале новой недели?Ну или при открытии терминала, в котором он же уже работал и выставил ордера! Например при отключении электроэнергии в сети!!! Изменено 26 июля, 2014 пользователем Enter Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти