Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
b-PSI@Base - библиотека для MetaTrader 4
- Просмотров:
- 5164
- Рейтинг:
- Опубликован:
- 2012.09.03 13:28
- Обновлен:
- 2014.04.21 14:55
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Всё начиналось с создания библиотеки торговых опреаций, а закончилось созданием програмной среды (ПС) для конструирования советников для MT4. А основу этой ПС и объединяющую роль всех составных частей и играет данная библиотека.
Библиотека кроме функций содержит и набор общих переменных. Часть (наиболее часто используемых) функций размещены в include-библиотеке (Base.mqh), компилируемой в состав советника, а другая часть размещена в отдельной библиотеке (Base.mq4), компилируемой самостоятельно, и вызвывается "по требованию".
Так как это базовая библиотека, то в теле советника она прописывается ПЕРВОЙ!!!
В первую часть библиотеки вошли следующие функции:
//IIIIIIIIIIIIIIIIIII===========Перечень функций модуля=========IIIIIIIIIIIIIIIIIIIIII+ /*void fInit_Base (string fs_SymbolList, // Лист рабочих валютных пар string fs_MagicList, // Лист рабочих Магиков int fi_TFControl = 0, // Контрольный период (TF индикаторов) bool fb_ShowCom = true, // Разрешение на показ комментариев на графике bool fb_PrintCom = true, // Разрешение на печать комментариев bool fb_PlaySound = true) // Разрешение на звуковое сопровождение событий bool fb_CreatVStopsInChart = false,// Разрешение на рисование виртуальных СТОПов на чарте string fs_Delimiter = ",")*/ // Разделитель переменных в листе fs_MagicList // Инициализация модуля //|***********************************************************************************| //| РАЗДЕЛ: Общие функции | //|***********************************************************************************| /*double fGet_TradePrice (int fi_Price, // Цена: 0 - Bid; 1 - Ask bool fb_RealTrade, // реальная торговля или оптимизация\тестирование string fs_Symbol = "")*/ // валютная пара // Запускаем в цикл получение рыночной цены //int fControl_NewBar (int fi_TF = 0)// Функция, контролирующая приход нового бара /*datetime fGet_TermsTrade (string fs_SymbolList, // Лист управляемых валютных пар string fs_MagicList, // Лист управляемых Магиков datetime& fdt_LastTrade,// когда был последний ордер string fs_Delimiter = ",")*/// Разделитель переменных в листе fs_MagicList // Находим дату начала торговли по дате первого открытого ордера //string fSplitField (string fs_Value)// Разделяем разряды чисел пробелами //int NDPD (double v) // Функция "нормализации" значения по Point в целое число //double NDP (int v) // Функция, перевода int в double по Point //double ND0 (double v) // Функция нормализации значения double до целого //double NDD (double v) // Функция нормализации значения по Digits //double NDDig (double v) // Функция, нормализации значения double до мин. разрядности лота //string DS0 (double v) // Функция, перевода значения из double в string c нормализацией по 0 //string DSD (double v) // Функция, перевода значения из double в string c нормализацией по Digits //string DSDig (double v) // Перевод значения из double в string c нормал. по мин. разрядности лота //int LotDecimal() // Функция, определения минимальной разрядности лота /*bool fCheck_NewBarInPeriod (int fi_Period = 0, // TF bool fb_Conditions = true)*/// условие на проверку // Контролир. факт прихода нов. бара на NewBarInPeriod периоде (если NewBarInPeriod >= 0) //|***********************************************************************************| //| РАЗДЕЛ: Работа с ошибками | //|***********************************************************************************| /*int fGet_LastErrorInArray (string& Comm_Array[], // возвращаемый массив комментов string Com = "", // дополнительная информация к сообщению об ошибке int index = -1)*/ // индекс ячейки в которую заносим сообщение об ошибке // Получаем номер и описание посл. ошибки и выводим в массив комментов //int fGet_LastError (string& Comm_Error, string Com = "") // Получаем номер и описание последней ошибки //|***********************************************************************************| //| РАЗДЕЛ: Сервисных функций | //|***********************************************************************************| //void fWrite_Log (string fs_Txt) // Пишем Log-файл /*void fPrintAndShowComment (string& Text, // Возвращаемая пустая строка bool Show_Conditions, // Разрешение на показ комментов на графике bool Print_Conditions,// Разрешение на печать комментов string& s_Show[], // Взвращаемый массив комментов int ind = -1)*/ // индекс ячейки массива, куда внесли изменения // Выводим на печать и на график комментарии //void fControl_BreakEven (double ar_Lots[]) // массив объёмов открытых рыночных ордеров // Контроль Уровня БезУбытка по символу //bool fSTOPTRADE() // ПРЕДУПРЕЖДЕНИЕ //|***********************************************************************************| //| РАЗДЕЛ: MONEY MANAGEMENT | //|***********************************************************************************| //double fLotsNormalize (double fd_Lots) // размер лота // Производим нормализацию лота //double fGet_PipsValue() // Определение стоимости пункта выделенного ордера /*bool fCheck_MinProfit (double fd_MinProfit, // размер минимальной прибыли по ордеру double fd_NewSL, // новый SL bool fb_Condition = true)*/// условие на проведение проверки // Проверяем условие ни минимальную прибль по ордеру /*double fGet_BreakEven (string fs_Symbol, // Symbol double ar_Lots[], // массив объёмов открытых рыночных ордеров double fd_Profit)*/ // текущий профит по открытым ордера // Определение Уровня БезУбытка по символу
Во вторую часть попали:
//IIIIIIIIIIIIIIIIIII===========Перечень функций модуля=========IIIIIIIIIIIIIIIIIIIIII+ //|***********************************************************************************| //| РАЗДЕЛ: Общие функции | //|***********************************************************************************| //double fGet_Point (string fs_Symbol = "") // Функция, гарантированного получения Point /*bool fCCV_D (double fd_Value, // Проверяемый параметр int fi_IND)*/ // индекс параметра в массиве // Фиксирует факт изменения проверяемого double параметра /*bool fCCV_S (string fs_Value, // Проверяемый параметр int fi_IND)*/ // индекс параметра в массиве // Фиксирует факт изменения проверяемого string параметра /*bool fCCV_B (bool fb_Value, // Проверяемый параметр int fi_IND)*/ // индекс параметра в массиве // Фиксирует факт изменения проверяемого bool параметра //string fGet_NameOP (int fi_Type) // Функция возвращает наименование торговой операции //string fGet_NameTF (int fi_TF) // Возвращает наименование таймфрейма //string fGet_SignCurrency() // Функция возвращает значёк валюты депозита //string CheckBOOL (int M) // Возвращает наименование состояния (ДА\НЕТ) //string fGet_TimeToStr (datetime fdt_Time) // Возвращает продолжительность периода в D:H:M //double IIFd (bool condition, double ifTrue, double ifFalse) // Возвращает одно из двух значений DOUBLE в зависимости от условия //string IIFs (bool condition, string ifTrue, string ifFalse) // Возвращает одно из двух значений STRING в зависимости от условия //color IIFc (bool condition, color ifTrue, color ifFalse) // Возвращает одно из двух значений COLOR в зависимости от условия //|***********************************************************************************| //| РАЗДЕЛ: Работы с массивами | //|***********************************************************************************| /*int fGet_INDInArrayINT (int fi_Value, // Искомый элемент int ar_Array[])*/ // Проверяемый массив // Получаем индекс искомого элемента в массиве int /*int fGet_INDInArraySTR (string fs_Value, // Искомый элемент string ar_Array[])*/ // Проверяемый массив // Получаем индекс искомого элемента в массиве string //int fGet_NumPeriods (int fi_Period)// Получаем номер периода графика //void InitializeArray_STR (string& fsa_Array[], string fs_Value = "") // Инициализируем массив STRING /*void fCreat_ArrayGV (string& ar_Base[], // рабочий массив string ar_Add[])*/ // добавляемы массив // Создаём массив имён временных GV-переменных /*int fSplitStrToStr (string fs_List, // строка с данными string& ar_OUT[], // возвращаемый массив string fs_Delimiter = ",")*/ // разделитель данных в строке // Возвращает массив STRING из строки, разделённой sDelimiter /*void fCreat_StrToInt (string ar_Value[], // массив элементов string int& ar_OUT[], // возвращаемый массив int int fi_IND, // количество ячеек в массиве int fi_Factor = 1, // множитель string fs_NameArray = "")*/// имя возвращаемого массива // Возвращает массив INT из элементов массива STRING /*void fCreat_StrToDouble (string ar_Value[], // массив элементов string double& ar_OUT[], // возвращаемый массив double int fi_IND, // количество ячеек в массиве double fd_Factor = 1.0, // множитель string fs_NameArray = "")*/// имя возвращаемого массива // Возвращает массив DOUBLE из элементов массива STRING /*string fCreat_StrAndArray (int fi_First, // значение 1-го эелемента массива int& ar_OUT[], // возвращаемый массив int int fi_cntIND, // количество элементов в массиве string fs_Delimiter = ",")*/// разделитель элементов в возвращаемой строке // Возвращает строку из элементов массива INT и сам массив /*string fCreat_StrFromArray (string ar_Array[], // массив со значениями string fs_Delimiter = ",")*/// разделитель элементов в возвращаемой строке // Возвращает строку из элементов массива, разделённых fs_Delimiter /*int fInit_ArrayINT (int& ar_INT[], // Инициализируемый массив string fs_List, // Инициализируемые значения в строке int fi_Range, // Размер массива double fd_Factor = 1.0, // множитель string fs_NameArray = "", // имя возвращаемого массива string fs_Delimiter = ",")*/ // Разделитель значений в строке // Инициализация рабочего массива int /*int fInit_ArrayDBL (double& ar_DBL[], // Инициализируемый массив string fs_List, // Инициализируемые значения в строке int fi_Range, // Размер массива double fd_Factor = 1.0, // множитель string fs_NameArray = "", // имя возвращаемого массива string fs_Delimiter = ",")*/ // Разделитель значений в строке // Инициализация рабочего массива double /*int fInit_ArrayBOOL (bool& ar_BOOL[], // Инициализируемый массив string fs_List, // Инициализируемые значения в строке int fi_Range, // Размер массива double fd_Factor = 1.0, // множитель string fs_NameArray = "", // имя возвращаемого массива string fs_Delimiter = ",")*/// Разделитель значений в строке // Инициализация рабочего массива bool /*double fChoiceSource (string fs_Symbol, // Symbol int fi_Bar, // Bar datetime fdt_Time, // Time int fi_TF, // Period double fda_Array[][], // массив с альтернативными котировками int fi_NSource, // индекс в 1-ом измерении массива bool fb_IsBufffer = true)*/// флаг "родной" истории // Альтернатива индикаторному буферу /*void fRun_Sort (int& ar_INDEX[], // массив индексов для сортировки double fda_Value[])*/ // массив значений // Сортируем индексы массива по убыванию //|***********************************************************************************| //| РАЗДЕЛ: Сервисных функций | //|***********************************************************************************| /*double fGet_ValueFromGV (string fs_Name, // имя GV-переменной double fd_Value, // если такой переменной нет, подставляемое значение bool fd_Condition = true)*/// условие на проверку наличия GV-переменной // Берём значение переменной или из GV, или (при её отстутствии) fd_Value //void fClear_GV (int fi_cnt = 5000) // кол-во очищаемых объектов (тикетов) // Подчищаем возможно оставшиеся GV-переменные /*void fPrintAlert (string fs_Symbol, // Symbol int fi_TF, // Таймфрейм int fi_IND)*/ // номер индекса в массиве // Предупреждаем об отсутствии истории на баре
Как всегда библиотеку нужно инициализировать:
int init() { //---- Инициализируем библиотеку базовых функций fInit_Base (Symbol(), MagicNumber, TF_Indicators, ShowCommentInChart, PrintCom, SoundAlert, CreatVStopsInChart); }
Примеры советников, созданных с использованием ПС: ManagerTrailing, MULTI_Scalper, SAR, MAStoch.
В архиве вся библиотека.
Расширенные возможности функций iAC, iAO and iBearsBulls
MTF FractalsChannelМультитаймфреймный фрактальный канал.
Советник устанавливает отложенные ордера Buy Stop и Sell Stop в пределах ценового квадрата.
OrderPercent2Индикатор показывает прибыль по ордерам в процентах от баланса. Или уровень стопа в пунктах.