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

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

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

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

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

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

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

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

    return (orders);
    }

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

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

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

    Kofa (22.10.2017)

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

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

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

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

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

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

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

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

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

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



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

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



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

    Количество выведенных и введенных средств на торговый счет - не учитывается.
    Что-то вчера день не удачный был, не получалось что-то кодить, голова не работала (но это выяснилось лишь сегодня ). Ошибки исправлены, принимайте работу:

    MQL код:
    double StartEquity(string name , double value)
    {
    if(GlobalVariableCheck(name)==false) {GlobalVariableSet(name, value); return(value);}
    if(OrdersTotal()==0) {GlobalVariableSet(name, value); return(value);}
    if(OrdersTotal()> 0) return(GlobalVariableGet(name));
    }

    bool PercentEquity(string global_name, double max_percent, double min_percent)
    {
    double percent = AccountEquity()*100/StartEquity(global_name, AccountEquity());
    if(percent > max_percent) return(true);
    if(percent < min_percent) return(true);
    return(false);
    }
    Вызов делаем так:
    MQL код:
    PercentEquity(string global_name = "StartEquity", int global_takeprofit = 120, double global_stoploss = 80.2);
    Когда процент достигнет максимума или минимума, данная функция подскажет нам об этом.

    P.S Количество выведенных и введенных средств на торговый счет - Учитывается!!!

    Последний раз редактировалось Gold; 23.11.2012 в 22:59. Причина: MQL

  5. Линк#85
    Частый гость
    artamir приемлемый уровень репутации Аватар для artamir
    Регистрация:
    03.05.2012
    Пол:
    Мужчина
    Сообщений:
    114
    Деньги за посты (Подробнее):
    1226 RUB
    Поставил лайков:
    6
    Получено лайков:  56
    в 44 сообщениях
    49%
    а если добавить парочку констант, то будет более функционально

    MQL код:

    double StartEquity(string name , double value)
    {
    if(GlobalVariableCheck(name)==false) {GlobalVariableSet(name, value); return(value);}
    if(OrdersTotal()==0) {GlobalVariableSet(name, value); return(value);}
    if(OrdersTotal()> 0) return(GlobalVariableGet(name));
    }

    #define EQ_MAX 1;
    #define EQ_MIN 2;
    #define EQ_ZERO 0;

    int PercentEquity(string global_name, double max_percent, double min_percent)
    {
    double percent = AccountEquity()*100/StartEquity(global_name, AccountEquity());
    if(percent > max_percent) return(EQ_MAX);
    if(percent < min_percent) return(EQ_MIN);
    return(EQ_ZERO);
    }


    а в коде можно использовать:
    MQL код:

    if(PercentEquity("StartEquity", 120, 80) == EQ_MAX){
    Print("URAAAAA");
    }else{
    if(PercentEquity("StartEquity", 120, 80) == EQ_MIN){
    Print("USE MARTIN!!!!!!");
    }
    }

    Последний раз редактировалось Gold; 23.11.2012 в 23:00. Причина: MQL

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

    MQL код:
    #property indicator_chart_window

    void start()
    {
    PercentEquity(120, 80);
    }

    string PercentEquity(double max_percent, double min_percent)
    {
    double percent, equity, start_equity; string global_name = "";
    if(AccountEquity() > 0) equity = AccountEquity(); else return(" ");

    if(global_name == "")
    {
    global_name = "StartEquity "+DoubleToStr(AccountNumber(),0)+" ";
    if(IsDemo() == true) global_name = "StartEquity Demo "+DoubleToStr(AccountNumber(),0)+" ";
    if(IsTesting() == true) global_name = "StartEquity Testing ";
    }

    if(GlobalVariableCheck(global_name)==false) {GlobalVariableSet(global_name, equity); return(" ");}
    if(OrdersTotal()==0) {GlobalVariableSet(global_name, equity); start_equity = equity;}
    if(OrdersTotal()> 0) start_equity = GlobalVariableGet(global_name);

    percent = equity*100/start_equity;
    Comment("AccountEquity ",AccountEquity(),"\n", global_name, start_equity,"\npercent ", percent,"%");
    if(percent > max_percent) return("Max");
    if(percent < min_percent) return("Min");
    return(" ");
    }

    Последний раз редактировалось Gold; 23.11.2012 в 23:00. Причина: MQL

  7. Линк#87
    Частый гость
    artamir приемлемый уровень репутации Аватар для artamir
    Регистрация:
    03.05.2012
    Пол:
    Мужчина
    Сообщений:
    114
    Деньги за посты (Подробнее):
    1226 RUB
    Поставил лайков:
    6
    Получено лайков:  56
    в 44 сообщениях
    49%
    На мой взгляд, возвращать строку - это не очень хорошо. Велика вероятность ошибиться в написании текста возвращаемого значения. По этому, если есть такая возможность, я стараюсь каким-либо образом сделать их (возвращаемые/используемые значения) константами.


  8. Линк#88
    Частый гость
    artamir приемлемый уровень репутации Аватар для artamir
    Регистрация:
    03.05.2012
    Пол:
    Мужчина
    Сообщений:
    114
    Деньги за посты (Подробнее):
    1226 RUB
    Поставил лайков:
    6
    Получено лайков:  56
    в 44 сообщениях
    49%
    libA.double_PrintArray2

    Печатает двумерный числовой массив в файл, который будет находиться в папке "experts\files".
    Причем, при каждом обращении к процедуре, будет печататься новый файл.

    MQL код:

    //================================================== ================================================
    void libA.double_PrintArray2(double &a[][], int d = 4, string fn = "PrintArray_"){//..
    /*
    >Ver : 0.0.3
    >Date : 2012.08.15
    >Hist:
    >Descr:
    Printing array to file.
    >VARS:
    &a[][] : массив
    d : количество знаков после запятой.
    fn : имя файла
    */

    static int i;

    i++;
    //------------------------------------------------------
    int ROWS = ArrayRange(a, 0);
    int COLS = ArrayRange(a,1);

    //------------------------------------------------------
    fn = fn+i+".arr";

    //------------------------------------------------------
    int handle = FileOpen(fn, FILE_CSV|FILE_WRITE, "\t");

    for(int idx_1 = 0; idx_1 < ROWS; idx_1++){
    for(int idx_2 = 0; idx_2 < COLS; idx_2++){
    FileWrite(handle, idx_1, idx_2, DoubleToStr(a[idx_1][idx_2], d));
    }
    }

    if(handle != 0) FileClose(handle);

    }//.


    В прицепе скрипт проверки работы процедуры.
    paperclip Вложения

    Последний раз редактировалось Gold; 23.11.2012 в 23:00. Причина: MQL

  9. Линк#89
    Частый гость
    artamir приемлемый уровень репутации Аватар для artamir
    Регистрация:
    03.05.2012
    Пол:
    Мужчина
    Сообщений:
    114
    Деньги за посты (Подробнее):
    1226 RUB
    Поставил лайков:
    6
    Получено лайков:  56
    в 44 сообщениях
    49%
    libA.double_SaveToFile2

    Сохраняет двумерный массив вещественных чисел в текстовый файл.
    Каждый элемент массива сохраняется отдельной форматной строкой.

    MQL код:

    void libA.double_SaveToFile2(double &a[][], string fn, int d = 4){//..
    /*
    >Ver : 0.0.1
    >Date : 2012.09.04
    >Hist:
    @0.0.1@2012.09.04@artamir []
    >Desc:
    Сохраняет массив в файл.
    форматная строка, которая будет записана в файл:
    @idx1_valIdx1@idx2_valIdx2@val_val

    пример: a[43][5] = 20.77
    @idx1_43@idx2_5@val_20.77
    >VARS:
    a[][] - массив
    fn - имя файла
    d - количество знаков после запятой.
    */

    int ROWS = ArrayRange(a, 0);
    int COLS = ArrayRange(a, 1);

    int H = FileOpen(fn, FILE_CSV|FILE_WRITE);

    //------------------------------------------------------
    for(int idx1 = 0; idx1 < ROWS; idx1++){//..

    //--------------------------------------------------
    for(int idx2 = 0; idx2 < COLS; idx2++){//..

    //----------------------------------------------
    string str = "@idx1_"+idx1
    +"@idx2_"+idx2
    +"@val_"+DoubleToStr(a[idx1][idx2], d);

    //----------------------------------------------
    FileWrite(H, str);
    }//.
    }//.

    //------------------------------------------------------
    FileFlush(H);

    //------------------------------------------------------
    FileClose(H);

    }//.


    В прицепе файл, который получается на выходе.
    paperclip Вложения

    Последний раз редактировалось Gold; 23.11.2012 в 23:01. Причина: MQL

  10. Линк#90
    Частый гость
    artamir приемлемый уровень репутации Аватар для artamir
    Регистрация:
    03.05.2012
    Пол:
    Мужчина
    Сообщений:
    114
    Деньги за посты (Подробнее):
    1226 RUB
    Поставил лайков:
    6
    Получено лайков:  56
    в 44 сообщениях
    49%
    Далее будет опубликована группа функций для работы со структурой.
    Вернее со строковым аналогом структуры.

    libStruc.StringKeyValue

    Возвращает строковое значение по имени ключа из форматной строки.
    Строка задается в формате:

    <ФОРМАТНАЯСТРОКА>

    <ФОРМАТНАЯСТРОКА> = <КЛЮЧЗНАЧЕНИЕ>[КЛЮЧЗНАЧЕНИЕ]*

    <КЛЮЧЗНАЧЕНИЕ> = (<Разделитель><ИмяКлюча><Значение>)

    Пример: "@p_1234@w987.12"

    <РАЗДЕЛИТЕЛЬ> = Заданный программистом символ-разделитель. По умолчанию = '@' (без ковычек)

    <ИМЯКЛЮЧА> = Уникальное в Структуре имя ключа

    В примере использовались имена ключей: 'p_' и 'w'

    <ЗНАЧЕНИЕ> = Значение ключа.

    MQL код:

    string libStruc.StringKeyValue(string str = "", string key = "@p", string defolt = "-1", string delimeter = "@"){//..
    /*
    >Ver : 0.0.2
    >Date : 2012.04.04
    >History:
    >Description:
    @str = incoming string of the form "@p123456@l5@w3@d1"; p,l,w,d - name of keys
    @key = <@x>; where @-separator, x-name of key

    on defolt return parent ticket
    if key not found, return defolt value
    */
    int lPosStart = -1; //start position of key name
    int lPosEnd = -1; //end position of key name
    string d = delimeter; //разделитель
    //---
    if(StringFind(key,d,0) == -1){
    key = d + key;
    }
    //---
    lPosStart = StringFind(str,key,0);

    if(lPosStart == -1){
    return(defolt);
    }
    //---
    int lKeyLen = StringLen(key);
    lPosEnd = StringFind(str,d,lPosStart+1); // find position of "@" in str after lPosStart
    lPosStart = lPosStart + lKeyLen;
    int len = iif(lPosEnd == -1, -1, lPosEnd - lPosStart);
    //---
    return(StringSubstr(str, lPosStart, len));
    }//.


    Последний раз редактировалось Gold; 23.11.2012 в 23:01. Причина: MQL

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

    SimpleJeka1487 (17.11.2012)

  12. Линк#91
    Частый гость
    artamir приемлемый уровень репутации Аватар для artamir
    Регистрация:
    03.05.2012
    Пол:
    Мужчина
    Сообщений:
    114
    Деньги за посты (Подробнее):
    1226 RUB
    Поставил лайков:
    6
    Получено лайков:  56
    в 44 сообщениях
    49%
    Функции, которые возвращают значения заданного типа по заданному ключу из структуры.

    MQL код:

    //================================================== ========
    int libStruc.KeyValue_int(string str, string key = "@p"){//..
    /*
    >Ver : 0.0.1
    >Date : 2012.04.05
    >History:
    >Description:
    return int value by key from format string
    */

    return(StrToInteger(libStruc.StringKeyValue(str,ke y)));
    }//.

    //================================================== ========
    double libStruc.KeyValue_double(string str, string key = "@p"){//..
    /*
    >Ver : 0.0.1
    >Date : 2012.04.05
    >History:
    >Description:
    return double value by key from format string
    */

    return(StrToDouble(libStruc.StringKeyValue(str,key )));
    }//.

    //================================================== ========
    string libStruc.KeyValue_string(string str, string key = "@p"){//..
    return(libStruc.StringKeyValue(str,key));
    }//.


    Последний раз редактировалось Gold; 23.11.2012 в 23:01. Причина: MQL

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

    SimpleJeka1487 (17.11.2012)

  14. Линк#92
    Частый гость
    artamir приемлемый уровень репутации Аватар для artamir
    Регистрация:
    03.05.2012
    Пол:
    Мужчина
    Сообщений:
    114
    Деньги за посты (Подробнее):
    1226 RUB
    Поставил лайков:
    6
    Получено лайков:  56
    в 44 сообщениях
    49%
    libA.double_ReadFromFile2

    Заполняет переданный массив из значений, хранящихся в файле

    MQL код:

    //================================================== ========
    void libA.double_ReadFromFile2(double &a[][], string fn){//..
    /*
    >Ver : 0.0.1
    >Date : 2012.09.04
    >Hist:
    @0.0.1@2012.09.04@artamir []
    >Desc:
    Read array from file.
    format string for read:
    @idx1_valIdx1@idx2_valIdx2@val_val

    exemple: a[43][5] = 20.77
    @idx1_43@idx2_5@val_20.77
    >VARS:
    a[][] - array
    fn - filename
    */

    //------------------------------------------------------
    ArrayResize(a, 0);

    //------------------------------------------------------
    int H = FileOpen(fn, FILE_CSV|FILE_READ);

    //------------------------------------------------------
    while(!FileIsEnding(H)){//..
    string str = FileReadString(H);
    int idx1 = libStruc.KeyValue_int(str, "@idx1_");
    int idx2 = libStruc.KeyValue_int(str, "@idx2_");
    double val = libStruc.KeyValue_double(str, "@val_");

    //--------------------------------------------------
    int ROWS = ArrayRange(a, 0);

    //--------------------------------------------------
    if(idx1 >= ROWS){
    ArrayResize(a, idx1+1);
    }

    //--------------------------------------------------
    a[idx1][idx2] = val;
    }//.
    }//.

    Последний раз редактировалось Gold; 23.11.2012 в 22:54. Причина: MQL

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

    SimpleJeka1487 (17.11.2012)

  16. Линк#93
    Кандидат форумных наук
    harbor хорошая репутация harbor хорошая репутация harbor хорошая репутация harbor хорошая репутация Аватар для harbor
    Регистрация:
    20.09.2012
    Пол:
    Мужчина
    Сообщений:
    1,047
    Деньги за посты (Подробнее):
    4934 RUB
    Поставил лайков:
    137
    Получено лайков:  349
    в 258 сообщениях
    33%
    хотелось бы найти функцию зеркального отображения графика
    вроде можно сделать через скрипт period converter, подставив значения под единицу, но нужно чтобы таймфрейм не менялся, а тот же оставался
    вобщем я не смог пока сделать..


  17. Линк#94
    Частый гость
    artamir приемлемый уровень репутации Аватар для artamir
    Регистрация:
    03.05.2012
    Пол:
    Мужчина
    Сообщений:
    114
    Деньги за посты (Подробнее):
    1226 RUB
    Поставил лайков:
    6
    Получено лайков:  56
    в 44 сообщениях
    49%
    Цитата Сообщение от harbor Посмотреть сообщение
    хотелось бы найти функцию зеркального отображения графика
    вроде можно сделать через скрипт period converter, подставив значения под единицу, но нужно чтобы таймфрейм не менялся, а тот же оставался
    вобщем я не смог пока сделать..
    А какой уровень нужно принять за середину, по отношению к которой будем зеркалить?


  18. Линк#95
    Кандидат форумных наук
    harbor хорошая репутация harbor хорошая репутация harbor хорошая репутация harbor хорошая репутация Аватар для harbor
    Регистрация:
    20.09.2012
    Пол:
    Мужчина
    Сообщений:
    1,047
    Деньги за посты (Подробнее):
    4934 RUB
    Поставил лайков:
    137
    Получено лайков:  349
    в 258 сообщениях
    33%
    Да наверное уже не надо, тут нашел программку, которая весь экран переворачивает)) если поместить ярлык в панель быстрого запуска и запускать при открытом терминале, получим то что нужно - перевернутый график со всеми линиями и т.д.
    вложил в сообщение, пробуйте
    paperclip Вложения


  19. Линк#96
    Кандидат форумных наук
    Скромняжка
     
    Tekora хорошая репутация Tekora хорошая репутация Tekora хорошая репутация Tekora хорошая репутация Tekora хорошая репутация Tekora хорошая репутация Аватар для Tekora
    Регистрация:
    26.06.2011
    Сообщений:
    1,755
    Деньги за посты (Подробнее):
    33277 RUB
    Поставил(а) лайков:
    211
    Получено лайков:  531
    в 423 сообщениях
    30%
    подсчитывает размер убытка ордера с заданным тикером в пунктах
    MQL код:
    int LossOrder(int ticket){
    //------------вспомогательные переменные-----------
    int cnt, total, res;
    //-------------------------------------------------
    total=OrdersTotal();//общее количество открытых и отложенных ордеров
    for(cnt=0;cnt {
    if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
    {
    Print("Ошибка выбора ордера", GetLastError());
    return(-1);
    }
    if(OrderTicket( ) == ticket)//нашли нужный ордер
    {
    if(OrderType()==OP_BUY)// нашли отркытый ордер Buy
    {
    //определение убытка в пунктах для длинной позиции
    res=(Bid-OrderOpenPrice())/Point;
    if(res>=0)//ордер в плюсе - убытка нет
    {
    return(0);
    }
    break;//выход из цикла по ордерам
    }
    if(OrderType()==OP_SELL)// нашли отркытый ордер Sell
    {
    //определение убытка в пунктах для короткой позиции
    res=(Ask-OrderOpenPrice())/Point;
    if(res<=0)//ордер в плюсе - убытка нет
    {
    return(0);
    }
    break;//выход из цикла по ордерам
    }
    }//конец условия по тиккеру
    }//конец цикла по ордерам
    return(res);
    }


  20. Линк#97
    Частый гость
    artamir приемлемый уровень репутации Аватар для artamir
    Регистрация:
    03.05.2012
    Пол:
    Мужчина
    Сообщений:
    114
    Деньги за посты (Подробнее):
    1226 RUB
    Поставил лайков:
    6
    Получено лайков:  56
    в 44 сообщениях
    49%
    Сразу несколько функций для расчетов фракталов:

    Оговорюсь, что фракталы рассчитываются на текущем инструменте и текущем таймфрейме.

    MQL код:
    iFR.Set()
    Устанавливает глобальные настройки фрактала.

    iFR.NL - Количество баров слева от центрального бара. (глобальная переменная)
    iFR.NR - Количество баров справа. (глобальная переменная)

    MQL код:
    iFR.IsUp(int fb = 1)
    - проверяет, если бар с заданным индексом является верхним фракталом.
    MQL код:
    iFR.IsDw(int fb = 1)
    - проверяет, если бар с заданным индексом является нижним фракталом.

    MQL код:

    int iFR.NL = 1; //Nearest left bars
    int iFR.NR = 1; //Nearest right bars

    int iFR.Set(int nl=1, int nr=1){
    /*
    >Ver : 0.0.1
    >Date : 2012.11.13
    >Hist :
    @0.0.1@2012.11.13@artamir []
    >Author : Morochin Artiom
    >Desc : set fractal bars.
    */
    iFR.NL = nl;
    iFR.NR = nr;
    }

    bool iFR.IsUp(int fb = 1){
    /*
    >Ver : 0.0.1
    >Date : 2012.11.13
    >Hist :
    @0.0.1@2012.11.13@artamir []
    >Author : Morochin Artiom
    >Desc : check if bar with index fb is up fractal
    */

    bool isUpFr = false;
    bool f = true;

    int i = -1;

    //-------------------------------------------------
    if(fb < iFR.NR){
    return(false);
    }

    //--------------------------------------------------
    for(i = fb; i > fb - iFR.NR; i--){

    //----------------------------------------------
    if(iHigh(NULL, 0, i) < iHigh(NULL, 0, i-1)){
    f = false;
    }
    }


    //--------------------------------------------------
    if(f){
    for(i = fb; i < fb + iFR.NL; i++){
    if(iHigh(NULL, 0, i) < iHigh(NULL, 0, i+1)){
    f = false;
    }
    }
    }

    isUpFr = f;

    return(isUpFr);
    }

    bool iFR.IsDw(int fb = 1){
    /*
    >Ver : 0.0.1
    >Date : 2012.11.13
    >Hist :
    @0.0.1@2012.11.13@artamir []
    >Author : Morochin Artiom
    >Desc : check if bar with index fb is down fractal
    */

    bool isDwFr = false;
    bool f = true;

    int i = -1;

    //-------------------------------------------------
    if(fb < iFR.NR){
    return(false);
    }

    //--------------------------------------------------
    for(i = fb; i > fb - iFR.NR; i--){

    //----------------------------------------------
    if(iLow(NULL, 0, i) > iLow(NULL, 0, i-1)){
    f = false;
    }
    }


    //--------------------------------------------------
    if(f){
    for(i = fb; i < fb + iFR.NL; i++){
    if(iLow(NULL, 0, i) > iLow(NULL, 0, i+1)){
    f = false;
    }
    }
    }

    isDwFr = f;

    return(isDwFr);
    }


    Последний раз редактировалось Gold; 23.11.2012 в 22:55. Причина: MQL

  21. Линк#98
    Частый гость
    artamir приемлемый уровень репутации Аватар для artamir
    Регистрация:
    03.05.2012
    Пол:
    Мужчина
    Сообщений:
    114
    Деньги за посты (Подробнее):
    1226 RUB
    Поставил лайков:
    6
    Получено лайков:  56
    в 44 сообщениях
    49%
    Начало

    iFR.getNearstUp

    int startBar : индекс бара, начиная с которого будет производиться поиск ближайшего верхнего фрактала.



    MQL код:

    int iFR.getNearstUp(int startBar = 1){
    /*
    >Ver : 0.0.1
    >Date : 2012.11.13
    >Hist :
    @0.0.1@2012.11.13@artamir []
    >Author : Morochin Artiom
    >Desc : return index of bar of nearst up fractal
    */

    bool f = false;
    int i = startBar-1;

    while(!f && i < Bars){
    i++;

    if(iFR.IsUp(i)){
    f = true;
    }
    }

    return(i);
    }

    Последний раз редактировалось Gold; 23.11.2012 в 22:56. Причина: MQL

  22. Линк#99
    Частый гость
    artamir приемлемый уровень репутации Аватар для artamir
    Регистрация:
    03.05.2012
    Пол:
    Мужчина
    Сообщений:
    114
    Деньги за посты (Подробнее):
    1226 RUB
    Поставил лайков:
    6
    Получено лайков:  56
    в 44 сообщениях
    49%
    iFR.getNearstDw

    int startBar : индекс бара, начиная с которого будет производиться поиск ближайшего нижнего фрактала.

    MQL код:

    int iFR.getNearstDw(int startBar = 1){
    /*
    >Ver : 0.0.1
    >Date : 2012.11.13
    >Hist :
    @0.0.1@2012.11.13@artamir []
    >Author : Morochin Artiom
    >Desc : return index of bar of nearst down fractal
    */

    bool f = false;
    int i = startBar-1;

    while(!f && i < Bars){
    i++;

    if(iFR.IsDw(i)){
    f = true;
    }
    }

    return(i);
    }


    Возвращает индекс бара ближайшего фрактала.

    Последний раз редактировалось Gold; 23.11.2012 в 22:57. Причина: MQL

  23. Линк#100
    Частый гость
    artamir приемлемый уровень репутации Аватар для artamir
    Регистрация:
    03.05.2012
    Пол:
    Мужчина
    Сообщений:
    114
    Деньги за посты (Подробнее):
    1226 RUB
    Поставил лайков:
    6
    Получено лайков:  56
    в 44 сообщениях
    49%
    iFR.getNearestUpPrice

    Возвращает цену ближайшего верхнего фрактала.

    Поиск ближайшего верхнего фрактала начинается со
    MQL код:
    startBar


    MQL код:

    double iFR.getNearestUpPrice(int startBar){
    /*
    >Ver : 0.0.1
    >Date : 2012.11.13
    >Hist :
    @0.0.1@2012.11.13@artamir []
    >Author : Morochin Artiom
    >Desc : return price by nearest up fractal
    */

    int fb = iFR.getNearstUp(startBar);

    return(iHigh(NULL, 0, fb));
    }

    Последний раз редактировалось Gold; 23.11.2012 в 22:57. Причина: MQL

  24. Линк#101
    Частый гость
    artamir приемлемый уровень репутации Аватар для artamir
    Регистрация:
    03.05.2012
    Пол:
    Мужчина
    Сообщений:
    114
    Деньги за посты (Подробнее):
    1226 RUB
    Поставил лайков:
    6
    Получено лайков:  56
    в 44 сообщениях
    49%
    iFR.getNearestDwPrice

    Возвращает цену ближайшего нижнего фрактала

    Поиск фрактала начинается с
    MQL код:
    startBar


    MQL код:

    double iFR.getNearestDwPrice(int startBar){
    /*
    >Ver : 0.0.2
    >Date : 2012.11.13
    >Hist :
    @0.0.2@2012.11.13@artamir []
    @0.0.1@2012.11.13@artamir []
    >Author : Morochin Artiom
    >Desc : return price by nearest up fractal
    */

    int fb = iFR.getNearstDw(startBar);
    return(iLow(NULL, 0, fb));
    }

    Последний раз редактировалось Gold; 23.11.2012 в 22:57. Причина: MQL

  25. Линк#102
    Частый гость
    artamir приемлемый уровень репутации Аватар для artamir
    Регистрация:
    03.05.2012
    Пол:
    Мужчина
    Сообщений:
    114
    Деньги за посты (Подробнее):
    1226 RUB
    Поставил лайков:
    6
    Получено лайков:  56
    в 44 сообщениях
    49%
    Пример использования:

    Индикатор на основе настраиваемых фракталов.

    MQL код:

    //+------------------------------------------------------------------+
    //| iFR.mq4 |
    //| Copyright 2012, artamir |
    //| forexmd.ucoz.org |
    //| elt.ucoz.org |
    //| eltth.ucoz.org |
    //| [email]artamir@yandex.ru[/email] |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2012, artamir"
    #property link "forexmd.ucoz.org"

    #property indicator_chart_window
    #property indicator_buffers 2
    #property indicator_color1 LightGreen
    #property indicator_color2 Red

    #include

    //--- input parameters
    extern int Left=2;
    extern int Right=2;
    //--- buffers
    double U[];
    double D[];
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    //---- indicators
    SetIndexStyle(0,DRAW_ARROW);
    SetIndexArrow(0,217);
    SetIndexBuffer(0,U);
    SetIndexEmptyValue(0,0.0);
    SetIndexStyle(1,DRAW_ARROW);
    SetIndexArrow(1,218);
    SetIndexBuffer(1,D);
    SetIndexEmptyValue(1,0.0);
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| Custom indicator deinitialization function |
    //+------------------------------------------------------------------+
    int deinit()
    {
    //----

    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function |
    //+------------------------------------------------------------------+
    int start()
    {
    iFR.Set(Left, Right);

    int ic=IndicatorCounted();
    //----
    int lim = Bars - ic + Right;

    for(int i = lim; i >= 0; i--){
    if(iFR.IsUp(i)){
    U[i] = iHigh(NULL, 0, i)+5*Point;
    }

    if(iFR.IsDw(i)){
    D[i] = iLow(NULL, 0, i)-5*Point;
    }
    }
    //----
    return(0);
    }
    //+------------------------------------------------------------------+


    В прицепе архив с заголовочным файлом и индикатором.

    Содержимое архива нужно распаковать след. образом:
    1. Содержимое папки include нужно распаковать в папку include папки терминала.
    2. Содержимое папки indicators нужно распаковать в папку indicators папки терминала.
    3. Если терминал был запущен, то его нужно перезапустить.
    paperclip Вложения
    • Тип файла: rar iFR.rar (1.6 КБ, Просмотров: 76)

    Последний раз редактировалось Gold; 23.11.2012 в 22:43. Причина: MQL

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

    MQL код:

    iSAR_Set()

    Устанавливает глобальные настройки параболика

    MQL код:

    iSAR_getPrice(int shift = 0)

    Возвращает цену индикатора на текущем инструменте и текущем таймфрейме на баре с индексом shift

    MQL код:

    double iSAR_Step = 0.02; // GLOBAL
    double iSAR_Maximum = 0.2; //GLOBAL

    void iSAR_Set(double step=0.02, double max=0.2){
    /*
    >Ver : 0.0.1
    >Date : 2012.11.21
    >Hist :
    @0.0.1@2012.11.21@artamir []
    >Author : Morochin Artiom
    >Desc :
    */

    iSAR_Step = step;
    iSAR_Maximum = max;
    }

    double iSAR.getPrice(int shift = 0){
    /*
    >Ver : 0.0.1
    >Date : 2012.11.21
    >Hist :
    @0.0.1@2012.11.21@artamir []
    >Author : Morochin Artiom
    >Desc : return price of sar
    */

    double sar = iSAR(NULL, 0, iSAR_Step, iSAR_Maximum, shift);

    return(sar);
    }

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


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

Похожие темы

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

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