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

Показаны сообщения: с 1 по 20 из 211

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

 Перейти в классический вид темы
     
  1. ТОП сообщений
    2014-07-09   14:02
    Лучший ответ #1
    Накопленные выплаты 169700 RUB

    Отправка маркет-ордера на сервер.

    MQL-Код:
    
    int SendMarketOrder(int Typedouble Lotsint TPint SLint Magicstring CmntintError)
    {
    double PriceTakeStop;
    int TicketSlippageColorErr
    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 NormalizeDoubleAskDigits);
    Take IIFd(TP == 00NormalizeDoublePrice TP PointDigits));
    Stop IIFd(SL == 00NormalizeDoublePrice SL PointDigits));
    Color Blue;
    break;
    case 
    OP_SELL:
    if(
    Debug) Print("Инициализируем параметры для SELL-ордера");
    Price NormalizeDoubleBidDigits);
    Take IIFd(TP == 00NormalizeDoublePrice TP PointDigits));
    Stop IIFd(SL == 00NormalizeDoublePrice SL PointDigits));
    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(), TypeLotsPriceSlippageStopTakeCmntMagic0Color);
    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 conditiondouble ifTruedouble ifFalse
    {
    if (
    condition) return(ifTrue); else return(ifFalse);

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

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

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

    2019-10-14   19:52
    Лучший ответ #3
    Накопленные выплаты 72086 RUB

    Цитата Сообщение от Gulliwer Посмотреть сообщение
    Добрый день!Нужна функция сравнения двух рыночных ордеров с указанным типом и ID по размеру лота (>/<)..
    Цитата Сообщение от Gulliwer Посмотреть сообщение
    Если кто набросает здесь код этой функции,буду очень признателен..
    Хорошо, напишу вам... только уточните какие есть исходные данные и что нужно получить на выходе функции, цифры или там какие нить слова, чтобы согласовать с вашими дальнейшими действиями.
    Еще такой непонятный момент.. вы написали больше - меньше, но забыли про третье состояние... равенство лотов. Или, при определенных условиях достаточно true/false. Например, лот первого ордера больше второго- true, во всех остальных случаях- false. Уточните.
    Далее.. как минимум, нужны еще их тикеты. Но! если известны тикеты, то тип и ID уже не обязательны. По сему, скорее всего тикеты неизвестны, их нужно найти по каким то признакам, ибо ордеров может быть множество на счете, и с данным типам и с таким ID. Как то так, больше инфы.

    2019-10-17   17:42
    Лучший ответ #4
    Накопленные выплаты 72086 RUB

    Цитата Сообщение от Gulliwer Посмотреть сообщение
    Да,их может быть больше..Тикеты здесь не важны..Нужно простое сравнение лотности ордеров с определенным ID(магиком),определенным типом(BUY,SELL),на одном символе..Например:если лот бай1 больше лот сел2 и OrderSymbol() == Symbol(),то TRUE...дальнейшие мои какие-то действия..Из этой функции сделаю уже сам блок в генератор..Заранее извиняюсь за свою некомпетентность,не знаю,возможно ли так все сделать,выбрать,найти ордер,не учитывая тикер его...
    Все равно не добился от вас признаков, по каким выбирать ордера, если их множество. Можно и без тикетов. Вот привел пробный пример, по вашей просьбе. Однако, она не совсем корректная, если в рынке будет больше двух ордеров или один или 2 одного типа. Старайтесь писать код с перспективой на будущее и учитывать все нюансы. Что непонятно, спрашивайте, подредактируем.
    PHP код:
    <code><span style="color: #000000"> <span style="color: #0000BB"></span><span style="color: #FF8000">//+-------------------------------------------------------------------+//| 17.10.2019 ; https://forexdengi.com |//+-------------------------------------------------------------------+//| Описание : Сравнение лотности двух ордеров разных типов |//+-------------------------------------------------------------------+</span><span style="color: #0000BB">bool CompareLot</span><span style="color: #007700">(</span><span style="color: #0000BB">int ot1</span><span style="color: #007700">=-</span><span style="color: #0000BB">1</span><span style="color: #007700">,</span><span style="color: #0000BB">int ot2</span><span style="color: #007700">=-</span><span style="color: #0000BB">1</span><span style="color: #007700">,</span><span style="color: #0000BB">int mn</span><span style="color: #007700">=-</span><span style="color: #0000BB">1</span><span style="color: #007700">) {</span><span style="color: #0000BB">int type</span><span style="color: #007700">,</span><span style="color: #0000BB">k</span><span style="color: #007700">=</span><span style="color: #0000BB">OrdersTotal</span><span style="color: #007700">();</span><span style="color: #0000BB">double lots_1</span><span style="color: #007700">=</span><span style="color: #0000BB">0.0</span><span style="color: #007700">,</span><span style="color: #0000BB">lots_2</span><span style="color: #007700">=</span><span style="color: #0000BB">0.0</span><span style="color: #007700">;</span><span style="color: #0000BB">bool result</span><span style="color: #007700">=</span><span style="color: #0000BB">false</span><span style="color: #007700">;for(</span><span style="color: #0000BB">i</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #0000BB">i</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">k</span><span style="color: #007700">; </span><span style="color: #0000BB">i</span><span style="color: #007700">++) {if(</span><span style="color: #0000BB">OrderSelect</span><span style="color: #007700">(</span><span style="color: #0000BB">i</span><span style="color: #007700">, </span><span style="color: #0000BB">SELECT_BY_POS</span><span style="color: #007700">, </span><span style="color: #0000BB">MODE_TRADES</span><span style="color: #007700">)) { </span><span style="color: #FF8000">// Выбор ордера из списка</span><span style="color: #007700">if(</span><span style="color: #0000BB">OrderSymbol</span><span style="color: #007700">() == </span><span style="color: #0000BB">Symbol</span><span style="color: #007700">() &amp;&amp; </span><span style="color: #0000BB">OrderMagicNumber</span><span style="color: #007700">() == </span><span style="color: #0000BB">mn</span><span style="color: #007700">) { </span><span style="color: #FF8000">// Фильтр по символу и по ID</span><span style="color: #0000BB">type</span><span style="color: #007700">=</span><span style="color: #0000BB">OrderType</span><span style="color: #007700">();if(</span><span style="color: #0000BB">type</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">1</span><span style="color: #007700">) continue;if(</span><span style="color: #0000BB">type</span><span style="color: #007700">==</span><span style="color: #0000BB">OP_BUY </span><span style="color: #007700">&amp;&amp; </span><span style="color: #0000BB">type</span><span style="color: #007700">==</span><span style="color: #0000BB">ot1</span><span style="color: #007700">) </span><span style="color: #0000BB">lots_1</span><span style="color: #007700">=</span><span style="color: #0000BB">OrderLots</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Заносим баерский лот в переменную</span><span style="color: #007700">if(</span><span style="color: #0000BB">type</span><span style="color: #007700">==</span><span style="color: #0000BB">OP_SELL </span><span style="color: #007700">&amp;&amp; </span><span style="color: #0000BB">type</span><span style="color: #007700">==</span><span style="color: #0000BB">ot2</span><span style="color: #007700">) </span><span style="color: #0000BB">lots_2</span><span style="color: #007700">=</span><span style="color: #0000BB">OrderLots</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Заносим селерский лот в переменную</span><span style="color: #007700">}}}if(</span><span style="color: #0000BB">lots_1</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">lots_2</span><span style="color: #007700">) </span><span style="color: #0000BB">result</span><span style="color: #007700">=</span><span style="color: #0000BB">true</span><span style="color: #007700">; </span><span style="color: #FF8000">// Сравниваем лотность</span><span style="color: #007700">return (</span><span style="color: #0000BB">result</span><span style="color: #007700">); </span><span style="color: #FF8000">// Возвращаем результат</span><span style="color: #007700">} </span><span style="color: #FF8000">// Вызов функции сравнения лотности ордеров</span><span style="color: #007700">if(</span><span style="color: #0000BB">CompareLot</span><span style="color: #007700">(</span><span style="color: #0000BB">OP_BUY</span><span style="color: #007700">,</span><span style="color: #0000BB">OP_SELL</span><span style="color: #007700">,</span><span style="color: #0000BB">Magic</span><span style="color: #007700">)) {</span><span style="color: #FF8000">// Здесь какие нить действия, если лот ордера бай больше лота ордера селл</span><span style="color: #007700">}else {</span><span style="color: #FF8000">// Здесь какие нить действия, если лот ордера бай меньше лота ордера селл или равен</span><span style="color: #007700">} </span><span style="color: #0000BB"></span> </span> </code>

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

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

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

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

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

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

    Вложение 181860

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

    В В 
    intВ cntВ =В OrdersTotal();
    В В forВ (
    intВ i=0;В i<cnt;В 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.

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

    Kofa (22.10.2017)

    55pct
  4. линк#2
    Кандидат форумных наук
    Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Аватар для Nick'Otin
    Регистрация:
    16.12.2009
    Сообщений:
    2,320
    Накопленные выплаты (Подробнее):
    3750 RUB
    Поставил(а) лайков:
    74
    Получено лайков:   439
    в 223 сообщениях
    19%
    ПодписатьсяПодписаться
    Подписано 0
    Получить время открытия последнего ордера данного типа.
    Смотрим в открытых ордерах и в истории.
    Если не найдено ордеров, удовлетворяющих условиям поиска, возвращаем -1.

    MQL-Код:
    
    datetimeВ GetLastOpenTime(intВ type)В {

    В В 
    datetimeВ tmВ =В -1;

    В В 
    intВ cntВ =В OrdersTotal();
    В В forВ (
    intВ i=0;В i<cnt;В i++)В {
    В В В В ifВ (!
    OrderSelect(i,В SELECT_BY_POS,В MODE_TRADES))В continue;
    В В В В 
    В В В В 
    //Опционально
    В В В В 
    ifВ (OrderSymbol()В !=В Symbol())В continue;
    В В В В ifВ (
    OrderMagicNumber()В !=В Magic)В continue;
    В В В В 
    В В В В ifВ (
    OrderType()В !=В type)В continue;
    В В В В 
    В В В В 
    tmВ =В MathMax(tm,В OrderOpenTime());
    В В }

    В В 
    cntВ =В HistoryTotal();
    В В forВ (
    i=0;В i<cnt;В i++)В {
    В В В В ifВ (!
    OrderSelect(i,В SELECT_BY_POS,В MODE_HISTORY))В continue;

    В В В В 
    //Опционально
    В В В В 
    ifВ (OrderSymbol()В !=В Symbol())В continue;
    В В В В ifВ (
    OrderMagicNumber()В !=В Magic)В continue;
    В В В В 
    В В В В ifВ (
    OrderType()В !=В type)В continue;
    В В В В 
    В В В В 
    tmВ =В MathMax(tm,В OrderOpenTime());
    В В }

    В В returnВ (
    tm);
    }В 

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

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

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

  6. линк#3
    Кандидат форумных наук
    Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Аватар для Nick'Otin
    Регистрация:
    16.12.2009
    Сообщений:
    2,320
    Накопленные выплаты (Подробнее):
    3750 RUB
    Поставил(а) лайков:
    74
    Получено лайков:   439
    в 223 сообщениях
    19%
    ПодписатьсяПодписаться
    Подписано 0
    Польза от функции GetLastOpenTime такая.
    Например мы не хотим открывать лонг-ордера чаще чем раз в 2 часа.
    Тогда условие на открытие будет выглядеть так:
    MQL-Код:
    
    ifВ (CurTime()В -В GetLastOpenTime(OP_BUY)В >=В 2*60*60)В {
    В В В 
    OrderSend(Symbol(),В OP_BUY,В ...
    }В 

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

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

    Unregistered (1 пользователь)

  8. линк#4
    Кандидат форумных наук
    Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Аватар для Nick'Otin
    Регистрация:
    16.12.2009
    Сообщений:
    2,320
    Накопленные выплаты (Подробнее):
    3750 RUB
    Поставил(а) лайков:
    74
    Получено лайков:   439
    в 223 сообщениях
    19%
    ПодписатьсяПодписаться
    Подписано 0
    Получить дату следующего дня:
    MQL-Код:
    
    В В datetimeВ Time0В =В CurTime();
    В В 
    datetimeВ TomorrowВ =В Time0В +В 24*60*60;
    В В 
    intВ dayВ =В TimeDayOfYear(Tomorrow);
    В В 
    intВ monthВ =В TimeMonth(Tomorrow);
    В В 
    intВ yearВ =В TimeYear(Tomorrow);В 

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

  9. линк#5
    Кандидат форумных наук
    Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Аватар для Nick'Otin
    Регистрация:
    16.12.2009
    Сообщений:
    2,320
    Накопленные выплаты (Подробнее):
    3750 RUB
    Поставил(а) лайков:
    74
    Получено лайков:   439
    в 223 сообщениях
    19%
    ПодписатьсяПодписаться
    Подписано 0
    Получить тикет последнего закрытого ордера из истории.
    Если тип ордера не указан, берется самый последний ордер любого типа.
    Если ордеров, отвечающих указанным критерию не найдено, возвращает -1.
    MQL-Код:
    
    intВ GetLastOrderHist(intВ typeВ =В -1)В 
    {
    В В 
    intВ ticketВ =В -1;
    В В 
    datetimeВ dtВ =В 0;
    В В 
    intВ cntВ =В HistoryTotal();
    В В В В 
    В В forВ (
    intВ i=0;В iВ <В cnt;В i++)В {
    В В В В ifВ (!
    OrderSelect(i,В SELECT_BY_POS,В MODE_HISTORY))В continue;

    В В В В 
    //Опционально
    В В В В 
    ifВ (OrderSymbol()В !=В Symbol())В continue;
    В В В В 
    //Опционально
    В В В В 
    ifВ (OrderMagicNumber()В !=В Magic)В continue;
    В В В В 
    В В В В ifВ (
    typeВ !=В -1В &&В OrderType()В !=В type)В continue;
    В В В В 
    В В В В ifВ (
    OrderCloseTime()В >В dt)В {
    В В В В В В 
    dtВ =В OrderCloseTime();
    В В В В В В 
    ticketВ =В OrderTicket();
    В В В В }
    В В }
    В В 
    В В returnВ (
    ticket);
    }В 

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

  10. линк#6
    Кандидат форумных наук
    Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Аватар для Nick'Otin
    Регистрация:
    16.12.2009
    Сообщений:
    2,320
    Накопленные выплаты (Подробнее):
    3750 RUB
    Поставил(а) лайков:
    74
    Получено лайков:   439
    в 223 сообщениях
    19%
    ПодписатьсяПодписаться
    Подписано 0
    Функция для расчета рабочего лота по следующим условиям.
    lotmin - стартовый размер лота.
    lotmax - верхнее ограничение на размер лота.
    Если последняя сделка закрылась в +, то увеличиваем лот на величину lotstep.
    Как только последняя сделка закрылась в -, возвращаемся к lotmin.
    Т.е. при наступлении серии положительных сделок мы увеличиваем нагрузку на лот.

    Будем использовать функцию GetLastOrderHist, описанную выше.
    MQL-Код:
    
    //В ---В ПараметрыВ управленияВ капиталомВ ---
    externВ boolВ uplotВ =В true;В -В вкл/выклВ изменениеВ величиныВ лота
    externВ intВ lastprofitВ 
    =В 1;В -В принимаетВ значенияВ -1/1.В 
    -1В -В увеличениеВ лотаВ послеВ минусовойВ сделкиВ доВ первойВ плюсовой.
    1В -В увеличениеВ лотаВ послеВ плюсовойВ сделкиВ доВ первойВ минусовой.
    externВ doubleВ lotminВ =В 0.1;В -В начальноеВ значение
    externВ doubleВ lotmaxВ 
    =В 0.5;В -В потолок
    externВ doubleВ lotstepВ 
    =В 0.1;В -В приращениеВ лотаВ 

    doubleВ GetLots
    ()В {
    В В 
    В В 
    doubleВ lotВ =В lotmin;
    В В ifВ (!
    uplot)В returnВ (lot);
    В В 
    В В 
    intВ ticketВ =В GetLastOrderHist();
    В В ifВ (
    ticketВ ==В -1)В returnВ (lot);
    В В 
    В В ifВ (!
    OrderSelect(ticket,В SELECT_BY_TICKET,В MODE_HISTORY))В returnВ (lot);
    В В ifВ (
    OrderProfit()*lastprofitВ <В 0)В returnВ (lot);
    В В 
    В В 
    lotВ =В MathMin(OrderLots()В +В lotstep,В lotmax);
    В В returnВ (
    lot);
    }В 

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

  11. линк#7
    Кандидат форумных наук
    Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Аватар для Nick'Otin
    Регистрация:
    16.12.2009
    Сообщений:
    2,320
    Накопленные выплаты (Подробнее):
    3750 RUB
    Поставил(а) лайков:
    74
    Получено лайков:   439
    в 223 сообщениях
    19%
    ПодписатьсяПодписаться
    Подписано 0
    Трейлинг-стоп.
    MinProfit - когда профит достигает указанное количество пунктов, трейлинг начинает работу
    TrailingStop - величина трала
    TrailingStep - шаг
    l - префикс для лонгов
    s - префикс для шортов
    MQL-Код:
    
    externВ boolВ UseTrailingВ =В true;
    externВ intВ lMinProfitВ =В 30;
    externВ intВ sMinProfitВ =В 30;
    externВ intВ lTrailingStopВ =В 15;
    externВ intВ sTrailingStopВ =В 15;
    externВ intВ lTrailingStepВ =В 5;
    externВ intВ sTrailingStepВ =В 5;

    ifВ (
    UseTrailing)В TrailingPositions();В В 

    voidВ TrailingPositions()В 
    {
    В В 
    intВ cntВ =В OrdersTotal();

    В В forВ (
    intВ i=0;В i<cnt;В i++)В {
    В В В В ifВ (!(
    OrderSelect(i,В SELECT_BY_POS,В MODE_TRADES)))В continue;
    В В В В ifВ (
    OrderSymbol()В !=В Symbol())В continue;В В В В В В В В 

    В В В В ifВ (
    OrderType()В ==В OP_BUY)В {
    В В В В В В ifВ (
    Bid-OrderOpenPrice()В >В lMinProfit*Point)В {
    В В В В В В В В ifВ (
    OrderStopLoss()В <В Bid-(lTrailingStop+lTrailingStep-1)*Point)В {
    В В В В В В В В В В 
    OrderModify(OrderTicket(),В OrderOpenPrice(),В Bid-lTrailingStop*Point,В OrderTakeProfit(),В 0,В Blue);
    В В В В В В В В }
    В В В В В В }
    В В В В }

    В В В В ifВ (
    OrderType()В ==В OP_SELL)В {
    В В В В В В ifВ (
    OrderOpenPrice()-AskВ >В sMinProfit*Point)В {
    В В В В В В В В ifВ (
    OrderStopLoss()В >В Ask+(sTrailingStop+sTrailingStep-1)*PointВ ||В OrderStopLoss()В ==В 0)В {
    В В В В В В В В В В 
    OrderModify(OrderTicket(),В OrderOpenPrice(),В Ask+sTrailingStop*Point,В OrderTakeProfit(),В 0,В Blue);
    В В В В В В В В }
    В В В В В В }
    В В В В }
    В В }
    В В 
    }В 

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

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

    gastyc (10.12.2016)

  13. линк#8
    Кандидат форумных наук
    Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Аватар для Nick'Otin
    Регистрация:
    16.12.2009
    Сообщений:
    2,320
    Накопленные выплаты (Подробнее):
    3750 RUB
    Поставил(а) лайков:
    74
    Получено лайков:   439
    в 223 сообщениях
    19%
    ПодписатьсяПодписаться
    Подписано 0
    2 метода - Buy и Sell. Помимо открытия позиции нормализуют цены и выводят в лог входные параметры. Возвращают номер тикета, либо -1 в случае ошибки. После открытия ордера выдерживается установленный таймаут.
    MQL-Код:
    
    #includeВ 
    #includeВ 

    intВ SleepOkВ =В 2000;
    intВ SleepErrВ =В 6000;
    intВ SlippageВ =В 3;

    //~~~~~

    intВ Buy(stringВ symbol,В doubleВ lot,В doubleВ price,В doubleВ sl,В doubleВ tp,В intВ magic,В stringВ comment="")В {
    В В 
    intВ digВ =В MarketInfo(symbol,В MODE_DIGITS);

    В В 
    priceВ =В NormalizeDouble(price,В dig);
    В В 
    slВ =В NormalizeDouble(sl,В dig);
    В В 
    tpВ =В NormalizeDouble(tp,В dig);
    В В В В 
    В В 
    stringВ _lotВ =В DoubleToStr(lot,В 1);
    В В 
    stringВ _priceВ =В DoubleToStr(price,В dig);
    В В 
    stringВ _slВ =В DoubleToStr(sl,В dig);
    В В 
    stringВ _tpВ =В DoubleToStr(tp,В dig);

    В В Print(
    "BuyВ "",В symbol,В "",В ",В _lot,В ",В ",В _price,В ",В ",В Slippage,В ",В ",В _sl,В ",В ",В _tp,В ",В ",В magic,В ",В "",В comment,В """);

    В В 
    intВ resВ =В OrderSend(symbol,В OP_BUY,В lot,В price,В Slippage,В sl,В tp,В comment,В magic);
    В В ifВ (
    resВ >=В 0)В {
    В В В В 
    Sleep(SleepOk);
    В В В В returnВ (
    res);
    В В }В В В В В 
    В В В В В В В 
    В В 
    intВ codeВ =В GetLastError();
    В В Print(
    "ErrorВ openingВ BUYВ order:В ",В ErrorDescription(code),В "В (",В code,В ")");
    В В 
    Sleep(SleepErr);
    В В В В 
    В В returnВ (-
    1);
    }

    intВ Sell(stringВ symbol,В doubleВ lot,В doubleВ price,В doubleВ sl,В doubleВ tp,В intВ magic,В stringВ comment="")В {
    В В 
    intВ digВ =В MarketInfo(symbol,В MODE_DIGITS);

    В В 
    priceВ =В NormalizeDouble(price,В dig);
    В В 
    slВ =В NormalizeDouble(sl,В dig);
    В В 
    tpВ =В NormalizeDouble(tp,В dig);
    В В 
    В В 
    stringВ _lotВ =В DoubleToStr(lot,В 1);
    В В 
    stringВ _priceВ =В DoubleToStr(price,В dig);
    В В 
    stringВ _slВ =В DoubleToStr(sl,В dig);
    В В 
    stringВ _tpВ =В DoubleToStr(tp,В dig);

    В В Print(
    "SellВ "",В symbol,В "",В ",В _lot,В ",В ",В _price,В ",В ",В Slippage,В ",В ",В _sl,В ",В ",В _tp,В ",В ",В magic,В ",В "",В comment,В """);
    В В 
    В В 
    intВ resВ =В OrderSend(symbol,В OP_SELL,В lot,В price,В Slippage,В sl,В tp,В comment,В magic);
    В В ifВ (
    resВ >=В 0)В {
    В В В В 
    Sleep(SleepOk);
    В В В В returnВ (
    res);
    В В }В В В В В 
    В В В В В В В 
    В В 
    intВ codeВ =В GetLastError();
    В В Print(
    "ErrorВ openingВ SELLВ order:В ",В ErrorDescription(code),В "В (",В code,В ")");
    В В 
    Sleep(SleepErr);
    В В В В 
    В В returnВ (-
    1);
    }В 

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

  14. линк#9
    Кандидат форумных наук
    Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Аватар для Nick'Otin
    Регистрация:
    16.12.2009
    Сообщений:
    2,320
    Накопленные выплаты (Подробнее):
    3750 RUB
    Поставил(а) лайков:
    74
    Получено лайков:   439
    в 223 сообщениях
    19%
    ПодписатьсяПодписаться
    Подписано 0
    Открыть позицию в заданное время.
    Код удобнее всего поместить в скрипт, который работает в бесконечном цикле. Это даст возможность открыться в нужное время, не дожидаясь прихода первого тика.

    OpenTime - время открытия.
    OpenPeriod - рабочий интервал, мин
    MQL-Код:
    
    В В externВ stringВ OpenTimeВ =В "00:00";
    В В 
    externВ intВ OpenPeriodВ =В 10;

    В В 
    datetimeВ tm0В =В StrToTime(TimeToStr(CurTime(),В TIME_DATE)В +В "В "В +В OpenTime);
    В В 
    datetimeВ tm1В =В tm0В +В OpenPeriod*60;

    В В ifВ (
    CurTime()В <В tm0В ||В CurTime()В >В tm1)В return;

    В В 
    //ОткрываемВ позициюВ либоВ ставимВ ордерВ 

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

  15. линк#10
    Кандидат форумных наук
    Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Аватар для Nick'Otin
    Регистрация:
    16.12.2009
    Сообщений:
    2,320
    Накопленные выплаты (Подробнее):
    3750 RUB
    Поставил(а) лайков:
    74
    Получено лайков:   439
    в 223 сообщениях
    19%
    ПодписатьсяПодписаться
    Подписано 0
    Эксперт, закрывающий ордера по рынку с указанным тейкпрофитом.
    TakeProfit можно ставить 1, 2, 3
    MQL-Код:
    
    externВ intВ TakeProfitВ =В 2;
    externВ intВ SlippageВ =В 3;

    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    voidВ initВ ()В {
    }

    voidВ deinit()В {
    }

    voidВ start()В {

    В В ifВ (
    TakeProfitВ ==В 0)В return;

    В В 
    intВ cntВ =В OrdersTotal();
    В В forВ (
    intВ i=cnt-1;В iВ >=В 0;В i--)В {
    В В В В ifВ (!
    OrderSelect(i,В SELECT_BY_POS,В MODE_TRADES))В continue;
    В В В В ifВ (
    OrderSymbol()В !=В Symbol())В continue;
    В В 
    В В В В 
    intВ typeВ =В OrderType();
    В В В В ifВ (
    typeВ ==В OP_BUY)В {
    В В В В В В ifВ (
    BidВ >В OrderOpenPrice()В +В TakeProfit*Point)
    В В В В В В В В 
    OrderClose(OrderTicket(),В OrderLots(),В Bid,В Slippage);В В В 
    В В В В }
    В В 
    В В В В ifВ (
    typeВ ==В OP_SELL)В {
    В В В В В В ifВ (
    AskВ <В OrderOpenPrice()В -В TakeProfit*Point)В 
    В В В В В В В В 
    OrderClose(OrderTicket(),В OrderLots(),В Ask,В Slippage);В 
    В В В В }
    В В }
    }В 

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

  16. линк#11
    Частый гость
    Dom1no стараюсь положительно себя зарекомендовать Аватар для Dom1no
    Регистрация:
    04.01.2010
    Сообщений:
    198
    Накопленные выплаты (Подробнее):
    574 RUB
    Поставил(а) лайков:
    0
    Получено лайков:   29
    в 23 сообщениях
    15%
    Подскажите,а как можно определить тип последнего ордера?


  17. линк#12
    Кандидат форумных наук
    Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Аватар для Nick'Otin
    Регистрация:
    16.12.2009
    Сообщений:
    2,320
    Накопленные выплаты (Подробнее):
    3750 RUB
    Поставил(а) лайков:
    74
    Получено лайков:   439
    в 223 сообщениях
    19%
    ПодписатьсяПодписаться
    Подписано 0
    Можно так:
    MQL-Код:
    
    datetimeВ LastBuyTmВ =В GetLastOrderOpenTime(OP_BUY);
    datetimeВ LastSellTmВ =В GetLastOrderOpenTime(OP_SELL);
    //В LastBuyTmВ >В LastSellTm:В последнимВ былВ BUYВ ордер
    //В LastSellTmВ >В LastBuyTm:В последнимВ былВ SELLВ ордер

    datetimeВ GetLastOrderOpenTime(intВ type)В 
    {
    В В 
    datetimeВ tmВ =В -1;

    В В 
    intВ cntВ =В OrdersTotal();
    В В forВ (
    intВ i=0;В i<cnt;В i++)В {
    В В В В ifВ (!
    OrderSelect(i,В SELECT_BY_POS,В MODE_TRADES))В continue;
    В В В В 
    В В В В 
    //Опционально
    В В В В 
    ifВ (OrderSymbol()В !=В Symbol())В continue;
    В В В В ifВ (
    OrderMagicNumber()В !=В Magic)В continue;
    В В В В 
    В В В В ifВ (
    OrderType()В !=В type)В continue;
    В В В В 
    В В В В 
    tmВ =В MathMax(tm,В OrderOpenTime());
    В В }
    В В 
    В В 
    cntВ =В HistoryTotal();
    В В forВ (
    i=0;В i<cnt;В i++)В {
    В В В В ifВ (!
    OrderSelect(i,В SELECT_BY_POS,В MODE_HISTORY))В continue;
    В В В 
    В В В В 
    //Опционально
    В В В В 
    ifВ (OrderSymbol()В !=В Symbol())В continue;
    В В В В ifВ (
    OrderMagicNumber()В !=В Magic)В continue;
    В В В В 
    В В В В ifВ (
    OrderType()В !=В type)В continue;
    В В В В 
    В В В В 
    tmВ =В MathMax(tm,В OrderOpenTime());
    В В }

    В В returnВ (
    tm);
    }В 

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

  18. линк#13
    Кандидат форумных наук
    Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Аватар для Nick'Otin
    Регистрация:
    16.12.2009
    Сообщений:
    2,320
    Накопленные выплаты (Подробнее):
    3750 RUB
    Поставил(а) лайков:
    74
    Получено лайков:   439
    в 223 сообщениях
    19%
    ПодписатьсяПодписаться
    Подписано 0
    Функция возвращает длину цепочки ордеров с положительным профитом. Считаем с конца history.
    MQL-Код:
    
    intВ GetLastPositiveOrdersCount()В 
    {
    В В 
    intВ PosCntВ =В 0;
    В В 
    intВ cntВ =В HistoryTotal();
    В В forВ (
    intВ iВ =В cnt-1;В iВ >=0;В i--)В {
    В В В В 
    В В В В ifВ (!
    OrderSelect(i,В SELECT_BY_POS,В MODE_HISTORY))В continue;
    В В В В 
    //ifВ (OrderSymbol()В !=В Symbol())В continue;
    В В В В //ifВ (OrderMagicNumber()В !=В Magic)В continue;

    В В В В В В 
    В В В В 
    intВ typeВ =В OrderType();
    В В В В ifВ (
    typeВ !=В OP_BUYВ &&В typeВ !=В OP_SELL)В continue;
    В В В В В В 
    В В В В ifВ (
    OrderProfit()В <В 0)В break;

    В В В В 
    PosCnt++;
    В В }

    В В returnВ (
    PosCnt);
    }В 

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

  19. линк#14
    Кандидат форумных наук
    Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Аватар для Nick'Otin
    Регистрация:
    16.12.2009
    Сообщений:
    2,320
    Накопленные выплаты (Подробнее):
    3750 RUB
    Поставил(а) лайков:
    74
    Получено лайков:   439
    в 223 сообщениях
    19%
    ПодписатьсяПодписаться
    Подписано 0
    Подскажите,а как можно определить тип последнего ордера?
    Можно еще так:
    MQL-Код:
    
    datetimeВ LastBuyTmВ =В GetLastOrderOpenTime(OP_BUY);
    datetimeВ LastSellTmВ =В GetLastOrderOpenTime(OP_SELL);
    //В LastBuyTmВ >В LastSellTm:В последнимВ былВ BUYВ ордер
    //В LastSellTmВ >В LastBuyTm:В последнимВ былВ SELLВ ордер

    datetimeВ GetLastOrderOpenTime(intВ type)В 
    {
    В В 
    datetimeВ tmВ =В -1;

    В В 
    intВ cntВ =В OrdersTotal();
    В В forВ (
    intВ i=0;В i<cnt;В i++)В {
    В В В В ifВ (!
    OrderSelect(i,В SELECT_BY_POS,В MODE_TRADES))В continue;
    В В В В 
    В В В В 
    //Опционально
    В В В В 
    ifВ (OrderSymbol()В !=В Symbol())В continue;
    В В В В ifВ (
    OrderMagicNumber()В !=В Magic)В continue;
    В В В В 
    В В В В ifВ (
    OrderType()В !=В type)В continue;
    В В В В 
    В В В В 
    tmВ =В MathMax(tm,В OrderOpenTime());
    В В }
    В В 
    В В 
    cntВ =В HistoryTotal();
    В В forВ (
    i=0;В i<cnt;В i++)В {
    В В В В ifВ (!
    OrderSelect(i,В SELECT_BY_POS,В MODE_HISTORY))В continue;
    В В В 
    В В В В 
    //Опционально
    В В В В 
    ifВ (OrderSymbol()В !=В Symbol())В continue;
    В В В В ifВ (
    OrderMagicNumber()В !=В Magic)В continue;
    В В В В 
    В В В В ifВ (
    OrderType()В !=В type)В continue;
    В В В В 
    В В В В 
    tmВ =В MathMax(tm,В OrderOpenTime());
    В В }

    В В returnВ (
    tm);
    }В 

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

  20. линк#15
    Кандидат форумных наук
    Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Аватар для Nick'Otin
    Регистрация:
    16.12.2009
    Сообщений:
    2,320
    Накопленные выплаты (Подробнее):
    3750 RUB
    Поставил(а) лайков:
    74
    Получено лайков:   439
    в 223 сообщениях
    19%
    ПодписатьсяПодписаться
    Подписано 0
    Способ программного закрытия терминала.
    MQL-Код:
    
    #includeВ 

    intВ start()В {
    В В 
    intВ hwndВ =В WindowHandle(Symbol(),В Period());
    В В 
    intВ hwnd_parentВ =В 0;

    В В while(!
    IsStopped())В {
    В В В В 
    hwndВ =В GetParent(hwnd);
    В В В В ifВ (
    hwndВ ==В 0)В break;
    В В В В 
    hwnd_parentВ =В hwnd;
    В В }

    В В ifВ (
    hwnd_parentВ !=В 0)
    В В В В 
    PostMessageA(hwnd_parent,В WM_CLOSE,В 0,В 0);

    В В returnВ (
    0);
    }В 

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

  21. линк#16
    Кандидат форумных наук
    Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Аватар для Nick'Otin
    Регистрация:
    16.12.2009
    Сообщений:
    2,320
    Накопленные выплаты (Подробнее):
    3750 RUB
    Поставил(а) лайков:
    74
    Получено лайков:   439
    в 223 сообщениях
    19%
    ПодписатьсяПодписаться
    Подписано 0
    Полезная функция split и примеры ее использования.

    split - разделяет элементы строки и возвращает их в виде массива.

    Параметры:
    [OUT] string& arr[] - возвращаемый массив строк.
    [IN] string str - входная строка.
    [IN] string sym - разделитель.[/code]

    Пример:
    MQL-Код:
    
    В В stringВ textВ =В "1;В 2;В 3;В 4;В 5";
    В В 
    stringВ dig[];
    В В 
    split(dig,В text,В ";");

    //ТеперьВ массивВ digВ будетВ содержатьВ 5В элементов:В В "1",В "2",В "3",В "4",В "5".В 



    MQL-Код:
    
    voidВ split(string&В arr[],В stringВ str,В stringВ sym)В 
    {
    В В 
    ArrayResize(arr,В 0);

    В В 
    stringВ item;
    В В 
    intВ pos,В size;
    В В 
    В В 
    intВ lenВ =В StringLen(str);
    В В forВ (
    intВ i=0;В iВ <В len;)В {
    В В В В 
    posВ =В StringFind(str,В sym,В i);
    В В В В ifВ (
    posВ ==В -1)В posВ =В len;
    В В В В 
    В В В В 
    itemВ =В StringSubstr(str,В i,В pos-i);
    В В В В 
    itemВ =В StringTrimLeft(item);
    В В В В 
    itemВ =В StringTrimRight(item);
    В В В В 
    В В В В 
    sizeВ =В ArraySize(arr);
    В В В В 
    ArrayResize(arr,В size+1);
    В В В В 
    arr[size]В =В item;
    В В В В 
    В В В В 
    iВ =В pos+1;
    В В }
    }В 

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

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

    Tekora (07.11.2018)

  23. линк#17
    Кандидат форумных наук
    Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Аватар для Nick'Otin
    Регистрация:
    16.12.2009
    Сообщений:
    2,320
    Накопленные выплаты (Подробнее):
    3750 RUB
    Поставил(а) лайков:
    74
    Получено лайков:   439
    в 223 сообщениях
    19%
    ПодписатьсяПодписаться
    Подписано 0
    Oграничить колличество лоссов подряд в течнии дня
    Пример: 2 лосса в день подряд - отключение доступа к торговле
    MQL-Код:
    
    В intВ ordersВ =В 0;
    В В 
    В В 
    intВ cntВ =В HistoryTotal();
    В В forВ (
    intВ i=0;В iВ <В cnt;В i++)В {
    В В В В ifВ (!
    OrderSelect(i,В SELECT_BY_POS,В MODE_HISTORY))В continue;
    В В В В 
    В В В В 
    //ifВ (OrderSymbol()В !=В Symbol())В continue;
    В В В В //ifВ (OrderMagicNumber()В !=В Magic)В continue;
    В В В В 
    В В В В 
    ifВ (CurTime()В -В OrderCloseTime()В >В 24*60*60)В continue;
    В В В В 
    В В В В 
    intВ typeВ =В OrderType();
    В В В В ifВ (
    typeВ ==В OP_BUYВ ||В typeВ ==В OP_SELL)В 
    В В В В {
    В В В В В В ifВ (
    OrderProfit()В <В 0)В orders++;В В 
    В В В В }
    В В }
    В В 
    В В ifВ (
    ordersВ >В 2)В return;В 

    Т.е. смотрим ордера за последние 24 часа с отрицательным профитом.

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

  24. линк#18
    Кандидат форумных наук
    Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Nick'Otin приемлемый уровень репутации Аватар для Nick'Otin
    Регистрация:
    16.12.2009
    Сообщений:
    2,320
    Накопленные выплаты (Подробнее):
    3750 RUB
    Поставил(а) лайков:
    74
    Получено лайков:   439
    в 223 сообщениях
    19%
    ПодписатьсяПодписаться
    Подписано 0
    Закрытие всех лонгов или всех шортов по достижению профита в 1$.
    MQL-Код:
    
    externВ doubleВ ProfitВ =В 1;
    externВ intВ SlippageВ =В 3;

    ifВ (
    AccountProfit()В >В Profit)В 
    {
    В В В В 
    CloseOrders(OP_BUY);
    В В В В 
    //orВ CloseOrders(OP_SELL);
    }

    voidВ CloseOrders(intВ type)В 
    {
    В В 
    intВ cntВ =В OrdersTotal();
    В В forВ (
    intВ i=cnt-1;В i>=0;В i--)В 
    В В {
    В В В В ifВ (!
    OrderSelect(i,В SELECT_BY_POS,В MODE_TRADES))В continue;

    В В В В 
    //ifВ (OrderSymbol()В !=В Symbol())В continue;
    В В В В //ifВ (OrderMagicNumber()В !=В Magic)В continue;
    В В В В 
    В В В В 
    ifВ (OrderType()В !=В type)В continue;
    В В В В 
    В В В В ifВ (
    typeВ ==В OP_BUY)В 
    В В В В {
    В В В В В В 
    RefreshRates();
    В В В В В В 
    OrderClose(OrderTicket(),В OrderLots(),В MarketInfo(OrderSymbol(),В MODE_BID),В Slippage);
    В В В В В В continue;
    В В В В }

    В В В В ifВ (
    typeВ ==В OP_SELL)
    В В В В {
    В В В В В В В 
    RefreshRates();
    В В В В В В В 
    OrderClose(OrderTicket(),В OrderLots(),В MarketInfo(OrderSymbol(),В MODE_ASK),В Slippage);
    В В В В В В В continue;
    В В В В }
    В В }
    }В 

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

  25. линк#19
    В начале пути
    tsn стараюсь положительно себя зарекомендовать Аватар для tsn
    Регистрация:
    15.02.2010
    Сообщений:
    5
    Накопленные выплаты (Подробнее):
    56 RUB
    Поставил(а) лайков:
    1
    Получено лайков:   0
    в 0 сообщениях
    0%
    ПодписатьсяПодписаться
    Подписано 0
    Подскажите, как реализовать следующие торговые критерии:выставление отложенного ордера по закрытию очередного? Например, закрылся Buy по ТР, а необходимо выставить SellStop на удалении в 15 пунктах от предыдущего Sell Stop (т.е. подвигать отложенники вслед за ценой)?


  26. <title>InstaForex</title><meta name="description" content="InstaForex"><a href="https://instaforex.org/ru/company_news">InstaForex</a>
  27. линк#20
    Кандидат форумных наук
    twin хорошая репутация twin хорошая репутация twin хорошая репутация twin хорошая репутация Аватар для twin
    Регистрация:
    04.03.2010
    Сообщений:
    1,397
    Накопленные выплаты (Подробнее):
    105010 RUB
    Поставил(а) лайков:
    870
    Получено лайков:   565
    в 382 сообщениях
    40%
    ПодписатьсяПодписаться
    Подписано 0
    Цитата Сообщение от tsn Посмотреть сообщение
    Подскажите, как реализовать следующие торговые критерии:выставление отложенного ордера по закрытию очередного? Например, закрылся Buy по ТР, а необходимо выставить SellStop на удалении в 15 пунктах от предыдущего Sell Stop (т.е. подвигать отложенники вслед за ценой)?
    Это вам надо обратиться за скриптами.....я так понимаю вас интересует трейлинг?Поищите в нете ,там есть нужные вам ,бесплатные скриптики для мт4 с инструкцией поустановке.
    Правда я себе пытался поставтьодин такой,но он не встал,а на полощаке в проге возник сбой.Видно скрипт был сыроват.

    иду уже...


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

Подписанные на тему (39)

Похожие темы

  1. Некоторые секреты МТ4
    от Андрей Сырбу в разделе Трейдерский софт, компьютерное оборудование
    Replies: 2384
    Последнее сообщение: 14.02.2021, 23:18
  2. Некоторые психотехники
    от сват в разделе Психология трейдера
    Replies: 2160
    Последнее сообщение: 29.12.2020, 18:21
  3. FAQ: Полезные функции форума (подписка, уведомления, черновики, и др.)
    от Странник_РУ в разделе Вопросы к администрации форума
    Replies: 9
    Последнее сообщение: 16.09.2020, 12:55
  4. MQL5: Некоторые полезные функции
    от Gold в разделе MQL-программирование, АТС
    Replies: 25
    Последнее сообщение: 26.02.2019, 10:54
  5. Банкомат. Некоторые особенности
    от Volangott в разделе Свободное общение
    Replies: 0
    Последнее сообщение: 27.03.2014, 16:30

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