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

 
bercut0077:
Доброго дня, есть индикатор, но в тестере по прошествии определенного периода с кажем с начала года до марта работает потом перестает давать сигналы, а надо тестить большой период (AuthorizedSSBODynamicBreakoutBoxFinalEdition), где в коде может быть зашито это ограничение - прошу хотя бы дать наводку где капать, какие операторы это определяют?
Он глючит временами. Просто перестаёт рисовать коробку. Ограничения там нигде нету. Тестите потиково. Иногда помогает.
 
Sepulca:
У Вас есть исходный код индикатора? Если нет- то ищите автора))))

У меня есть исходник - там чёрт ногу сломит.
 
Нет, тогда даже пробовать не буду. Тут иной раз в своём коде заблудишься, не говоря уж о чужом))))
 

Подскажите пожалуйста какой нибудь проверенный конструктор экспертов на MQL4 и 5, а то времени совсем мало, иногда надо проверить одну мысль или помочь кому, на конец создать основу для робота и дописывать уже самому...

Буду благодарен, за ранее спасибо!!!=)

 
vadynik:

Пишу такую функцию

Но почему OrderOpenPrice() возвращает округленную цену до четырех знаков на пяти знаке?


int i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) 
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {                
       if ((OrderType()==OP_BUY)&&(OrderOpenPrice()>=Ask-350*Point)&&(OrderMagicNumber()==Magic)||(OrderType()==OP_BUY)&&(OrderOpenPrice()<=Ask+250*Point)&&(OrderMagicNumber()==Magic))
         {
           double o=OrderOpenPrice();
           Print(o);
           OrderClose(OrderTicket(),OrderLots(),Bid,50,Blue); 
         
      }
    }
  }
Попробуйте сделать так и посмотреть что реально возвращает OrderOpenPrice(), может причина в том что Вы нормализуете функцию с параметром Digits и в принте видите не то,ч то есть на самом деле.
 
vadynik:

Пишу такую функцию

Но почему OrderOpenPrice() возвращает округленную цену до четырех знаков на пяти знаке?

Print не возвращает округлённую цену, в данном случае он просто выводит заданное по умолчанию кол-во знаков после запятой.
Вообщето-то все правильно, форекс не работает с теми знаками после запятой, которые ниже Digits, А вообще если уж влезать на примере EURSD это вообще всего четыре знака после запятой, а даже пятый знак это придумки ДЦ.

Но в Вашем случае лучше сделать так: Print(DoubleToStr(OrderOpenPrice(),Digits));

 
Ekburg:

Попробуйте сделать так и посмотреть что реально возвращает OrderOpenPrice(), может причина в том что Вы нормализуете функцию с параметром Digits и в принте видите не то,ч то есть на самом деле.

Так и без нормализации тоже самое, мне надо вычесть пункты от цены открытия, если так то цену пишет ту что надо,но тогда в IF получается несоответствие типов(
Print(DoubleToStr(OrderOpenPrice(),Digits));
 
vadynik:

Так и без нормализации тоже самое, мне надо вычесть пункты от цены открытия, если так то цену пишет ту что надо,но тогда в IF получается несоответствие типов(

Сделайте расчёты как по четырём знакам, а если Вам важна точность. то потом верните его на место, с тем значением последнего знака что было ранее, ведь во время расчётов он не меняется, в связи с спецификой вычислений.
 
Ekburg:

Сделайте расчёты как по четырём знакам, а если Вам важна точность. то потом верните его на место, с тем значением последнего знака что было ранее, ведь во время расчётов он не меняется, в связи с спецификой вычислений.
Нормализация нужна только в Ordersend, orderclose и т .п. ну и ещё при сравнении вещественных величин А в принтах указывайте любое количество знаков после запятой. Но если просто напишите Print(какаято_double_value) то как правило выведется четыре знака после запятой. Поэтому правильней написать
Print(DoubleToStr(OrderOpenPrice(),Digits));

Как уже упоминалось, Т.е. сначала преобразовать double в строку с заданным количеством знаком после запятой, а потом уж выводить в лог с помощью Print....
 
А если пункты рассчитать, не путайте их с поинтами. Скажем double СПРЭД=Ask-Bid поинтов, или пусть даже double СПРЭД=(Ask-Bid)/Point пунктов.