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

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

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

 Перейти в классический вид темы
  1. Линк#41
    Кандидат форумных наук
    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)

     
  3. ТОП сообщений
    2014-07-09   14:02
    Лучший ответ #1
    Накопленные выплаты 159751 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
    Накопленные выплаты 159751 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. Линк#43
    Кандидат форумных наук
    no
     
    fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация Аватар для fore-x
    Регистрация:
    18.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,716
    Деньги за посты (Подробнее):
    18175 RUB
    Поставил лайков:
    440
    Получено лайков:  584
    в 399 сообщениях
    34%
    Функция для определения точности округления, возвращает количество знаков после запятой, методом отсечения нулей, находящихся справа. Финальная версия.

    MQL код:
    int digits(double number) 
    {
    string x, y; int i = -1, k, t = 7; // t - предпологаемая точность от 0 до 7

    y = DoubleToStr(number,8); k = StringLen(y)-(9-t);

    for(; ;k--)
    {
    x = StringSubstr(y,k,1);
    if(x != "0" && i < 0) i = k;
    if(x == ".") return(i-k);
    }
    }

    Последний раз редактировалось Gold; 28.12.2012 в 00:25.

  5. Линк#44
    Кандидат форумных наук
    no
     
    fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация Аватар для fore-x
    Регистрация:
    18.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,716
    Деньги за посты (Подробнее):
    18175 RUB
    Поставил лайков:
    440
    Получено лайков:  584
    в 399 сообщениях
    34%
    Цитата Сообщение от WsForex Посмотреть сообщение
    Полезная функция кто не понимает код ошибок использовать в советнике так:

    MQL код:
    int er=GetLastError(); error(er); 
    MQL код:
    int start()
    {
    int x = 3, y = 0;

    y = x/y;

    int er = GetLastError();
    Alert(er);

    return(0);
    }
    Почему ошибка не появляется?
    А во вкладке эксперты, появляется сообщение:
    2011.12.07 11:11:55 Индикатор EURUSD,M30: zero divide
    А, понял, программа отключается и дальше не идет, узнать об ошибке можно через deinit(); или вызвав функцию error(er); в начале кода. Неудобно однако!

    Последний раз редактировалось Gold; 28.12.2012 в 00:25.

  6. Линк#45
    Кандидат форумных наук
    no
     
    fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация Аватар для fore-x
    Регистрация:
    18.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,716
    Деньги за посты (Подробнее):
    18175 RUB
    Поставил лайков:
    440
    Получено лайков:  584
    в 399 сообщениях
    34%
    Цитата Сообщение от WsForex Посмотреть сообщение
    Полезная функция кто не понимает код ошибок

    Добрый день.
    Вот и я решил поделиться кодом написал функцию кодов ошибок на русском языке.
    Цитата Сообщение от WsForex Посмотреть сообщение
    Использовать в советнике так

    MQL код:
    int er=GetLastError(); 

    error(er)
    ;
    А я вот такую написал, использовать ее намного удобнее, функция возвращает код ошибки:

    MQL код:
    //+------------------------------------------------------------------+ 
    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("описание контролируемого события"); и все .

    Пример:
    MQL код:
    int start()
    {
    Error("В этом месте");

    int x = 1/x;

    return(0);
    }


    Название: ScreenShot00174.jpg
Просмотров: 8877

Размер: 73.2 КБ

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

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

    Gold (17.03.2012), Newbie (21.12.2012), Terminator (13.11.2012), WsForex (17.11.2012)

  8. Линк#46
    Кандидат форумных наук
    no
     
    fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация Аватар для fore-x
    Регистрация:
    18.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,716
    Деньги за посты (Подробнее):
    18175 RUB
    Поставил лайков:
    440
    Получено лайков:  584
    в 399 сообщениях
    34%
    Функция для определения причины деинициализации программы:
    MQL код:
    //+------------------------------------------------------------------+ 
    int Deinit() //Deinit();
    {
    string description;
    int reason = UninitializeReason();

    switch(reason)
    {
    case 0: descr = "скрипт самостоятельно завершил свою работу"; break;
    case 1: descr = "программа удалена с графика"; break;
    case 2: descr = "программа перекомпилирована"; break;
    case 3: descr = "символ или период графика был изменен"; break;
    case 4: descr = "график закрыт"; break;
    case 5: descr = "входные параметры были изменены пользователем"; break;
    case 6: descr = "активирован другой счет"; break;
    }

    Print("Причина деинициализации: ",descr,", код № - ",reason);

    return(reason);
    }
    //+------------------------------------------------------------------+

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

  9. Линк#47
    Кандидат форумных наук
    no
     
    fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация Аватар для fore-x
    Регистрация:
    18.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,716
    Деньги за посты (Подробнее):
    18175 RUB
    Поставил лайков:
    440
    Получено лайков:  584
    в 399 сообщениях
    34%
    Еще одну функцию написал, заменяет стандартную функцию - MarketInfo(), возвращает тоже самое, плюс комментарий запроса выводится в журнал экспертов.
    MQL код:
    //+------------------------------------------------------------------+ 
    double MI(string symbol, int type)
    {
    string descr, n, s;
    if(symbol == "")symbol = Symbol();
    double info = MarketInfo(symbol, type);

    switch(type)
    {
    case 1: descr = "минимальная дневная цена"; break;
    case 2: descr = "максимальная дневная цена"; break;
    case 5: descr = "время поступления последней котировки"; s = "TTS"; break;
    case 9: descr = "последняя поступившая цена предложения"; break;
    case 10: descr = "последняя поступившая цена продажи"; break;
    case 11: descr = "размер пункта в валюте котировки"; break;
    case 12: descr = "количество цифр после десятичной точки в цене инструмента"; break;
    case 13: descr = "спрэд в пунктах"; break;
    case 14: descr = "минимально допустимый уровень стоп-лосса/тейк-профита в пунктах"; break;
    case 15: descr = "размер контракта в базовой валюте инструмента"; break;
    case 16: descr = "размер минимального изменения цены инструмента в валюте депозита"; break;
    case 17: descr = "минимальный шаг изменения цены инструмента в валюте котировки"; break;
    case 18: descr = "размер свопа для длинных позиций"; break;
    case 19: descr = "размер свопа для коротких позиций"; break;
    case 20: descr = "календарная дата начала торгов "; s = "TTS"; break;
    case 21: descr = "календарная дата конца торгов "; s = "TTS"; break;
    case 22: if(info == 0) n = "Запрещено"; if(info == 1) n = "Разрешено";
    descr = "разрешение торгов по указанному инструменту - "+n; break;
    case 23: descr = "минимальный размер лота"; break;
    case 24: descr = "шаг изменения размера лота"; break;
    case 25: descr = "максимальный размер лота"; break;
    case 26: if(info == 0) n = "в пунктах"; if(info == 1) n = "в базовой валюте инструмента"; if(info == 2) n = "в процентах";
    if(info == 3) n = "в валюте залоговых средств"; descr = "метод вычисления свопов - "+n; break;
    case 27: if(info == 0) n = "Forex"; if(info == 1) n = "CFD"; if(info == 2) n = "Futures";
    descr = "способ расчета прибыли - "+n; break;
    case 28: if(info == 0) n = "Forex"; if(info == 1) n = "CFD"; if(info == 2) n = "Futures"; if(info == 3) n = "CFD на индексы";
    descr = "способ расчета залоговых средств - "+n; break;
    case 29: descr = "начальные залоговые требования для 1 лота"; break;
    case 30: descr = "размер залоговых средств для поддержки открытых позиций в расчете на 1 лот"; break;
    case 31: descr = "маржа, взимаемая с перекрытых позиций в расчете на 1 лот"; break;
    case 32: descr = "размер свободных средств, необходимых для открытия 1 лота на покупку"; break;
    case 33: descr = "уровень заморозки ордеров в пунктах"; break;
    default: descr = "неизвестный параметр"; Alert("Ошибка!!!");
    }

    n = "MarketInfo: "+descr+", для "+symbol+" = ";

    if(s == "TTS") Print(n ,TimeToStr(info));
    else Print(n ,DoubleToStr(info,digits(info)));

    return(info);
    }
    //+------------------------------------------------------------------+
    Для использования функции, требуется дополнительная функция - digits.

    Использовать так -
    MQL код:
    MI(Symbol(),MODE_ASK);

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

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

    artamir (07.06.2012)

  11. Линк#48
    Кандидат форумных наук
    no
     
    fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация Аватар для fore-x
    Регистрация:
    18.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,716
    Деньги за посты (Подробнее):
    18175 RUB
    Поставил лайков:
    440
    Получено лайков:  584
    в 399 сообщениях
    34%
    Вот, еще две функции написал, работают в паре, функция - info(), запрашивает значения переменных находящихся в функции parametrs() и обрабатывает их. Пример использования:

    MQL код:
    //+------------------------------------------------------------------+
    int start()
    {
    info();

    return(0);
    }
    //+------------------------------------------------------------------+
    int info()
    {
    Alert("Начало");

    for(int parametr = 0; ; parametr++)
    {
    if(parametrs(parametr) < 0) break; // Запрашиваем значение переменных из функции parametrs();
    Alert("Обрабатываем переменные полученные из функции parametrs - ",parametr);
    }

    Alert("Конец");

    return(0);
    }
    //+------------------------------------------------------------------+
    int parametrs(int parametr)
    {

    switch(parametr)
    {
    case 0: Alert("Передаем переменные в функцию info - ", parametr); break;
    case 1: Alert("Передаем переменные в функцию info - ", parametr); break;
    case 2: Alert("Передаем переменные в функцию info - ", parametr); break;
    case 3: Alert("Передаем переменные в функцию info - ", parametr); break;
    case 4: Alert("Передаем переменные в функцию info - ", parametr); break;
    case 5: Alert("Передаем переменные в функцию info - ", parametr); break;
    case 6: Alert("Передаем переменные в функцию info - ", parametr); break;
    default: return(-1);
    }

    return(parametr);
    }
    //+------------------------------------------------------------------+

    Последний раз редактировалось Gold; 28.12.2012 в 00:13.

  12. Линк#49
    Кандидат форумных наук
    no
     
    fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация Аватар для fore-x
    Регистрация:
    18.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,716
    Деньги за посты (Подробнее):
    18175 RUB
    Поставил лайков:
    440
    Получено лайков:  584
    в 399 сообщениях
    34%
    Функция для продления времени жизни всех глобальных переменных находящихся в терминале:

    MQL код:
    void TimeGlobalVariable()
    {
    for(int i = GlobalVariablesTotal()-1; i >=0; i--)
    GlobalVariableSet(GlobalVariableName(i), GlobalVariableGet(GlobalVariableName(i)));
    }

    Последний раз редактировалось Gold; 28.12.2012 в 00:13.

  13. Линк#50
    Живая Легенда
    no
     
    ppvic наивысший уровень репутации ppvic наивысший уровень репутации ppvic наивысший уровень репутации ppvic наивысший уровень репутации ppvic наивысший уровень репутации ppvic наивысший уровень репутации ppvic наивысший уровень репутации ppvic наивысший уровень репутации ppvic наивысший уровень репутации ppvic наивысший уровень репутации ppvic наивысший уровень репутации Аватар для ppvic
    Регистрация:
    30.05.2010
    Сообщений:
    31,676
    Деньги за посты (Подробнее):
    276261 RUB
    Поставил(а) лайков:
    8,500
    Получено лайков:  21,455
    в 11,818 сообщениях
    68%
    Цитата Сообщение от fore-x Посмотреть сообщение
    Функция для продления времени жизни всех глобальных переменных находящихся в терминале:

    MQL код:
    void TimeGlobalVariable()
    {
    for(int i = GlobalVariablesTotal()-1; i >=0; i--)
    GlobalVariableSet(GlobalVariableName(i), GlobalVariableGet(GlobalVariableName(i)));
    }
    Т.к. для "продолжения жизни" глобальной переменной терминала достаточно просто обращения к ней, вот такой, или подобный, код будет работать совершенно аналогично, без необходимости повторного прописывания переменной её содержимого:
    MQL код:

    void TimeGlobalVariable() {
    double v;
    for(int i = 0; i< GlobalVariablesTotal(); i++) v = GlobalVariableGet(GlobalVariableName(i));
    }

    Последний раз редактировалось Gold; 28.12.2012 в 00:13.

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

    fore-x (27.12.2011)

  15. Линк#51
    Частый гость
    Готов на всё!
     
    S312 стараюсь положительно себя зарекомендовать Аватар для S312
    Регистрация:
    21.12.2010
    Пол:
    Мужчина
    Сообщений:
    86
    Деньги за посты (Подробнее):
    699 RUB
    Поставил лайков:
    224
    Получено лайков:  8
    в 7 сообщениях
    9%
    Уважаемые господа!

    Подскажите функцию открытия сетки отложенных стоп ордеров в советнике с использованием следующих переменных:

    MQL код:
    extern int    SL   = 30;
    extern int TP = 30;
    extern int Delta1 = 15; // шаг от цены до первого ордера
    extern int Delta = 20; // расстояние между ордерами
    extern int Orders = 3; // количество ордеров в сетке
    bool Opn_B=false; // Критерий для открытия BuyStop сетки
    bool Opn_S=false; // Критерий для открытия SellStop сетки


    спасибо!

    Последний раз редактировалось Gold; 28.12.2012 в 00:12.

  16. Линк#52
    Кандидат форумных наук
    no
     
    fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация Аватар для fore-x
    Регистрация:
    18.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,716
    Деньги за посты (Подробнее):
    18175 RUB
    Поставил лайков:
    440
    Получено лайков:  584
    в 399 сообщениях
    34%
    А может быть Вам советник целый нужен, обратитесь вот сюда - Бесплатное написание программ на MQL4.

    Цитата Сообщение от S312 Посмотреть сообщение
    Подскажите функцию открытия сетки отложенных стоп ордеров в советнике с использованием следующих переменных
    Или, попробуйте найти функцию для открытия ордеров нужного Вам типа (bool Opn_B=false; bool Opn_S=false) и вызывайте ее несколько раз (extern int Orders = 3) с необходимыми Вам параметрами (extern int SL = 30; extern int TP = 30).

    Последний раз редактировалось fore-x; 01.01.2012 в 23:55.

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

    S312 (02.01.2012)

  18. Линк#53
    Частый гость
    Готов на всё!
     
    S312 стараюсь положительно себя зарекомендовать Аватар для S312
    Регистрация:
    21.12.2010
    Пол:
    Мужчина
    Сообщений:
    86
    Деньги за посты (Подробнее):
    699 RUB
    Поставил лайков:
    224
    Получено лайков:  8
    в 7 сообщениях
    9%
    fore-x,

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


  19. Линк#54
    Кандидат форумных наук
    no
     
    fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация Аватар для fore-x
    Регистрация:
    18.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,716
    Деньги за посты (Подробнее):
    18175 RUB
    Поставил лайков:
    440
    Получено лайков:  584
    в 399 сообщениях
    34%
    Цитата Сообщение от S312 Посмотреть сообщение
    Да советник у меня уже есть, но он торгует рыночным ордером. Мне нужно его переделать, чтобы он торговал отложкой и в сетку. Вот пока не могу найти подходящую функцию.
    Такая универсальная функция, не найдется сама собой, ее просто не существует, обратитесь вот сюда - Помогите с написанием функции.
    Но проще будет, как мне кажется, исправить советник, это здесь - Помогите исправить советник или индикатор.


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

    S312 (02.01.2012)

  21. Линк#55
    Кандидат форумных наук
    no
     
    fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация Аватар для fore-x
    Регистрация:
    18.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,716
    Деньги за посты (Подробнее):
    18175 RUB
    Поставил лайков:
    440
    Получено лайков:  584
    в 399 сообщениях
    34%
    Что-то я замаялся по справке бегать, с поисками необходимого значения таймфрейма, написал вот такую вот функцию:
    MQL код:
    int period(int x)
    {
    switch(x)
    {
    case 1: return(PERIOD_M1); // x = 1 - Период равен M1 и т.д
    case 2: return(PERIOD_M5);
    case 3: return(PERIOD_M15);
    case 4: return(PERIOD_M30);
    case 5: return(PERIOD_H1);
    case 6: return(PERIOD_H4);
    case 7: return(PERIOD_D1);
    case 8: return(PERIOD_W1);
    case 9: return(PERIOD_MN1);
    default: return(Period());
    }
    }

    Последний раз редактировалось Gold; 28.12.2012 в 00:12.

  22. Линк#56
    Кандидат форумных наук
    no
     
    fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация Аватар для fore-x
    Регистрация:
    18.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,716
    Деньги за посты (Подробнее):
    18175 RUB
    Поставил лайков:
    440
    Получено лайков:  584
    в 399 сообщениях
    34%
    Цитата Сообщение от fore-x Посмотреть сообщение
    Что-то я замаялся по справке бегать, с поисками необходимого значения таймфрейма, написал вот такую вот функцию:
    Опять не получилось с первого раза все правильно сделать , нужно вот так значит:
    MQL код:
    int period(int x)
    {
    switch(x)
    {
    case -1: return(PERIOD_M1);
    case -2: return(PERIOD_M5);
    case -3: return(PERIOD_M15);
    case -4: return(PERIOD_M30);
    case -5: return(PERIOD_H1);
    case -6: return(PERIOD_H4);
    case -7: return(PERIOD_D1);
    case -8: return(PERIOD_W1);
    case -9: return(PERIOD_MN1);
    default: return(Period());
    }
    }
    Лучше написать "-9", чем писать "43200".


    Название: ScreenShot00200.jpg
Просмотров: 3811

Размер: 5.9 КБ


    И не запутаешься, стандартных периодов в терминале - всего-то девять штук.

    Последний раз редактировалось Gold; 28.12.2012 в 00:12.

  23. Линк#57
    Кандидат форумных наук
    no
     
    fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация Аватар для fore-x
    Регистрация:
    18.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,716
    Деньги за посты (Подробнее):
    18175 RUB
    Поставил лайков:
    440
    Получено лайков:  584
    в 399 сообщениях
    34%
    Пример реализации magic номера по времени:

    MQL код:
    void start()
    {
    Comment(Magic(Time[0])); // Возвращает дату в формате - год/месяц/число/час/минута
    }
    //+------------------------------------------------------------------+
    int Magic(datetime time) // корректно работает начиная с 2010 года - до 2022 года
    {
    string x = "", name = TimeToStr(time);
    for(int i=14;i>0;i-=3)
    x = StringConcatenate(StringSubstr(name,i,2),x);
    return(StrToInteger(x));
    }

    Последний раз редактировалось Gold; 28.12.2012 в 00:11.

  24. Линк#58
    Живая Легенда
    no
     
    ppvic наивысший уровень репутации ppvic наивысший уровень репутации ppvic наивысший уровень репутации ppvic наивысший уровень репутации ppvic наивысший уровень репутации ppvic наивысший уровень репутации ppvic наивысший уровень репутации ppvic наивысший уровень репутации ppvic наивысший уровень репутации ppvic наивысший уровень репутации ppvic наивысший уровень репутации Аватар для ppvic
    Регистрация:
    30.05.2010
    Сообщений:
    31,676
    Деньги за посты (Подробнее):
    276261 RUB
    Поставил(а) лайков:
    8,500
    Получено лайков:  21,455
    в 11,818 сообщениях
    68%
    Цитата Сообщение от fore-x Посмотреть сообщение
    Пример реализации magic номера по времени:
    В чем смысл этой функции???

    Например, применили мы её в советнике, а дальше что? Как советник будет находить собственные ордера с подобными "мэйджиками"?
    Для этого, хотя бы, стоит закодировать еще и уникальный код советника, вместе с датой.
    (Вроде того: magic = "76834000"+ x, где 76834000 — уникальный код)

    Кроме того, дату/время ордера можно получить и напрямую из ордера. Мэйджик при этом вообще не нужен:
    http://docs.mql4.com/ru/trading/OrderOpenTime


  25. Линк#59
    Кандидат форумных наук
    no
     
    fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация fore-x хорошая репутация Аватар для fore-x
    Регистрация:
    18.03.2011
    Пол:
    Мужчина
    Сообщений:
    1,716
    Деньги за посты (Подробнее):
    18175 RUB
    Поставил лайков:
    440
    Получено лайков:  584
    в 399 сообщениях
    34%
    Цитата Сообщение от ppvic Посмотреть сообщение
    В чем смысл этой функции???

    Например, применили мы её в советнике, а дальше что? Как советник будет находить собственные ордера с подобными "мэйджиками"?
    Для этого, хотя бы, стоит закодировать еще и уникальный код советника, вместе с датой.
    (Вроде того: magic = "76834000"+ x, где 76834000 — уникальный код)

    Кроме того, дату/время ордера можно получить и напрямую из ордера. Мэйджик при этом вообще не нужен:
    http://docs.mql4.com/ru/trading/OrderOpenTime
    Согласен, данная функция бесполезна, просто на момент ее создания я еще не знал, что - "Целые константы могут принимать значения от -2147483648 до 2147483647".
    Понравилось само решение данной задачи - for(int i=14;i>0;i-=3), получилось красиво, кратко и надежно. Вот и решил разместить получившийся результат в этой ветке.


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

    ppvic (03.04.2012)

  27. Линк#60
    Модератор
    no
     
    Gold наивысший уровень репутации Gold наивысший уровень репутации Gold наивысший уровень репутации Gold наивысший уровень репутации Gold наивысший уровень репутации Gold наивысший уровень репутации Gold наивысший уровень репутации Gold наивысший уровень репутации Gold наивысший уровень репутации Gold наивысший уровень репутации Gold наивысший уровень репутации Аватар для Gold
    Регистрация:
    21.12.2010
    Пол:
    Мужчина
    Сообщений:
    19,111
    Поставил лайков:
    22,780
    Получено лайков:  19,592
    в 8,767 сообщениях
    103%
    В самое начало добавляется список переменных, к тем что есть в советнике.

    MQL код:
    extern string hour_job="Часы Работы советника";
    extern string Note1 ="Начало работы";
    extern int hour_begin =2;
    extern int minute_begin =15;
    extern string Note2 ="Завершение работы";
    extern int hour_end =20;
    extern int minute_end =35;


    Сразу после
    MQL код:
    int start() {

    добавляется функция проверки времени
    MQL код:
    //	Проверяем, разрешено ли торговать советнику...
    if( isTradeTimeInt(hour_begin, minute_begin,hour_end,minute_end)==false)return;
    // Если условие выполнено, выполняется остальной код функции start()...


    В самый низ советника, добавляется функция проверки времени
    MQL код:

    // Функция проверки времени работы советника.
    bool isTradeTimeInt(int hb=0, int mb=0, int he=0, int me=0) {
    datetime db, de; // Время начала и окончания работы
    int hc; // Часы текущего времени торгового сервера

    db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+hb+":"+mb);
    de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+he+":"+me);
    hc=TimeHour(TimeCurrent());
    if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
    }

    if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
    else return(False);
    }

    Последний раз редактировалось Gold; 28.12.2012 в 00:07. Причина: mql

  28. Линк#61
    Частый гость
    artamir приемлемый уровень репутации Аватар для artamir
    Регистрация:
    03.05.2012
    Пол:
    Мужчина
    Сообщений:
    114
    Деньги за посты (Подробнее):
    1226 RUB
    Поставил лайков:
    6
    Получено лайков:  56
    в 44 сообщениях
    49%
    MQL код:
    string libSF_StrKeyValue(string str = "", string key = "@p", string defolt = "-1", string delimeter = "@"){
    /*
    >Автор: artamir
    >Версия : 0.0.2
    >Дата : 2012.04.04
    >Описание:
    @str = Входящая строка типа: "@p123456@l5@w3@d1"; p,l,w,d - имена ключей
    @key = <@x>; где "@"-разделитель, x-имя ключа
    */
    int lPosStart = -1; //Позиция начала строки имени ключа
    int lPosEnd = -1; //Позиция конца строки имени ключа
    string d = delimeter; //разделитель
    //---
    if(StringFind(key,d,0) == -1){
    key = d + key;
    }
    //---
    lPosStart = StringFind(str,key,0);

    if(lPosStart == -1){
    return(defolt);
    }
    //---
    int lKeyLen = StringLen(key);
    lPosEnd = StringFind(str,d,lPosStart+1); // ищем позицию "@" в str после lPosStart
    lPosStart = lPosStart + lKeyLen;
    int len = iif(lPosEnd == -1, -1, lPosEnd - lPosStart);
    //---
    return(StringSubstr(str, lPosStart, len));
    }


    Удобно использовать для хранения каких-либо данных в комментарии ордера.
    Правда есть ограничение терминала в 27 сиволов в комментарии ордера.

    Пример :

    MQL код:
    string val = libSF_StrKeyValue("@p111@l222@d333","@p"); // "111"
    val = libSF_StrKeyValue("@p111@l222@d333","@l"); // "222"
    val = libSF_StrKeyValue("@p111@l222@d333","@w"); // "-1"

    Последний раз редактировалось Gold; 28.12.2012 в 00:10.

  29. <a href="https://www.instaforex.org/ru/company_news">Форекс портал</a>
  30. Линк#62
    Частый гость
    artamir приемлемый уровень репутации Аватар для artamir
    Регистрация:
    03.05.2012
    Пол:
    Мужчина
    Сообщений:
    114
    Деньги за посты (Подробнее):
    1226 RUB
    Поставил лайков:
    6
    Получено лайков:  56
    в 44 сообщениях
    49%
    MQL код:

    double iif( bool condition, double ifTrue, double ifFalse ){
    /*
    >Ver : 0.0.1
    >Date : 2012.04.04
    >History:
    */
    if( condition ) return( ifTrue );
    //---
    return( ifFalse );
    }


    Заменяет конструкцию
    MQL код:
    if(...)
    // ...
    else
    // ...


    Пример:
    MQL код:

    double thisPrice = iif(cmd == OP_BUY, Bid, Ask);

    Последний раз редактировалось Gold; 28.12.2012 в 00:11.


Страница 3 из 11
Первая ... 2 3 4 ... Последняя ◄╝

Похожие темы

  1. FAQ: Полезные функции форума (подписка на темы, уведомления, черновики, и др.)
    от Странник_РУ в разделе Вопросы к администрации форума
    Replies: 7
    Последнее сообщение: 07.02.2020, 13:40
  2. Некоторые секреты МТ4
    от Андрей Сырбу в разделе Трейдерский софт, компьютерное оборудование
    Replies: 2371
    Последнее сообщение: 20.01.2020, 07:49
  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

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