Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 271

 
soroko:
так заполняется только первое значение индексом [0].
//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                              Copyright © 2014, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"

double Pr[5];                 // обявление 5-мерного статического массива
double PriceOld;              // переменная для сравнения цены
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double temp_prace=SymbolInfoDouble(_Symbol,SYMBOL_BID);
   if(NormalizeDouble(PriceOld-temp_prace,5)!=0)
     {
      Pr[4]=Pr[3];
      Pr[3]=Pr[2];
      Pr[2]=Pr[1];
      Pr[1]=Pr[0];
      Pr[0]=temp_prace;
      PriceOld=Pr[0];
     }
  }
//+------------------------------------------------------------------+
 
soroko:

благодарю. избавили от бессонных выходных.)

vicmos благодарите.
 
barabashkakvn:
vicmos благодарите.
он заполняет все одной ценной, как функция ArrayFill(...)/
 
soroko:
он заполняет все одной ценной, как функция ArrayFill(...)/
извиняюсь там просто количество цифр меньше! спасибо большое! 
 

Всем доброго времени суток! Такая проблема - компилятор выдает предупреждение. Не хотелось бы его игнорировать, помогите найти выход?

   double aHigh[ 12 ], aLow[ 12 ];
   double dVolatility = 0.0;
   
   CopyHigh(sSymbol, PERIOD_MN1, 0, 12, aHigh);
   CopyLow(sSymbol, PERIOD_MN1, 0, 12, aLow);
   
   dVolatility = ArrayMaximum(aHigh) - ArrayMinimum(aLow);
   dVolatility = NormalizeDouble(dVolatility, SymbolInfoInteger(sSymbol, SYMBOL_DIGITS));

 Ругается конкретно на последнюю строчку, говорит: "possible loss of data due to type conversion". Как правильно нормализовать вещественный тип в этом случае?

 
jommerbot:

Всем доброго времени суток! Такая проблема - компилятор выдает предупреждение. Не хотелось бы его игнорировать, помогите найти выход?

 Ругается конкретно на последнюю строчку, говорит: "possible loss of data due to type conversion". Как правильно нормализовать вещественный тип в этом случае?

   dVolatility = NormalizeDouble(dVolatility, (int)SymbolInfoInteger(sSymbol, SYMBOL_DIGITS));
 
barabashkakvn:
Спасибо
 
jommerbot:

Всем доброго времени суток! Такая проблема - компилятор выдает предупреждение. Не хотелось бы его игнорировать, помогите найти выход?

 Ругается конкретно на последнюю строчку, говорит: "possible loss of data due to type conversion". Как правильно нормализовать вещественный тип в этом случае?

И ещё: ArrayMaximum и ArrayMinimum возвращает индекс найденного элемента. Так что правильно вот так:

   dVolatility = aHigh[ArrayMaximum(aHigh)] - aLow[ArrayMinimum(aLow)];
 
MigVRN:

И ещё: ArrayMaximum и ArrayMinimum возвращает индекс найденного элемента. Так что правильно вот так:

Спасибо, большое. Открыл для себя то же самое, когда отлаживал код.
 

Не корректно вычисляет уровень тейка исходя из суммы убытков закрытых ордеров. Получается 1-й ордер = 1; 2-й ордер = 2; 3-й ордер = 3; 4-й ордер =4., планируется открыть 5-й ордер фиксированным объемом. Нужно рассчитать количество пипсов что бы перекрыть убыток по всем предыдущим ордерам и получить прибыль 10% от общей суммы убытка. 

По факту получается советник просто считает объем каждого закрытого ордера равным предполагаемому отложенному ордеру то есть по его подсчетам получаеться если отложенный 5-й ордер равен 5-ти лотам то и все предыдущие убыточные ордера были равны 5-ти лотам и отсюда считает убыток с соответствующим не правильным уровнем профита. Т.есть если по факту общий объем 4-х ордеров = 10 лотам, то советник просто перемножает 4 ордера на объем 5-го отложенного ордера и получает общий объем 20 лотов......Что нужно исправить в коде?

 // Функция вычисления уровня тэйка исходя из уровня убытка закрытых сделок

//=================================================================================================

double TakeProfitCalculate(double lot,int type)

{

   int      n,i;

   double   prf,ttp;


   prf=-MathAbs(BuyLevel-SellLevel)/Point*LOT*MarketInfo(Symbol(),MODE_TICKVALUE);//

   if(No!=0) for(i=OrdersHistoryTotal()-1;i>=0;i--)

   {

      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;

      if(OrderSymbol()!=Symbol() || OrderMagicNumber()<MAGIC || OrderMagicNumber()>MAGIC+200 || OrderType()>OP_SELL) continue;

      n=OrderMagicNumber()-MAGIC;

      prf+=(OrderProfit()+OrderSwap()+OrderCommission());

      if(n==0) break;

   }

   prf=MathAbs(prf*(100+ProfitPercent)/100);

   ttp=prf*Point/(LOT*MarketInfo(Symbol(),MODE_TICKVALUE));

   if(type==OP_BUY) return(NRu(BuyLevel+ttp)); else return(NRd(SellLevel-ttp));

}

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