0ll Опубликовано 18 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 октября, 2017 axwellweb 1. Есть брокеры и типы счетов которые не принимают в функции OrderSend ровни СЛ и ТП, поэтому надо их устанавливать после открытия ордера.2. Функция OrderSend возвращает либо номер тикета, либо -1 в случае ошибки открытия, другого не дано. Если номер тикета получен, значит ордер прописан везде и обязан находится и модифицироваться.Иван В повторяю: если ордер не модифицирован, то это ошибка, она записывается в журнал. Надо открыть журнал, найти код ошибки и посмотреть по справочнику в чём дело. Мы за Вас это не сделаем. Ссылка на сообщение Поделиться на другие сайты More sharing options...
pisarev28 Опубликовано 19 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2017 Уважаемые программисты, вопрос. Висит сетка ордеров длительное время. Как можно модифицировать общий TP учитывая накопившийся своп ? Уже голову сломал. Может это уже где-то обсуждалось - дайте ссылку. Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 19 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2017 Свежий урок:http://tradelikeapro.ru/mql4-strategiya-cherepah/ 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 19 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2017 Уважаемые программисты, вопрос. Висит сетка ордеров длительное время. Как можно модифицировать общий TP учитывая накопившийся своп ? Уже голову сломал. Может это уже где-то обсуждалось - дайте ссылку.Своп это деньги. Делите деньги на стоимость пункта получаете пункты для объёма 1 лот. Затем увеличиваете или уменьшаете пропорционально объёму ордеров своей сетки.Единственная проблема - надо сохранять своп до следующих суток. чтоб вычислить коррекцию именно за текущий день. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Иван В Опубликовано 19 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2017 Иван В повторяю: если ордер не модифицирован, то это ошибка, она записывается в журнал. Надо открыть журнал, найти код ошибки и посмотреть по справочнику в чём дело. Мы за Вас это не сделаем. Добрый день! Вот мой журнал, последняя строчка горит красным, типо ошибка, но код ошибки не пишет, а вечером работает все нормально советник выставляет ордер по нужной цене, а с ним ТП и СЛ. Косяки только днем. Как я понимаю это ошибка из-за сервера альпари, днем даже руками не сразу выставишь. 2017.10.16 11:18:09.084 '1738043': order was opened : #1782315834 sell 1.00 EURUSD at 1.1796 sl: 0.0000 tp: 0.00002017.10.16 11:18:09.084 '1738043': modify order #1782315834 sell 1.00 EURUSD at 1.1796 sl: 0.0000 tp: 0.0000 -> sl: 1.2096 tp: 1.17952017.10.16 11:18:09.256 '1738043': modification of order #1782315834 sell 1.00 EURUSD at 1.1796 sl: 0.0000 tp: 0.0000 -> sl: 1.2096 tp: 1.1795 failed [Off quotes] Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 20 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 октября, 2017 2017.10.16 11:18:09.256 '1738043': modification of order #1782315834 sell 1.00 EURUSD at 1.1796 sl: 0.0000 tp: 0.0000 -> sl: 1.2096 tp: 1.1795 failed [Off quotes]Нет цен, попробуйте перед модификацией ордера обновить цены RefreshRates(); Ссылка на сообщение Поделиться на другие сайты More sharing options...
Roman 13 Опубликовано 24 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 октября, 2017 Здравствуйте подскажите как сделать, что бы лот закрывался частично например, половина лота закрылось на расстоянии 200 пунктов от открытия, а остальная часть по пересечению средних. Спасибо. Ссылка на сообщение Поделиться на другие сайты More sharing options...
alex202 Опубликовано 24 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 октября, 2017 Здравствуйте! Подскажите как в MQL4 прописать(посчитать) сумму нескольких убыточных ордеров :-s? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 25 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 октября, 2017 Roman 13 просто в функцию закрытия ордера вставляете нужный размер лота.alex202 делаете цикл по ордерам, такой-же как при пересчёте и там добавляете строку:if ( OrderProfit() как добавить переменную double знаете? Ссылка на сообщение Поделиться на другие сайты More sharing options...
alex202 Опубликовано 26 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 октября, 2017 Спасибо! Но этот вариант не подойдёт он считает последние ордера которые закрылись в одно время , а если ордер открыт и закрыт ранее, он уже не учитывается. Я думаю может есть какой-то вариант через глобальные переменные? Добавлено: 26-10-2017 09:07:10Вот такой вариант вы предлагаете или что то др. ?void BuyOrderLotsMgmall63(){double Loss= 0 ; // переменная double SLBS = iATR(NULL, 0, InpAtrPeriod, 0); double TPBS = iATR(NULL, 0, InpAtrPeriod, 0); SLBS *= ATR_MultiplierSL; TPBS *= ATR_MultiplierTP * TPBSOn;double profit= 0; datetime lastCloseTime = 0; int cnt = OrdersHistoryTotal(); for (int i=0; i { if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && lastCloseTime { lastCloseTime = OrderCloseTime();profit = OrderProfit(); // переменная CurrentBuyLots63 = OrderLots(); } } if ((profit >= KFUp)||((profit > KFDn ) && (profit { CurrentBuyLots63 = CurrentBuyLots63 * KP + 0; if (true) CurrentBuyLots63 = lot; } else if (profit // убыточные ордера { CurrentBuyLots63 = NormalizeDouble(0.01 * OrderProfit() * KF, 2); Изменено 26 октября, 2017 пользователем alex202 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Pioner_rus Опубликовано 26 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 октября, 2017 Работал кто на MQL4 с DynamicBreakoutBox? Дайте, пож, пример кода, где он применяется! Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 26 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 октября, 2017 alex202 я Вам такого предложить не мог :dв Вашем примере фрагмент функции расчёта лота от последнего закрытого ордера (кстати с ошибкой), а Вы спрашивали про сумму нескольких убыточных ордеров.Pioner_rus про DynamicBreakoutBox впервые слышу. Ссылка на сообщение Поделиться на другие сайты More sharing options...
alex202 Опубликовано 26 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 октября, 2017 Я примерно имел ввиду, так сказать образ мышления, этот отрывок кода :d . А не подскажете в чём ошибка? :-/ Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 26 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 октября, 2017 А не подскажете в чём ошибка? :-/Ошибочно использование функции OrderProfit() вне цикла перебора ордеров. Вы можете указать какой ордер будет активен после завершения цикла? я вот не смогу и советую найти ордер и сохранить нужные параметры во внешние переменные и потом их использовать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
4er58 Опубликовано 28 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 октября, 2017 Привет , всем , сначала хотел по благодарить Сергея , что сделал видео уроки . Учебник не все могут понять , я среди них . А тут все подробно и с пониманием дела . Только что начал изучать MQL4 . И сразу на втором уроке нашел ошибку , точнее не до чет : советник находит макс и мин цену на заданном кол-ве баров скажем 10 баров , но проходя дальше , он не изменяет эти величины в этом диапазоне 10 баров , а считает все больше и больше новые экстремумы . Просьба добавить с подробными комментариями нужный код чтобы советник обновлял на каждых 10 барах макс и мин значение . MQL обновился поэтому на всякий случай выкладываю версию второго урока Test2 по новому .Вот функция которая определяет максимальную цену за заданное кол-во баров(total_candle) :void GetMaxPrice(){ //задаем цикл i-бар , перечисляем их от 0 до 10 for(int i=0; i //находим макс цену { mp = iHigh(Symbol() ,PERIOD_CURRENT,i); if(mp > maxprice) maxprice = mp; } return;} Сергей , просьба . Научите также , как инициализировать ошибки и предупреждения в метаидиторе , вижу предупреждение или ошибку после компиляции , но ума не приложу , что оно означает и куда надо копать . урок_2_циклы.mq4 Изменено 28 октября, 2017 пользователем 4er58 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 октября, 2017 сразу на втором уроке нашел ошибкуПеред вызовом функции GetMaxPrice() нужно обнулить maxprice = 0, для минимума - наоборот сделать максимальным. Ссылка на сообщение Поделиться на другие сайты More sharing options...
4er58 Опубликовано 29 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 октября, 2017 Перед вызовом функции GetMaxPrice() нужно обнулить maxprice = 0, для минимума - наоборот сделать максимальным. Спасибо , но куда и как правильно вставить не пойму ? У нас в глобальных переменных уже присвоено :double minprice = 99999, maxprice=-99999 ; Как правильно обнулить записать, не научил Сергей на втором уроке обнулять :) void OnTick(){ minprice =0 , maxprice= 0; // Здесь вписываем ? // Сначала получаем макс и мин цены GetMaxPrice(); GetMinPrice(); Изменено 29 октября, 2017 пользователем 4er58 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 октября, 2017 Как правильно обнулить записать, не научил СергейОбнулить это значит присвоить значение "0" :)ВНИМАНИЕ, ещё раз повторяю: минимальное значение обнулять не надо! наоборот сделать его максимальным, т.е. minprice = 99999; (например)Вставили правильно. Ссылка на сообщение Поделиться на другие сайты More sharing options...
4er58 Опубликовано 29 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 октября, 2017 Обнулить это значит присвоить значение "0" ВНИМАНИЕ, ещё раз повторяю: минимальное значение обнулять не надо! наоборот сделать его максимальным, т.е. minprice = 99999; (например)Вставили правильно. Так не работает алгоритм как надо , значения были присвоены еще на уроке ( максимальные и минимальные значения min и max price ). Посмотрите пожалуйста весь код в первом моем сообщении и поправьте пожалуйста с комментариями, что бы мог разобраться . Тяжело учиться когда и так все туго дается , так еще Сэнсэй не видит и не исправляет недочеты :( . Сергей , ты где ? Изменено 29 октября, 2017 пользователем 4er58 Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 30 октября, 2017 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 октября, 2017 Сергей , просьба . Научите также , как инициализировать ошибки и предупреждения в метаидиторе , вижу предупреждение или ошибку после компиляции , но ума не приложу , что оно означает и куда надо копать . Тут я! :)Всё просто, нужно лишь, как уже писали выше, обнулить переменные maxprice, minprice, а лучше присвоить им какие-то экстремальные значения : maxprice=-99999;minprice = 99999;т.е. будет так:void GetMaxPrice(){ maxprice=-99999; //задаем цикл i-бар , перечисляем их от 0 до 10 for(int i=0; i //находим макс цену { mp = iHigh(Symbol() ,PERIOD_CURRENT,i); if(mp > maxprice) maxprice = mp; } return;} // создаем функция мин ценыvoid GetMinPrice(){ minprice = 99999; for(int i=0; i { mp = iLow(Symbol(),PERIOD_CURRENT,i);//iLow функция нахожд мин цены, (Symbol()-тек график,PERIOD_CURRENT- тек период if(mp minprice = mp; } return;} Ссылка на сообщение Поделиться на другие сайты More sharing options...
4er58 Опубликовано 30 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 октября, 2017 Тут я! Всё просто, нужно лишь, как уже писали выше, обнулить переменные maxprice, minprice, а лучше присвоить им какие-то экстремальные значения : maxprice=-99999;minprice = 99999;т.е. будет так: Ну мы ведь в глобальных переменных уже присваивали им такие значения для сравнения с mp . Значит с глобальных эти переменные можно удалить и вписать не посредственно в функцию и какой толк ? Ни чего не изменилось . На каждом тике функция возвращает новые значения , но только эти значения не уменьшаются когда бары становятся все меньше и меньше и мы смотрим скажем последние 3 бара и видим что макс и мин цены на этих последних трех барах не СУЩУСТВУЕТ ! Как мне еще донести что код надо доработать ? Изменено 30 октября, 2017 пользователем 4er58 Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 30 октября, 2017 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 октября, 2017 На каждом тике функция возвращает новые значения , но только эти значения не уменьшаются когда бары становятся все меньше и меньше и мы смотрим скажем последние 3 бара и видим что макс и мин цены на этих последних трех барах не СУЩУСТВУЕТ ! Как мне еще донести что код надо доработать ? Пойми, дружище, что мы лишь сравниваем то значение, которое мы получаем с функции iLow, к примеру, с тем, что у нас было получено ранее. Для сравнения можно воспользоваться ещё одним вариантом:void GetMinPrice(){ int index = iLowest(NULL, 0, MODE_LOW, 10, 0); if(index!=-1) minprice = Low[index]; else Print("Ошибка iLowest. Код ошибки = %d" + IntegerToString(GetLastError())); return;} Ссылка на сообщение Поделиться на другие сайты More sharing options...
4er58 Опубликовано 30 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 октября, 2017 Пойми, дружище, что мы лишь сравниваем то значение, которое мы получаем с функции iLow, к примеру, с тем, что у нас было получено ранее. Для сравнения можно воспользоваться ещё одним вариантом:Код: [Выделить] Спасибо , кое как разобрался , с новой функцией ,было бы понятнее сразу с комментариями :) . Но все равно происходит тоже самое , советник не обновляет уменьшения мах и мин цены за данное кол-во баров . Мы когда нибудь решим эту задачу ? Изменено 30 октября, 2017 пользователем 4er58 Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 31 октября, 2017 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 октября, 2017 Но все равно происходит тоже самое , советник не обновляет уменьшения мах и мин цены за данное кол-во баров . Мы когда нибудь решим эту задачу ? Может глюк терминала?Я перепроверил сейчас на минутках GBPUSD.Как Low[0], так и High[0] работают без всяких проблем.void OnTick(){ Comment(DoubleToStr(High[0])); } Ссылка на сообщение Поделиться на другие сайты More sharing options...
4er58 Опубликовано 31 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 октября, 2017 Может глюк терминала?Я перепроверил сейчас на минутках GBPUSD.Как Low[0], так и High[0] работают без всяких проблем. Спасибо Шеф , да действительно на другом терминале с новой функцией работает как надо .Пошел на третий урок ) Изменено 31 октября, 2017 пользователем 4er58 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти