Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
b-PSI@Trade v.19.08.2013 - библиотека для MetaTrader 4
- Просмотров:
- 5942
- Рейтинг:
- Опубликован:
- 2012.03.20 10:48
- Обновлен:
- 2014.04.21 14:55
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Рано или никогда начинающий "трейдер-программист" задумается о необходимости всегда иметь под рукой набор функций торговых операций для НАДЁЖНОГО осуществления этих самых торговых операций. Есть в свободном доступе различные варианты решения озвученных задач, НО я сделал альтернативный вариант. Задача функций, представленных в библиотеке:
- проверить корректность условий сервера на 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().
Советник по сигналам МАСD и нескольких MA.
b-PSI@ManagerPA v.20.08.2012Библиотека управления общим профитом советника: трейлингуем, фиксируем прибыль, ограничиваем убыток (мультивалютная).
Индикатор для торговли по тренду.
STOPВиртуальный стоп. Всем, кто не любит фиксировать минус, но понимает, что без этого прибыльная торговля невозможна.