191 lines
18 KiB
MQL5
191 lines
18 KiB
MQL5
//============================================================================================= MQL5 ===
|
|
// LibreCLOP v1.005 MQL5
|
|
// Главный модуль обработки событий
|
|
// Librecoin(c)2014-2017
|
|
//============================================================================================= MQL5 ===
|
|
// REVIEWS
|
|
//------------------------------------------------------------------------------------------------------
|
|
// Программная система (тестовая для одного инструмента) советник+индикаторы (информационный и сигнальный).
|
|
// 1. Советник LibreCLOP Closer-Opener:
|
|
// 1.1. Генерирует хендл индикатора LibreInfoPDO и размещает индикатор на чарте.
|
|
// 1.1. Генерирует хендл индикатора ADXWZ и размещает индикатор на чарте.
|
|
// 1.2. По сигналам информационного индикатора LibreInfoPDO открывает и закрывает сделки.
|
|
// 1.3. Сигналы открытия-закрытия формируются через глобальные переменые.
|
|
// 2. Индикатор LibreInfoPDO:
|
|
// 2.1. Получает хендл индикатора ADXWZ.
|
|
// 2.2. Использует индикатор ADXWZ для формирования сигналов на покупку-продажу.
|
|
// 2.3. Формирует сигналы на открытие-закрытие сделок для управляющего советника LibreCLOP.
|
|
// В дальнейшем настройки ADXWZ для покупки и продажи будут разнесены в два индикатора (или более).
|
|
//============================================================================================= MQL5 ===
|
|
// IDEAS
|
|
//------------------------------------------------------------------------------------------------------
|
|
// 12.11.2017 Идея: Изначально использовать настройки индикаторов по умолчанию. - в работе
|
|
//============================================================================================= MQL5 ===
|
|
// PROPERTY
|
|
//------------------------------------------------------------------------------------------------------
|
|
#define ver "1.005"
|
|
#property copyright "Librecoin(c)2014-2017"
|
|
#property link "https://www.mql5.com/ru/users/kirillovyv"
|
|
#property strict
|
|
#property description "**************************************************"
|
|
#property description " Positions closer-opener v"+ver+" (MQL5)"
|
|
#property description " Close and Open expert for LibreInfoPDO binary system"
|
|
#property description " From Russia with Love! :-)"
|
|
#property description " https://www.mql5.com/ru/users/kirillovyv"
|
|
#property description "**************************************************"
|
|
#property version ver
|
|
const string vers = "LibreCLOP v"+ver; //Version
|
|
#property tester_indicator "Projects\\Indicatores\\LIP\\Main\\LIP_v01.005\\LibreInfoPDO v1.005.ex5"
|
|
#property tester_indicator "Projects\\Indicatores\\MQ5\\ADX\\adxw_zat.ex5"
|
|
//============================================================================================= MQL5 ===
|
|
// INCLUDE
|
|
//------------------------------------------------------------------------------------------------------
|
|
//----- Определения переменных и структур
|
|
#include "Include\LCL_Def_5_v1.005.mqh" //Определения переменных и структур MQL5
|
|
//----- Интерфейс настроек
|
|
#include "Include\LCL_Int_5_v1.005.mqh" //Интерфейс настроек MQL4/5
|
|
//----- Главный алгоритм
|
|
#include "Include\LCL_Man_5_v1.005.mqh" //Главный алгоритм MQL5
|
|
//----- Прочее (функции, расчеты, графика)
|
|
#include "Include\LCL_Fun1_5_v1.005.mqh" //Основные функции алгортма MQL5(Traling,Open-Close,MA,CalcSR)
|
|
#include "Include\LCL_Fun2_5_v1.005.mqh" //Основные технические расчеты MQL5 (Calc...)
|
|
#include "Include\LCL_Fun3_5_v1.005.mqh" //Графика, вывод на чарт и преобразования вывода MQL5
|
|
//
|
|
//============================================================================================= MQL5 ===
|
|
// OnInit()
|
|
//------------------------------------------------------------------------------------------------------
|
|
int OnInit(){
|
|
//-----
|
|
return((int)On_Init());
|
|
//return(INIT_SUCCEEDED);
|
|
}//OnInit()
|
|
//
|
|
//void OnInit(){
|
|
//}//OnInit()
|
|
//
|
|
//============================================================================================= MQL5 ===
|
|
// OnTick()
|
|
//------------------------------------------------------------------------------------------------------
|
|
void OnTick(){
|
|
//-----
|
|
On_Tick();
|
|
//-----
|
|
return;
|
|
}//OnTick()
|
|
//
|
|
////============================================================================================= MQL5 ===
|
|
//// OnCalculate()
|
|
////------------------------------------------------------------------------------------------------------
|
|
//int OnCalculate(const int rates_total,
|
|
// const int prev_calculated,
|
|
// const datetime &time[],
|
|
// const double &open[],
|
|
// const double &high[],
|
|
// const double &low[],
|
|
// const double &close[],
|
|
// const long &tick_volume[],
|
|
// const long &volume[],
|
|
// const int &spread[]){
|
|
////-----
|
|
// On_Tick();
|
|
////-----
|
|
// return(rates_total);
|
|
//}//OnCalculate()
|
|
//
|
|
//============================================================================================= MQL5 ===
|
|
// OnTimer()
|
|
//------------------------------------------------------------------------------------------------------
|
|
void OnTimer(){
|
|
//-----
|
|
On_Timer();
|
|
//-----
|
|
return;
|
|
}//OnTimer()
|
|
//
|
|
//============================================================================================= MQL5 ===
|
|
// OnDeinit()
|
|
//------------------------------------------------------------------------------------------------------
|
|
void OnDeinit(const int reason){
|
|
//----- Определяем имя программы
|
|
string iProgramName=MQLInfoString(MQL_PROGRAM_NAME);
|
|
//----- Определяем тип программы
|
|
string ProgramType="Expert";
|
|
{switch(MQLInfoInteger(MQL_PROGRAM_TYPE))
|
|
{
|
|
case PROGRAM_SCRIPT:
|
|
{
|
|
ProgramType="Script";
|
|
break;
|
|
}
|
|
case PROGRAM_EXPERT:
|
|
{
|
|
ProgramType="Expert";
|
|
break;
|
|
}
|
|
case PROGRAM_INDICATOR:
|
|
{
|
|
ProgramType="Indicator";
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
ProgramType="Expert";
|
|
}
|
|
}}//switch(MQLInfoInteger(MQL_PROGRAM_TYPE))
|
|
//----- Анализируем и выводим информацию о причине завершения работы
|
|
string ReasonTxt="REASON";
|
|
{switch(reason)
|
|
{
|
|
case REASON_PROGRAM:
|
|
ReasonTxt="[REASON_PROGRAM] "+ProgramType+" terminated its operation by calling the ExpertRemove() function.";break;
|
|
case REASON_REMOVE:
|
|
ReasonTxt="[REASON_REMOVE] "+ProgramType+" has been removed from chart.";break;
|
|
case REASON_RECOMPILE:
|
|
ReasonTxt="[REASON_RECOMPILE] "+ProgramType+" has been recompiled.";break;
|
|
case REASON_CHARTCHANGE:
|
|
ReasonTxt="[REASON_CHARTCHANGE] Symbol or chart period has been changed.";break;
|
|
case REASON_CHARTCLOSE:
|
|
ReasonTxt="[REASON_CHARTCLOSE] Chart has been closed.";break;
|
|
case REASON_PARAMETERS:
|
|
ReasonTxt="[REASON_PARAMETERS] Input parameters have been changed by a user.";break;
|
|
case REASON_ACCOUNT:
|
|
ReasonTxt="[REASON_ACCOUNT] Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings.";break;
|
|
case REASON_TEMPLATE:
|
|
ReasonTxt="[REASON_TEMPLATE] New template was applied to chart.";break;
|
|
case REASON_INITFAILED:
|
|
ReasonTxt="[REASON_INITFAILED] "+ProgramType+" initialisation failed.";break;
|
|
case REASON_CLOSE:
|
|
ReasonTxt="[REASON_CLOSE] Terminal has been closed.";break;
|
|
default:ReasonTxt="Another reason";
|
|
}}//switch(reason)
|
|
Print("Terminal Build>>",TerminalInfoInteger(TERMINAL_BUILD)," ",ProgramType,":\"",iProgramName,"\" Deinit reason [",reason,"] >> "+ReasonTxt);
|
|
//----- Удалить инфо с экрана
|
|
{if(GraphUse)
|
|
{
|
|
DeleteGraph();
|
|
Comment("");
|
|
}}//if(GraphUse)
|
|
//----- Гасим индикаторы
|
|
{if(!((MQLInfoInteger(MQL_TESTER))||(MQLInfoInteger(MQL_OPTIMIZATION))))
|
|
{
|
|
string Indicator_Name="";
|
|
Indicator_Delete_Handle(lip_handle,Indicator_Name);
|
|
Indicator_Delete_Handle(adxw_handle,Indicator_Name);
|
|
}}//if(!((MQLInfoInteger(MQL_TESTER))||(MQLInfoInteger(MQL_OPTIMIZATION))))
|
|
//----- Обнуление глобальных переменных
|
|
datetime TimeSet=0;
|
|
{for(int i=1;i<=3;i++)//Перебор типов Команд
|
|
{
|
|
{for(int j=0;j<=1;j++)//Перебор типов Позиций
|
|
{
|
|
ReadyExp[(int)CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)]=0; //Сбрасываем внутренние флаги завершения команды N: ReadyExp_N=0
|
|
RunCommand[(int)CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)]=false; //Сбрасываем флаги запуска команд
|
|
GlobalSetUlong("LIP_"+TheSymbol+"_Command_"+IntegerToString(CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)),TimeSet,0); //Сбрасываем команды Command_N=0
|
|
GlobalSetUlong("LIP_"+TheSymbol+"_Ready_"+IntegerToString(CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)),TimeSet,1); //Устанавливаем флаги завершения Ready_N=1
|
|
}}//for(int j=0;i<=1;i++)
|
|
}}//for(int i=1;i<=2;i++)
|
|
//----- Гасим таймер
|
|
EventKillTimer();
|
|
//-----
|
|
return;
|
|
}//OnDeinit()
|