[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 77
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Всем привет
подскажите пжалста, почему совок покупает, а когда созрели условия не закрывает позицию
/---- 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" срабатывает только для коротких сделок, для длинных конструкция работает нормально, там теже скобки и все одинаково