Заработай до
50000$
на приглашении друзей
получить StartUp Bonus
от ИнстаФорекс
Вложений не требуется!
Начни торговлю
без вложений и риска
С новым STARTUP бонусом 1000$
Получи бонус
55%
от ИнстаФорекс
на каждое пополнение
Ответить в теме
Страница 11 из 11
Первая ... 10 Последняя

Показаны сообщения: с 201 по 207 из 207

Тема: MQL4: Некоторые полезные функции

 Перейти в классический вид темы
  1. Линк#201
    Кандидат форумных наук
    Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Аватар для Nick'Otin
    Регистрация:
    16.12.2009
    Сообщений:
    2,320
    Деньги за посты (Подробнее):
    3750 RUB
    Поставил(а) лайков:
    74
    Получено лайков:  423
    в 216 сообщениях
    18%
    Получить количество ордеров (рыночных либо отложенных) данного типа.
    MQL код:
    int OrdersCount(int type)
    {
    int orders = 0;

    int cnt = OrdersTotal();
    for (int i=0; i if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;

    //Опционально
    //if (OrderSymbol() != Symbol()) continue;

    //Опционально
    //if (OrderMagicNumber() != Magic) continue;

    if (OrderType() == type) orders++;
    }

    return (orders);
    }

    В эксперте эту функцию можно использовать следующим образом:
    MQL код:
    int start() 
    {
    int BuyCnt = OrdersCount(OP_BUY);
    if (BuyCnt > 0) return (0);
    ...

    Последний раз редактировалось Gold; 27.11.2015 в 19:33.

  2. post_thanks Получено лайков: 1

    Kofa (22.10.2017)

    <a href="https://www.instaforex.com/ru/pamm_system">Форекс портал</a>
     
  3. ТОП сообщений
    2014-07-09   14:02
    Лучший ответ #1
    Накопленные выплаты 160034 RUB

    Отправка маркет-ордера на сервер. int SendMarketOrder(int Type, double Lots, int TP, int SL, int Magic, string Cmnt, int& Error) { double Price, Take, Stop; int Ticket, Slippage, Color, Err; bool Delay = False; if(Debug) Print("Функция SendMarketOrder"); while(!IsStopped()) { if(!IsExpertEnabled()) { Error = ERR_TRADE_DISABLED; Print("Работа эксперта запрещена! Кнопка "Эксперты" отжата."); return(-1); } if(Debug) Print("Работа эксперта разрешена, кнопка "Эксперты" нажата."); if(!IsConnected()) { Error = ERR_NO_CONNECTION; Print("Связь с сервером отсутствует!"); return(-1); } if(Debug) Print("Связь с сервером установлена"); if(IsTradeContextBusy()) { if(Debug) Print("Торговый поток занят!"); if(Debug) Print("Ожидаем 3 сек..."); Sleep(3000); Delay = True; continue; } if(Debug) Print("Торговый поток свободен"); if(Delay || (LastTickTime != MarketInfo(Symbol(),MODE_TIME))) { if(Debug) Print("Обновляем котировки"); RefreshRates(); LastTickTime = MarketInfo(Symbol(),MODE_TIME); Delay = False; } else { if(Debug) Print("Котировки актуальны"); } switch(Type) { case OP_BUY: if(Debug) Print("Инициализируем параметры для BUY-ордера"); Price = NormalizeDouble( Ask, Digits); Take = IIFd(TP == 0, 0, NormalizeDouble( Price + TP * Point, Digits)); Stop = IIFd(SL == 0, 0, NormalizeDouble( Price - SL * Point, Digits)); Color = Blue; break; case OP_SELL: if(Debug) Print("Инициализируем параметры для SELL-ордера"); Price = NormalizeDouble( Bid, Digits); Take = IIFd(TP == 0, 0, NormalizeDouble( Price - TP * Point, Digits)); Stop = IIFd(SL == 0, 0, NormalizeDouble( Price + SL * Point, Digits)); Color = Red; break; default: if(Debug) Print("Тип ордера не соответствует требованиям."); return(-1); } Slippage = MarketInfo(Symbol(), MODE_SPREAD); if(Debug) Print("Slippage = ",Slippage); if(IsTradeAllowed()) { if(Debug) Print("Торговля разрешена, отправляем ордер..."); Ticket = OrderSend(Symbol(), Type, Lots, Price, Slippage, Stop, Take, Cmnt, Magic, 0, Color); if(Ticket < 0) { Err = GetLastError(); if (Err == 4 || /* SERVER_BUSY */ Err == 129 || /* INVALID_PRICE */ Err == 135 || /* PRICE_CHANGED */ Err == 137 || /* BROKER_BUSY */ Err == 138 || /* REQUOTE */ Err == 146 || /* TRADE_CONTEXT_BUSY */ Err == 136 ) /* OFF_QUOTES */ { if(Debug) Print("Ошибка(OrderSend - ", Err, "): ", ErrorDescription(Err)); if(Debug) Print("Ожидаем 3 сек..."); Sleep(3000); Delay = True; continue; } else { if(Debug) Print("Критическая ошибка(OrderSend - ", Err, "): ", ErrorDescription(Err)); Error = Err; break; } } break; } else { if(Debug) Print("Эксперту запрещено торговать! Снята галка в свойствах эксперта."); //Print("Ожидаем 3 сек..."); //Sleep(3000); //Delay = True; //continue; break; } } if(Ticket > 0) if(Debug) Print("Ордер отправлен успешно. Тикет = ",Ticket); else if(Debug) Print("Ошибка! Ордер не отправлен. (ErrorCode = ", Error, ": ", ErrorDescription(Error), ")"); return(Ticket); } //+------------------------------------------------------------------+ double IIFd(bool condition, double ifTrue, double ifFalse) { if (condition) return(ifTrue); else return(ifFalse); }

    2013-11-11   18:36
    Лучший ответ #2
    Накопленные выплаты 1854 RUB

    Приветствую. Вот еще полезная функция, коды ошибок исполнения. Функцию можно просто вставить в свой код и вызывать где надо. Или просто вставить в свой код, оформить в виде комментария и в случае если возникает какая-то ошибка, просто смотреть, что означает эта ошибка. string ErrorDescript(int error_code) { string error_string; switch(error_code) { //---- Коды ошибок, возвращаемые торговым сервером: case 0: error_string="Нет ошибок"; break; case 1: error_string="Нет ошибки, но результат неизвестен"; break; case 2: error_string="Общая ошибка"; break; case 3: error_string="Неправильные параметры"; break; case 4: error_string="Торговый сервер занят"; break; case 5: error_string="Старая версия клиентского терминала"; break; case 6: error_string="Нет связи с торговым сервером"; break; case 7: error_string="Недостаточно прав"; break; case 8: error_string="Слишком частые запросы"; break; case 9: error_string="Недопустимая операция нарушающая функционирование сервера"; break; case 64: error_string="Счет заблокирован"; break; case 65: error_string="Неправильный номер счета"; break; case 128: error_string="Истек срок ожидания совершения сделки"; break; case 129: error_string="Неправильная цена"; break; case 130: error_string="Неправильные стопы"; break; case 131: error_string="Неправильный объем"; break; case 132: error_string="Рынок закрыт"; break; case 133: error_string="Торговля запрещена"; break; case 134: error_string="Недостаточно денег для совершения операции"; break; case 135: error_string="Цена изменилась"; break; case 136: error_string="Нет цен"; break; case 137: error_string="Брокер занят"; break; case 138: error_string="Новые цены"; break; case 139: error_string="Ордер заблокирован и уже обрабатывается"; break; case 140: error_string="Разрешена только покупка"; break; case 141: error_string="Слишком много запросов"; break; case 145: error_string="Модификация запрещена, так как ордер слишком близок к рынку"; break; case 146: error_string="Подсистема торговли занята"; break; case 147: error_string="Использование даты истечения ордера запрещено брокером"; break; case 148: error_string="Количество открытых и отложенных ордеров достигло предела, установленного брокером."; break; //---- Коды ошибок выполнения MQL4-программы: case 4000: error_string="Нет ошибки"; break; case 4001: error_string="Неправильный указатель функции"; break; case 4002: error_string="Индекс массива - вне диапазона"; break; case 4003: error_string="Нет памяти для стека функций"; break; case 4004: error_string="Переполнение стека после рекурсивного вызова"; break; case 4005: error_string="На стеке нет памяти для передачи параметров"; break; case 4006: error_string="Нет памяти для строкового параметра"; break; case 4007: error_string="Нет памяти для временной строки"; break; case 4008: error_string="Неинициализированная строка"; break; case 4009: error_string="Неинициализированная строка в массиве"; break; case 4010: error_string="Нет памяти для строкового массива"; break; case 4011: error_string="Слишком длинная строка"; break; case 4012: error_string="Остаток от деления на ноль"; break; case 4013: error_string="Деление на ноль"; break; case 4014: error_string="Неизвестная команда"; break; case 4015: error_string="Неправильный переход"; break; case 4016: error_string="Неинициализированный массив"; break; case 4017: error_string="Вызовы DLL не разрешены"; break; case 4018: error_string="Невозможно загрузить библиотеку"; break; case 4019: error_string="Невозможно вызвать функцию"; break; case 4020: error_string="Вызовы внешних библиотечных функций не разрешены"; break; case 4021: error_string="Недостаточно памяти для строки, возвращаемой из функции"; break; case 4022: error_string="Система занята"; break; case 4050: error_string="Неправильное количество параметров функции"; break; case 4051: error_string="Недопустимое значение параметра функции"; break; case 4052: error_string="Внутренняя ошибка строковой функции"; break; case 4053: error_string="Ошибка массива"; break; case 4054: error_string="Неправильное использование массива-таймсерии"; break; case 4055: error_string="Ошибка пользовательского индикатора"; break; case 4056: error_string="Массивы несовместимы"; break; case 4057: error_string="Ошибка обработки глобальныех переменных"; break; case 4058: error_string="Глобальная переменная не обнаружена"; break; case 4059: error_string="Функция не разрешена в тестовом режиме"; break; case 4060: error_string="Функция не разрешена"; break; case 4061: error_string="Ошибка отправки почты"; break; case 4062: error_string="Ожидается параметр типа string"; break; case 4063: error_string="Ожидается параметр типа integer"; break; case 4064: error_string="Ожидается параметр типа double"; break; case 4065: error_string="В качестве параметра ожидается массив"; break; case 4066: error_string="Запрошенные исторические данные в состоянии обновления"; break; case 4067: error_string="Ошибка при выполнении торговой операции"; break; case 4099: error_string="Конец файла"; break; case 4100: error_string="Ошибка при работе с файлом"; break; case 4101: error_string="Неправильное имя файла"; break; case 4102: error_string="Слишком много открытых файлов"; break; case 4103: error_string="Невозможно открыть файл"; break; case 4104: error_string="Несовместимый режим доступа к файлу"; break; case 4105: error_string="Ни один ордер не выбран"; break; case 4106: error_string="Неизвестный символ"; break; case 4107: error_string="Неправильный параметр цены для торговой функции"; break; case 4108: error_string="Неверный номер тикета"; break; case 4109: error_string="Торговля не разрешена. Необходимо включить опцию Разрешить советнику торговать в свойствах эксперта."; break; case 4110: error_string="Длинные позиции не разрешены. Необходимо проверить свойства эксперта."; break; case 4111: error_string="Короткие позиции не разрешены. Необходимо проверить свойства эксперта."; break; case 4200: error_string="Объект уже существует"; break; case 4201: error_string="Запрошено неизвестное свойство объекта"; break; case 4202: error_string="Объект не существует"; break; case 4203: error_string="Неизвестный тип объекта"; break; case 4204: error_string="Нет имени объекта"; break; case 4205: error_string="Ошибка координат объекта"; break; case 4206: error_string="Не найдено указанное подокно"; break; default: error_string=error_code;} return(error_string); }

    2011-03-13   13:21
    Лучший ответ #3
    Накопленные выплаты 14514 RUB

    Добрый день. Вот и я решил поделиться кодом написал функцию кодов ошибок на русском языке. string error(int eer) { string er; switch(eer) { //---- case 0: case 1: er="Нет ошибки, но результат неизвестен"; break; case 2: er="Общая ошибка"; break; case 3: er="Неправильные параметры"; break; case 4: er="Торговый сервер занят"; break; case 5: er="Старая версия клиентского терминала"; break; case 6: er="Нет связи с торговым сервером"; break; case 7: er="Недостаточно прав"; break; case 8: er="Слишком частые запросы"; break; case 9: er="Недопустимая операция нарушающая функционирование сервера"; break; case 64: er="Счет заблокирован"; break; case 65: er="Неправильный номер счета"; break; case 128: er="Истек срок ожидания совершения сделки"; break; case 129: er="Неправильная цена"; break; case 130: er="Неправильные стопы"; break; case 131: er="Неправильный объем"; break; case 132: er="Рынок закрыт"; break; case 133: er="Торговля запрещена"; break; case 134: er="Недостаточно денег для совершения операции"; break; case 135: er="Цена изменилась"; break; case 136: er="Нет цен"; break; case 137: er="Брокер занят"; break; case 138: er="Новые цены - Реквот"; break; case 139: er="Ордер заблокирован и уже обрабатывается"; break; case 140: er="Разрешена только покупка"; break; case 141: er="Слишком много запросов"; break; case 145: er="Модификация запрещена, так как ордер слишком близок к рынку"; break; case 146: er="Подсистема торговли занята"; break; case 147: er="Использование даты истечения ордера запрещено брокером"; break; case 148: er="Количество открытых и отложенных ордеров достигло предела "; break; //---- case 4000: er="Нет ошибки"; break; case 4001: er="Неправильный указатель функции"; break; case 4002: er="Индекс массива - вне диапазона"; break; case 4003: er="Нет памяти для стека функций"; break; case 4004: er="Переполнение стека после рекурсивного вызова"; break; case 4005: er="На стеке нет памяти для передачи параметров"; break; case 4006: er="Нет памяти для строкового параметра"; break; case 4007: er="Нет памяти для временной строки"; break; case 4008: er="Неинициализированная строка"; break; case 4009: er="Неинициализированная строка в массиве"; break; case 4010: er="Нет памяти для строкового массива"; break; case 4011: er="Слишком длинная строка"; break; case 4012: er="Остаток от деления на ноль"; break; case 4013: er="Деление на ноль"; break; case 4014: er="Неизвестная команда"; break; case 4015: er="Неправильный переход"; break; case 4016: er="Неинициализированный массив"; break; case 4017: er="Вызовы DLL не разрешены"; break; case 4018: er="Невозможно загрузить библиотеку"; break; case 4019: er="Невозможно вызвать функцию"; break; case 4020: er="eВызовы внешних библиотечных функций не разрешены"; break; case 4021: er="Недостаточно памяти для строки, возвращаемой из функции"; break; case 4022: er="Система занята"; break; case 4050: er="Неправильное количество параметров функции"; break; case 4051: er="Недопустимое значение параметра функции"; break; case 4052: er="Внутренняя ошибка строковой функции"; break; case 4053: er="Ошибка массива"; break; case 4054: er="Неправильное использование массива-таймсерии"; break; case 4055: er="Ошибка пользовательского индикатора"; break; case 4056: er="Массивы несовместимы"; break; case 4057: er="Ошибка обработки глобальныех переменных"; break; case 4058: er="Глобальная переменная не обнаружена"; break; case 4059: er="Функция не разрешена в тестовом режиме"; break; case 4060: er="Функция не подтверждена"; break; case 4061: er="Ошибка отправки почты"; break; case 4062: er="Ожидается параметр типа string"; break; case 4063: er="Ожидается параметр типа integer"; break; case 4064: er="Ожидается параметр типа double"; break; case 4065: er="В качестве параметра ожидается массив"; break; case 4066: er="Запрошенные исторические данные в состоянии обновления"; break; case 4067: er="Ошибка при выполнении торговой операции"; break; case 4099: er="Конец файла"; break; case 4100: er="Ошибка при работе с файлом"; break; case 4101: er="Неправильное имя файла"; break; case 4102: er="Слишком много открытых файлов"; break; case 4103: er="Невозможно открыть файл"; break; case 4104: er="Несовместимый режим доступа к файлу"; break; case 4105: er="Ни один ордер не выбран"; break; case 4106: er="Неизвестный символ"; break; case 4107: er="Неправильный параметр цены для торговой функции"; break; case 4108: er="Неверный номер тикета"; break; case 4109: er="Торговля не разрешена"; break; case 4110: er="Длинные позиции не разрешены"; break; case 4111: er="Короткие позиции не разрешены"; break; case 4200: er="Объект уже существует"; break; case 4201: er="Запрошено неизвестное свойство объекта"; break; case 4202: er="Объект не существует"; break; case 4203: er="Неизвестный тип объекта"; break; case 4204: er="Нет имени объекта"; break; case 4205: er="Ошибка координат объекта"; break; case 4206: er="Не найдено указанное подокно"; break; case 4207: er="Ошибка при работе с объектом"; break; default: er="unknown error"; } return(er); } //-------------------------------------------------------------------------------------+ Использовать в советнике так int er=GetLastError(); error(er);

    2014-11-23   12:07
    Лучший ответ #4
    Накопленные выплаты 160034 RUB

    Для отложек у меня отдельная функция была. В принципе тут все то же самое. Так что совместить две функции в одну совсем не трудно. //+------------------------------------------------------------------+ int SendPendingOrder(int Type, double Lots, int TP, int SL, int Magic, string Cmnt, int& Error) { double Price, Take, Stop; int Ticket, Slippage, Color, Err; bool Delay = False; if(Debug) Print("Функция SendPendingOrder"); while(!IsStopped()) { if(!IsExpertEnabled()) { Error = ERR_TRADE_DISABLED; Print("Эксперту запрещено торговать!"); return(-1); } if(Debug)Print("Эксперту разрешено торговать"); if(!IsConnected()) { Error = ERR_NO_CONNECTION; Print("Связь отсутствует!"); return(-1); } if(Debug)Print("Связь с сервером установлена"); if(IsTradeContextBusy()) { Print("Торговый поток занят!"); Print("Ожидаем 3 сек..."); Sleep(3000); Delay = True; continue; } if(Debug)Print("Торговый поток свободен"); if(Delay) { if(Debug)Print("Обновляем котировки"); RefreshRates(); Delay = False; } else { if(Debug)Print("Задержек не было"); } switch(Type) { case OP_BUYSTOP: if(Debug)Print("Инициализируем параметры для BUYSTOP -ордера"); Price = NormalizeDouble(Ask + PO_EntryDistance * Point, Digits); Take = IIFd(TP == 0, 0, NormalizeDouble(Price + TP * Point, Digits)); Stop = IIFd(SL == 0, 0, NormalizeDouble(Price - SL * Point, Digits)); Color = Blue; break; case OP_SELLSTOP: if(Debug)Print("Инициализируем параметры для SELLSTOP-ордера"); Price = NormalizeDouble( Bid - PO_EntryDistance * Point, Digits); Take = IIFd(TP == 0, 0, NormalizeDouble(Price - TP * Point, Digits)); Stop = IIFd(SL == 0, 0, NormalizeDouble(Price + SL * Point, Digits)); Color = Red; break; default: if(Debug)Print("Тип ордера не соответствует требованиям."); return(-1); } Slippage = MarketInfo(Symbol(), MODE_SPREAD); if(Debug)Print("Slippage = ",Slippage); if(IsTradeAllowed()) { if(Debug)Print("Торговля разрешена, отправляем ордер..."); Ticket = OrderSend(Symbol(), Type, Lots, Price, Slippage, Stop, Take, Cmnt, Magic, 0, Color); if(Ticket < 0) { Err = GetLastError(); if (Err == 4 || /* SERVER_BUSY */ Err == 130 || /* INVALID_STOPS */ Err == 135 || /* PRICE_CHANGED */ Err == 137 || /* BROKER_BUSY */ Err == 138 || /* REQUOTE */ Err == 146 || /* TRADE_CONTEXT_BUSY */ Err == 136 ) /* OFF_QUOTES */ { Print("Ошибка(OrderSend - ", Err, "): ", ErrorDescription(Err)); Print("Ожидаем 3 сек..."); Sleep(3000); Delay = True; continue; } else { Print("Критическая ошибка(OrderSend - ", Err, "): ", ErrorDescription(Err)); Error = Err; break; } } break; } else { Print("Эксперту запрещено торговать или торговый поток занят!"); Print("Ожидаем 3 сек..."); Sleep(3000); Delay = True; continue; } } if(Debug)Print("Ордер отправлен успешно. Тикет = ",Ticket); return(Ticket); }

    2011-12-08   02:05
    Лучший ответ #5
    Накопленные выплаты 18175 RUB

    А я вот такую написал, использовать ее намного удобнее, функция возвращает код ошибки: //+------------------------------------------------------------------+ int Error(string event) //Error(""); { string descr; int err = GetLastError(); switch(err) { // Коды ошибок, возвращаемые торговым сервером или клиентским терминалом: case 0: /*descr= "Нет ошибки";*/ return(0); case 1: descr= "Нет ошибки, но результат не известен"; break; case 2: descr= "Общая ошибка"; break; case 3: descr= "Неправильные параметры"; break; case 4: descr= "Торговый сервер занят"; break; case 5: descr = "Старая версия клиентского терминала"; break; case 6: descr= "Нет связи с торговым сервером"; break; case 7: descr= "Недостаточно прав"; break; case 8: descr= "Слишком частые запросы"; break; case 9: descr= "Недопустимая операция нарушающая функционирование сервера"; break; case 64: descr= "Счет заблокирован"; break; case 65: descr= "Неправильный номер счета"; break; case 128: descr= "Истек срок ожидания совершения сделки"; break; case 129: descr= "Неправильная цена"; break; case 130: descr= "Неправильные стопы"; break; case 131: descr= "Неправильный объем"; break; case 132: descr= "Рынок закрыт"; break; case 133: descr= "Торговля запрещена"; break; case 134: descr= "Недостаточно денег для совершения операции"; break; case 135: descr = "Цена изменилась"; break; case 136: descr = "Нет цен"; break; case 137: descr = "Брокер занят"; break; case 138: descr = "Новые цены"; break; case 139: descr = "Ордер заблокирован и уже обрабатывается"; break; case 140: descr = "Разрешена только покупка"; break; case 141: descr = "Слишком много запросов"; break; case 145: descr = "Модификация запрещена, так как ордер слишком близок к рынку"; break; case 146: descr = "Подсистема торговли занята"; break; case 147: descr= "Использование даты истечения ордера запрещено брокером"; break; case 148: descr= "Количество открытых и отложенных ордеров достигло предела, установленного брокером"; break; case 149: descr= "Попытка открыть противоположную позицию к уже существующей, если хеджирование запрещено"; break; case 150: descr= "Попытка закрыть позицию по инструменту в противоречии с правилом FIFO"; break; // Коды ошибок выполнения MQL4 программы: case 4000: /*descr= "Нет ошибки";*/ return(0); case 4001: descr= "Неправильный указатель функции"; break; case 4002: descr= "Индекс массива - вне диапазона"; break; case 4003: descr= "Нет памяти для стека функций"; break; case 4004: descr= "Переполнение стека после рекурсивного вызова"; break; case 4005: descr= "На стеке нет памяти для передачи параметров"; break; case 4006: descr= "Нет памяти для строкового параметра"; break; case 4007: descr= "Нет памяти для временной строки"; break; case 4008: descr= "Неинициализированная строка"; break; case 4009: descr= "Неинициализированная строка в массиве"; break; case 4010: descr= "Нет памяти для строкового массива"; break; case 4011: descr= "Слишком длинная строка"; break; case 4012: descr = "Остаток от деления на ноль"; break; case 4013: descr = "Деление на ноль"; break; case 4014: descr= "Неизвестная команда"; break; case 4015: descr= "Неправильный переход"; break; case 4016: descr= "Неинициализированный массив"; break; case 4017: descr= "Вызовы DLL не разрешены"; break; case 4018: descr= "Невозможно загрузить библиотеку"; break; case 4019: descr = "Невозможно вызвать функцию"; break; case 4020: descr= "Вызовы внешних библиотечных функций не разрешены"; break; case 4021: descr= "Недостаточно памяти для строки, возвращаемой из функции"; break; case 4022: descr= "Система занята"; break; case 4050: descr= "Неправильное количество параметров функции"; break; case 4051: descr= "Недопустимое значение параметра функции"; break; case 4052: descr = "Внутренняя ошибка строковой функции"; break; case 4053: descr= "Ошибка массива"; break; case 4054: descr = "Неправильное использование массива-таймсерии"; break; case 4055: descr= "Ошибка пользовательского индикатора"; break; case 4056: descr = "Массивы несовместимы"; break; case 4057: descr= "Ошибка обработки глобальныех переменных"; break; case 4058: descr= "Глобальная переменная не обнаружена"; break; case 4059: descr = "Функция не разрешена в тестовом режиме"; break; case 4060: descr= "Функция не подтверждена"; break; case 4061: descr= "Ошибка отправки почты"; break; case 4062: descr= "Ожидается параметр типа string"; break; case 4063: descr = "Ожидается параметр типа integer"; break; case 4064: descr= "Ожидается параметр типа double"; break; case 4065: descr= "В качестве параметра ожидается массив"; break; case 4066: descr = "Запрошенные исторические данные в состоянии обновления"; break; case 4099: descr= "Конец файла"; break; case 4100: descr= "Ошибка при работе с файлом"; break; case 4101: descr= "Неправильное имя файла"; break; case 4102: descr= "Слишком много открытых файлов"; break; case 4103: descr= "Невозможно открыть файл"; break; case 4104: descr= "Несовместимый режим доступа к файлу"; break; case 4105: descr = "Ни один ордер не выбран"; break; case 4106: descr= "Неизвестный символ"; break; case 4107: descr= "Неправильный параметр цены для торговой функции"; break; case 4108: descr= "Неверный номер тикета"; break; case 4109: descr= "Торговля не разрешена"; break; case 4110: descr= "Длинные позиции не разрешены"; break; case 4111: descr= "Короткие позиции не разрешены"; break; case 4200: descr = "Объект уже существует"; break; case 4201: descr= "Запрошено неизвестное свойство объекта"; break; case 4202: descr= "Объект не существует"; break; case 4203: descr= "Неизвестный тип объекта"; break; case 4204: descr = "Нет имени объекта"; break; case 4205: descr= "Ошибка координат объекта"; break; case 4206: descr = "Не найдено указанное подокно"; break; case 4207: descr= "Ошибка при работе с объектом"; break; } Print(event,": ",descr,", № ошибки - ",err); return(err); } //+------------------------------------------------------------------+Пользоваться так - Error("описание контролируемого события"); и все . Пример: int start() { Error("В этом месте"); int x = 1/x; return(0); }



    Изображение
    Превью
    2018-02-13   04:29
    Лучший ответ #6
    Накопленные выплаты 21138 RUB

    Привет! МТ5 человеку нужно было, там возможно получить тиковую историю и соответственно есть возможность найти экстремумы точно по времени.



    Изображение
    Превью
  4. Линк#208
    Свой человек
    В эйфории
     
    desper стараюсь положительно себя зарекомендовать Аватар для desper
    Регистрация:
    17.12.2014
    Пол:
    Мужчина
    Сообщений:
    370
    Деньги за посты (Подробнее):
    6342 RUB
    Поставил лайков:
    444
    Получено лайков:  62
    в 54 сообщениях
    17%
    Цитата Сообщение от dato896 Посмотреть сообщение
    здравствуйте, может кто сумеет прикрутить функцию закрытия открытых сделок при обратном пересечение ценой MA? с рубильником ON/OFF советник написан под заказ за деньги, на добавление функции денег не хватает, может кто бесплатно поможет?
    dato896
    Если по существу вопроса "прикрутить функцию закрытия открытых сделок при обратном пересечение ценой MA", то надо вставить типа
    MQL код:
     MA0<=MA1 CloseAll();
    в строку 332.
    Правда я сам не могу т.к компилятор ругается
    MQL код:
     'CloseAll' - some operator expected	cm pin filtrebit 2.mq4	332	18
    поэтому может кто другой поможет кто умеет успокаивать этого зверя чтобы он не матюгался.


  5. Линк#209
    В середине пути
    Gulliwer стараюсь положительно себя зарекомендовать Аватар для Gulliwer
    Регистрация:
    28.10.2016
    Пол:
    Мужчина
    Сообщений:
    45
    Деньги за посты (Подробнее):
    98 RUB
    Поставил лайков:
    13
    Получено лайков:  3
    в 3 сообщениях
    7%
    Добрый день!Нужна функция сравнения двух рыночных ордеров с указанным типом и ID по размеру лота (>/<)..


  6. post_thanks Получено лайков: 2

    Незарегистрированный (2 пользователя)

  7. Линк#210
    Кубик-Rubik ™
    Страшно
     
    Rubinovi4 наивысший уровень репутации Rubinovi4 наивысший уровень репутации Rubinovi4 наивысший уровень репутации Rubinovi4 наивысший уровень репутации Rubinovi4 наивысший уровень репутации Rubinovi4 наивысший уровень репутации Rubinovi4 наивысший уровень репутации Rubinovi4 наивысший уровень репутации Rubinovi4 наивысший уровень репутации Rubinovi4 наивысший уровень репутации Rubinovi4 наивысший уровень репутации Аватар для Rubinovi4
    Регистрация:
    19.12.2010
    Пол:
    Мужчина
    Сообщений:
    14,761
    Деньги за посты (Подробнее):
    315861 RUB
    Поставил лайков:
    5,876
    Получено лайков:  9,663
    в 6,189 сообщениях
    65%
    Цитата Сообщение от Gulliwer Посмотреть сообщение
    Добрый день!Нужна функция сравнения двух рыночных ордеров с указанным типом и ID по размеру лота (>/<)..
    А что там сложного? В цикле, при выборе ордеров через OrderSelect, передавай нужные тебе значения тип ордера и его тикер как я понимаю. Ну а дальше уже простая математика, сравнивай больше или меньше и выполняй что тебе необходимо.
    Цитата Сообщение от dato896 Посмотреть сообщение
    советник написан под заказ за деньги, на добавление функции денег не хватает, может кто бесплатно поможет?
    Я уверен, что Владимир внесёт данное изменение бесплатно, если обратиться к нему.


  8. post_thanks Получено лайков: 2

    69zamok69 (17.10.2019), Незарегистрированный (1 пользователь)

  9. Линк#211
    В середине пути
    Gulliwer стараюсь положительно себя зарекомендовать Аватар для Gulliwer
    Регистрация:
    28.10.2016
    Пол:
    Мужчина
    Сообщений:
    45
    Деньги за посты (Подробнее):
    98 RUB
    Поставил лайков:
    13
    Получено лайков:  3
    в 3 сообщениях
    7%
    Цитата Сообщение от Rubinovi4 Посмотреть сообщение
    А что там сложного? В цикле, при выборе ордеров через OrderSelect, передавай нужные тебе значения тип ордера и его тикер как я понимаю. Ну а дальше уже простая математика, сравнивай больше или меньше и выполняй что тебе необходимо.
    Спасибо,конечно,за совет..Ну не силен я в программировании.. Советников своих делаю в генераторе.Так,в общих чертах,разбираюсь немного,могу понять,о чем речь в коде..Блоки из генератора стандартные могу немного под себя переделать,в программе специальной..А так,чтобы сам написал,пока нет...Пробую,конечно,но времени не хватает поглубже разобраться.Если кто набросает здесь код этой функции,буду очень признателен..


  10. Линк#212
    Кандидат форумных наук
    Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Аватар для Leschich
    Регистрация:
    30.11.2012
    Пол:
    Мужчина
    Сообщений:
    1,310
    Деньги за посты (Подробнее):
    29674 RUB
    Поставил лайков:
    3,872
    Получено лайков:  1,405
    в 665 сообщениях
    107%
    Цитата Сообщение от Gulliwer Посмотреть сообщение
    Добрый день!Нужна функция сравнения двух рыночных ордеров с указанным типом и ID по размеру лота (>/<)..
    Цитата Сообщение от Gulliwer Посмотреть сообщение
    Если кто набросает здесь код этой функции,буду очень признателен..
    Хорошо, напишу вам... только уточните какие есть исходные данные и что нужно получить на выходе функции, цифры или там какие нить слова, чтобы согласовать с вашими дальнейшими действиями.
    Еще такой непонятный момент.. вы написали больше - меньше, но забыли про третье состояние... равенство лотов. Или, при определенных условиях достаточно true/false. Например, лот первого ордера больше второго- true, во всех остальных случаях- false. Уточните.
    Далее.. как минимум, нужны еще их тикеты. Но! если известны тикеты, то тип и ID уже не обязательны. По сему, скорее всего тикеты неизвестны, их нужно найти по каким то признакам, ибо ордеров может быть множество на счете, и с данным типам и с таким ID. Как то так, больше инфы.

    Последний раз редактировалось Leschich; 14.10.2019 в 20:09.
    " Мы можем видеть то, что случится в будущем, по событиям прошлого, если знаем, как смотреть". В. Сперандео.
    Мы называем процессы случайными... до тех пор, пока не установим их закономерности.

  11. post_thanks Получено лайков: 4

    69zamok69 (17.10.2019), Gulliwer (17.10.2019), Незарегистрированный (2 пользователя)

  12. Линк#213
    В середине пути
    Gulliwer стараюсь положительно себя зарекомендовать Аватар для Gulliwer
    Регистрация:
    28.10.2016
    Пол:
    Мужчина
    Сообщений:
    45
    Деньги за посты (Подробнее):
    98 RUB
    Поставил лайков:
    13
    Получено лайков:  3
    в 3 сообщениях
    7%
    Цитата Сообщение от Leschich Посмотреть сообщение
    Хорошо, напишу вам... только уточните какие есть исходные данные и что нужно получить на выходе функции, цифры или там какие нить слова, чтобы согласовать с вашими дальнейшими действиями.
    Еще такой непонятный момент.. вы написали больше - меньше, но забыли про третье состояние... равенство лотов. Или, при определенных условиях достаточно true/false. Например, лот первого ордера больше второго- true, во всех остальных случаях- false. Уточните.
    Далее.. как минимум, нужны еще их тикеты. Но! если известны тикеты, то тип и ID уже не обязательны. По сему, скорее всего тикеты неизвестны, их нужно найти по каким то признакам, ибо ордеров может быть множество на счете, и с данным типам и с таким ID. Как то так, больше инфы.
    Прошу прощения,выше не точно выразился..Нужно сравнить не конкретно вот именно ДВА ордера(это у меня в советнике,по моим условиям, будет два)...Да,их может быть больше..Тикеты здесь не важны..Нужно простое сравнение лотности ордеров с определенным ID(магиком),определенным типом(BUY,SELL),на одном символе..Например:если лот бай1 больше лот сел2 и OrderSymbol() == Symbol(),то TRUE...дальнейшие мои какие-то действия..Из этой функции сделаю уже сам блок в генератор..Заранее извиняюсь за свою некомпетентность,не знаю,возможно ли так все сделать,выбрать,найти ордер,не учитывая тикер его...Если б знал,не дурил бы голову вам здесь


  13. post_thanks Получено лайков: 2

    69zamok69 (17.10.2019), Незарегистрированный (1 пользователь)

    ForexCopy
  14. Линк#214
    Кандидат форумных наук
    Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Leschich авторитетный пользователь Аватар для Leschich
    Регистрация:
    30.11.2012
    Пол:
    Мужчина
    Сообщений:
    1,310
    Деньги за посты (Подробнее):
    29674 RUB
    Поставил лайков:
    3,872
    Получено лайков:  1,405
    в 665 сообщениях
    107%
    Цитата Сообщение от Gulliwer Посмотреть сообщение
    Да,их может быть больше..Тикеты здесь не важны..Нужно простое сравнение лотности ордеров с определенным ID(магиком),определенным типом(BUY,SELL),на одном символе..Например:если лот бай1 больше лот сел2 и OrderSymbol() == Symbol(),то TRUE...дальнейшие мои какие-то действия..Из этой функции сделаю уже сам блок в генератор..Заранее извиняюсь за свою некомпетентность,не знаю,возможно ли так все сделать,выбрать,найти ордер,не учитывая тикер его...
    Все равно не добился от вас признаков, по каким выбирать ордера, если их множество. Можно и без тикетов. Вот привел пробный пример, по вашей просьбе. Однако, она не совсем корректная, если в рынке будет больше двух ордеров или один или 2 одного типа. Старайтесь писать код с перспективой на будущее и учитывать все нюансы. Что непонятно, спрашивайте, подредактируем.
    MQL код:
    //+-------------------------------------------------------------------+
    //| 17.10.2019 ; https://forexdengi.com |
    //+-------------------------------------------------------------------+
    //| Описание : Сравнение лотности двух ордеров разных типов |
    //+-------------------------------------------------------------------+
    bool CompareLot(int ot1=-1,int ot2=-1,int mn=-1) {
    int type,k=OrdersTotal();
    double lots_1=0.0,lots_2=0.0;
    bool result=false;
    for(i=0; i if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { // Выбор ордера из списка
    if(OrderSymbol() == Symbol() && OrderMagicNumber() == mn) { // Фильтр по символу и по ID
    type=OrderType();
    if(type>1) continue;
    if(type==OP_BUY && type==ot1) lots_1=OrderLots(); // Заносим баерский лот в переменную
    if(type==OP_SELL && type==ot2) lots_2=OrderLots(); // Заносим селерский лот в переменную
    }}}
    if(lots_1>lots_2) result=true; // Сравниваем лотность
    return (result); // Возвращаем результат
    }

    // Вызов функции сравнения лотности ордеров
    if(CompareLot(OP_BUY,OP_SELL,Magic)) {
    // Здесь какие нить действия, если лот ордера бай больше лота ордера селл
    }
    else {
    // Здесь какие нить действия, если лот ордера бай меньше лота ордера селл или равен
    }

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

    Последний раз редактировалось Leschich; 17.10.2019 в 18:10.
    " Мы можем видеть то, что случится в будущем, по событиям прошлого, если знаем, как смотреть". В. Сперандео.
    Мы называем процессы случайными... до тех пор, пока не установим их закономерности.

  15. post_thanks Получено лайков: 4

    69zamok69 (17.10.2019), Gulliwer (17.10.2019), NaKaZ (18.10.2019), Незарегистрированный (1 пользователь)


Страница 11 из 11
Первая ... 10 Последняя

Похожие темы

  1. Некоторые секреты МТ4
    от Андрей Сырбу в разделе Трейдерский софт, компьютерное оборудование
    Replies: 2378
    Последнее сообщение: Сегодня, 19:44
  2. FAQ: Полезные функции форума (подписка на темы, уведомления, черновики, и др.)
    от Странник_РУ в разделе Вопросы к администрации форума
    Replies: 7
    Последнее сообщение: 07.02.2020, 13:40
  3. Некоторые психотехники
    от сват в разделе Психология трейдера
    Replies: 2149
    Последнее сообщение: 18.01.2020, 18:10
  4. MQL5: Некоторые полезные функции
    от Gold в разделе MQL-программирование, АТС
    Replies: 25
    Последнее сообщение: 26.02.2019, 10:54
  5. Банкомат. Некоторые особенности
    от Volangott в разделе Свободное общение
    Replies: 0
    Последнее сообщение: 27.03.2014, 16:30

Метки этой темы