- Акции РАО
- Ошибки, баги, вопросы
- Не работает код... как исправить ошибку?
исправлять.
расставлять по коду Print(GetLastError()) и искать момент её появления
Изначально поставил в код, сразу после приказа на ордер и появляется
Изначально поставил в код, сразу после приказа на ордер и появляется
поставьте до
блин, точно до тоже выскакивает! мож глянете?
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);
}
порасставляйте в каждой строке.
Сделал, 0 идет до строки
else
{Alert(GetLastError()); // здесь выходит эта ошибка!!!!!!!!!
OrderSend(Symbol(),OP_BUY,L,Ask,2,Bid-40*Point,Bid+40*Point);
блин, точно до тоже выскакивает! мож глянете?
Скрипт написан не верно. Тема создана зря - для вопросов новичка есть сепциальная ветка. Просьба больше не создавать веток с элементраными вопросами, а спрашивать вот здесь 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);
}
Сделал, 0 идет до строки
else
{Alert(GetLastError()); // здесь выходит эта ошибка!!!!!!!!!
OrderSend(Symbol(),OP_BUY,L,Ask,2,Bid-40*Point,Bid+40*Point);
вероятно передача в Alert(GetLastError()) числа в качестве строкового параметра и возвращает ошибку.
сделайте так
Alert(DoubleToStr(GetLastError(),0))
Скрипт написан не верно. Тема создана зря - для вопросов новичка есть сепциальная ветка. Просьба больше не создавать веток с элементраными вопросами, а спрашивать вот здесь https://www.mql5.com/ru/forum/131277
Модератор, просьба после того, как топикстартер отреагирует на данный пост, удалить ветку во избежание захламления. Топикстартер, просьба отписаться здесь о результатах.
Правильно было бы написать скрипт вот так:
Извините, я вообще -то пытался из ветки для новичков писать, нажал не туда быть может. Спасибо за предоставленную информацию, буду переваривать :)
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования