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

456 lines
55 KiB
MQL5

//============================================================================================= MQL5 ===
// LibreCLOP Main_5 v1.005 MQL5
// Модуль обработки событий
// LibreCoin (c)2014-2017
//======================================================================================================
#property strict
//============================================================================================= MQL5 ===
// INCLUDE - подключаемые модули
//------------------------------------------------------------------------------------------------------
//----- Обратные ссылки на основной файл проекта
#include "LCL_Ref_5_v1.005.mqh"
//============================================================================================= MQL5 ===
// EVENT PROCESSING MODULE
//------------------------------------------------------------------------------------------------------
//
//============================================================================================= MQL5 ===
// On_Init() - инициализация советника
//------------------------------------------------------------------------------------------------------
ENUM_INIT_RETCODE On_Init(){
//----- Счетчики и настройки счетчиков
gTick=0;
//gInTimer=false;
//----- Определяем необходимость использования графики
GraphUse=( false //Тут надо проверить какой режим с каким совместим
|| ((!MQLInfoInteger(MQL_TESTER))&&(!MQLInfoInteger(MQL_OPTIMIZATION))) //Не тестирование и не оптимизация
|| (MQLInfoInteger(MQL_VISUAL_MODE)) //или визуальный режим
);
//----- Определяем имя программы
ProgramName=MQLInfoString(MQL_PROGRAM_NAME);
//----- Глобальные параметры
TheSymbol=Symbol();
//----- Выбор индикаторов для сигналов открытия
int LastError=0;
//----- Запуск LibreInfoPDO
{if(GraphUse)
//{if((!GraphUse)&&((OpenMethod==Open_ADXW)||(CloseProfitMethod==CloseProfit_ADXW)||(CloseLossMethod==CloseLoss_ADXW)))
{
ResetLastError();
lip_handle=iCustom( TheSymbol,
PERIOD_CURRENT,
"Projects\\Indicatores\\LIP\\Main\\LIP_v01.005\\LibreInfoPDO v1.005.ex5",
//----- Input parameters
aInpPeriodADXW, //Period
aInpMethodADXW, //Method (MODE_SMA,MODE_EMA,MODE_SMMA,MODE_LWMA)
aSSCBaseMode, //Корр (0..3)-(off/spread/close/midHLC)
aInpFastPeriodEMA, //Fast EMA period
aInpSlowPeriodEMA, //Slow EMA period
aDICalcMode, //DICalcMode(0..8)-(hi/low/mahl/mihl/suhl/isuhl/imahl/imihl)
//----- Параметры сброса тенденции
adDI, //Для +-DI в долях от (макс-старт)
adActiv, //Для Активности ((+DI)+(-DI)) в долях от максимальной
adDelta, //Для Дельты ((+DI)-(-DI)) в долях от максимальной
//----- Levels
aL0, //L0 ADXOpenLvl
aL1, //L1 ADXOpenLvlMax
aL2, //L2 ADXCloseLvl
aL3, //L3 ADXReversLvl
aL4, //L4 ADXReversLvlMax
//----- Scale
aScaleMax //ScaleMax
);
LastError=GetLastError();
{if(LastError!=0)
{
Print("LCL: On_Init(): lip_handle = ",lip_handle," error = ",LastError);
}}//if(LastError!=0)
{if((GraphUse)&&(!ChartIndicatorAdd(0,(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL),lip_handle)))
////-----
// {if((!GraphUse)&&((OpenMethod==Open_ADXW)||(CloseProfitMethod==CloseProfit_ADXW)||(CloseLossMethod==CloseLoss_ADXW)))
// {
// ResetLastError();
// adxw_handle=iCustom( TheSymbol,
// PERIOD_CURRENT,
// "Projects\\Indicatores\\MQ5\\ADX\\adxw_zat_117.ex5",
// //----- Input parameters
// aInpPeriodADXW, //Period
// aInpMethodADXW, //Method (MODE_SMA,MODE_EMA,MODE_SMMA,MODE_LWMA)
// aSSCBaseMode, //Корр (0..3)-(off/spread/close/midHLC)
// aInpFastPeriodEMA, //Fast EMA period
// aInpSlowPeriodEMA, //Slow EMA period
// aDICalcMode, //DICalcMode(0..8)-(hi/low/mahl/mihl/suhl/isuhl/imahl/imihl)
// //----- Параметры сброса тенденции
// adDI, //Для +-DI в долях от (макс-старт)
// adActiv, //Для Активности ((+DI)+(-DI)) в долях от максимальной
// adDelta, //Для Дельты ((+DI)-(-DI)) в долях от максимальной
// //----- Levels
// aL0, //L0 ADXOpenLvl
// aL1, //L1 ADXOpenLvlMax
// aL2, //L2 ADXCloseLvl
// aL3, //L3 ADXReversLvl
// aL4, //L4 ADXReversLvlMax
// //----- Scale
// aScaleMax //ScaleMax
// );
// LastError=GetLastError();
// {if(LastError!=0)
// {
// Print("LIP: adxw_handle = ",adxw_handle," error = ",LastError);
// }}//if(LastError!=0)
{if((GraphUse)&&(!ChartIndicatorAdd(0,(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL),adxw_handle)))
{
Print("LCL: On_Init(): Не добавлен adxw_zat");
//return(INIT_FAILED);
}}//if((GraphUse)&&(!ChartIndicatorAdd(0,(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL),adxw_handle)))
}else{
Print("LCL: On_Init(): Не графический режим");
return(INIT_FAILED);
}}//if((!GraphUse)&&((OpenMethod==Open_ADXW)||(CloseProfitMethod==CloseProfit_ADXW)||(CloseLossMethod==CloseLoss_ADXW)))
//----- Обнуление глобальных переменных
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++)
//----- Запоминаем хендл ADXW в глобальной переменной
//GlobalSetUlong("LIP_"+TheSymbol+"_ADXW",TimeSet,adxw_handle);
//----- Запоминаем ChartID в глобальной переменной
//GlobalSetUlong("LIP_"+TheSymbol+"_ChartID",TimeSet,ChartID());
//----- Получаем короткое имя индикатора ADXW, номер окна и номер индикатора в окне
//Indicator_Search_Handle(adxw_handle,Chart_Ind_Name,Chart_Ind_Window,Chart_Ind_N);
//Print(ChartIndicatorName(0,Chart_Ind_Window,Chart_Ind_N));
//string Indicator_Name="";
//bool res=Indicator_Delete_Handle(adxw_handle,Indicator_Name);
//Print("adxw_handle=",adxw_handle," res=",res," Indicator_Name=",Indicator_Name);
//----- Выход
return(INIT_SUCCEEDED);
}//On_Init()
//
//============================================================================================= MQL5 ===
// On_Tick() - Основной обработчик тиков
//------------------------------------------------------------------------------------------------------
void On_Tick(){
//-----
//{if(!gInTimer)
//{
gTick++;
// gInTimer=false;
//}}//if(!InTimer)
{if(gTick>4294967000)
{
gTick=100;
}}//if(gTick>4294967000)
//{if(Indicator_Search_Handle(adxw_handle,Chart_Ind_Name,Chart_Ind_Window,Chart_Ind_N))
//{
// Print("adxw_handle=",adxw_handle);
// Print("Chart_Ind_Window=",Chart_Ind_Window);
// Print("Chart_Ind_N=",Chart_Ind_N);
// Print("ChartIndicatorName=",ChartIndicatorName(0,Chart_Ind_Window,Chart_Ind_N));
//}else{
// Print("Error!!","adxw_handle=",adxw_handle);
//}}//if(Indicator_Search_Handle(adxw_handle,Chart_Ind_Name,Chart_Ind_Window,Chart_Ind_N))
//----- Блок для обмена с индикатором
//1. Цикл проверки заданий и постановки на выполнение. Перебираем все команды от 1 до N. Для каждой:
// //1.0. Если канал занят BuseInd_N=1, - не используем ибо используется в индикаторе, чтобы не выдавать новую команду до окончания обработки предыдущей.
// 1.1. Если обнаружена команда N: Command_N=N, то выполняем:
// 1.1.1. Если снят флаг завершения Ready_N=0, то выполняем:
// 1.1.1.1. Сбрасываем команду Command_N=0
// 1.1.1.2. Сбрасываем для советника внутренний флаг завершения команды N: ReadyExp_N=0; (изначально все эти флаги сброшены, но на всякий)
// 1.1.1.3. Запускаем команду на выполнение (после выполнения команды должен быть установлен внутренний флаг выполнения команды N: ReadyExp_N=1;
// //В результате должно быть: Ready_N=0 (сброшено индикатором), Command_N=0 (сброшено советниом), ReadyExp_N=0??? (сброшено советником)
// //Ситуация Ready_N=0 + Command_N=0, говорит о том, что команда запущена на выполнение, но ещё не выполнена.
datetime TimeSet=0;
ulong CommandGet=0;
ulong ReadyGet=0;
{for(int i=1;i<=3;i++)//Перебор типов Команд
{
{for(int j=0;j<=1;j++)//Перебор типов Позиций
{
{if(GlobalGetUlong("LIP_"+TheSymbol+"_Command_"+IntegerToString(CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)),CommandGet)
&&(CommandGet==CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j))) //Если обнаружена команда N: Command_N=N
{
{if(GlobalGetUlong("LIP_"+TheSymbol+"_Ready_"+IntegerToString(CommandGet),ReadyGet)&&(ReadyGet==0)) //Если снят флаг завершения Ready_N=0
{
{if(GlobalSetUlong("LIP_"+TheSymbol+"_Command_"+IntegerToString(CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)),TimeSet,0))//Сбрасываем команду Command_N=0
{
ReadyExp[(int)CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)]=0; //Сбрасываем для советника внутренний флаг завершения команды N: ReadyExp_N=0
RunCommand[(int)CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)]=true; //Имитация запуска команды
if(PrintDebug)Print("LCL: запущена команда "+IntegerToString(CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j))+" ");
}}//if(GlobalSetUlong("LIP_"+TheSymbol+"_Command_"+IntegerToString(CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)),TimeSet,0)
}}//if(GlobalGetUlong("LIP_"+TheSymbol+"_Ready_"+IntegerToString(CommandGet),ReadyGet)&&(ReadyGet==0))
}}//if(GlobalGetUlong("LIP_"+TheSymbol+"_Command_"+IntegerToString(CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)),CommandGet)
}}//for(int j=0;i<=1;i++)
}}//for(int i=1;i<=2;i++)
//2. Цикл проверки выполнения. Перебираем все команды от 1 до N. Для каждой:
// 2.1. Если установлен внутренний флаг завершения команды N: ReadyExp_N=1, то выполняем:
// 2.1.1. Устанавливается флаг завершения Ready_N=1 для переменной Ready_N (команда N выполнена)
// 2.1.2. Сбрасываем для советника внутренний флаг завершения команды N: ReadyExp_N=0;
// //В результате должно быть: Ready_N=1 (установлено советником), Command_N=0 (сброшено советниом), ReadyExp_N=0 (сброшено советником)
{for(int i=1;i<=3;i++)//Перебор типов Команд
{
{for(int j=0;j<=1;j++)//Перебор типов Позиций
{
{if(ReadyExp[(int)CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)]==1) //Если установлен внутренний флаг завершения команды N: ReadyExp_N=1
{
{if(GlobalSetUlong("LIP_"+TheSymbol+"_Ready_"+IntegerToString(CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)),TimeSet,1))//Устанавливается флаг завершения Ready_N=1
{
ReadyExp[(int)CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)]=0; //Сбрасываем для советника внутренний флаг завершения команды N: ReadyExp_N=0
if(PrintDebug)Print("LCL: завершена команда "+IntegerToString(CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j))+" ");
}}//if(GlobalSetUlong("LIP_"+TheSymbol+"_Ready_"+IntegerToString(CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)),TimeSet,1)
}}//if(ReadyExp[(int)CommandCode((enCommandType)i,(ENUM_POSITION_TYPE)j)]==1)
}}//for(int j=0;i<=1;i++)
}}//for(int i=1;i<=2;i++)
//----- Цикл выполнения.
ulong Deal;
uint Result;
bool ResultB;
{for(int i=1;i<=6;i++)//Перебор Команд
{
{if(RunCommand[i])
{
{switch(i)
{
case(1)://Open Buy
{
Result=PositionOrderSend( TheSymbol, //string symbol
ORDER_TYPE_BUY, //ENUM_ORDER_TYPE type
0.01, //double volume
SymbolInfoDouble(TheSymbol,SYMBOL_ASK), //double price
5, //ulong iSlip,
0.0, //double iSL,
0.0, //double iTP,
"", //string iComment,
0, //ulong iMagic,
0, //datetime iExpir,
Deal); //ulong &iDeal
if(PrintInfo)Print("LCL: выполнена команда 1>>"+" Open Buy"+" gTick="+IntegerToString(gTick));
break;
}
case(2)://Open Sell
{
Result=PositionOrderSend( TheSymbol, //string symbol
ORDER_TYPE_SELL, //ENUM_ORDER_TYPE type
0.01, //double volume
SymbolInfoDouble(TheSymbol,SYMBOL_BID), //double price
5, //ulong iSlip,
0.0, //double iSL,
0.0, //double iTP,
"", //string iComment,
0, //ulong iMagic,
0, //datetime iExpir,
Deal); //ulong &iDeal
if(PrintInfo)Print("LCL: выполнена команда 2>>"+" Open Sell"+" gTick="+IntegerToString(gTick));
break;
}
case(3)://Close Buy Profit
{
{if(PositionsTotal()>0)//Если есть открытые ордера
{
{for(int j=PositionsTotal()-1;j>=0;j--)//Перебираем от конца к началу
{
ulong Pos_Tick=PositionGetTicket(j);//Выбор по номеру
{if(Pos_Tick<=0){continue;}}//Неудачно - следующий
{if(!PositionSelectByTicket(Pos_Tick)){continue;}}//Выбор по тикету, неудачно - следующий
{if(PositionGetString(POSITION_SYMBOL)!=TheSymbol){continue;}}//Отбор по инструменту
//{if(PositionGetInteger(POSITION_MAGIC)!=iMagic){continue;}}//Отбор по магику
double Pos_Profit=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
ENUM_POSITION_TYPE Pos_Type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
{if((Pos_Type==POSITION_TYPE_BUY)&&(Pos_Profit>MinProfit))//Нашли бай и профит > 1.0
{
ResultB=PositionCloseOne(Pos_Tick, //Ticket
5); //Slip
}}//if((Pos_Type==OP_BUY)&&((iType==OP_ALL)||(iType==OP_BUY)))
}}//for(i=PositionsTotal()-1;i>=0;i--)
}}//if(PositionsTotal()>0)
if(PrintInfo)Print("LCL: выполнена команда 3>>"+" Close Buy PROFIT"+" gTick="+IntegerToString(gTick));
break;
}
case(4)://Close Sell Profit
{
{if(PositionsTotal()>0)//Если есть открытые ордера
{
{for(int j=PositionsTotal()-1;j>=0;j--)//Перебираем от конца к началу
{
ulong Pos_Tick=PositionGetTicket(j);//Выбор по номеру
{if(Pos_Tick<=0){continue;}}//Неудачно - следующий
{if(!PositionSelectByTicket(Pos_Tick)){continue;}}//Выбор по тикету, неудачно - следующий
{if(PositionGetString(POSITION_SYMBOL)!=TheSymbol){continue;}}//Отбор по инструменту
//{if(PositionGetInteger(POSITION_MAGIC)!=iMagic){continue;}}//Отбор по магику
double Pos_Profit=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
ENUM_POSITION_TYPE Pos_Type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
{if((Pos_Type==POSITION_TYPE_SELL)&&(Pos_Profit>MinProfit))//Нашли селл
{
ResultB=PositionCloseOne(Pos_Tick, //Ticket
5); //Slip
}}//if((Pos_Type==OP_SELL)&&((iType==OP_ALL)||(iType==OP_SELL)))
}}//for(i=PositionsTotal()-1;i>=0;i--)
}}//if(PositionsTotal()>0)
if(PrintInfo)Print("LCL: выполнена команда 4>>"+" Close Sell PROFIT"+" gTick="+IntegerToString(gTick));
break;
}
case(5)://Close Buy Loss - ищем ордер с максимальным убытком и закрываем
{
{if(PositionsTotal()>0)//Если есть открытые ордера
{
double MaxLoss=0.0;
ulong MaxLoss_Pos_Tick=0;
{for(int j=PositionsTotal()-1;j>=0;j--)//Перебираем от конца к началу
{
ulong Pos_Tick=PositionGetTicket(j);//Выбор по номеру
{if(Pos_Tick<=0){continue;}}//Неудачно - следующий
{if(!PositionSelectByTicket(Pos_Tick)){continue;}}//Выбор по тикету, неудачно - следующий
{if(PositionGetString(POSITION_SYMBOL)!=TheSymbol){continue;}}//Отбор по инструменту
//{if(PositionGetInteger(POSITION_MAGIC)!=iMagic){continue;}}//Отбор по магику
double Pos_Profit=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
ENUM_POSITION_TYPE Pos_Type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
{if((Pos_Type==POSITION_TYPE_BUY)&&(Pos_Profit<MaxLoss))//Нашли бай
{
MaxLoss=Pos_Profit;
MaxLoss_Pos_Tick=Pos_Tick;
}}//if((Pos_Type==POSITION_TYPE_BUY)&&(Pos_Profit<MaxLoss))
}}//for(i=PositionsTotal()-1;i>=0;i--)
{if((PositionSelectByTicket(MaxLoss_Pos_Tick))&&(MaxLoss<-MinLoss))
{
ResultB=PositionCloseOne(MaxLoss_Pos_Tick, //Ticket
5); //Slip
}}//Выбор по тикету
}}//if(PositionsTotal()>0)
if(PrintInfo)Print("LCL: выполнена команда 5>>"+" Close Buy LOSS"+" gTick="+IntegerToString(gTick));
break;
}
case(6)://Close Sell Loss - ищем ордер с максимальным убытком и закрываем
{
{if(PositionsTotal()>0)//Если есть открытые ордера
{
double MaxLoss=0.0;
ulong MaxLoss_Pos_Tick=0;
{for(int j=PositionsTotal()-1;j>=0;j--)//Перебираем от конца к началу
{
ulong Pos_Tick=PositionGetTicket(j);//Выбор по номеру
{if(Pos_Tick<=0){continue;}}//Неудачно - следующий
{if(!PositionSelectByTicket(Pos_Tick)){continue;}}//Выбор по тикету, неудачно - следующий
{if(PositionGetString(POSITION_SYMBOL)!=TheSymbol){continue;}}//Отбор по инструменту
//{if(PositionGetInteger(POSITION_MAGIC)!=iMagic){continue;}}//Отбор по магику
double Pos_Profit=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
ENUM_POSITION_TYPE Pos_Type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
{if((Pos_Type==POSITION_TYPE_SELL)&&(Pos_Profit<MaxLoss))//Нашли бай
{
MaxLoss=Pos_Profit;
MaxLoss_Pos_Tick=Pos_Tick;
}}//if((Pos_Type==POSITION_TYPE_BUY)&&(Pos_Profit<MaxLoss))
}}//for(i=PositionsTotal()-1;i>=0;i--)
{if((PositionSelectByTicket(MaxLoss_Pos_Tick))&&(MaxLoss<-MinLoss))
{
ResultB=PositionCloseOne(MaxLoss_Pos_Tick, //Ticket
5); //Slip
}}//Выбор по тикету
}}//if(PositionsTotal()>0)
if(PrintInfo)Print("LCL: выполнена команда 6>>"+" Close Sell LOSS"+" gTick="+IntegerToString(gTick));
break;
}
default:
{
break;
}
}}//
ReadyExp[i]=1; //Устанавливаем для советника внутренний флаг завершения команды N: ReadyExp_N=1
RunCommand[i]=false;
}}//if(RunCommand[i])
}}//for(int i=1;i<=6;i++)
//-----
//Print("gTick=",gTick);
//Comment("gTick=",gTick);
//-----
return;
}//On_Tick()
//
//============================================================================================= MQL5 ===
// On_Timer - Обработка событий по таймеру
//------------------------------------------------------------------------------------------------------
void On_Timer(){
//-----
//gnTimer++;
//{if(gnTimer>4294967000)
//{
// gnTimer=100;
//}}//if(gnTimer>4294967000)
//gInTimer=true;
On_Tick();
}//On_Timer()
//
//============================================================================================= 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==Command_CloseLoss)
return(0);//нет команды
}//CheckCloseCondition()
//
//-----
////{if(GlobalSetDouble("tst_01",TimeSet,999.999))
////{
//// Print("TimeSet1=",TimeSet);
// {if(GlobalGetDouble("LIP_"+TheSymbol+"_Ask",DateSet))
// {
// //Print("LIP_"+TheSymbol+"_Ask=",DateSet);
// }}//if(GlobalGetDouble("tst_01",DateSet))
// {if(GlobalGetDouble("LIP_"+TheSymbol+"_Bid",DateSet))
// {
// //Print("LIP_"+TheSymbol+"_Bid=",DateSet);
// }}//if(GlobalGetDouble("tst_01",DateSet))
////}}//if(GlobalSetDouble("tst_01",999.999,TimeSet))
//-----
//string StringSet="";
////{if(GlobalSetString("tst_02",TimeSet,"EURUSD.z"))
////{
//// Print("TimeSet2=",TimeSet);
// {if(GlobalGetString("LIP_"+TheSymbol+"_Symbol",StringSet))
// {
// //Print("LIP_"+TheSymbol+"_Symbol=",StringSet);
// }}//if(GlobalGetString("tst_02",StringSet))
////}}//if(GlobalSetString("tst_02",TimeSet,"EURUSD.z"))