Универсальная и окончательная стандартизация цен

 

Привет друзья,

Я ищу способ добиться универсальной и окончательной нормализации цен.

Иногда нормализация работает для одного актива, а для другого не работает, и мне приходится много раз переписывать советник.

Мой триггер для покупки, продажи, принятия или остановки всегда будет на этой основе, например:

- Максимальное значение свечи плюс 10 пунктов.

То есть "rates[1].high + 10"

Случается, что одни активы ошибаются в этой сумме, другие - правильно, но говорят, что цена недействительна.

Я создал сценарий, в котором пытался смоделировать несколько нормализаций, но у меня все еще возникают проблемы. Вы можете мне помочь? Какой была бы универсальная формула или расчет для этого?

Может быть, используя лотошаг ... и т.д., я не знаю ... помогите мне.

#include <Trade\SymbolInfo.mqh>
CSymbolInfo _symb;

input double pts = 10;

MqlRates rates[];

int OnInit()
  {
   
   _symb.Name(_Symbol);
   _symb.RefreshRates();
   ArraySetAsSeries(rates,true);
   CopyRates(Symbol(), _Period, 0, 3, rates);
   
   double size = 0;
   double pricehigh = rates[1].high;
   double pricelow  = rates[1].low;
   double tickSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);
   double _tick = size ? size : SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);
   
   double takeA = rates[1].high + pts;
   double takeB = rates[1].high + pts*_Point;
   double takeA1 = NormalizeDouble(takeA,_Digits);
   double takeA2 = takeA*_Point;
   double takeA3 = takeA/_Point;
   double takeA4 = NormalizeDouble((takeA*_Point),_Digits);
   double takeA5 = NormalizeDouble(takeA * tickSize, _Digits);
   double takeA6 = _symb.NormalizePrice(takeA);
   double takeA7 = round(takeA / _tick) * _tick;
   double takeB1 = NormalizeDouble(takeB,_Digits);
   double takeB2 = takeB*_Point;
   double takeB3 = takeB/_Point;
   double takeB4 = NormalizeDouble((takeB*_Point),_Digits);
   double takeB5 = NormalizeDouble(takeB * tickSize, _Digits);
   double takeB6 = _symb.NormalizePrice(takeB);
   double takeB7 = round(takeB / _tick) * _tick;
   double teste1  = NormalizeDouble((rates[1].high + pts * _Point), _Digits);
   double teste2  = NormalizeDouble((rates[1].low - pts * _Point), _Digits);
   
   Print("\nTarget: Price + pts",
         "\nPriceHigh: ",pricehigh,
         "\nPriceLow: ",pricelow,
         "\nTakeA: ", takeA,
         "\nTakeA1: ", takeA1,
         "\nTakeA2: ", takeA2,
         "\nTakeA3: ", takeA3,
         "\nTakeA4: ", takeA4,
         "\nTakeA5: ", takeA5,
         "\nTakeA6: ", takeA6,
         "\nTakeA7: ", takeA7,
         "\n---------------",
         "\nTarget: Price + 10pts",
         "\nPriceHigh: ",pricehigh,
         "\nPriceLow: ",pricelow,
         "\nTakeB: ", takeB,
         "\nTakeB1: ", takeB1,
         "\nTakeB2: ", takeB2,
         "\nTakeB3: ", takeB3,
         "\nTakeB4: ", takeB4,
         "\nTakeB5: ", takeB5,
         "\nTakeB6: ", takeB6,
         "\nTakeB7: ", takeB7,
         "\n---------------",
         "\nTest01: ", teste1,
         "\nTest02: ", teste2
         );
     
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
      
      
   
  }
//+------------------------------------------------------------------+
 
Используйте CSymbolInfo:: NormalizePrice
Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / NormalizePrice
Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / NormalizePrice
  • www.mql5.com
NormalizePrice(double) - CSymbolInfo - Торговые классы - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
diegotfcastro:

Привет друзья,

Я ищу способ добиться универсальной и окончательной нормализации цен.

единственный способ — переводить все числа из двоичной в десятичную и делать все расчеты там :)