Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 300

 
buyanov:

но ничего не изменилось.

как ошибка,так и предупреждение остались.

Вы дайте ВЕСЬ код, а не кусочек. Что, все гадать должны? Тогда тут спросите - тут всё сразу все знают обо всём.

 

привожу ВЕСЬ код.

Automated Trading and Strategy Testing
Automated Trading and Strategy Testing
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 
buyanov:

привожу ВЕСЬ код.

Он просто огромен...

 

Весь код

"

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#property version   "Cross20170703 1.00"


//=========================================================================

extern int  Period_FastMA=4;

extern int  Period_SlowMA=8;


extern int MaxTickNum=30;

extern int MaxAttempt=10;

extern int k_slippage=1;


extern double k_SL=10.0;//*Point()

extern double k_TP=30.0;//*Point()


extern double TrailDist=30.0;//*Point()

extern double k_lots=0.3;

extern bool ExFin=false;



int//*************************************************************************************


res,

Count,

i,

NextTick=0,

BegTime,

FinTime,

BegMlSecTime,

EndMlSecTime,

DeltaTime,

Attempt,

slippage=5,

TickNum=0,

pos,

ticket,

MaxInterval1000,

CrossNum=0,

comis=4,

att,

attempt,



err;



double //****************************************************************************


Total,

lots,

Spread,


FastMA,

SlowMA,


Delta,


LastDelta,

PrevDelta,


Comis=0.00004,

OpenPrice,

ClosePrice,

SL,

TP,


Profit,

PROFIT;


bool//***********************************************************************************************


FirstCross=false,

NextCross=false,

CurType,

success=true,

Enable=true,


BegUp,

BegDn,

BuyOpened=false,

SellOpened=false;


string//***********************************************************************************************


rec,

str,

record,

BegTimeCurrent,

EndTimeCurrent,

CurTime,

StrCur,

StringBeg,

StringEnd;

//********************************************************************************************************


//=================================================================================================================================

//==================================================================================================================================

//==================================================================================================================================




//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//----------------------------------------------------------------------------------------------------------------------------


//=============================================================================================================================


 int OnDeinit(const int res)

 

 {

   Alert("beg OnDeinit()");

  err=StringToInteger((string)err); 

   return(res);   

   Alert("end OnDeinit()");

 }

   //OnDeinit();-----------

//--------------------------------------------------------------------------------------------------------------------------


   



//==============================================================================================================================   

   void ExpertStop() 

  {

    Alert( "ExpertStop");

    

   if((ExFin==true)&&(TickNum==MaxTickNum))

    {  

        ExpertRemove();

        OnDeinit(res);

    }  

  } //end ExpertStop


//---------------------------------------------------------------------------------------------------------------------------



//==========================================================================================================================

   

int ErrorDescription()

  { 

 Alert("beg ErrorDescription");

  

   switch(err)

   {          case 0:   err="Нет ошибок";                                                     break;

      case 1:   err="Нет ошибки, но результат неизвестен";                            break;

      case 2:   err="Общая ошибка";                                                   break;

      case 3:   err="Неправильные параметры";                                         break;

      case 4:   err="Торговый сервер занят";                                          break;

      case 5:   err="Старая версия клиентского терминала";                            break;

      case 6:   err="Нет связи с торговым сервером";                                  break;

      case 7:   err="Недостаточно прав";                                              break;

      case 8:   err="Слишком частые запросы";                                         break;

      case 9:   err="Недопустимая операция нарушающая функционирование сервера";      break;

      case 64:  err="Счет заблокирован";                                              break;

      case 65:  err="Неправильный номер счета";                                       break;

      case 128: err="Истек срок ожидания совершения сделки";                          break;

      case 129: err="Неправильная цена";                                              break;

      case 130: err="Неправильные стопы";                                             break;

      case 131: err="Неправильный объем";                                             break;

      case 132: err="Рынок закрыт";                                                   break;

      case 133: err="Торговля запрещена";                                             break;  

      case 134: err="Недостаточно денег для совершения операции";                     break;

      case 135: err="Цена изменилась";                                                break;

      case 136: err="Нет цен";                                                        break;

      case 137: err="Брокер занят";                                                   break;

      case 138: err="Новые цены";                                                     break;

      case 139: err="Ордер заблокирован и уже обрабатывается";                        break;

      case 140: err="Разрешена только покупка";                                       break;

      case 141: err="Слишком много запросов";                                         break;

      case 145: err="Модификация запрещена, так как ордер слишком близок к рынку";    break;

      case 146: err="Подсистема торговли занята";                                     break;

      case 147: err="Использование даты истечения ордера запрещено брокером";         break;

      case 148: err="Количество открытых и отложенных ордеров достигло предела, установленного брокером.";break;

      //

      case 4000: err="Нет ошибки";                                                      break;

      case 4001: err="Неправильный указатель функции";                                  break;

      case 4002: err="Индекс массива - вне диапазона";                                  break;

      case 4003: err="Нет памяти для стека функций";                                    break;

      case 4004: err="Переполнение стека после рекурсивного вызова";                    break;

      case 4005: err="На стеке нет памяти для передачи параметров";                     break;

      case 4006: err="Нет памяти для строкового параметра";                             break;

      case 4007: err="Нет памяти для временной строки";                                 break;

      case 4008: err="Неинициализированная строка";                                     break;

      case 4009: err="Неинициализированная строка в массиве";                           break;

      case 4010: err="Нет памяти для строкового массива";                               break;

      case 4011: err="Слишком длинная строка";                                          break;

      case 4012: err="Остаток от деления на ноль";                                      break;

      case 4013: err="Деление на ноль";                                                 break;

      case 4014: err="Неизвестная команда";                                             break;

      case 4015: err="Неправильный переход";                                            break;

      case 4016: err="Неинициализированный массив";                                     break;

      case 4017: err="Вызовы DLL не разрешены";                                         break;

      case 4018: err="Невозможно загрузить библиотеку";                                 break;

      case 4019: err="Невозможно вызвать функцию";                                      break;

      case 4020: err="Вызовы внешних библиотечных функций не разрешены";                break;

      case 4021: err="Недостаточно памяти для строки, возвращаемой из функции";         break;

      case 4022: err="Система занята";                                                  break;

      case 4050: err="Неправильное количество параметров функции";                      break;

      case 4051: err="Недопустимое значение параметра функции";                         break;

      case 4052: err="Внутренняя ошибка строковой функции";                             break;

      case 4053: err="Ошибка массива";                                                  break;

      case 4054: err="Неправильное использование массива-таймсерии";                    break;

      case 4055: err="Ошибка пользовательского индикатора";                             break;

      case 4056: err="Массивы несовместимы";                                            break;

      case 4057: err="Ошибка обработки глобальныех переменных";                         break;

      case 4058: err="Глобальная переменная не обнаружена";                             break;

      case 4059: err="Функция не разрешена в тестовом режиме";                          break;

      case 4060: err="Функция не разрешена";                                            break;

      case 4061: err="Ошибка отправки почты";                                           break;

      case 4062: err="Ожидается параметр типа string";                                  break;

      case 4063: err="Ожидается параметр типа integer";                                 break;

      case 4064: err="Ожидается параметр типа double";                                  break;

      case 4065: err="В качестве параметра ожидается массив";                           break;

      case 4066: err="Запрошенные исторические данные в состоянии обновления";          break;

      case 4067: err="Ошибка при выполнении торговой операции";                         break;

      case 4099: err="Конец файла";                                                     break;

      case 4100: err="Ошибка при работе с файлом";                                      break;

      case 4101: err="Неправильное имя файла";                                          break;

      case 4102: err="Слишком много открытых файлов";                                   break;

      case 4103: err="Невозможно открыть файл";                                         break;

      case 4104: err="Несовместимый режим доступа к файлу";                             break;

      case 4105: err="Ни один ордер не выбран";                                         break;

      case 4106: err="Неизвестный символ";                                              break;

      case 4107: err="Неправильный параметр цены для торговой функции";                 break;

      case 4108: err="Неверный номер тикета";                                           break;

      case 4109: err="Торговля не разрешена. Необходимо включить опцию Разрешить советнику торговать в свойствах эксперта.";            break;

      case 4110: err="Длинные позиции не разрешены. Необходимо проверить свойства эксперта.";           break;

      case 4111: err="Короткие позиции не разрешены. Необходимо проверить свойства эксперта.";          break;

      case 4200: err="Объект уже существует";                                           break;

      case 4201: err="Запрошено неизвестное свойство объекта";                          break;

      case 4202: err="Объект не существует";                                            break;

      case 4203: err="Неизвестный тип объекта";                                         break;

      case 4204: err="Нет имени объекта";                                               break;

      case 4205: err="Ошибка координат объекта";                                        break;

      case 4206: err="Не найдено указанное подокно";                                    break;

      default:   err="Ошибка при работе с объектом";

    } 

  Alert("end ErrorDescription");   

   return(err);

   

  }//End ErrorDescription()

//---------------------------------------------------------------------------------------------------------------------------


//===========================================================================================================================

int GetNext(NextTick)

//>>>>>>>>>>>>>>>>>>>>>>

{

Alert("beg GetNext(NextTick)");

Alert(NextTick);

while(RefreshRates()==false)Count++;

Alert("Count=",Count,"NextTick=",NextTick);

Alert(" ");

Alert(RefreshRates(),Count,NextTick);

return(NextTick);

Alert(NextTick);

//-------------------

Alert("end GetNext(NextTick)");

}

//end GetNext(NextTick)

//===========================================================================================================================


//---------------------------------------------------------------------------------------------------------------------------

  

  void OnTick()

 { 

 //********************************* 

  Alert("beg OnTick");

//***********************************

 

   FastMA=NormalizeDouble(iMA(NULL,0,Period_FastMA,0,MODE_SMA,PRICE_CLOSE,1),Digits());//Period_FastMA=4

   SlowMA=NormalizeDouble(iMA(NULL,0,Period_SlowMA,0,MODE_SMA,PRICE_CLOSE,1),Digits());//Period_SlowMA=8

   

   

   GetNext(NextTick);

   

   Alert("NextTick=",NextTick);

   

   Delta=NormalizeDouble(FastMA-SlowMA,Digits()); Alert("beg OnTick");

   

   Alert(Delta,Digits());

   Alert("FastMA=",DoubleToStr(FastMA ,Digits()),"SlowMA=",DoubleToStr(SlowMA,Digits()), "Delta=",DoubleToStr(Delta,Digits()));

   Alert("end OnTick"); 

  //----------------------------------------------------------------------------------------------------------------------------  

  }// end (end OnTick)

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<        

//-----------------------------------------------------------------------------------------------------------------------------



//=============================================================================================================================



void Init()

  {

   Alert(" ");

   Alert("beg Init()");

   Alert(" ");



   StringBeg=StringConcatenate("TimeToStr(TIME_DATE,TIME_SECONDS)=",TimeToStr(TIME_DATE,TIME_SECONDS));

   Alert(StringBeg);


   record=StringConcatenate("MaxTickNum=",MaxTickNum);

   Alert(record);


   record=StringConcatenate("k_SL=",DoubleToStr(k_SL,Digits()));

   Alert(record);


   record=StringConcatenate("k_TP=",DoubleToStr(k_TP,Digits()));

   Alert(record);


   record=StringConcatenate("k_lots=",DoubleToStr(k_lots,Digits()));

   Alert(record);


   Alert("end Init()");


  }//end Init()

//---------------------------------------------------------------------------------------------------------------------------




//=======================================================================================================================

int GetTick(NextTick)


  { 


Alert("beg GetTick");


while (RefreshRates()==false)

NextTick++;

Alert("NextTick=",NextTick);


OrderSelect(NextTick,SELECT_BY_TICKET);


Profit=OrderProfit();


Alert(DoubleToStr(Profit,Digits));


GetNext(NextTick);


Alert("end GetTick");

  }

//--------------------------------------------------------------------------------------------------------------------------------------------------------


//============================================================================================================================


int NextType()

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("beg NextType");


if(OrderSelect(NextTick,SELECT_BY_TICKET )==true)

{

OpenPrice=OrderOpenPrice();

ClosePrice=OrderClosePrice();

}


if(ClosePrice>OpenPrice)CurType=OP_BUY;


else CurType=OP_SELL;




return(CurType);

Alert("end CurType()");

//>>>>>>>>>>>>>>>>>>>>>>>>>

}//"end CurType()";


//------------------------------------------------------------------------------------------------------------------------------



//==============================================================================================================================


bool FastMACrossUp()

  {


 if(!(Delta==LastDelta))Alert("Delta=",DoubleToStr(Delta,5),"LastDelta=",DoubleToStr(LastDelta,5));


Alert("LastDelta=",DoubleToStr(LastDelta,5));

 Alert("!(Delta==LastDelta)=",!(Delta==LastDelta));

   if(((Delta!=LastDelta) && (Delta>=0) && (LastDelta<=0)))Alert("( Delta!=LastDelta)&&(Delta>=0)&&(LastDelta<=0)= ",

   (Delta!=LastDelta) && (Delta>=0) && (LastDelta<=0));

  Alert("(Delta>=0)=",(Delta>=0),"(LastDelta<=0)=",(LastDelta<=0));

  

  if(Delta!=LastDelta)Alert("Delta=",DoubleToStr(Delta,5)," LastDelta=",DoubleToStr(LastDelta,5));

  

Alert("(Delta>=0)=",(Delta>=0),"  ( LastDelta<=0)=",(LastDelta<=0),"   TickNum=",TickNum);

 Alert("(Delta>=0)=",(Delta>=0));

Alert("LastDelta<=",(LastDelta<=0));

  Alert("!(Delta==LastDelta)&&((Delta>=0)&&(LastDelta<=0))=",!(Delta==LastDelta)&&((Delta>=0)&&(LastDelta<=0)));

  Alert(((Delta!=LastDelta)&&((Delta>=0)&&(LastDelta<=0))));

  Alert(" (Delta!=LastDelta)= ",(Delta!=LastDelta)," (Delta>=0)= ",(Delta>=0)," (LastDelta<=0)= ",(LastDelta<=0));

  

   return((Delta!=LastDelta)&&(Delta>=0)&&(LastDelta<=0));

  } //end FastMACrossUp()

//----------------------------------------------------------------------------------------------------------------------



//======================================================================================================================

bool FastMACrossDn()

  {

 if(!(Delta==LastDelta)&&(Delta<=0)&&(LastDelta>=0))Alert("Delta=",DoubleToStr(Delta,5)," LastDelta=",DoubleToStr(LastDelta,5));


 Alert("LastDelta=",DoubleToStr(LastDelta,5));

 Alert("!(Delta==LastDelta)=",!(Delta==LastDelta));

 Alert("(Delta<=0)=",(Delta<=0));

  Alert("LastDelta>=0",(LastDelta>=0));

   if((Delta!=LastDelta) && (Delta<=0) && (LastDelta>=0))

   Alert("(Delta<=0)=",(Delta<=0),"(LastDelta>=0)=",(LastDelta>=0));

      Alert(" (Delta!=LastDelta)&&((Delta<=0)&&(LastDelta>=0))= ",(Delta!=LastDelta) && (Delta<=0) && (LastDelta>=0));

  if(Delta!=LastDelta)Alert(" Delta=",DoubleToStr(Delta,5)," LastDelta=",DoubleToStr(LastDelta,5));

  Alert("(Delta<=0)=",(Delta<=0),"  (LastDelta>=0)=",(LastDelta>=0),"   TickNum=",TickNum); 

  Alert(" (Delta!=LastDelta)&&(( Delta<=0)&&(LastDelta>=0))= ",(Delta!=LastDelta)&&((Delta<=0)&&(LastDelta>=0)));

  

   return((Delta!=LastDelta)&&(Delta<=0)&&(LastDelta>=0));

  }//end FastMACrossDn()

//----------------------------------------------------------------------------------------------------------------------------------------



//======================================================================================================================================

bool FastMAIsAbove()

  {

   Alert("beg FastMAIsAbove()");

  Alert(" (Delta>=0)=",(Delta>=0)," (LastDelta>=0)=",(LastDelta>=0));

   if(((Delta>=0)&&(LastDelta>=0)))

      Alert(" FastMA= ",DoubleToStr(FastMA,5)," SlowMA= ",DoubleToStr(SlowMA,5));

            Alert(" Delta= ",DoubleToStr(Delta,5)," LastDelta= ",DoubleToStr(LastDelta,5));

   Alert("end FastMAIsAbove()");

   Alert("(Delta==LastDelta)&&(Delta>=0)&&(LastDelta>=0)=",(Delta==LastDelta)&&(Delta>=0)&&(LastDelta>=0));

   Alert("end FastMAIsAbove()");

   return((Delta==LastDelta)&&(Delta>=0)&&(LastDelta>=0));

   

  }//end FastMAIsAbove()

//====================================================================================================================


//--------------------------------------------------------------------------------------------------------------------

bool FastMAIsBelow()

  {


   return((Delta==LastDelta)&&(Delta<=0)&&(LastDelta<=0));

  }//end FastMAIsBelow()*/

"

//--------------------------------------------------------------------------------------------------------------------

//*******************************************************************************************

"


 
Dmitriy Voevodkin:

Init никак нельзя запускать, он автоматически запускается один раз при запуске индикатора/эксперта как и DeInit.

Как вариант, можно сделать статическую булевую переменную и использовать совместно с IsConnected(). И при восстановлении связи с приходом нового тика запускать сначала какую-то собственную функцию инициализации. Правда IsConnected() нужно будет применять не в OnCalculate(), а в OnTimer(), а свою функцию инициализации в самом начале OnCalculate().


Спасибо буду думать, просто я думал что уже есть типовые решения......

 
buyanov:

Весь код

Ого, алертов скоко.
 
Mihail Marchukajtes:

Спасибо буду думать, просто я думал что уже есть типовые решения......

Я уже писал опровержение слов данного человека. OnItit() - обычная функция. Запускайте её когда нужно.

 
buyanov:

Весь код


Ну я же говорил уже - прикрепляйте код при помощи кнопки SRC. Извините, вы совсем необучаемый ?

Скажите, кому захочется глядеть на эту портянку?

 
Artyom Trishkin:

Я уже писал опровержение слов данного человека. OnItit() - обычная функция. Запускайте её когда нужно.


Ну кстати да, я и подумал почемубы её не вызвать при конекте. Оказывается можно :-)

 
buyanov:

Весь код


Следите за типами переменных.

Выкиньте все лишние Алерты

Файлы:
test.mq4  42 kb