double NormalisePrice() Подскажите пожалуйста.

 

Нужна помощь в нормировке цены которая берется с индикатора . Например с МА. Для использования в отложенных ордерах.

Спасибо .

 
Golden Ratio:

Нужна помощь в нормировке цены которая берется с индикатора . Например с МА. Для использования в отложенных ордерах.

Спасибо .

double MA=iMA(NULL,PERIOD_M1,10,0,MODE_EMA,PRICE_TYPICAL,0);

 MA =NormalizeDouble(MA,Digits);

получите нормализованные цены 

 
Aleksandr Egorov:

double MA=iMA(NULL,PERIOD_M1,10,0,MODE_EMA,PRICE_TYPICAL,0);

 MA =NormalizeDouble(MA,Digits);

получите нормализованные цены 

Спасибо большое.

 

Нормализовать цену лучше так.

//+------------------------------------------------------------------+
double NormalizePrice(double price)
  {
   double tick_size = 0;
   SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE, tick_size);
   if(tick_size != 0)
      return(NormalizeDouble(MathRound(price / tick_size) * tick_size, _Digits));

   return(NormalizeDouble(price, _Digits));
  }
//+------------------------------------------------------------------+
 
Aleksandr Slavskii:

Нормализовать цену лучше так.

А если так:  MA =NormalizeDouble(MA,Digits); , то что ошибки будут?

 
khorosh:

А если так:  MA =NormalizeDouble(MA,Digits); , то что ошибки будут?

Размер тика не всегда совпадает с величиной пункта (Point()). Тик может быть больше в 2, 10 и более раз.

 
Aleksandr Slavskii:

Нормализовать цену лучше так.

double  NormalisePrice1()  

 {  

    double Price=0;                                                                                                        // цена которая мне нужно в итоге//

    double ma1_4Price=0;                                                                                              // цена нормированная //

    double ma1_4 =iMA(NULL,InpTimeframe1_0,MovingPeriod1_0,MovingShift1_0,ma_method1_0,InpAppliedPrice1_0 ,InpMABar1_0) ;

   // цена от индикатора//

    double tick_size = 0;

   SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE, tick_size);

   if(tick_size != 0)

   ma1_4Price=(NormalizeDouble(MathRound(ma1_4/ tick_size) * tick_size, _Digits)); 

    Price=ma1_4Price;

Я так правильно написал ? 

 
Ihor Herasko:

Размер тика не всегда совпадает с величиной пункта (Point()). Тик может быть больше в 2, 10 и более раз.

цена обрезана по пятому знаку например если евро для чего  Point() ? если формировать условия выставления Ask<  MA - 100* Point тогда поинт нужен а для того что бы выставить ордер по этой цене хватит МА или я че то не понимаю ?
 
Aleksandr Slavskii:

Нормализовать цену лучше так.

NormalizeDouble(price, _Digits) все равно обрежет с пятым знаком если к примеру евро бакс 
 
Aleksandr Egorov:
цена обрезана по пятому знаку например если евро для чего  Point() ? если формировать условия выставления Ask<  MA - 100* Point тогда поинт нужен а для того что бы выставить ордер по этой цене хватит МА или я че то не понимаю ?

А если символ не евро? Бывают такие символы (да, редко, сходу и не смогу привести пример), у которых Point 0.01, а размер тика 1. 

Нормализация к шагу тика цены нужна только для торговых приказов. Для остальных действий она, по большому счету, не нужна. При сравнении цен используются другие приемы.

 
Ihor Herasko:

А если символ не евро? Бывают такие символы (да, редко, сходу и не смогу привести пример), у которых Point 0.01, а размер тика 1. 

Нормализация к шагу тика цены нужна только для торговых приказов. Для остальных действий она, по большому счету, не нужна. При сравнении цен используются другие приемы.

согласен

Причина обращения: