estabilização do preço

Douglas Betiol  
smaHandle = iMA(_Symbol, _Period, 10, 1, MODE_SMA, PRICE_HIGH);
      ArraySetAsSeries(smaArray, true);
      CopyBuffer(smaHandle, 0, 0, 3, smaArray);
      
      smaHandle1 = iMA(_Symbol, _Period, 21, 1, MODE_SMA, PRICE_HIGH);
      ArraySetAsSeries(smaArray1, true);
      CopyBuffer(smaHandle1, 0, 0, 3, smaArray1);
      
 resultado = (smaArray[0]+smaArray1[0])/2; //soma media 1 e 2 dividindo 2
 Comment(resultado);
 
 double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_ASK), _Digits); 
  
      
     if(PositionsTotal()==0)
         {
          //  Comment("Compra");
            trade.Buy(5, _Symbol, resultado, ask-100, ask+400, "");
            
         }

bom dia pessoal blz??

o codigo acima no backteste funciona,mas na conta demo,dá PREÇO INVALID.

alguém poderia me ajudar onde está o erro de estabilização do preço?

Vinicius Pereira De Oliveira  
Douglas Betiolbom dia pessoal blz?? o codigo acima no backteste funciona,mas na conta demo,dá PREÇO INVALID. alguém poderia me ajudar onde está o erro de estabilização do preço?

Bom dia!!


Para normalizar os preços, utilize a função abaixo (disponível também na classe CSymbolInfo):

//+--------------------------------------------------------------------------------------------------------------------+
//| This function normalizes and adjusts the price to the TICK SIZE                                                    |
//+--------------------------------------------------------------------------------------------------------------------+
double NormalizePrice(double price)
  {
//--- Get the minimal price change
   double tick_size = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);

//--- Return the price normalized
   if(tick_size == 0.0)
     {
      return(NormalizeDouble(price, _Digits));
     }

//--- Return the price normalized and adjusted to the TICK SIZE
   return(NormalizeDouble(MathRound(price / tick_size) * tick_size, _Digits));
  }
Razão: