При присоединении к графику пишет 2016.02.11 00:21:02.663 'MoyforNeuro' is not expert and cannot be executed, компилятор ошибок не выдает, раньше все работало отлично, но после выхода новых билдов проблема! Подскажите пожалуйста что с ним не так, вот сам эксперт
//+------------------------------------------------------------------+//| Excel_Neuro.mq4 |//| Copyright 2016, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property strictinputstring FileName = "OrderEU.txt"; //- Имя файла в каталоге TerminalPath()+"\experts\files",// с которого будут считываться данные о изменениях в ордерах.inputint MagicStart = 99; //- Эксперт удаляет только ордера, магики которыхinputint MagicEnd = 999; // входят в указанный здесь интервалinputint Sensitivity = 30; //- Чувствительность сигнала в пунктах.//extern double NewRisk = 1.0; //- Коэффициент изменения риска//extern bool LittleLots = true; //- Если true, то при лоте меньше минимальнодопустимого на этом счёте, будет открыт минимальный лотinputint Stoploss = 30;
inputint SP = 30; //- SleepPage - предельное отклонение от цены//--------------------------------------------------------------------------externdouble Time_shift=15;
//---------------------------------------------------------------------------int OCount=0;
int OMagic[1000];
string OSymbol[1000];
double OType[1000];
double ORisk[1000];
double OOP[1000];
double OSL[1000];
double OTP[1000];
//---------------------------------------------------------------------------int start() {
//-----------------------------------------------------------------------------------int magic=0;
int _GetLastError = 0, _OrdersTotal = OrdersTotal();
//bool ALLRIGHT=true;if(!FileExist(FileName)) return(0);
FileLoad(FileName);
//Удаляем старыеif(CloseAllBeingAbsentPozitions()<0) return(0);
//Корректируем существующиеfor(int i=0; i<OCount; i++) {
magic=OrderExist("",OMagic[i]);
if(magic>0){
if(OrderMagicNumber()==OMagic[i]){
Print("Ордер с таким магиком уже существует");
FileDelete(FileName);}
}
else
{
//Обрабатываем существующиеfor(int q=0; q<=OrdersTotal(); q++) {
if(OrderSelect(q,SELECT_BY_POS, MODE_TRADES)){
Print("Выбрал ордер ", OrderMagicNumber(),"Всего ордеров ",OrdersTotal());
if(OrderType()==OType[i]){
Print("Ордер по типу соответствует последнему сигналу");
MODIFY(OSymbol[i], magic, OSL[i], OTP[i]);
}
elseif(OrderType()!=OType[i]){
Print("Удалим ордера другого типа");
//if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);return(0);}//if(OrderType()==OP_SELL){ OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);return(0);}
}
}
}
//Открываем новые позиции if(OType[i]==OP_BUY) {
if(MathAbs(MarketInfo(OSymbol[i],MODE_ASK)-OOP[i])<Sensitivity*MarketInfo(OSymbol[i],MODE_POINT)) {
BUY(OSymbol[i],ORisk[i], OSL[i], OTP[i], OMagic[i]);
Print("Удалим файл после открытия БАЙ ордера");
FileDelete(FileName);
}
}
elseif(OType[i]==OP_SELL) {
if(MathAbs(MarketInfo(OSymbol[i],MODE_BID)-OOP[i])<Sensitivity*MarketInfo(OSymbol[i],MODE_POINT)) {
SELL(OSymbol[i],ORisk[i], OSL[i], OTP[i], OMagic[i]);
Print("Удалим файл после открытия СЕЛЛ ордера");
FileDelete(FileName);
}
}
}
}//Next ireturn(0);
} //start()//---------------------------------------------------------------------------bool FileExist(string file) {
int handle=FileOpen(file,FILE_BIN);
if(handle<0) {
return(false);
} else {
FileClose(handle);
return(true);
}
}//FileExist()//---------------------------------------------------------------------------int FileLoad(string file) {
int i=0, j=0; double k=0;
string buffer[1000];
int handle=FileOpen(file,FILE_BIN);
if(handle<0) {
return(-1);
} else {
k=FileReadArray(handle,buffer,0,1000);
FileClose(handle);
//OCount=0;//while(!StringTrimRight(StringTrimLeft(buffer[OCount]))=="") {for(OCount=0; OCount<k; OCount++) {
i = StringFind(buffer[OCount]," ",0);
ORisk[OCount]=StrToDouble(StringSubstr(buffer[OCount], 0,i));
j=i+1;
i = StringFind(buffer[OCount]," ",j);
OMagic[OCount]=(int)StrToDouble(StringSubstr(buffer[OCount], j,i-j));
j=i+1;
i = StringFind(buffer[OCount]," ",j);
OSymbol[OCount]=StringSubstr(buffer[OCount], j,i-j);
j=i+1;
i = StringFind(buffer[OCount]," ",j);
OType[OCount]=StrToDouble(StringSubstr(buffer[OCount], j,i-j));
j=i+1;
i = StringFind(buffer[OCount]," ",j);
OOP[OCount]=StrToDouble(StringSubstr(buffer[OCount], j,i-j));
j=i+1;
i = StringFind(buffer[OCount]," ",j);
OSL[OCount]=StrToDouble(StringSubstr(buffer[OCount], j,i-j));
j=i+1;
OTP[OCount]=StrToDouble(StringSubstr(buffer[OCount], j,0));
//OCount++;
}//Next OCount
}
return(-1);
}//FileLoad()//+------------------------------------------------------------------+int OrderExist(string fSymbol="", int fMagic=0, int fType=-1) {
int total = OrdersTotal();
for (int i = total-1; i >= 0; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol()==fSymbol || fSymbol=="") {
if(OrderMagicNumber()==fMagic || fMagic==0) {
if(OrderType()==fType||fType==-1) {
return(OrderTicket());
}
}
} // Если свой
} // Next ireturn(-1);
}//OrderExist()//+------------------------------------------------------------------+int CloseAllBeingAbsentPozitions() {
int Cur_Hour=Hour(); // Серверное время в часах//double Cur_Min =Minute(); // Серверное время в минутах//double Cur_time=Cur_Hour; //+ Cur_Min/100; // Текущее времяint LE;
int y,x=100;
double PriceClose=0,z=0;
bool Del;
int total = OrdersTotal();
for (int i = total-1; i >= 0; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
while(x<124){
x++;
y=24;
if(x-101+Time_shift-y<0){
y=0;
}
else {
y=24;}
z=x-101+Time_shift-y;
Print("Закрываем ордера, Номер магика X= ",x-1," Выбрал ордер с магиком ",OrderMagicNumber()," Время закрытия ",z);
if(OrderMagicNumber()==x&&Cur_Hour==z) continue;
Del=true;
}
for(int j=0; j<OCount; j++) {
if(OrderMagicNumber()==OMagic[j]) {
Del=false;
break;
}
}
if(Del) {
if(OrderType()>1&&OrderType()<6)
if(OrderDelete(OrderTicket())==true)
Print("Ордер удален");
else {
LE=135;
while(LE>134 && LE<139) {
if(OrderType()==OP_BUY) {
PriceClose=MarketInfo(OrderSymbol(),MODE_BID);
} elseif(OrderType()==OP_SELL) {
PriceClose=MarketInfo(OrderSymbol(),MODE_ASK);
}
if(OrderClose(OrderTicket(),OrderLots(),PriceClose,SP))
LE = GetLastError();
if(LE>0) Print("СтаФФка не закрывается по причине ашипки № ",LE);
}
if(LE>0) return(-1);
}
}
}
} // Next ireturn(0);
}//CloseAllPozitions()//+------------------------------------------------------------------+int MODIFY(string mySymbol, int magic, double sl = 0, double tp = 0) {
double stoplimit=MarketInfo(mySymbol, MODE_STOPLEVEL)*MarketInfo(mySymbol,MODE_POINT);
Print("Пытаемся модифицировать",OrderMagicNumber());
//for(int i=0; i<OCount; i++) {//for (magic=100; magic <= 123; magic++) {//if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
magic=OrderMagicNumber();
if(OrderSelect(magic, SELECT_BY_TICKET)) {
double SLo=OrderStopLoss();
double TPo=OrderTakeProfit();
//sl=NormalizeDouble(sl,MarketInfo(mySymbol,MODE_DIGITS));//tp=NormalizeDouble(tp,MarketInfo(mySymbol,MODE_DIGITS));if(OrderType()==OP_BUY) {
Print("Проверяем, является ли ордером БАЙ , тип ордера ",OrderType());
if(NormalizeDouble(sl,Digits)>NormalizeDouble(SLo,Digits)) {
sl=NormalizeDouble(sl,(int)MarketInfo(mySymbol,MODE_DIGITS));
}
else {
sl=NormalizeDouble(SLo,(int)MarketInfo(mySymbol,MODE_DIGITS));
}
if(NormalizeDouble(tp,Digits)<NormalizeDouble(TPo,Digits)) {
tp=NormalizeDouble(tp,(int)MarketInfo(mySymbol,MODE_DIGITS));
}
else {
tp=NormalizeDouble(TPo,(int)MarketInfo(mySymbol,MODE_DIGITS));
}
if(sl>0) {
Print("Проверяем, есть ли у ордера с/л ",OrderStopLoss());
if(MarketInfo(mySymbol,MODE_BID)-sl<stoplimit) {
Print("Слишком близкий стоп (",(MarketInfo(mySymbol,MODE_BID)-sl)/MarketInfo(mySymbol,MODE_POINT)," пунктов). Требуется не менее: ", stoplimit/MarketInfo(mySymbol,MODE_POINT));
return(-1);
}
}
if(tp>0) {
Print("Проверяем, есть ли у ордера т/п ",OrderTakeProfit());
if(tp-MarketInfo(mySymbol,MODE_ASK)<stoplimit) {
Print("Слишком близкий профит (",(tp-MarketInfo(mySymbol,MODE_ASK))/MarketInfo(mySymbol,MODE_POINT)," пунктов). Требуется не менее: ", stoplimit/MarketInfo(mySymbol,MODE_POINT));
return(-1);
}
}
} elseif(OrderType()==OP_SELL) {
Print("Проверяем, является ли ордером СЕЛЛ , тип ордера ",OrderType());
if(NormalizeDouble(sl,Digits)<NormalizeDouble(SLo,Digits)) {
sl=NormalizeDouble(sl,(int)MarketInfo(mySymbol,MODE_DIGITS));
}
else {
sl=NormalizeDouble(SLo,(int)MarketInfo(mySymbol,MODE_DIGITS));
}
if(NormalizeDouble(tp,Digits)>NormalizeDouble(TPo,Digits)) {
tp=NormalizeDouble(tp,(int)MarketInfo(mySymbol,MODE_DIGITS));
}
else {
tp=NormalizeDouble(TPo,(int)MarketInfo(mySymbol,MODE_DIGITS));
}
if(sl>0) {
if(sl-MarketInfo(mySymbol,MODE_ASK)<stoplimit) {
Print("Слишком близкий стоп (",(sl-MarketInfo(mySymbol,MODE_ASK))/MarketInfo(mySymbol,MODE_POINT)," пунктов). Требуется не менее: ", stoplimit/MarketInfo(mySymbol,MODE_POINT));
return(-1);
}
}
if(tp>0) {
if(MarketInfo(mySymbol,MODE_BID)-tp<stoplimit) {
Print("Слишком близкий профит (",(MarketInfo(mySymbol,MODE_BID)-tp)/MarketInfo(mySymbol,MODE_POINT)," пунктов). Требуется не менее: ", stoplimit/MarketInfo(mySymbol,MODE_POINT));
return(-1);
}
}
}
if(DoubleToStr(OrderStopLoss(),(int)MarketInfo(mySymbol,MODE_DIGITS))==DoubleToStr(sl,(int)MarketInfo(mySymbol,MODE_DIGITS)) &&
DoubleToStr(OrderTakeProfit(),(int)MarketInfo(mySymbol,MODE_DIGITS))==DoubleToStr(tp,(int)MarketInfo(mySymbol,MODE_DIGITS))) return(0);
if(OrderModify(magic,OrderOpenPrice(), sl, tp, 0)==FALSE) {
Print("Ошибка OrderModify(): ",GetLastError());
return(-1);
}
}
return(0);
}//Modify()//+------------------------------------------------------------------+int BUY(string mySymbol="", double lt=0, double sl=0, double tp=0, int mn=0) {
if(mySymbol=="") mySymbol=Symbol();
double stoplimit=MarketInfo(mySymbol, MODE_STOPLEVEL)*MarketInfo(mySymbol,MODE_POINT);
int magic = -1; //покупаем по цене Askint LE=135;
mn=(int)NormalizeDouble(mn,(int)MarketInfo(mySymbol,MODE_DIGITS));
if(lt<MarketInfo(mySymbol, MODE_MINLOT)) return(0);
if(lt>MarketInfo(mySymbol, MODE_MAXLOT)) lt=MarketInfo(mySymbol, MODE_MAXLOT);
if(lt>AccountFreeMargin()*0.90/MarketInfo(mySymbol,MODE_MARGINREQUIRED)) lt=AccountFreeMargin()*0.90/MarketInfo(mySymbol,MODE_MARGINREQUIRED);
lt = NormalizeDouble(lt, (int)MathAbs(MathLog(MarketInfo(mySymbol, MODE_LOTSTEP))/MathLog(10.0)));
if(sl>0) {
sl=NormalizeDouble(sl,(int)MarketInfo(mySymbol,MODE_DIGITS));
if(MarketInfo(mySymbol,MODE_BID)-sl<stoplimit) sl=MarketInfo(mySymbol,MODE_BID)-stoplimit;
}
if(tp>0) {
tp=NormalizeDouble(tp,(int)MarketInfo(mySymbol,MODE_DIGITS));
if(tp-MarketInfo(mySymbol,MODE_ASK)<stoplimit) tp=MarketInfo(mySymbol,MODE_ASK)+stoplimit;
}
while(LE>134 && LE<139) {
magic = OrderSend(mySymbol, OP_BUY, lt, MarketInfo(mySymbol,MODE_ASK), SP, sl, tp, WindowExpertName(), mn, 0, Blue);
LE = GetLastError();
Sleep(2000);
RefreshRates();
}
if (magic > 0) Sleep(10000);
return(magic);
}//BUY()//+------------------------------------------------------------------+int SELL(string mySymbol="", double lt=0, double sl=0, double tp=0, double mn=0) {
if(mySymbol=="") mySymbol=Symbol();
double stoplimit=MarketInfo(mySymbol, MODE_STOPLEVEL)*MarketInfo(mySymbol,MODE_POINT);
int magic = -1; //продаём по цене Bidint LE=135;
mn=NormalizeDouble(mn,(int)MarketInfo(mySymbol,MODE_DIGITS));
if(lt<MarketInfo(mySymbol, MODE_MINLOT)) return(0);
if(lt>MarketInfo(mySymbol, MODE_MAXLOT)) lt=MarketInfo(mySymbol, MODE_MAXLOT);
if(lt>AccountFreeMargin()*0.90/MarketInfo(mySymbol,MODE_MARGINREQUIRED)) lt=AccountFreeMargin()*0.90/MarketInfo(mySymbol,MODE_MARGINREQUIRED);
lt = NormalizeDouble(lt, (int)MathAbs(MathLog(MarketInfo(mySymbol, MODE_LOTSTEP))/MathLog(10.0)));
if(sl>0) {
sl=NormalizeDouble(sl,(int)MarketInfo(mySymbol,MODE_DIGITS));
if(sl-MarketInfo(mySymbol,MODE_ASK)<stoplimit) sl=MarketInfo(mySymbol,MODE_ASK)+stoplimit;
}
if(tp>0) {
tp=NormalizeDouble(tp,(int)MarketInfo(mySymbol,MODE_DIGITS));
if(MarketInfo(mySymbol,MODE_BID)-tp<stoplimit) tp=MarketInfo(mySymbol,MODE_BID)-stoplimit;
}
while(LE>134 && LE<139) {
magic = OrderSend(mySymbol, OP_SELL, lt, MarketInfo(mySymbol,MODE_BID), SP, sl, tp, WindowExpertName(), (int)mn, 0, Red);
LE = GetLastError();
Sleep(2000);
RefreshRates();
}
if (magic > 0) Sleep(10000);
return(magic);
}//SELL()//+------------------------------------------------------------------+
При присоединении к графику пишет 2016.02.11 00:21:02.663 'MoyforNeuro' is not expert and cannot be executed, компилятор ошибок не выдает, раньше все работало отлично, но после выхода новых билдов проблема! Подскажите пожалуйста что с ним не так, вот сам эксперт
...
Попробуй или в скрипты засунуть или int Start() поменять на void OnTick()
Один из пользователей моих программ прислал скриншот с проблемой запуска программы в тестере
Что это может быть и что делать дальше ?
Один из пользователей моих программ прислал скриншот с проблемой запуска программы в тестере
Что это может быть и что делать дальше ?
Один из пользователей моих программ прислал скриншот с проблемой запуска программы в тестере
Что это может быть и что делать дальше ?
Хочу удостовериться, функции iHigh(....) /iLow(...) возвращают Bid-овое значение?
Да. График же построен по ценам bid.
Ну ну:))))
При присоединении к графику пишет 2016.02.11 00:21:02.663 'MoyforNeuro' is not expert and cannot be executed, компилятор ошибок не выдает, раньше все работало отлично, но после выхода новых билдов проблема! Подскажите пожалуйста что с ним не так, вот сам эксперт
Ну ну:))))
При присоединении к графику пишет 2016.02.11 00:21:02.663 'MoyforNeuro' is not expert and cannot be executed, компилятор ошибок не выдает, раньше все работало отлично, но после выхода новых билдов проблема! Подскажите пожалуйста что с ним не так, вот сам эксперт
...
Попробуй или в скрипты засунуть или int Start() поменять на void OnTick()