Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 705

 
exsistentia:

Видимо я не совсем точно объяснил проблему. Дело в том, что есть открытый ордер GBPUSD (не отложенный), цена открытия - 1,61029. Я в скрипте делаю запрос к этому ордеру ф-ей OrderSelect, а функция OrderOpenPrice, как я понимаю, должна вернуть реальное значение цены открытия этого самого ордера(1,61029), а возвращает округленное до 4 знака после запятой значение - 1,6103. Испытано на разных ордерах с разными ценами открытия - результат один и тот же: последней цифры нет.


Для этого есть DoubleToStr(), которая напишет с Digits реальными, а так будет писать с 4-мя! Смотрите Документацию наверху слева, там всё найдёте и узнаете много + учебник! 

Вот так:

Alert("Цена открытия ",OPP);// не так

Alert("Цена открытия ",DoubleToStr(OPP,Digits);// а так
 
borilunad:


Для этого есть DoubleToStr(), которая напишет с Digits реальными, а так будет писать с 4-мя! Смотрите Документацию наверху слева, там всё найдёте и узнаете много + учебник! 

Вот так:

 

 



Спасибо большое! А учебник я читаю, и по ходу советник пишу.

И еще вопрос: какой наиболее простой способ узнать, что данный ордер закрыт(по тиккету)? Использовать функцию OrderCloseTime, или есть для этой цели спец. функция? 

 
exsistentia:



Спасибо большое! А учебник я читаю, и по ходу советник пишу.

И еще вопрос: какой наиболее простой способ узнать, что данный ордер закрыт(по тиккету)? Использовать функцию OrderCloseTime, или есть для этой цели спец. функция? 

   if(OrderSelect(ticket,SELECT_BY_TICKET) && OrderCloseTime()>0) {
      // Ордер закрыт
      }

В переменной ticket должен храниться номер тикета проверяемого ордера
 
artmedia70:

В переменной ticket должен храниться номер тикета проверяемого ордера

если ордер закрыт, разве его не в истории надо искать (MODE_HISTORY)?
 
   
artmedia70:

В переменной ticket должен храниться номер тикета проверяемого ордера

Спасибо. 

Ещё такой вопрос. В советнике есть блок, который должен удалять отложенные ордера, в зависимости от закрытия рыночных ордеров:

OrderSelect(T1,SELECT_BY_TICKET);
datetime cls1;
cls1=OrderCloseTime();                                 // время закрытия 1 ордера
OrderSelect(T2,SELECT_BY_TICKET);
datetime cls2;
cls2=OrderCloseTime();                                 //время закрытия 2 ордера
Alert(cls1," ",cls2); 

if(cls1==0 && cls2==0)                               //если оба ордера открыты
   return(0);
else
   CLS++;                                                       // флаг закрытия одного из ордеров

if(cls1>0 && CLS==1)                //удаление отложенных ордеров в зависимости от того какой ордер закрыт
   OrderDelete(T3);
if(cls2>0 && CLS==1)
   OrderDelete(T4);  
return(0);

 Блок почему-то не работает(отложенные ордера не закрывает), а Alert всегда выдает "0   0". Специально закрывал один из открытых ордеров, но ничего не происходило. Такое ощущение как будто советник не видит, что ордер уже закрыт и обрабатывает устаревшие данные. В чём может быть проблема?

 
exsistentia:
   

Спасибо. 

Ещё такой вопрос. В советнике есть блок, который должен удалять отложенные ордера, в зависимости от закрытия рыночных ордеров:


 Блок почему-то не работает(отложенные ордера не закрывает), а Alert всегда выдает "0   0". Специально закрывал один из открытых ордеров, но ничего не происходило. Такое ощущение как будто советник не видит, что ордер уже закрыт и обрабатывает устаревшие данные. В чём может быть проблема?

Где тикет ордера выясняется? И откуда OrderCloseTime если ордер ещё активен (во всяком случае, выбор его среди активных по коду происходит)?
 
evillive:
Где тикет ордера выясняется? И откуда OrderCloseTime если ордер ещё активен (во всяком случае, выбор его среди активных по коду происходит)?
Да перестань буянить. Pool в данном случае игнорируется. Только по времени закрытия больше/равно нулю можно определить из какого списка ордер выбран. Ну уж эти-то азы стыдно не знать ;)
 
evillive:

если ордер закрыт, разве его не в истории надо искать (MODE_HISTORY)?
При выборе по индексу - да, в истории, при выборе по тикету pool игнорируется. Учи матчасть ;)
 
artmedia70:
Да перестань буянить. Pool в данном случае игнорируется. Только по времени закрытия больше/равно нулю можно определить из какого списка ордер выбран. Ну уж эти-то азы стыдно не знать ;)


по тикету практически никогда не искал, больше по индексу, может и стыдно, да что поделаешь ;)

а вот поиск нужного тикета там в коде не привели, может он неправильно его ищет а потом жалуется что  код не работает...

 
evillive:

по тикету практически никогда не искал, больше по индексу, может и стыдно, да что поделаешь ;)

а вот поиск нужного тикета там в коде не привели, может он неправильно его ищет а потом жалуется что не код работает...

Да там вообще бардак...