LIP/Arch/RU/LIP_v01.005/Include/LIP_Fun2_5_v1.005.mqh
super.admin 291e846eab convert
2025-05-30 15:03:51 +02:00

666 lines
56 KiB
MQL5

//============================================================================================= MQL5 ===
// LibreInfoPDO Function2_5 v1.005 MQL5
// Основные технические расчеты
// Librecoin (c)2014-2017
//======================================================================================================
#property strict
//============================================================================================= MQL5 ===
// INCLUDE - подключаемые модули
//------------------------------------------------------------------------------------------------------
//----- Обратные ссылки на основной файл проекта
#include "LIP_Ref_5_v1.005.mqh"
//============================================================================================= MQL5 ===
// FUNCTIONS
//------------------------------------------------------------------------------------------------------
//
//============================================================================================= MQL5 ===
// FillSymSelect() - Заполнение массива образцов отбора
// Вход:
// iSelectArray - массив отбора образцов
//------------------------------------------------------------------------------------------------------
void FillSymSelect(string &iSelectArray[]){
//-----
string iSymSelect_00=SymSelect_00;
string iSymSelect_01=SymSelect_01;
string iSymSelect_02=SymSelect_02;
string iSymSelect_03=SymSelect_03;
string iSymSelect_04=SymSelect_04;
string iSymSelect_05=SymSelect_05;
string iSymSelect_06=SymSelect_06;
string iSymSelect_07=SymSelect_07;
string iSymSelect_08=SymSelect_08;
string iSymSelect_09=SymSelect_09;
StringTrimLeft(iSymSelect_00);StringTrimRight(iSymSelect_00);iSelectArray[0]=iSymSelect_00;
StringTrimLeft(iSymSelect_01);StringTrimRight(iSymSelect_01);iSelectArray[1]=iSymSelect_01;
StringTrimLeft(iSymSelect_02);StringTrimRight(iSymSelect_02);iSelectArray[2]=iSymSelect_02;
StringTrimLeft(iSymSelect_03);StringTrimRight(iSymSelect_03);iSelectArray[3]=iSymSelect_03;
StringTrimLeft(iSymSelect_04);StringTrimRight(iSymSelect_04);iSelectArray[4]=iSymSelect_04;
StringTrimLeft(iSymSelect_05);StringTrimRight(iSymSelect_05);iSelectArray[5]=iSymSelect_05;
StringTrimLeft(iSymSelect_06);StringTrimRight(iSymSelect_06);iSelectArray[6]=iSymSelect_06;
StringTrimLeft(iSymSelect_07);StringTrimRight(iSymSelect_07);iSelectArray[7]=iSymSelect_07;
StringTrimLeft(iSymSelect_08);StringTrimRight(iSymSelect_08);iSelectArray[8]=iSymSelect_08;
StringTrimLeft(iSymSelect_09);StringTrimRight(iSymSelect_09);iSelectArray[9]=iSymSelect_09;
//-----
return;
}//FillSymSelect()
//
//============================================================================================= MQL5 ===
// FillSymEliminat() - Заполнение массива образцов отсева
// Вход:
// iSelectArray - массив отсева образцов
//------------------------------------------------------------------------------------------------------
void FillSymEliminat(string &iSelectArray[]){
//-----
string iSymSelect_00=SymEliminat_00;
string iSymSelect_01=SymEliminat_01;
string iSymSelect_02=SymEliminat_02;
string iSymSelect_03=SymEliminat_03;
string iSymSelect_04=SymEliminat_04;
string iSymSelect_05=SymEliminat_05;
string iSymSelect_06=SymEliminat_06;
string iSymSelect_07=SymEliminat_07;
string iSymSelect_08=SymEliminat_08;
string iSymSelect_09=SymEliminat_09;
StringTrimLeft(iSymSelect_00);StringTrimRight(iSymSelect_00);iSelectArray[0]=iSymSelect_00;
StringTrimLeft(iSymSelect_01);StringTrimRight(iSymSelect_01);iSelectArray[1]=iSymSelect_01;
StringTrimLeft(iSymSelect_02);StringTrimRight(iSymSelect_02);iSelectArray[2]=iSymSelect_02;
StringTrimLeft(iSymSelect_03);StringTrimRight(iSymSelect_03);iSelectArray[3]=iSymSelect_03;
StringTrimLeft(iSymSelect_04);StringTrimRight(iSymSelect_04);iSelectArray[4]=iSymSelect_04;
StringTrimLeft(iSymSelect_05);StringTrimRight(iSymSelect_05);iSelectArray[5]=iSymSelect_05;
StringTrimLeft(iSymSelect_06);StringTrimRight(iSymSelect_06);iSelectArray[6]=iSymSelect_06;
StringTrimLeft(iSymSelect_07);StringTrimRight(iSymSelect_07);iSelectArray[7]=iSymSelect_07;
StringTrimLeft(iSymSelect_08);StringTrimRight(iSymSelect_08);iSelectArray[8]=iSymSelect_08;
StringTrimLeft(iSymSelect_09);StringTrimRight(iSymSelect_09);iSelectArray[9]=iSymSelect_09;
//-----
return;
}//FillTickEliminat()
//
//============================================================================================= MQL5 ===
// FillMagSelect() - Заполнение массива образцов отбора
// Вход:
// iSelectArray - массив отбора образцов
//------------------------------------------------------------------------------------------------------
void FillMagSelect(long &iSelectArray[]){
//-----
iSelectArray[0]=StringToInteger(MagSelect_00);
iSelectArray[1]=StringToInteger(MagSelect_01);
iSelectArray[2]=StringToInteger(MagSelect_02);
iSelectArray[3]=StringToInteger(MagSelect_03);
iSelectArray[4]=StringToInteger(MagSelect_04);
iSelectArray[5]=StringToInteger(MagSelect_05);
iSelectArray[6]=StringToInteger(MagSelect_06);
iSelectArray[7]=StringToInteger(MagSelect_07);
iSelectArray[8]=StringToInteger(MagSelect_08);
iSelectArray[9]=StringToInteger(MagSelect_09);
//-----
return;
}//FillMagSelect()
//
//============================================================================================= MQL5 ===
// FillMagEliminat() - Заполнение массива образцов отсева
// Вход:
// iSelectArray - массив отсева образцов
//------------------------------------------------------------------------------------------------------
void FillMagEliminat(long &iSelectArray[]){
//-----
iSelectArray[0]=StringToInteger(MagEliminat_00);
iSelectArray[1]=StringToInteger(MagEliminat_01);
iSelectArray[2]=StringToInteger(MagEliminat_02);
iSelectArray[3]=StringToInteger(MagEliminat_03);
iSelectArray[4]=StringToInteger(MagEliminat_04);
iSelectArray[5]=StringToInteger(MagEliminat_05);
iSelectArray[6]=StringToInteger(MagEliminat_06);
iSelectArray[7]=StringToInteger(MagEliminat_07);
iSelectArray[8]=StringToInteger(MagEliminat_08);
iSelectArray[9]=StringToInteger(MagEliminat_09);
//-----
return;
}//FillMagEliminat()
//
//============================================================================================= MQL5 ===
// FillTickSelect() - Заполнение массива образцов отбора
// Вход:
// iSelectArray - массив отбора образцов
//------------------------------------------------------------------------------------------------------
void FillTickSelect(long &iSelectArray[]){
//-----
iSelectArray[0]=StringToInteger(TickSelect_00);
iSelectArray[1]=StringToInteger(TickSelect_01);
iSelectArray[2]=StringToInteger(TickSelect_02);
iSelectArray[3]=StringToInteger(TickSelect_03);
iSelectArray[4]=StringToInteger(TickSelect_04);
iSelectArray[5]=StringToInteger(TickSelect_05);
iSelectArray[6]=StringToInteger(TickSelect_06);
iSelectArray[7]=StringToInteger(TickSelect_07);
iSelectArray[8]=StringToInteger(TickSelect_08);
iSelectArray[9]=StringToInteger(TickSelect_09);
//-----
return;
}//FillTickSelect()
//
//============================================================================================= MQL5 ===
// FillTickEliminat() - Заполнение массива образцов отсева
// Вход:
// iSelectArray - массив отсева образцов
//------------------------------------------------------------------------------------------------------
void FillTickEliminat(long &iSelectArray[]){
//-----
iSelectArray[0]=StringToInteger(TickEliminat_00);
iSelectArray[1]=StringToInteger(TickEliminat_01);
iSelectArray[2]=StringToInteger(TickEliminat_02);
iSelectArray[3]=StringToInteger(TickEliminat_03);
iSelectArray[4]=StringToInteger(TickEliminat_04);
iSelectArray[5]=StringToInteger(TickEliminat_05);
iSelectArray[6]=StringToInteger(TickEliminat_06);
iSelectArray[7]=StringToInteger(TickEliminat_07);
iSelectArray[8]=StringToInteger(TickEliminat_08);
iSelectArray[9]=StringToInteger(TickEliminat_09);
//-----
return;
}//FillTickEliminat()
//
//============================================================================================= MQL5 ===
// GlobalSetDouble - Установить глобальную переменную double
//------------------------------------------------------------------------------------------------------
bool GlobalSetDouble(string iName,datetime &iTimeSet,double iDateSet=0.0){
//-----
iTimeSet=GlobalVariableSet(iName,iDateSet);
{if(iTimeSet!=0)//Значение удалось установить
{
return(true);
}else{//Не удалось установить
return(false);
}}//if(iTimeSet!=0)
//-----
return(false);
}//GlobalSetDouble()
//
//============================================================================================= MQL5 ===
// GlobalGetDouble - Прочитать глобальную переменную double
//------------------------------------------------------------------------------------------------------
bool GlobalGetDouble(string iName,double &iDateGet){
//-----
iDateGet=0.0;
{if(GlobalVariableCheck(iName))//Переменная есть
{
{if(GlobalVariableGet(iName,iDateGet))//Значение удалось считать
{
return(true);
}else{//Не удалось считать
iDateGet=0.0;
return(false);
}}//if(GlobalVariableGet(iName,iDateGet))
}else{//Переменной нет
iDateGet=0.0;
return(false);
}}//if(GlobalVariableCheck(iName))
//-----
return(false);
}//GlobalGetDouble()
//
//============================================================================================= MQL5 ===
// GlobalSetString - Установить глобальную переменную string (8симв)
//------------------------------------------------------------------------------------------------------
bool GlobalSetString(string iName,datetime &iTimeSet,string iStringSet=""){
//-----
union ulong_double
{
double iDateSet;
ulong iLongSet;
uchar iCharSet[8];
};
ulong_double ud;
ud.iLongSet=0;
//-----
StringToCharArray(iStringSet,ud.iCharSet,0,8);
//-----
iTimeSet=GlobalVariableSet(iName,ud.iDateSet);
{if(iTimeSet!=0)//Значение удалось установить
{
return(true);
}else{//Не удалось установить
return(false);
}}//if(iTimeSet!=0)
//-----
return(false);
}//GlobalSetString()
//
//============================================================================================= MQL5 ===
// GlobalGetString - Прочитать глобальную переменную string (8симв)
//------------------------------------------------------------------------------------------------------
bool GlobalGetString(string iName,string &iStringGet){
//-----
iStringGet="";
//-----
union ulong_double
{
double iDateGet;
ulong iLongGet;
uchar iCharGet[8];
};
ulong_double ud;
ud.iLongGet=0;
//-----
{if(GlobalVariableCheck(iName))//Переменная есть
{
{if(GlobalVariableGet(iName,ud.iDateGet))//Значение удалось считать
{
iStringGet=CharArrayToString(ud.iCharGet,0,8);
return(true);
}else{//Не удалось считать
iStringGet="";
return(false);
}}//if(GlobalVariableGet(iName,ud.iDateGet))
}else{//Переменной нет
iStringGet="";
return(false);
}}//if(GlobalVariableCheck(iName))
//-----
iStringGet="";
return(false);
}//GlobalGetString()
//
//============================================================================================= MQL5 ===
// GlobalSetUlong - Установить глобальную переменную ulong
//------------------------------------------------------------------------------------------------------
bool GlobalSetUlong(string iName,datetime &iTimeSet,ulong iUlongSet=0){
//-----
union ulong_double
{
double iDateSet;
ulong iLongSet;
};
ulong_double ud;
ud.iLongSet=iUlongSet;
//-----
iTimeSet=GlobalVariableSet(iName,ud.iDateSet);
{if(iTimeSet!=0)//Значение удалось установить
{
return(true);
}else{//Не удалось установить
return(false);
}}//if(GlobalVariableGet(iName,iDate))
//-----
return(false);
}//GlobalSetDouble()
//
//============================================================================================= MQL5 ===
// GlobalGetUlong - Прочитать глобальную переменную ulong
//------------------------------------------------------------------------------------------------------
bool GlobalGetUlong(string iName,ulong &iUlongGet){
//-----
iUlongGet=0;
//-----
union ulong_double
{
double iDateGet;
ulong iLongGet;
};
ulong_double ud;
ud.iLongGet=0;
//-----
{if(GlobalVariableCheck(iName))//Переменная есть
{
{if(GlobalVariableGet(iName,ud.iDateGet))//Значение удалось считать
{
iUlongGet=ud.iLongGet;
return(true);
}else{//Не удалось считать
iUlongGet=0;
return(false);
}}//if(GlobalVariableGet(iName,iDate))
}else{//Переменной нет
iUlongGet=0;
return(false);
}}//if(GlobalVariableCheck(iName))
//-----
iUlongGet=0;
return(false);
}//GlobalGetDouble()
//
//============================================================================================= MQL5 ===
// CheckCondition - Проверка условия открытия
// Вх:
// iOpenMethod : Метод формирования сигнала на вход;
// iCloseProfitMethod : Метод формирования сигнала на выход по прибыли;
// iCloseLossMethod : Метод формирования сигнала на выход по убытку;
// Вых:
// iCommand : тип команды
// iPosType : тип открываемой позиции
// bool : есть условие открытия
//------------------------------------------------------------------------------------------------------
bool CheckCondition( enOpenMethod iOpenMethod,
enCloseProfitMethod iCloseProfitMethod,
enCloseLossMethod iCloseLossMethod,
enCommandType &iCommand,
ENUM_POSITION_TYPE &iPosType){
//-----
iCommand=Command_None;
//----- Считываем значения 0 и 1 баров индикатора ADXW_ZAT_116 by Welles Wilder (LibreCoin adapted)
{if(((iOpenMethod==Open_ADXW)||(iCloseProfitMethod==CloseProfit_ADXW)||(iCloseLossMethod==CloseLoss_ADXW))
&&(CopyBuffer(adxw_handle,0,0,2,m_adxw)<2)
)
{
{if(PrintDebug){Print("CheckCondition(): Error: CopyBuffer(adxw_handle)<2");}}
return(false);
}}//if(((iOpenMethod==Open_ADXW)||(iCloseProfitMethod==CloseProfit_ADXW)||(iCloseLossMethod==CloseLoss_ADXW))
if(PrintADXW)Print("m_adxw[0]=",m_adxw[0]);
//----- Возможность открытия Buy
{if(MathMod(gnTick+0*TestStep,TestStep*24)<0.5)
{
{switch(iOpenMethod)
{
case Open_ADXW: //Возможность открытия Buy по ADXWZ
{
{if( (m_adxw[0]>aL0)&&(m_adxw[0]<aL1) //В диапазоне aL0 от до aL1 (положительное)
&& (m_adxw[0]>m_adxw[1]) //И растёт
)
{
iPosType=POSITION_TYPE_BUY; //0
iCommand=Command_Open; //1
return(true);
}}//if(MathMod(gnTick+0*TestStep,TestBase)<0.5)
break;
}
default:
{
iPosType=POSITION_TYPE_BUY; //0
iCommand=Command_Open; //1
return(true);
break;
}
}}//switch(iOpenMethod)
}}//if(MathMod(gnTick+0*TestStep,TestStep*6)<0.5)
//----- Возможность открытия Sell
{if(MathMod(gnTick+3*TestStep,TestStep*24)<0.5)
{
{switch(iOpenMethod)
{
case Open_ADXW: //Возможность открытия Sell по ADXWZ
{
{if( (m_adxw[0]<-aL0)&&(m_adxw[0]>-aL1) //В диапазоне -aL1 от до -aL0 (отрицательное)
&& (m_adxw[0]<m_adxw[1]) //И падает
)
{
iPosType=POSITION_TYPE_SELL; //1
iCommand=Command_Open; //1
return(true);
}}//if(MathMod(gnTick+2*TestStep,TestBase)<0.5)
break;
}
default:
{
iPosType=POSITION_TYPE_BUY; //1
iCommand=Command_Open; //1
return(true);
break;
}
}}//switch(iOpenMethod)
}}//if(MathMod(gnTick+3*TestStep,TestStep*6)<0.5)
//----- Возможность закрытия Buy (в прибыли - оценка прибыли в советнике)
{if(MathMod(gnTick+1*TestStep,TestStep*12)<0.5)
{
{switch(iCloseProfitMethod)
{
case CloseProfit_ADXW: //Возможность закрытия Buy по ADXWZ (в прибыли - оценка прибыли в советнике)
{
{if( ((m_adxw[0]<m_adxw[1])&&(m_adxw[0]>aL0)) //ADXWZ падает и больше уровня открытия
|| (m_adxw[0]>aL2) //или больше aL2
)
{
iPosType=POSITION_TYPE_BUY; //0
iCommand=Command_Close; //2
return(true);
}}//if( (m_adxw[0]<m_adxw[1])
break;
}
default:
{
iPosType=POSITION_TYPE_BUY; //0
iCommand=Command_Close; //2
return(true);
break;
}
}}//switch(iOpenMethod)
}}//if(MathMod(gnTick+1*TestStep,TestStep*6)<0.5)
//----- Возможность закрытия Sell (в прибыли - оценка прибыли в советнике)
{if(MathMod(gnTick+4*TestStep,TestStep*12)<0.5)
{
{switch(iCloseProfitMethod)
{
case CloseProfit_ADXW: //Возможность закрытия Sell по ADXWZ (в прибыли - оценка прибыли в советнике)
{
{if( ((m_adxw[0]>m_adxw[1])&&(m_adxw[0]<-aL0)) //ADXWZ растет и меньше уровня открытия (негативного)
|| (m_adxw[0]<-aL2) //или меньше -aL2
)
{
iPosType=POSITION_TYPE_SELL; //1
iCommand=Command_Close; //2
return(true);
}}//if(MathMod(gnTick+3*TestStep,TestBase)<0.5)
break;
}
default:
{
iPosType=POSITION_TYPE_SELL; //0
iCommand=Command_Close; //2
return(true);
break;
}
}}//switch(iCloseProfitMethod)
}}//if(MathMod(gnTick+4*TestStep,TestStep*6)<0.5)
//----- Возможность закрытия Buy (в убытке - оценка убытка в советнике)
{if(MathMod(gnTick+2*TestStep,TestStep*6)<0.5)
{
{switch(iCloseLossMethod)
{
case CloseLoss_ADXW: //Возможность закрытия Buy по ADXWZ (в убытке - оценка убытка в советнике)
{
{if((m_adxw[0]<-aL3)&&(m_adxw[0]<m_adxw[1])) //ADXWZ негативный меньше уровня закрытия и уменьшается
{
iPosType=POSITION_TYPE_BUY; //0
iCommand=Command_CloseLoss; //3
return(true);
}}//if(m_adxw[0]<-aL3)
break;
}
default:
{
iPosType=POSITION_TYPE_BUY; //0
iCommand=Command_CloseLoss; //2
return(true);
break;
}
}}//switch(iCloseProfitMethod)
}}//if(MathMod(gnTick+4*TestStep,TestStep*6)<0.5)
//----- Возможность закрытия Sell (в убытке - оценка убытка в советнике)
{if(MathMod(gnTick+5*TestStep,TestStep*6)<0.5)
{
{switch(iCloseLossMethod)
{
case CloseLoss_ADXW: //Возможность закрытия Sell по ADXWZ (в убытке - оценка прибыли в советнике)
{
{if((m_adxw[0]>aL3)&&(m_adxw[0]<m_adxw[1])) //ADXWZ позитивный больше уровня закрытия и увеличивается
{
iPosType=POSITION_TYPE_SELL; //1
iCommand=Command_CloseLoss; //3
return(true);
}}//if(MathMod(gnTick+3*TestStep,TestBase)<0.5)
break;
}
default:
{
iPosType=POSITION_TYPE_SELL; //0
iCommand=Command_CloseLoss; //2
return(true);
break;
}
}}//switch(iCloseProfitMethod)
}}//if(MathMod(gnTick+4*TestStep,TestStep*6)<0.5)
//-----
return(false);
}//CheckCondition()
//
//============================================================================================= MQL5 ===
// CommandCode - формирование кода команды по типу команды и типу позиции
// Вх:
// iCommand : тип команды (Command_None/Command_Open/Command_Close)
// iPosType : тип позиции (Buy/Sell)
// Вых:
// ulong : код команды (0/1/2/3/4) - (неткоманды/покупка/продажа/закрытиепокупки/закрытиепродажи)
//------------------------------------------------------------------------------------------------------
ulong CommandCode(enCommandType iCommand, //тип команды
ENUM_POSITION_TYPE iPosType){ //тип позиции
//----- Demo
{if(iCommand==Command_Open)
{
{if(iPosType==POSITION_TYPE_BUY)
{
return(1);//Покупать
}}//if(iPosType==POSITION_TYPE_BUY)
{if(iPosType==POSITION_TYPE_SELL)
{
return(2);//Продавать
}}//if(iPosType==POSITION_TYPE_SELL)
}}//if(iCommand==Commmand_Open)
{if(iCommand==Command_Close)
{
{if(iPosType==POSITION_TYPE_BUY)
{
return(3);//Закрыть Покупку в прибыль
}}//if(iPosType==POSITION_TYPE_BUY)
{if(iPosType==POSITION_TYPE_SELL)
{
return(4);//Закрыть Продажу в прибыль
}}//if(iPosType==POSITION_TYPE_SELL)
}}//if(iCommand==Commmand_Close)
{if(iCommand==Command_CloseLoss)
{
{if(iPosType==POSITION_TYPE_BUY)
{
return(5);//Закрыть Покупку в убыток
}}//if(iPosType==POSITION_TYPE_BUY)
{if(iPosType==POSITION_TYPE_SELL)
{
return(6);//Закрыть Продажу в убыток
}}//if(iPosType==POSITION_TYPE_SELL)
}}//if(iCommand==Commmand_Close)
return(0);//нет команды
}//CommandCode()
//
//============================================================================================= MQL5 ===
// SendCommand - отправка команды в советник
//------------------------------------------------------------------------------------------------------
void SendCommand(ulong iCommandCode){
//-----
datetime TimeSet=0;
//1. Сбрасывается флаг выполнения (команда выполнить покупку не выполнена)
{if(GlobalSetUlong("LIP_"+TheSymbol+"_Ready_"+IntegerToString(iCommandCode),TimeSet,0))
{
if(PrintDebug)Print("Инд LIP_"+TheSymbol+"_Ready_"+IntegerToString(iCommandCode)+"=",0);
}}//if(GlobalSetUlong("LIP_"+TheSymbol+"_Ready_"+EnumToString(iCommandCode),TimeSet,0))
//2. Выставляется команда (выполнить покупку)
{if(GlobalSetUlong("LIP_"+TheSymbol+"_Command_"+IntegerToString(iCommandCode),TimeSet,iCommandCode))
{
if(PrintDebug)Print("Инд LIP_"+TheSymbol+"_Command_"+IntegerToString(iCommandCode)+"=",iCommandCode);
}}//if(GlobalSetUlong("LIP_"+TheSymbol+"_Command"+EnumToString(iCommandCode),TimeSet,iCommandCode))
if(PrintDebug)Print("Инд задача "+IntegerToString(iCommandCode)+" запущена!");
//DoItCommand=true;
}//SendCommand()
////
////============================================================================================= MQL5 ===
//// CheckOpenCondition - Проверка условия открытия
//// Вых:
//// iPosType : тип открываемой позиции
//// bool : есть условие открытия
////------------------------------------------------------------------------------------------------------
//bool CheckOpenCondition(ENUM_POSITION_TYPE &iPosType){
////----- Demo
// {if(MathMod(gnTick+0*TestStep,TestBase)<0.5)
// {
// iPosType=POSITION_TYPE_BUY;
// return(true);
// }}//if(MathMod(gnTick,100)<1)
// {if(MathMod(gnTick+2*TestStep,TestBase)<0.5)
// {
// iPosType=POSITION_TYPE_SELL;
// return(true);
// }}//if(MathMod(gnTick+50,100)<1)
// return(false);
//}//CheckOpenCondition()
////
////============================================================================================= MQL5 ===
//// CheckCloseCondition - Проверка условия закрытия
//// Вых:
//// iPosType : тип закрываемой позиции
//// bool : есть условие закрытия
////------------------------------------------------------------------------------------------------------
//bool CheckCloseCondition(ENUM_POSITION_TYPE &iPosType){
////----- Demo
// {if(MathMod(gnTick+1*TestStep,TestBase)<0.5)
// {
// iPosType=POSITION_TYPE_BUY;
// return(true);
// }}//if(MathMod(gnTick+25,100)<1)
// {if(MathMod(gnTick+3*TestStep,TestBase)<0.5)
// {
// iPosType=POSITION_TYPE_SELL;
// return(true);
// }}//if(MathMod(gnTick+75,100)<1)
// return(false);
//}//CheckCloseCondition()
////
////============================================================================================= MQL5 ===
//// CheckCommandResult - проверка результата обработки команды в советнике
////------------------------------------------------------------------------------------------------------
//void CheckCommandResult(ulong iCommandCode){
////-----
// datetime TimeSet=0;
// {if(DoItCommand)
// {
// ulong UlongSet=0;
// //4. Если выполнено (обнаружен флаг выполнения команды выполнить покупку) (таймаут - рассмотреть отдельно), то сбрасываем флаг задания и флаг выполнения
// {if((GlobalGetUlong("LIP_"+TheSymbol+"_Ready_"+IntegerToString(iCommandCode),UlongSet))&&(UlongSet!=0))
// {
// //Print("LIP_"+TheSymbol+"_Command=",UlongSet);
// //сбрасываем флаг задания
// DoItCommand=false;
// //1. Сбрасывается флаг выполнения (команда выполнить покупку не выполнена)
// {if(GlobalSetUlong("LIP_"+TheSymbol+"_Ready_"+IntegerToString(iCommandCode),TimeSet,0))
// {
// if(PrintInfo)Print("Инд задача "+IntegerToString(UlongSet)+" выполнена! "+string(TimeSet));
// }}//if(GlobalSetString("tst_03",TimeSet,56456198741))
// }}//if(GlobalGetUlong("tst_03",UlongSet))
// }}//if(DoItCommand)
//}//CheckCommandResult()
//
//----- Установка глобальных переменных
//datetime TimeSet=0;
//double DateSet=0.0;
//{if(GlobalSetDouble("LIP_"+TheSymbol+"_Ask",TimeSet,SymbolInfoDouble(TheSymbol,SYMBOL_ASK)))
//{
// //Print("TimeSet1=",TimeSet);
// //{if(GlobalGetDouble("tst_01",DateSet))
// //{
// // Print("DateSet1=",DateSet);
// //}}//if(GlobalGetDouble("tst_01",DateSet))
//}}//if(GlobalSetDouble("tst_01",999.999,TimeSet))
//{if(GlobalSetDouble("LIP_"+TheSymbol+"_Bid",TimeSet,SymbolInfoDouble(TheSymbol,SYMBOL_BID)))
//{
// //Print("TimeSet1=",TimeSet);
// //{if(GlobalGetDouble("tst_01",DateSet))
// //{
// // Print("DateSet1=",DateSet);
// //}}//if(GlobalGetDouble("tst_01",DateSet))
//}}//if(GlobalSetDouble("tst_01",999.999,TimeSet))
//-----
//string StringSet="";
//{if(GlobalSetString("LIP_"+TheSymbol+"_Symbol",TimeSet,TheSymbol))
//{
// //Print("TimeSet2=",TimeSet);
// //{if(GlobalGetString("tst_02",StringSet))
// //{
// // Print("StringSet2=",StringSet);
// //}}//if(GlobalGetString("tst_02",StringSet))
//}}//if(GlobalSetString("tst_02",TimeSet,"EURUSD.z"))