Скачать MetaTrader 5

Код 2 общая ошибка

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Знаете ли вы, что в MQL5 появились классы?
demlin
155
demlin 2011.02.25 18:00 
Всем здравствуйте! Попытался изобразить первый скрипт :) Простенький, чтоб ордер на покупку открывал. Скомпилировал без проблем, а при запуске выдает ошибку кодом 2? чего с ней делать то?
o_o
Модератор
23725
o_o 2011.02.25 18:11  

исправлять.

o_o
Модератор
23725
o_o 2011.02.25 18:11  
расставлять по коду Print(GetLastError()) и искать момент её появления
demlin
155
demlin 2011.02.25 18:13  
sergeev:
расставлять по коду Print(GetLastError()) и искать момент её появления

Изначально поставил в код, сразу после приказа на ордер и появляется
o_o
Модератор
23725
o_o 2011.02.25 18:15  
demlin:

Изначально поставил в код, сразу после приказа на ордер и появляется
поставьте до
demlin
155
demlin 2011.02.25 18:20  
sergeev:
поставьте до


блин, точно до тоже выскакивает! мож глянете?

int start()

{

double L=0.01; //размер лота

double MI=MarketInfo(Symbol(),MODE_STOPLEVEL);//определяем уровень стопа на текущий момент

if (MI>6)

{

Alert("Рынок нестабилен"); //при уровне стопа больше 6 предупреждаем и уходим

}

else

{Alert(GetLastError());

OrderSend(Symbol(),OP_BUY,L,Ask,2,Bid-40*Point,Bid+40*Point); // выставляем 1 ордер 0,1 лот покупка

L=L*2;

OrderSend(Symbol(), OP_SELLSTOP, L, Bid-20*Point, 2, Ask+20*Point, Ask-20*Point);//2 страховочный ордер

Alert(GetLastError()); //проверка на ошибку установки

}


return(0);

}

o_o
Модератор
23725
o_o 2011.02.25 18:32  
порасставляйте в каждой строке.
demlin
155
demlin 2011.02.25 18:43  
sergeev:
порасставляйте в каждой строке.


Сделал, 0 идет до строки

else

{Alert(GetLastError()); // здесь выходит эта ошибка!!!!!!!!!

OrderSend(Symbol(),OP_BUY,L,Ask,2,Bid-40*Point,Bid+40*Point);

Владимир Тезис
4266
Владимир Тезис 2011.02.25 19:23  
demlin:


блин, точно до тоже выскакивает! мож глянете?


Скрипт написан не верно. Тема создана зря - для вопросов новичка есть сепциальная ветка. Просьба больше не создавать веток с элементраными вопросами, а спрашивать вот здесь https://www.mql5.com/ru/forum/131277

Правильно было бы написать скрипт вот так:


#property show_inputs // этой командой даём добро отображать окно пользовательских настроек скрипта

// ------------ Пользовательские переменные ------------------
extern double		Lot=0.1;// лот ордера
extern int			StopLoss=20;// Стоп-Лосс (в пунктах). Если = 0 или менее, то не устанавливается
extern int			TakeProfit=20;// ТейкПрофит (в пунктах). Если = 0 или менее, то не устанавливается
extern int			LevelOtlOrdera=20;// Уровень, на который нужно поставить отложенный ордер
extern int			PredelStopa=6;// Прдел уровня стопа. Если больше, то не открываем поз
extern int			Proskalz=10;
extern int			MAGIC=12358941;// у ордеров, открытых вручную, магик = нулю

//+------------------------------------------------------------------+
//|                 Начало работы скрипта                            |
//+------------------------------------------------------------------+
int start(){

double		PR,SL,TP,MinLot,MaxLot,Predel;
int				MinLevel,Ticket;
string    SMB=Symbol();
  MinLevel=MarketInfo(SMB,MODE_STOPLEVEL);// минимально-допустимый уровень стопа или установки отложенного ордера
	MinLot=MarketInfo(SMB,MODE_MINLOT);// минимально-допустимый лот
	MaxLot=MarketInfo(SMB,MODE_MAXLOT);// максимльно-допустимый лот
	Predel=MarketInfo(Symbol(),MODE_STOPLEVEL);//определяем уровень стопа на текущий момент
	
	// проверяем корректность пользовательских параметров
	if(Lot<MinLot){
    Alert("Работа скрипта остановлена");
    Alert("Ошибка! Lot не может быть менее ",MinLot);
		return(0);
	}
	if(Lot>MaxLot){
    Alert("Работа скрипта остановлена");
    Alert("Ошибка! Lot не может быть более ",MaxLot);
		return(0);
	}
	if(StopLoss<MinLevel && StopLoss!=0){
    Alert("Работа скрипта остановлена");
    Alert("Ошибка! StopLoss не может быть менее ",MinLevel," пунктов");
		return(0);
	}
	if(TakeProfit<MinLevel && TakeProfit!=0){
    Alert("Работа скрипта остановлена");
    Alert("Ошибка! TakeProfit не может быть менее ",MinLevel," пунктов");
		return(0);
	}
	if(LevelOtlOrdera<MinLevel){
    Alert("Работа скрипта остановлена");
    Alert("Ошибка! LevelOtlOrdera не может быть менее ",MinLevel," пунктов");
		return(0);
	}

		
	if(MinLevel>PredelStopa){
		Alert("Рынок нестабилен"); //при уровне стопа больше 6 предупреждаем и уходим
		return(0);
	}
	// ставим рыночный БАЙ-ОРДЕР
	PR=NormalizeDouble(Ask,Digits);// цена установки ордера
	if(StopLoss==0){
		SL=0;
	}
	else{
		SL=PR-StopLoss*Point;
	}
	if(TakeProfit==0){
		TP=0;
	}
	else{
		TP=PR+TakeProfit*Point;
	}
	SL=NormalizeDouble(SL,Digits);
	TP=NormalizeDouble(TP,Digits);
	Ticket=OrderSend(Symbol(),OP_BUY,Lot,PR,Proskalz,SL,TP,NULL,MAGIC,0,CLR_NONE); // выставляем рыночный ордер
	if(Ticket<0){
		Alert("Ошибка № ",GetLastError()," при установке Бай-ордера");
	}
	
	RefreshRates();
	
	// ставим отложенный SELLSTOP-ОРДЕР
	
	PR=NormalizeDouble(Bid,Digits);// текущая цена
	if(PR-LevelOtlOrdera*Point>=MinLevel*Point){// ордер ставить можно
		PR=NormalizeDouble(PR-LevelOtlOrdera*Point,Digits);// уровень установки ордера
		if(StopLoss==0){
			SL=0;
		}
		else{
			SL=PR+StopLoss*Point;
		}
		if(TakeProfit==0){
			TP=0;
		}
		else{
			TP=PR-TakeProfit*Point;
		}
		SL=NormalizeDouble(SL,Digits);
		TP=NormalizeDouble(TP,Digits);
		Ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,PR,Proskalz,SL,TP,NULL,MAGIC,0,CLR_NONE); // выставляем отложку
		if(Ticket<0){
			Alert("Ошибка № ",GetLastError()," при установке SELLSTOP-ордера");
		}
	}
	return(0);
}
o_o
Модератор
23725
o_o 2011.02.25 19:26  
demlin:


Сделал, 0 идет до строки

else

{Alert(GetLastError()); // здесь выходит эта ошибка!!!!!!!!!

OrderSend(Symbol(),OP_BUY,L,Ask,2,Bid-40*Point,Bid+40*Point);


вероятно передача в Alert(GetLastError()) числа в качестве строкового параметра и возвращает ошибку.

сделайте так

Alert(DoubleToStr(GetLastError(),0))

demlin
155
demlin 2011.02.25 19:31  
drknn:


Скрипт написан не верно. Тема создана зря - для вопросов новичка есть сепциальная ветка. Просьба больше не создавать веток с элементраными вопросами, а спрашивать вот здесь https://www.mql5.com/ru/forum/131277

Модератор, просьба после того, как топикстартер отреагирует на данный пост, удалить ветку во избежание захламления. Топикстартер, просьба отписаться здесь о результатах.

Правильно было бы написать скрипт вот так:


Извините, я вообще -то пытался из ветки для новичков писать, нажал не туда быть может. Спасибо за предоставленную информацию, буду переваривать :)
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий