//============================================================================================= 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]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]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])&&(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]aL3)&&(m_adxw[0]