Перейти к содержанию

Обучение языку MQL4 под MetaTrader 4


Рекомендуемые сообщения

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Я тоже логику не понял, но решил промолчать - мало ли, может там какая-то хитрая мысль, не изложенная в описании. Но похоже в данном случае моя излишняя вежливость может и не нужна :-b

Изменено пользователем st2050
Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано

Слип нужен был чтоб он открывал ордера с задержкой так как он их открывал просто пачками.
Зачем это нужно ? У меня есть сова которая показывает очень хорошие результаты но работает без мэджика и на одном графике...

Всеравно что-то не получается , он так и продолжает открывать сел и бай стоп пачками что я делаю не так , я относительно недавно начал изучать программирование советников так что прошу прощения за гавнокод

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);
}

}

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

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
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


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);



Всеравно открывает безконечно Изменено пользователем grave
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано



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
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
grave будьте внимательны.
Вот Qj очень внимателен. Я, проверяя логику часто не замечаю очевидных ошибок...
Надо:
- в описании цикла писать "z--".
- и присвоить переменной order_type значение внутри цикла, после выбора ордера.
  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Заработало =)
Огромнейшее спасибо!!! <:-p>


И где полученный результат, верный код?

Выложите итоговый файл - может кто-то что-то еще предложит, подкрутит.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Друзья, здравствуйте! Помогите советом: есть робот, который работает так как и нужно, когда на счете только он один и на одной паре. Но как только стоит его же запустить на другую пару этого же счета, то все начинает глючить - выдает ошибку "не правильных параметров" (err 3). Хотя, магики разные... даже, специально сделал для каждой пары своего, отдельного, чтоб он не путался, но не помогло... Кто знает, как можно это исправить???? Цель - один робот на одном счете работает на разных параз. Заранее, благодарю.


Куски кода представить можете? Ибо мы тут не экстрасенсы.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Хахаха. Невнимательность к деталям - будни прикладного программиста. Это уже стиль работы - главное рыбу написать, а косяки при отладке повылазят.
Сначала делаем грабли, а потом с ними героически боремся и всем рассказываем с умным видом, какое оно сложное - программирование 8-}

Вспомнился мульфильм "И так сойдет":
[SPOILER]


[SPOILER] Изменено пользователем st2050
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Куски кода представить можете? Ибо мы тут не экстрасенсы.


Просто, мне показалось что это может быть распространённой ошибкой... Отправляю часть кода...

F_eur.gbp.mq4

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Цитата



Куски кода представить можете? Ибо мы тут не экстрасенсы.



Просто, мне показалось что это может быть распространённой ошибкой... Отправляю часть кода...


Мало информации. Не понятно где и как присваиваются передаваемые параметры и вы уверены что в этом методе ошибки?

Добавлено: 31-10-2015 13:43:20

Я везде вижу что при закрытие пачки ордеров или их изменение всегда ставят sleep. Вопрос такой нужен ли он вообще? Изменено пользователем Qj
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано



Заработало =)
Огромнейшее спасибо!!! <:-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

Изменено пользователем grave
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Сама сова называется 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 года уже реализован на форуме - пользуйтесь на здоровье! :) Изменено пользователем Старик
  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
grave тестируйте с качеством 99%, ибо с плохим качеством тестирования мы уже много граалей видели... и на основе ловли импульса в том числе.
Удачи.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Ладно , так тому и быть выкладываю сову. Потерял свой депозит на советнике 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());

что-то мне подсказывает что при достижении нужного результата он будет закрывать абсолютно все ордера и отложки даже чужих сов.

Изменено пользователем grave
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
grave, я бы вам рекомендовал присмотреться к Аспиду, ссылку на который я дал.
Там нормальный код и достаточно большие возможности.

Ваш бот собран из фрагментов кода 2005-2006-2008 годов.
В принципе код рабочий, но совсем раритетный.
И, заметьте, за очень много лет ваш бот вроде никого не заинтересовал и развития не получил - что напрягает.

Можно, конечно, бота выложить здесь - может кто-то и посоветует. Но здесь народ тестами не занимается.

Если хотите, чтобы бота кто-то потестил и что-то посоветовал, то выложите бота в Лаборатория ProfitFX.
Там народ быстро диагноз поставит.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


grave, я бы вам рекомендовал присмотреться к Аспиду, ссылку на который я дал.
Там нормальный код и достаточно большие возможности.

Ваш бот собран из фрагментов кода 2005-2006-2008 годов.
В принципе код рабочий, но совсем раритетный.
И, заметьте, за очень много лет ваш бот вроде никого не заинтересовал и развития не получил - что напрягает.

Можно, конечно, бота выложить здесь - может кто-то и посоветует. Но здесь народ тестами не занимается.

Если хотите, чтобы бота кто-то потестил и что-то посоветовал, то выложите бота в Лаборатория ProfitFX.
Там народ быстро диагноз поставит.


Потестил сову на которую вы дали ссылку , просто космические результаты какие-то , вы его используете на реальном счете ? Неужели все так или есть подводные камни ?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

я не использую данного бота, так как он (в существенной части по моей вине) не был доработан до следующего уровня.
до сих пор мои предложения к боту я так и не выписал в полном объеме - правда, пытаюсь это сделать в общем виде, что намного сложнее.

Но бота писал компетентный человек и бот, на текущем уровне, вполне неплох.
И рынок сейчас более-менее трендовый.
Имхо, бота просто недораскрутили-недоработали.

Пробуйте.
Если работает нормально, выкладывайте тесты в его топике, люди могут подтянуться и может торги ботом наладятся.

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Я везде вижу что при закрытие пачки ордеров или их изменение всегда ставят sleep. Вопрос такой нужен ли он вообще?

Я думаю Qj не нуждается в моём ответе, но поясню для начинающих читателей:
функция Слип вешает экспертный поток терема, остаются в работе только МТ функции по приёму и отображению котировок, ручной режим, скрипты и индюки вызванные вручную. Все эксперты - висят. Не надо злоупотреблять этой функцией. её используют только при ошибках (при выставлении торговых приказов), но не всех, а только связанных со связью мт и сервера, например занятость потока, обрыв связи и т.д.
Иногда используют при реквоте или другими ошибками в цене, но я рекомендую ставить флаг и дождаться нового тика по символу и сразу (по флагу) переходить к отложенной процедуре открытия ордера - т.е. не использовать Слип, а дать возможность другим совам в терминале отработать свой код.
Всё имхо.
ПС: это касается только МТ4 Изменено пользователем 0ll
  • Лайк 4
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Полностью согласен. Тоже к этому пришёл, самое оптимальное решение.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Спойлер



Я везде вижу что при закрытие пачки ордеров или их изменение всегда ставят sleep. Вопрос такой нужен ли он вообще?

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

Получается если я обновляю ТП в сетке ордеров к примеру 20 без sleep, то не возникнет ошибки что слишком много запросов к серверу?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Получается если я обновляю ТП в сетке ордеров к примеру 20 без sleep, то не возникнет ошибки что слишком много запросов к серверу?

Это зависит от многих факторов, в том числе настроек сервака, пинга и т.д. Надо пробовать...
Можно воткнуть миллисекундный таймер и при следующем запросе вычислять разницу Х в мсек, если менее 500 мсек, то спать (500 - Х). Полсекунды достаточное время для сервака?
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...