подскажите пжалста, почему совок покупает, а когда созрели условия не закрывает позицию
/---- input parameters extern int PerRSI=8; extern int MagicNamber=77771; extern double Lots=1.0; //+------------------------------------------------------------------+ int start() { int cnt, // индекс ордера ticket, // идентификационный номер ордера total; // число уже открытых ордеров double rsi_0, // Значен. rsi_0 текущее rsi_1; // Значен. rsi_1 1й бар if (Bars<100) { Print("bars less than 100"); return(0); } total=OrdersTotal(); if(total<1) { rsi_0=iRSI(NULL,0, PerRSI,0,0); // Текущий бар rsi_1=iRSI(NULL,0, PerRSI,0,1); // Текущий бар плюс 1
if(rsi_0 < rsi_1 && rsi_0 < 30) // Если линия пересекла 30 { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } else Print("Error opening SELL order : ",GetLastError()); return(0); } for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_BUY && OrderSymbol()==Symbol()) // это откр поз? OP_BUY или OP_SELL { if(OrderType()==OP_BUY) // открыта дл позиция { if(rsi_0 > rsi_1 && rsi_0 > 70) // Если линия пересекла 70 { OrderClose(OrderTicket(),1,Bid,3,Violet); // закрываем позицию
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); }
А это что за хрень? Для чего здесь OrderSelect()?
В остальном сложно разобраться, т.к. код выложен без отступов и за скобками невозможно следить - не хочу свое зрение портить.
Большое спасибо за помощь! А также condor - у. Теперь другая неприятность. Вот открыли, например, 10 позиций на покупку. При закрытии по стопу или тейку 1,2,3, и т.д. позиций, советник, при наличии сигнала на покупку, начинает покупать. А мне надо, что бы сначала ВСЕ ордера закрылись, а уже потом, когда нет ни одной открытой позиции, начинался новый цикл торговли. Т.е. нужен счётчик. Сначала открытых позиций до заданного числа, а затем, при закрытии позиций, до нуля. Заранее благодарен.
Сейчас именно так и зделано. Пока есть хоть один открытый ордер, другой не откроется. А если надо зделать по другому, то пишите точнее. И уж выбираёте - то ли открываются ордера кjulf есть открытые позиции, то-ли не открываются.
Подскажите пожайлуста почему в этой конструкции после закрытия ордера звучит сначала "timeout.wav", в журнале вылазит "Нет ошибки" равное количеству закрываемых ордеров (если закрывается 2 ордера то два раза "Нет ошибки" вылезет итд) а потом уже "money.wav". Самый прикол что это только для коротких сделок, для длинных все работает нормально. Кто знает в чем прикол и как это лечится?
Подскажите пожайлуста почему в этой конструкции после закрытия ордера звучит сначала "timeout.wav", в журнале вылазит "Нет ошибки" равное количеству закрываемых ордеров (если закрывается 2 ордера то два раза "Нет ошибки" вылезет итд) а потом уже "money.wav". Самый прикол что это только для коротких сделок, для длинных все работает нормально. Кто знает в чем прикол и как это лечится?
Подскажите пожайлуста почему в этой конструкции после закрытия ордера звучит сначала "timeout.wav", в журнале вылазит "Нет ошибки" равное количеству закрываемых ордеров (если закрывается 2 ордера то два раза "Нет ошибки" вылезет итд) а потом уже "money.wav". Самый прикол что это только для коротких сделок, для длинных все работает нормально. Кто знает в чем прикол и как это лечится?
Условие под 1-м условным оператором if у Вас действует только на следующий за ним оператор (следующая строка).
Остальные выполняются БЕЗУСЛОВНО. Т.е. даже если нет команды на закрытие ордера, то один из плейсаундов отработает.
Закрывается, эт я удалил случайно, иначе бы не скомпилировалось если бы ее не было, if(OrderType()==OP_SELL && OrderMagicNumber()==mnum выпадать то выпадает но работает че самый прикол и по коротким и по длинным сделкам, а ошибка "Нет ошибки" со звуком "timeout.wav" срабатывает только для коротких сделок, для длинных конструкция работает нормально, там теже скобки и все одинаково
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Всем привет
подскажите пжалста, почему совок покупает, а когда созрели условия не закрывает позицию
/---- input parametersextern int PerRSI=8;
extern int MagicNamber=77771;
extern double Lots=1.0;
//+------------------------------------------------------------------+
int start()
{
int
cnt, // индекс ордера
ticket, // идентификационный номер ордера
total; // число уже открытых ордеров
double
rsi_0, // Значен. rsi_0 текущее
rsi_1; // Значен. rsi_1 1й бар
if (Bars<100)
{
Print("bars less than 100");
return(0);
}
total=OrdersTotal();
if(total<1)
{
rsi_0=iRSI(NULL,0, PerRSI,0,0); // Текущий бар
rsi_1=iRSI(NULL,0, PerRSI,0,1); // Текущий бар плюс 1
if(rsi_0 < rsi_1 && rsi_0 < 30) // Если линия пересекла 30
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_BUY && OrderSymbol()==Symbol()) // это откр поз? OP_BUY или OP_SELL
{
if(OrderType()==OP_BUY) // открыта дл позиция
{
if(rsi_0 > rsi_1 && rsi_0 > 70) // Если линия пересекла 70
{
OrderClose(OrderTicket(),1,Bid,3,Violet); // закрываем позицию
return(0); // выходим
}}}}}}
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
}
А это что за хрень? Для чего здесь OrderSelect()?
В остальном сложно разобраться, т.к. код выложен без отступов и за скобками невозможно следить - не хочу свое зрение портить.
Большое спасибо за помощь! А также condor - у. Теперь другая неприятность. Вот открыли, например, 10 позиций на покупку. При закрытии по стопу или тейку 1,2,3, и т.д. позиций, советник, при наличии сигнала на покупку, начинает покупать. А мне надо, что бы сначала ВСЕ ордера закрылись, а уже потом, когда нет ни одной открытой позиции, начинался новый цикл торговли. Т.е. нужен счётчик. Сначала открытых позиций до заданного числа, а затем, при закрытии позиций, до нуля. Заранее благодарен.
Сейчас именно так и зделано. Пока есть хоть один открытый ордер, другой не откроется. А если надо зделать по другому, то пишите точнее. И уж выбираёте - то ли открываются ордера кjulf есть открытые позиции, то-ли не открываются.
А вот такой вопросик:
а есть ли какие-либо отладочные средства в мета-трейдере ?
Плиз поделитесь опытом - как Вы занимаетесь отладкой скриптов и советников ?
это же все связано с цифрами, параметрами, витвлениями алгоритмов и тд. Как же отлавливать возникающие в алгоритме баги ?
А вот такой вопросик:
а есть ли какие-либо отладочные средства в мета-трейдере ?
Плиз поделитесь опытом - как Вы занимаетесь отладкой скриптов и советников ?
Если возникает необходимость в отладке, то через Print()
Но в большинстве случаев такая необходимость не возникает.
RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}
Подскажите пожайлуста почему в этой конструкции после закрытия ордера звучит сначала "timeout.wav", в журнале вылазит "Нет ошибки" равное количеству закрываемых ордеров (если закрывается 2 ордера то два раза "Нет ошибки" вылезет итд) а потом уже "money.wav". Самый прикол что это только для коротких сделок, для длинных все работает нормально. Кто знает в чем прикол и как это лечится?
RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}
Подскажите пожайлуста почему в этой конструкции после закрытия ордера звучит сначала "timeout.wav", в журнале вылазит "Нет ошибки" равное количеству закрываемых ордеров (если закрывается 2 ордера то два раза "Нет ошибки" вылезет итд) а потом уже "money.wav". Самый прикол что это только для коротких сделок, для длинных все работает нормально. Кто знает в чем прикол и как это лечится?
А что, после первого if скобка не закрывается ???
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
Чё-то эта строка вообще выпадает как-то
RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}
Подскажите пожайлуста почему в этой конструкции после закрытия ордера звучит сначала "timeout.wav", в журнале вылазит "Нет ошибки" равное количеству закрываемых ордеров (если закрывается 2 ордера то два раза "Нет ошибки" вылезет итд) а потом уже "money.wav". Самый прикол что это только для коротких сделок, для длинных все работает нормально. Кто знает в чем прикол и как это лечится?
Условие под 1-м условным оператором if у Вас действует только на следующий за ним оператор (следующая строка).
Остальные выполняются БЕЗУСЛОВНО. Т.е. даже если нет команды на закрытие ордера, то один из плейсаундов отработает.
Правильнее так:
А что, после первого if скобка не закрывается ???
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
Чё-то эта строка вообще выпадает как-то
Закрывается, эт я удалил случайно, иначе бы не скомпилировалось если бы ее не было, if(OrderType()==OP_SELL && OrderMagicNumber()==mnum выпадать то выпадает но работает че самый прикол и по коротким и по длинным сделкам, а ошибка "Нет ошибки" со звуком "timeout.wav" срабатывает только для коротких сделок, для длинных конструкция работает нормально, там теже скобки и все одинаково