st2050 Опубликовано 29 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 октября, 2015 Я тоже логику не понял, но решил промолчать - мало ли, может там какая-то хитрая мысль, не изложенная в описании. Но похоже в данном случае моя излишняя вежливость может и не нужна :-b Изменено 29 октября, 2015 пользователем st2050 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 29 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 октября, 2015 ПС: зачем Вам Sleep(20000);? :d зачем вообще всё это?! Ссылка на сообщение Поделиться на другие сайты More sharing options...
grave Опубликовано 29 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 октября, 2015 Слип нужен был чтоб он открывал ордера с задержкой так как он их открывал просто пачками.Зачем это нужно ? У меня есть сова которая показывает очень хорошие результаты но работает без мэджика и на одном графике...Всеравно что-то не получается , он так и продолжает открывать сел и бай стоп пачками что я делаю не так , я относительно недавно начал изучать программирование советников так что прошу прощения за гавнокод int order_type=OrderType(); int _GetLastError=0,_OrdersTotal=OrdersTotal(); int countSS=0, countBS=0; for(int z=_OrdersTotal+1; z>=0; z ++) { if(OrderSelect(z,SELECT_BY_POS)) { // вот проверка что ордер отложенный if (order_type==OP_BUYSTOP || order_type==OP_BUYLIMIT || order_type==OP_SELLSTOP || order_type==OP_SELLLIMIT){ //---- если позиция открыта не по текущему инструменту, пропускаем её if(OrderSymbol()!=Symbol()) continue; //---- если MagicNumber не равен Expert_ID, пропускаем эту позицию if(OrderMagicNumber()!=Magic) continue; if (order_type==OP_BUYSTOP) countBS++; if (order_type==OP_SELLSTOP) countSS++; }} else { if (countBS == 0) order=OrderSend(Symbol(),OP_BUYSTOP,Lots*0.1,Ask+Otstup*Point,3,0,0,"",Magic,0,Green); if (countSS == 0) order=OrderSend(Symbol(),OP_SELLSTOP,Lots*0.1,Bid-Otstup*Point,3,0,0,"",Magic,0,Green); } } Ссылка на сообщение Поделиться на другие сайты More sharing options...
st2050 Опубликовано 29 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 октября, 2015 int order_type=OrderType();int _OrdersTotal=OrdersTotal();int countSS=0, countBS=0;for(int z=_OrdersTotal+1; z>=0; z ++) { if(OrderSelect(z,SELECT_BY_POS)) { //---- если позиция открыта не по текущему инструменту, пропускаем её if(OrderSymbol()!=Symbol()) continue; //---- если MagicNumber не равен Expert_ID, пропускаем эту позицию if(OrderMagicNumber()!=Magic) continue; if (order_type==OP_BUYSTOP) countBS++; if (order_type==OP_SELLSTOP) countSS++; } } if (countBS == 0) order=OrderSend(Symbol(),OP_BUYSTOP,Lots*0.1,Ask+Otstup*Point,3,0,0,"",Magic,0,Green); if (countSS == 0) order=OrderSend(Symbol(),OP_SELLSTOP,Lots*0.1,Bid-Otstup*Point,3,0,0,"",Magic,0,Green); 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
grave Опубликовано 29 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 октября, 2015 int order_type=OrderType();int _OrdersTotal=OrdersTotal();int countSS=0, countBS=0;for(int z=_OrdersTotal+1; z>=0; z ++) { if(OrderSelect(z,SELECT_BY_POS)) { //---- если позиция открыта не по текущему инструменту, пропускаем её if(OrderSymbol()!=Symbol()) continue; //---- если MagicNumber не равен Expert_ID, пропускаем эту позицию if(OrderMagicNumber()!=Magic) continue; if (order_type==OP_BUYSTOP) countBS++; if (order_type==OP_SELLSTOP) countSS++; } } if (countBS == 0) order=OrderSend(Symbol(),OP_BUYSTOP,Lots*0.1,Ask+Otstup*Point,3,0,0,"",Magic,0,Green); if (countSS == 0) order=OrderSend(Symbol(),OP_SELLSTOP,Lots*0.1,Bid-Otstup*Point,3,0,0,"",Magic,0,Green); Всеравно открывает безконечно Изменено 29 октября, 2015 пользователем grave Ссылка на сообщение Поделиться на другие сайты More sharing options...
Qj Опубликовано 29 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 октября, 2015 int order_type=OrderType();int _OrdersTotal=OrdersTotal();int countSS=0, countBS=0;for(int z=_OrdersTotal+1; z>=0; z ++) { if(OrderSelect(z,SELECT_BY_POS)) { //---- если позиция открыта не по текущему инструменту, пропускаем её if(OrderSymbol()!=Symbol()) continue; //---- если MagicNumber не равен Expert_ID, пропускаем эту позицию if(OrderMagicNumber()!=Magic) continue; if (order_type==OP_BUYSTOP) countBS++; if (order_type==OP_SELLSTOP) countSS++; } } if (countBS == 0) order=OrderSend(Symbol(),OP_BUYSTOP,Lots*0.1,Ask+Otstup*Point,3,0,0,"",Magic,0,Green); if (countSS == 0) order=OrderSend(Symbol(),OP_SELLSTOP,Lots*0.1,Bid-Otstup*Point,3,0,0,"",Magic,0,Green); Всеравно открывает безконечно , если я не ошибаюсь то order_type==OP_BUYSTOP не может быть так как order_type равен цифре или я не прав ? OP_BUYSTOP - это константа Конечно такое условие будет бесконечным for(int z=_OrdersTotal+1; z>=0; z ++) вы же постоянно увеличиваете индекс. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 октября, 2015 grave будьте внимательны.Вот Qj очень внимателен. Я, проверяя логику часто не замечаю очевидных ошибок...Надо:- в описании цикла писать "z--". - и присвоить переменной order_type значение внутри цикла, после выбора ордера. 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
grave Опубликовано 29 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 октября, 2015 Заработало =)Огромнейшее спасибо!!! <:-p> 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 29 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 октября, 2015 Заработало =)Огромнейшее спасибо!!! <:-p> И где полученный результат, верный код?Выложите итоговый файл - может кто-то что-то еще предложит, подкрутит. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Qj Опубликовано 30 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 октября, 2015 Друзья, здравствуйте! Помогите советом: есть робот, который работает так как и нужно, когда на счете только он один и на одной паре. Но как только стоит его же запустить на другую пару этого же счета, то все начинает глючить - выдает ошибку "не правильных параметров" (err 3). Хотя, магики разные... даже, специально сделал для каждой пары своего, отдельного, чтоб он не путался, но не помогло... Кто знает, как можно это исправить???? Цель - один робот на одном счете работает на разных параз. Заранее, благодарю. Куски кода представить можете? Ибо мы тут не экстрасенсы. Ссылка на сообщение Поделиться на другие сайты More sharing options...
st2050 Опубликовано 30 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 октября, 2015 Хахаха. Невнимательность к деталям - будни прикладного программиста. Это уже стиль работы - главное рыбу написать, а косяки при отладке повылазят.Сначала делаем грабли, а потом с ними героически боремся и всем рассказываем с умным видом, какое оно сложное - программирование 8-}Вспомнился мульфильм "И так сойдет":[SPOILER] [SPOILER] Изменено 30 октября, 2015 пользователем st2050 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sany2912 Опубликовано 30 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 октября, 2015 Куски кода представить можете? Ибо мы тут не экстрасенсы.Просто, мне показалось что это может быть распространённой ошибкой... Отправляю часть кода...F_eur.gbp.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Qj Опубликовано 30 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 октября, 2015 Цитата Куски кода представить можете? Ибо мы тут не экстрасенсы. Просто, мне показалось что это может быть распространённой ошибкой... Отправляю часть кода... Мало информации. Не понятно где и как присваиваются передаваемые параметры и вы уверены что в этом методе ошибки?Добавлено: 31-10-2015 13:43:20Я везде вижу что при закрытие пачки ордеров или их изменение всегда ставят sleep. Вопрос такой нужен ли он вообще? Изменено 31 октября, 2015 пользователем Qj Ссылка на сообщение Поделиться на другие сайты More sharing options...
grave Опубликовано 30 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 октября, 2015 Заработало =)Огромнейшее спасибо!!! <:-p> И где полученный результат, верный код?Выложите итоговый файл - может кто-то что-то еще предложит, подкрутит. Вот итоговый код int _OrdersTotal=OrdersTotal();int countSS=0, countBS=0;for(int z=_OrdersTotal+1; z>=0; z --) { if(OrderSelect(z,SELECT_BY_POS)) { //---- если позиция открыта не по текущему инструменту, пропускаем её if(OrderSymbol()!=Symbol()) continue; //---- если MagicNumber не равен Expert_ID, пропускаем эту позицию if(OrderMagicNumber()!=Magic) continue; int order_type=OrderType(); if (order_type==OP_BUYSTOP) countBS++; if (order_type==OP_SELLSTOP) countSS++; } } if (countBS == 0) order=OrderSend(Symbol(),OP_BUYSTOP,Lots*0.1,Ask+Otstup*Point,3,0,0,Magic+" "+Symbol(),Magic,0,Green); if (countSS == 0) order=OrderSend(Symbol(),OP_SELLSTOP,Lots*0.1,Bid-Otstup*Point,3,0,0,Magic+" "+Symbol(),Magic,0,Green);Сама сова называется ambush можно ее найти на оф сайте mt4 , выложить ее не могу так как парюсь над ней уже 2 месяца (сама идея совы очень понравилась) и как кто-то писал на этом форуме , чем меньше людей знает о тс тем дольше она работает.PS. самый сок в том что она не зависит от тренда и не использует мм1.jpg Изменено 30 октября, 2015 пользователем grave Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 30 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 октября, 2015 Сама сова называется ambush можно ее найти на оф сайте mt4 , выложить ее не могу так как парюсь над ней уже 2 месяца (сама идея совы очень понравилась) и как кто-то писал на этом форуме , чем меньше людей знает о тс тем дольше она работает. а вы не верьте любому бреду - мало ли что параноики в терминальной стадии пишут.Обычно это лишь дешевая отмазка, чтобы лишь брать и не делиться наработками.Ладно, так как вы еще в стадии доработки, код можно и не выкладывать - проку от него пока немного, вероятно.Но прямую ссылку на оригинал бота можно было бы и выложить, чтобы форумчанам заново искать бота не приходилось.https://www.mql5.com/ru/code/9561 этот? выглядит сыровато...grave, http://tlap.com/forum/laboratoriya-profitfx/24/open-source-sovetnik-forex-aspid-ili-gad-polzuchiy/3260/?do=findComment&comment=50551 этот на голову лучше, имхо.Ваш секрет скоро как 3 года уже реализован на форуме - пользуйтесь на здоровье! :) Изменено 30 октября, 2015 пользователем Старик 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 30 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 октября, 2015 grave тестируйте с качеством 99%, ибо с плохим качеством тестирования мы уже много граалей видели... и на основе ловли импульса в том числе.Удачи. Ссылка на сообщение Поделиться на другие сайты More sharing options...
grave Опубликовано 31 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 октября, 2015 Ладно , так тому и быть выкладываю сову. Потерял свой депозит на советнике forex hero AC еще пол года назад и еще не скоро насобираю на новый так что ловите.Крайне интересно испытать его на реале, тестер почему-то больше 76% не моделирует. Кто всетаки скачает и начнет гонять его выкладывайте результаты сюда.Логика советника по стопам устроена так, он отдает один процент дэпо за возможность получить пятнадцать ну или тралит от 1 до 15 % при открытии сделки.Крайне эффективен при авто лоте.Что я дописал и изменил:Авто лот ставим ноль или пишем свойпрописан мэджик и открытие ордеров при отсутствии (не без вашей помощи =) )перепрописал слип по моему мнению лучше 60000 убрал стрелочный флуд (раньше рисовал стрелки при смещении сс или бс)также некоторые функции работали только на тестере , перепрописал чтоб и в реальной торговле их использовал.тайм фрейм советую 15м пара EURUSDРазрешить импорт из DLL там есть вот такой момент if(((AccountEquity()-AccountBalance())>KO*PK) || (AccountEquity()-AccountBalance()) { if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3); if(OrderType()==OP_SELL) result= OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),30); if(OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP) OrderDelete(OrderTicket());что-то мне подсказывает что при достижении нужного результата он будет закрывать абсолютно все ордера и отложки даже чужих сов. Изменено 7 ноября, 2015 пользователем grave 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 31 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 октября, 2015 grave, я бы вам рекомендовал присмотреться к Аспиду, ссылку на который я дал.Там нормальный код и достаточно большие возможности.Ваш бот собран из фрагментов кода 2005-2006-2008 годов.В принципе код рабочий, но совсем раритетный.И, заметьте, за очень много лет ваш бот вроде никого не заинтересовал и развития не получил - что напрягает.Можно, конечно, бота выложить здесь - может кто-то и посоветует. Но здесь народ тестами не занимается.Если хотите, чтобы бота кто-то потестил и что-то посоветовал, то выложите бота в Лаборатория ProfitFX.Там народ быстро диагноз поставит. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
grave Опубликовано 31 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 октября, 2015 grave, я бы вам рекомендовал присмотреться к Аспиду, ссылку на который я дал.Там нормальный код и достаточно большие возможности.Ваш бот собран из фрагментов кода 2005-2006-2008 годов.В принципе код рабочий, но совсем раритетный.И, заметьте, за очень много лет ваш бот вроде никого не заинтересовал и развития не получил - что напрягает.Можно, конечно, бота выложить здесь - может кто-то и посоветует. Но здесь народ тестами не занимается.Если хотите, чтобы бота кто-то потестил и что-то посоветовал, то выложите бота в Лаборатория ProfitFX.Там народ быстро диагноз поставит. Потестил сову на которую вы дали ссылку , просто космические результаты какие-то , вы его используете на реальном счете ? Неужели все так или есть подводные камни ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 31 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 октября, 2015 я не использую данного бота, так как он (в существенной части по моей вине) не был доработан до следующего уровня.до сих пор мои предложения к боту я так и не выписал в полном объеме - правда, пытаюсь это сделать в общем виде, что намного сложнее.Но бота писал компетентный человек и бот, на текущем уровне, вполне неплох.И рынок сейчас более-менее трендовый.Имхо, бота просто недораскрутили-недоработали.Пробуйте.Если работает нормально, выкладывайте тесты в его топике, люди могут подтянуться и может торги ботом наладятся. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 1 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 ноября, 2015 Я везде вижу что при закрытие пачки ордеров или их изменение всегда ставят sleep. Вопрос такой нужен ли он вообще?Я думаю Qj не нуждается в моём ответе, но поясню для начинающих читателей:функция Слип вешает экспертный поток терема, остаются в работе только МТ функции по приёму и отображению котировок, ручной режим, скрипты и индюки вызванные вручную. Все эксперты - висят. Не надо злоупотреблять этой функцией. её используют только при ошибках (при выставлении торговых приказов), но не всех, а только связанных со связью мт и сервера, например занятость потока, обрыв связи и т.д.Иногда используют при реквоте или другими ошибками в цене, но я рекомендую ставить флаг и дождаться нового тика по символу и сразу (по флагу) переходить к отложенной процедуре открытия ордера - т.е. не использовать Слип, а дать возможность другим совам в терминале отработать свой код.Всё имхо.ПС: это касается только МТ4 Изменено 1 ноября, 2015 пользователем 0ll 4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 1 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 ноября, 2015 Полностью согласен. Тоже к этому пришёл, самое оптимальное решение. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Qj Опубликовано 1 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 ноября, 2015 Спойлер Я везде вижу что при закрытие пачки ордеров или их изменение всегда ставят sleep. Вопрос такой нужен ли он вообще?Я думаю Qj не нуждается в моём ответе, но поясню для начинающих читателей:функция Слип вешает экспертный поток терема, остаются в работе только МТ функции по приёму и отображению котировок, ручной режим, скрипты и индюки вызванные вручную. Все эксперты - висят. Не надо злоупотреблять этой функцией. её используют только при ошибках (при выставлении торговых приказов), но не всех, а только связанных со связью мт и сервера, например занятость потока, обрыв связи и т.д.Иногда используют при реквоте или другими ошибками в цене, но я рекомендую ставить флаг и дождаться нового тика по символу и сразу (по флагу) переходить к отложенной процедуре открытия ордера - т.е. не использовать Слип, а дать возможность другим совам в терминале отработать свой код.Всё имхо.ПС: это касается только МТ4 Получается если я обновляю ТП в сетке ордеров к примеру 20 без sleep, то не возникнет ошибки что слишком много запросов к серверу? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 1 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 ноября, 2015 Получается если я обновляю ТП в сетке ордеров к примеру 20 без sleep, то не возникнет ошибки что слишком много запросов к серверу?Это зависит от многих факторов, в том числе настроек сервака, пинга и т.д. Надо пробовать... Можно воткнуть миллисекундный таймер и при следующем запросе вычислять разницу Х в мсек, если менее 500 мсек, то спать (500 - Х). Полсекунды достаточное время для сервака? 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sany2912 Опубликовано 1 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 ноября, 2015 Спасибо за совет, друзья!!!)) завтра переделаю, может и правда все из-за "Sleep"... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти