Вопрос по работе функции OrderType()

 
Добрый день уважаемые господа !

У меня вопрос по поводу функции OrderType(). Дело в том, что какой бы ордер не стоял BUYSTOP
или BUYLIMIT даная функция у меня определяет его как BUY;

Вот код которым я проверял работу функции. В любом случае когда я устанавливал вышеназванные ордера
он выдавал мне надпись "Нашел ордер в бай" (MT4 Build 184)


int start()
{
//----
int cnt,total;

total=OrdersTotal();

if (total>0) {
for (cnt=1;cnt<=total;cnt++) {

OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderType()==OP_BUYSTOP) Comment("Нашел стоп в бай");


if (OrderType()==OP_BUYLIMIT) Comment("Нашел лимит в бай");


if (OrderType()==OP_BUY) Comment("Нашел ордер в бай");
else Comment("Не нашел ничего ",OrderType());
}
}

//----
return(0);
}

Заранее благодарю, Алексей !
 
:)
 
for (cnt=1;cnt<=total;cnt++) {
перебирать надо с 0, а не с 1
OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES);
надо проверять результат
if (OrderType()==OP_BUYSTOP)
OrderType() лучше созранить в переменную, а потом уже сравнивать
И лучше написать про сто Print( OrderType() ); и посмотреть что получиться ;)
 
Массив начинается с нулевого индекса.
Попробуй for (cnt=0;cnt<=total...
 
Мне надо что бы начиниался с 1 потому что я каждому открытому ордеру присваеваю его порядковый номер, 0- считается ордеров нет-поэтому такой код. Вообще какая разница с какой цифры я считаю, я про работу функции OrderType() говорю, которая по моему мнению не орпределяет отложенники вообще !
 
AlexRich,
Мне надо что бы начиниался с 1

Э.. как бы это..
Смотря чего хотеть.
Если ты хочешь написать работающий код, то следует изучить принятые нормы и правила, а потом используя их приступать к работе.
Если ты хочешь оповестить присутствующих о своих желаниях, то это проще, но не даст практических результатов.

В данном случае разумнее всё же исходить из того, что установленные правила по твоему желанию разработчиками МТ изменены не будут..:)
Поэтому можно попробовать написать твой код имея ввиду эту неизбежность.
Например, можно написать так:

for (cnt=1;cnt<=total;cnt++)
{
nom=cnt-1;
OrderSelect (nom, SELECT_BY_POS,MODE_TRADES);
...
я про работу функции OrderType() говорю, которая по моему мнению не орпределяет отложенники вообще !

Что касается подобных оценок, то при малости опыта свои неудачи стоит прежде всего отнести к области своей непосвещённости.
А функция работат исправно. Можешь поверить.
 
Извините, вспылил, погорячился, был неправ :-)))
Я просто сразу не понял что отчет с 1 принципиально для этой функции ! Самое ужасное то что посмотрел в свои коды MQL2 там я тоже начинал с 1, так что огромное спасиба Вам !
 
Мне надо что бы начиниался с 1 потому что я каждому открытому ордеру присваеваю его порядковый номер, 0- считается ордеров нет-поэтому такой код. Вообще какая разница с какой цифры я считаю, я про работу функции OrderType() говорю, которая по моему мнению не орпределяет отложенники вообще !

А как ты присваиваешь порядковые номера, ведь программа после каждого закрытия ордера сдвигает все ордера и присваивает им номера сама от 0 до OrdersTotal()-1.
 
что отчет с 1 принципиально для этой функции

Наверное, имеется ввиду отсчёт с нуля..?

Дело не в этой функции, а во всех функциях, основанных на массивах.
В данном случае речь идёт об обращении к массиву данных, описывающих ордера и их характеристики.
А вот отсчёт индексов в любом масиве начинается с 0.
Если ты будешь работать с окнами, то, например, при их количестве 3, индексы окон будут соответственно 0, 1 и 2. Если будешь работать с графическими объектами, то опять же, индекс первого попавшегося объекта будет нулевой.
( Кстати, к этому вопросу: нужно помнить, что максимальный индекс массива на 1 меньше размера массива. Например, если ты открыл масссив int A[100], то в нём будет, таки, 100 элементов, первый из кот. А[0], а последний А[99]. Эти правила унаследованы из языка С++)
 
:-))) Спасибо за информацию. А вот в С++ я никогда не работал, наверно не все трейдеры профессиональные программисты, но благодаря вашим стараниям возможно все !!! :-)))
 
Мне надо что бы начиниался с 1 потому что я каждому открытому ордеру присваеваю его порядковый номер, 0- считается ордеров нет-поэтому такой код. Вообще какая разница с какой цифры я считаю, я про работу функции OrderType() говорю, которая по моему мнению не орпределяет отложенники вообще !

А как ты присваиваешь порядковые номера, ведь программа после каждого закрытия ордера сдвигает все ордера и присваивает им номера сама от 0 до OrdersTotal()-1.



Дело в том, что принципиально не номер ордера а его наличие переменная >0 или отсудствие переменная =0;