Скачать MetaTrader 5

Смотри, как бесплатно скачать роботов

Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят

Понравился скрипт?
Оцени его работу в терминале MetaTrader 5

Библиотеки

b-PSI@Trade v.19.08.2013 - библиотека для MetaTrader 4

Просмотров:
4306
Рейтинг:
голосов: 7
Опубликован:
2012.03.20 10:48
Обновлен:
2014.04.21 14:55
\MQL4\Include\

Рано или никогда начинающий "трейдер-программист" задумается о необходимости всегда иметь под рукой набор функций торговых операций для НАДЁЖНОГО осуществления этих самых торговых операций. Есть в свободном доступе различные варианты решения озвученных задач, НО я сделал альтернативный вариант. Задача функций, представленных в библиотеке:

  • проверить корректность условий сервера на MODE_FREEZELEVEL;
  • при необходимости скорректировать СТОПы по MODE_STOPLEVEL;
  • при ошибке (не исполнении сервером торгового приказа) многократно (настраивается) повторить выполнение торговой операции;
  • информировать трейдера о недобросовестности ДЦ (протоколировать действия ДЦ на исполнение торговых приказов).

Почему в названии использовал префикс Light? - потому, что для меня это облегчённый вариант, НО в 95 случаях из 100 эта библиотека свою задачу выполнит (5 отсутствующих процентов - это для "излишняя функциональность"). :)))

Какие функции присутствуют в библиотеке:

/*int fOrderSend (string fs_Symbol,                // OrderSymbol()
                  int fi_Type,                     // OrderType()
                  double fd_Lot,                   // OrderLots()
                  double fd_Price,                 // OrderOpenPrice()
                  int fi_Slip,                     // Slippage
                  double fd_SL,                    // OrderStopLoss()
                  double fd_TP,                    // OrderTakeProfit()
                  string fs_Comm = "",             // OrderComment()
                  int fi_MG = 0,                   // OrderMagicNumber()
                  datetime fdt_Expiration = 0)*/   // Срок истечения отложенного ордера
                                     // Функция устанавливает ордера
/*int fOrderModify (int fi_Ticket,                 // OrderTicket()
                    double fd_NewOpenPrice,        // OpenPrice
                    double fd_NewSL,               // новый StopLoss
                    double fd_NewTP)               // новый TakeProfit
                    datetime fdt_Expiration = 0,   // Время истечения отложенного ордера
                    color fc_Arrow = CLR_NONE)*/   // Цвет стрелок модификации StopLoss и/или TakeProfit на графике
                                     // Функция модифицирует\устанавливает СТОПы у выделенного ордера
/*bool fOrderClose (int fi_Ticket,                 // OrderTicket()
                    double fd_Lots,                // OrderLots()
                    double fd_Price,               // текущая цена
                    int fi_Slippage,               // проскальзывание
                    color fc_Arrow = CLR_NONE)*/   // Цвет стрелки закрытия на графике
                                     // Функция закрывает выделенный рыночный ордер
/*bool fOrderCloseBy (int fi_Ticket,               // OrderTicket()
                      int fi_Opposite,             // OrderTicket() противоположного ордера
                      color fc_Arrow = CLR_NONE)*/ // Цвет стрелки закрытия на графике
                                     // Функция закрывает рыночный ордер встречным ордером
/*bool fOrderDelete (int fi_Ticket)                // OrderTicket()
                     color fc_Arrow = CLR_NONE)*/  // Цвет стрелки на графике
                                     // Функция удаляет выделенный отложенный ордер
/*int fClose_AllOrders (double& fd_Pribul,         // Возвращаемый профит закрытых ордеров
                        int fi_Type = -1,          // тип закрываемых ордеров
                        int fi_NBars_Life = 0,     // минимальная "жизнь" ордера в барах на fi_Period: 0 - параметр не учитывается
                        int fi_Period = 0,         // Период
                        int fi_OrderProfit = 0)*/  // Идентификатор профитности ордера: > 0 - профитный; < 0 - лоссовый
                                     // Функция закрытия "своих" ордеров по признаку
/*int fClose_AllOrdersBy (double& fd_Pribul,       // Возвращаемый профит закрытых ордеров
                          int fi_Type = -1,        // тип закрываемых ордеров
                          int fi_NBars_Life = 0,   // минимальная "жизнь" ордера в барах на fi_Period: 0 - параметр не учитывается
                          int fi_Period = 0,       // Период
                          int fi_OrderProfit = 0)*/// Идентификатор профитности ордера: > 0 - профитный; < 0 - лоссовый
                                     // Функция закрытия "своих" ордеров по признаку встречными ордерами
/*int fClose_AllOrdersByRange (int fi_Type = -2,   // OrderType
			       bool fb_IsProfit = true)*/// Направление закрытия ордеро по профитности:
						   // TRUE - начиная от самого большого профита
                                                   // FALSE - начиная от самого маленького профита;
                                     // Функция закрытия "своих" ордеров по максимальной/минимальной профитности
/*int fMyTickets (int& ar_Tickets[],               // возвращаемый ранжированный массив тикетов "своих" ордеров
                  int fi_Type = -2,                // тип ордера
		  bool fb_IsProfit = true)*/       // TRUE - сортировка с убыванием
						   // FALSE - сортировка с возрастанием
                                     // Получаем сортированные по профитности тикеты "своих" открытых позиций
/*bool fCheck_MyOrders (int li_pos,                // номер позиции ордера в списке OrdersTotal()
                        int fi_Type = -1,          // тип ордера
                        int fi_Pool = MODE_TRADES)*/// Источник данных для выбора
                                     // Фильтрация "своих" ордеров
/*bool fCheck_MyOrdersWithConditions (int li_pos,  // номер позиции ордера в списке OrdersTotal()
                                      int fi_Type = -2,// тип ордера
                                      int fi_NBars_Life = 0,// минимальная "жизнь" ордера в барах на fi_Period: 0 - параметр не учитывается
                                      int fi_Period = 0,// Период
                                      int fi_TypeProfit = 0)*/// Идентификатор профитности ордера: > 0 - профитный; < 0 - лоссовый{
                                     // Фильтрация "своих" ордеров с дополнительными условиями
/*bool fControl_MAXLife (int fi_curLife,           // текущая "продолжительность жизни" ордера
                         int fi_MAXLife = -1,      // максимальная жизнь ордера в барах (0 - до конца текущих суток)
                         bool fb_LOSS = true)*/    // закрываем только убыточные ордера
                                     // Организуем закрытие по МАКС жизни ордера
/*bool fCheck_TypeOrder (int fi_Type,              // -1 - все; -2 - рыночные; 7 - отложенные
                         int fi_CheckType)*/       // OrderType
                                     // Организуем фильтр типов ордеров
/*bool fCheck_MyMagic (string fs_List,             // строка с Магиками
                       string fs_Delimiter = ",")*/// разделитель в строке fs_List
                                     // Проверяем из строки валидность Магика
/*bool fCheck_ValidStops (double fd_Price,         // текущая цена
                          int fi_Type,             // OrderType()
                          double& fd_SL,           // StopLoss
                          double& fd_TP,           // TakeProfit
                          bool fb_IsNewOrder = true)*/// открытие ордера
                                     // Проверяем правильность задания СТОПов
/*void fCheck_ValidSTOPOrders (string fs_Symbol,   // OrderSymbol()
                               int fi_Type,        // OrderType()
                               double& fd_OpenPrice,// OrderOpenPrice()
                               double& fd_SL,      // StopLoss
                               double& fd_TP,      // TakeProfit
                               double fd_Price,    // Текущая цена по инструменту
                               bool& fb_FixInvalidPrice,// флаг первоначальной коррекции
                               bool fb_IsNewOrder = false)*/// открытие ордера
                                     // Проверяем правильность цены открытия у отложенных ордеров
/*void fGet_MarketInfo (string fs_Symbol,          // инструмент
                        int fi_Ticket = 0)*/       // Ticket
                                     // Получаем торговую информацию по символу и текущему ордеру
//bool fGet_OrderDetails (int fi_Ticket)           // OrderTicket()
                                     // Получаем актуальную информацию о текущем ордере
//|***********************************************************************************|
//| РАЗДЕЛ: Работа с ошибками                                                         |
//|***********************************************************************************|
//bool fErrorHandling (int fi_Error, bool& fb_InvalidSTOP)
                                     // Функция обрабатывает ошибки
/*bool fCheck_LevelsBLOCK (int fi_Mode,            // Тип проводимой операции: 1 - Close/Del; 2 - Send; 3 - Modify;
                           string fs_Symbol,       // OrderSymbol()
                           int fi_Type,            // OrderType()
                           double& fd_NewOpenPrice,// OpenPrice
                           double& fd_NewSL,       // StopLoss
                           double& fd_NewTP,       // TakeProfit
                           bool& fb_FixInvalidPrice)*/// флаг первоначальной коррекции отложки
                                     // Проверка корректности на FREEZELEVEL и STOPLEVEL
//|***********************************************************************************|
//| РАЗДЕЛ: Сервисных функций                                                         |
//|***********************************************************************************|
//void fReConnect()                  // Сканирование серверов при разрыве связи
//void fWrite_Log (string fs_Txt)    // Пишем Log-файл
/*void fPrintAndShowComment (string& Text,         // Возвращаемая пустая строка
                             bool Show_Conditions, // Разрешение на показ комментов на графике
                             bool Print_Conditions,// Разрешение на печать комментов
                             string& s_Show[],     // Взвращаемый массив комментов
                             int ind = -1)*/         // индекс ячейки массива, куда внесли изменения
                                     // Выводим на печать и на график комментарии
//|***********************************************************************************|
//| РАЗДЕЛ: Вспомогательных функций                                                   |
//|***********************************************************************************|
/*int fGet_TicketLastOrder (int fi_Type = -2)*/    // OrderType()
                                     // Функция получает Ticket последнего открытого ордера
/*int fGet_TicketLastClosePos (int fi_Type = -2,   // OrderType()
                               int fi_TypeProfit = 0,// флаг профитности ордеров: 0 - все, -1 - убыточные, 1 - прибыльные
                               datetime fdt_Time = 0)*/// Точка отсчёта времени
                                     // Функция получает Ticket следующего перед fdt_Time закрытого ордера
/*int fGet_TicketsLastCloseOrd (int fi_NUM,        // Количество искомых тикетов
                                int& ar_Tickets[], // возвращаемый массив с тикетами
                                int fi_Type = -2,  // OrderType()
                                int fi_TypeProfit = 0)*/// флаг профитности ордеров: 0 - все, -1 - убыточные, 1 - прибыльные
                                     // Функция получает Tickets N закрытых ордеров
/*int fGet_BarsAfterCloseLastPos (int fi_Type = -2,// тип закрытого ордера
                                  int fi_TF = 0)*/ // период искомых баров
                                     // Функция получает N баров, прошедших с момента закрытия последнего ордера
//bool fIs_LossLastPos (int fi_Type = -2)          // Type
                                     // Флаг убыточности последнего закрытого ордера

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

Function "fGet_NameTF" is not referenced and will be removed from exp-file      
Function "fGet_StringManagerPA" is not referenced and will be removed from exp-file     

Это не смертельно. Компилятор ставит Вас в известность, что некоторые функции (он их перечисляет) не задействованы в Вашем коде и они не будут включены в компилированный файл - Ваш компилированный файл облегчится на эти функции. ;)

Эту библиотеку нужно инициализировать, прописав в init() эту строку:

    //---- Инициализируем переменные библиотеки функций торговых операций
    fInit_Trade();

Пример советника с использованием данной библиотеки.

Предлагайте какие функции добавить в эту библиотеку, с учётом их востребованности.

P.S. Если будут ошибки в работе библиотеки, без лог-файла ничем помочь не смогу (а для начала скачайте последнюю версию).

Изменения

от 27.08.2012: библиотека прошла процесс полной реструктуризации в составе програмной среды (комплекса моих библиотек для MQL4) - разделена на две библиотеки.

от 28.11.2012: добавил процедуру встречного закрытия ордеров.

от 29.06.2013: добавил функции: fGet_TicketLastOrder(), fGet_TicketLastClosePos(), fGet_TicketsLastCloseOrd(), fGet_BarsAfterCloseLastPos(), fIs_LossLastPos().

от 19.08.2013: добавил процедуру закрытия по профитности\убыточности: fClose_AllOrdersByRange().

V3 MA MACD V3 MA MACD

Советник по сигналам МАСD и нескольких MA.

b-PSI@ManagerPA v.20.08.2012 b-PSI@ManagerPA v.20.08.2012

Библиотека управления общим профитом советника: трейлингуем, фиксируем прибыль, ограничиваем убыток (мультивалютная).

Bulls vs Bears Bulls vs Bears

Индикатор для торговли по тренду.

STOP STOP

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