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

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


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

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


Здравствуйте! :)

Подскажите пожалуйста в чём может быть проблема.
Ругается на одни и те же функции...

Пример кода

//+------------------------------------------------------------------+
int CountSell()
{
for(int trade = OrdersTotal() -1; trade >=0; trade--)
{
[glow=yellow,2,300]OrderSelect[/glow](trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_SELL)
Count++;
}
}
return(Count);
}
//+------------------------------------------------------------------+
void CloseOrders()
{
for(int trade=OrdersTotal()-1; trade >= 0; trade--)
{
[glow=yellow,2,300]OrderSelect[/glow](trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
[glow=yellow,2,300]OrderDelete[/glow](OrderTicket(), Black);
}
}
}
//+------------------------------------------------------------------+




не то, чтобы ругается, просто предупреждает о том, что значение, которое возвращает OrderSelect было бы неплохо проверять :)

Ведь OrderSelect возвращает булевое значение, которое означает выбран ордер или нет.
Если посмотрите хотя бы один из моих уроков, то увидите, что я всегда пишу так:
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))


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

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

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

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

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

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

Перейти

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

Перейти

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

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


не то, чтобы ругается, просто предупреждает о том, значение, которое возвращает OrderSelect было бы неплохо проверять :)

Ведь OrderSelect возвращает булевое значение, которое означает выбран ордер или нет.
Если посмотрите хотя бы один из моих уроков, то увидите, что я всегда пишу так:

if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))


т.е. оператором if я проверяю выбран ордер или нет.


В том-то и беда, Сергей, что даже функция, взятая из Вашего видео, мета эдитором критикуется....
int CountBuy()
{
int count = 0;
for(int trade = OrdersTotal() -1; trade >=0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
Count++;
}
}
return(Count);
}

Наверно из-за этого отказывается открывать ордера... :-?
Ссылка на сообщение
Поделиться на другие сайты

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


Наверно из-за этого отказывается открывать ордера... :-?



нет, в этой функции идёт всего-лишь пересчет кол-ва ордеров...
а то, что у Вас где-то не открывает, нужно уже смотреть условия открытия.

вероятно эту функцию Вы выдернули из более ранних, самых первых уроков... да, там не было проверки.
в дальнейшем же, проверка всегда использовалась.
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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


Цитата


Наверно из-за этого отказывается открывать ордера... :-?



нет, в этой функции идёт всего-лишь пересчет кол-ва ордеров...
а то, что у Вас где-то не открывает, нужно уже смотреть условия открытия.

вероятно эту функцию Вы выдернули из более ранних, самых первых уроков... да, там не было проверки.
в дальнейшем же, проверка всегда использовалась.

Благодарю!
Видимо, ещё не дошёл до них :-W Изменено пользователем Redeemer
Ссылка на сообщение
Поделиться на другие сайты

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

Добрый вечер!
Вопрос к учителю языка mql4. В уроке 5 используется функция Time, я так понял, что ее замена в новой платформе iTime. Но прямая замена не получилась. Ругается на return, после if. Как корректно поправить код, что бы работал. До 5 урока все шло нормально, а тут застрял.

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

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


Добрый вечер!
Вопрос к учителю языка mql4. В уроке 5 используется функция Time, я так понял, что ее замена в новой платформе iTime. Но прямая замена не получилась. Ругается на return, после if. Как корректно поправить код, что бы работал. До 5 урока все шло нормально, а тут застрял.



А где Ваш код?


Добавлено: 30-03-2014 09:19:41


Кто может подсказать как в коде прописать Ask или Bid с 2 нулями или с 3 мя на 5 знаках отложки ставить



через NormalizeDouble можно..., например:
double _ask = NormalizeDouble(Ask, 3);
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


Прошу прощения. Код здесь.



ну тут всё просто, Ваш код:

void OnTick()
{

if(timeprev == iTime(NULL, 0, 0)) return(0);
timeprev = iTime(NULL, 0, 0);
.....


обратите внимание на то, что событие OnTick имеет тип void, а Вы пытаетесь оператором return вернуть ноль: return(0);
тип void не "умеет" возвращать результат... ошибка тут :)
значит нужно просто написать:
    if(timeprev == iTime(NULL, 0, 0)) return;

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

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

Всем Привет!!! Вот закончил моего шахтёра по собственной стратегии без индюков чисто техническая!!! По школе програмироания XBMS \M/ Вот такие пироги получились!!! Шахтёр добывает золото довольно стабильно! Вот жду тест на реале! естественно депо в 100 раз меньше!!! взял ВПС и повесил на баланс 60 баксов, тоесть каждые 60 надо повышать на 0.01 лот!
Тест сделан с фиксированным лотом потому-что ММ не програмировал!!! Но хотелось бы добавить ММ! XBMS хорошо бы урок по ММ :d!!! Встроить такой ММ где бы советник просто посмотрел на баланс и если там меньше 60 то не торгуй а если больше или равен 60 то соответственно рассчитать и применить лот по выражению каждые (60 повышать лот на 0.01) естественно в две стороны, то есть если убыток то понижать!

Screen_Shot_2014-03-26_at_5.56.35_PM.png

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

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


Но хотелось бы добавить ММ! XBMS хорошо бы урок по ММ :d!!! Встроить такой ММ где бы советник просто посмотрел на баланс и если там меньше 60 то не торгуй а если больше или равен 60 то соответственно рассчитать и применить лот по выражению каждые (60 повышать лот на 0.01) естественно в две стороны, то есть если убыток то понижать!


А слабо ознакомиться с тьмой выложенных на форуме ботов от XBMS?! :)
Там все есть.
Или без кино разобраться в теме никак?... :)

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

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

xbms = Спасибо!
Но 3 это же разрядность после запятой, а нужно 3 нуля может через массив но как нужно именно отложник ставить на 3 нулях

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

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



Но хотелось бы добавить ММ! XBMS хорошо бы урок по ММ :d!!! Встроить такой ММ где бы советник просто посмотрел на баланс и если там меньше 60 то не торгуй а если больше или равен 60 то соответственно рассчитать и применить лот по выражению каждые (60 повышать лот на 0.01) естественно в две стороны, то есть если убыток то понижать!


А слабо ознакомиться с тьмой выложенных на форуме ботов от XBMS?! :)
Там все есть.
Или без кино разобраться в теме никак?... :)

Коллеги, кроме шуток - на форуме много ботов от авторов с открытыми кодами.
Это бесценный материал для самообучения.



Хаха во, Старик!!!!! Написал уже спасибо за информацию! Тест с ММ позже приклею! Хочу ещё попробовать сделать тест более точнее по статье Павла 99% аккуратности!
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Всем привет!
Подскажите как прописать в коде если цена ниже МА50 и подходит к линии нарисованные индикатором который прилагается выставить отложник по этой линии.
У индикатора Буфера нет.

Urovni.mq4

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

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

Приветствую всех гуру, особенно XBMS!
Почитывал вот уроки.
Решил сам попробовать чего то написать.
А тут загвоздки и пошли.
Советник на основе одного внешнего индикатора соорудить решил.
Всего по одному то открытому ордеру и должно быть.
Открываться ордер открывается, а при закрытии что-то всё время
ошибка 131 выскакивает(ERR_INVALID_TRADE_VOLUME Неправильный объем).
И не борется никак.
Не судите за избыток не используемых параметров.
rsi_slope.mq4 - советник
Slope Direction Line.mq4 - индикатор

rsi_slope.mq4
Slope_Direction_Line.mq4

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

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


xbms = Спасибо!
Но 3 это же разрядность после запятой, а нужно 3 нуля может через массив но как нужно именно отложник ставить на 3 нулях



тогда ставь 2, вместо трёх, и будут заполнены 2 разряда после запятой, а остальные нули...

Добавлено: 02-04-2014 15:13:01


Приветствую всех гуру, особенно XBMS!
Почитывал вот уроки.
Решил сам попробовать чего то написать.
А тут загвоздки и пошли.
Советник на основе одного внешнего индикатора соорудить решил.
Всего по одному то открытому ордеру и должно быть.
Открываться ордер открывается, а при закрытии что-то всё время
ошибка 131 выскакивает(ERR_INVALID_TRADE_VOLUME Неправильный объем).
И не борется никак.
Не судите за избыток не используемых параметров.
rsi_slope.mq4 - советник
Slope Direction Line.mq4 - индикатор



так-с... ну для начала смотрим ошибку:

2014.04.02 19:14:57.078	2014.01.20 20:05  rsi_slope GBPUSD,M5: OrderClose error 131


ага, ясно, теперь смотрим где в советнике OrderClose:
OrderClose(ticket, 1, OrderClosePrice(), Slippage, Blue);


открываем справку:
bool  OrderClose(
int ticket, // номер ордера
double lots, // количество лотов
double price, // цена закрытия
int slippage, // максимальное проскальзывание
color arrow_color // цвет
);


что мы видим вторым параметром?
правильно, объём... а что у нас?
а у нас 1 лот пытается закрыться...
теперь смотрю сколько у меня открылось... 0.01 лота, ага, а закрыть попытались 1...
ну вот и ошибка :)
хотя это я тут описал только одну, а у Вас их больше именно тут, правьте эту ошибку и ищите вторую! ;)
Изменено пользователем xbms
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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



ага, ясно, теперь смотрим где в советнике OrderClose:
OrderClose(ticket, 1, OrderClosePrice(), Slippage, Blue);



открываем справку:
bool  OrderClose(
int ticket, // номер ордера
double lots, // количество лотов
double price, // цена закрытия
int slippage, // максимальное проскальзывание
color arrow_color // цвет
);


что мы видим вторым параметром?
правильно, объём... а что у нас?...
хотя это я тут описал только одну, а у Вас их больше именно тут, правьте эту ошибку и ищите вторую!

Вторым параметром вот поставил и Lots и 1.0. Всё заработало. Вторую ошибку не вижу.
Ссылка на сообщение
Поделиться на другие сайты

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


Вторым параметром вот поставил и Lots и 1.0. Всё заработало. Вторую ошибку не вижу.



Вообще, корректно будет закрывать так:

 
if (OrderType()) == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Blue);
if (OrderType()) == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Blue);


а ещё корректней написать свою функцию закрытия ордеров с обработкой возможных ошибок...
Ссылка на сообщение
Поделиться на другие сайты

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


Вообще, корректно будет закрывать так:

 
if (OrderType()) == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Blue);
if (OrderType()) == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Blue);


а ещё корректней написать свою функцию закрытия ордеров с обработкой возможных ошибок...

За функцию закрытия ордеров с обработкой ошибок согласен конечно же.
А вот закрыть ордер так хуже ?
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Blue);

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

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



Вообще, корректно будет закрывать так:

 
if (OrderType()) == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Blue);
if (OrderType()) == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Blue);


а ещё корректней написать свою функцию закрытия ордеров с обработкой возможных ошибок...

За функцию закрытия ордеров с обработкой ошибок согласен конечно же.
А вот закрыть ордер так хуже ?
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Blue);


Закрыть надо бай по по цене Bid, и сел по Ask! А ранее естественно проверить на их наличие!!! Ну вот как Xbms написал так и закрывай!
Ссылка на сообщение
Поделиться на другие сайты

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



 
if (OrderType()) == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Blue);
if (OrderType()) == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Blue);


Закрыть надо бай по по цене Bid, и сел по Ask! А ранее естественно проверить на их наличие!!! Ну вот как Xbms написал так и закрывай!

Хорошо! Вопросов больше нет.
Описки и ошибки возможны всегда в этом деле.
Вот даже в 2-х приведенных примерах
при закрытии ордера "SELL" цвет другой можно указать.
"RED" например.
Ссылка на сообщение
Поделиться на другие сайты

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




 
if (OrderType()) == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Blue);
if (OrderType()) == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Blue);


Закрыть надо бай по по цене Bid, и сел по Ask! А ранее естественно проверить на их наличие!!! Ну вот как Xbms написал так и закрывай!

Хорошо! Вопросов больше нет.
Описки и ошибки возможны всегда в этом деле.
Вот даже в 2-х приведенных примерах

Программирование требует понимания рынка и знания того, что программируешь.
И железной логики.

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

Но сначала стоит решить оно тебе реально надо, то программирование?...
Месяцы и годы уйдут, пока серьезно научишься.
Или занялся только чтобы время убить?
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


Но сначала стоит решить оно тебе реально надо, то программирование?...
Месяцы и годы уйдут, пока серьезно научишься.
Или занялся только чтобы время убить?


Именно надо.
Месяцы прошли. Ручная еле еле дышит.
А зачем это надо, могу конечно пояснить.
Но наверное и каждый знает что ему и зачем.
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Войти

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

Войти

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


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

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