666 lines
56 KiB
MQL5
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"))
|
|
|