Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 300
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
но ничего не изменилось.
как ошибка,так и предупреждение остались.
Вы дайте ВЕСЬ код, а не кусочек. Что, все гадать должны? Тогда тут спросите - тут всё сразу все знают обо всём.
привожу ВЕСЬ код.
привожу ВЕСЬ код.
Он просто огромен...
Весь код
"
#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()*/
"
//--------------------------------------------------------------------------------------------------------------------
//*******************************************************************************************
"
Init никак нельзя запускать, он автоматически запускается один раз при запуске индикатора/эксперта как и DeInit.
Как вариант, можно сделать статическую булевую переменную и использовать совместно с IsConnected(). И при восстановлении связи с приходом нового тика запускать сначала какую-то собственную функцию инициализации. Правда IsConnected() нужно будет применять не в OnCalculate(), а в OnTimer(), а свою функцию инициализации в самом начале OnCalculate().
Спасибо буду думать, просто я думал что уже есть типовые решения......
Весь код
Спасибо буду думать, просто я думал что уже есть типовые решения......
Я уже писал опровержение слов данного человека. OnItit() - обычная функция. Запускайте её когда нужно.
Весь код
Ну я же говорил уже - прикрепляйте код при помощи кнопки SRC. Извините, вы совсем необучаемый ?
Скажите, кому захочется глядеть на эту портянку?
Я уже писал опровержение слов данного человека. OnItit() - обычная функция. Запускайте её когда нужно.
Ну кстати да, я и подумал почемубы её не вызвать при конекте. Оказывается можно :-)
Весь код
Следите за типами переменных.
Выкиньте все лишние Алерты