Цена за прошедшие два тика

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

Программа какая:

  1. Скрипт.
  2. Индикатор.
  3. Эксперт? 

 

эксперт 

 
puzhaev:

эксперт 

Эксперт будет получать значение цен текущего графика и текущего таймфрейма или будет получать цены с другого графика и другого таймфрейма?
 

наверное так:

#define Ntick 2 //размер массива Ask и Bid
MqlTick tick;
double myAsk[Ntick], myBid[Ntick];
//____________________________________________________________________
int OnInit(){
   if(SymbolInfoTick(Symbol(),tick)){
      ArrayInitialize(myAsk,tick.ask);
      ArrayInitialize(myBid,tick.bid);
   } else{
      ArrayInitialize(myAsk,0.0);
      ArrayInitialize(myBid,0.0);
   }
return(INIT_SUCCEEDED);
}
//____________________________________________________________________
void OnDeinit(const int reason){
}
//____________________________________________________________________
void OnTick(){
   if(!SymbolInfoTick(Symbol(),tick)){
      Print("Ошибка получения данных из SymbolInfoTick");
      return;
   }
   for(int i =0; i<Ntick-1;i++){ // сместим данные в массивах на одну позицию назад от начала массива
      myAsk[i+1] = myAsk[i];
      myBid[i+1] = myBid[i];
   }
   myAsk[0] = tick.ask; // присвоим новое значение нулевым элементам массивов
   myBid[0] = tick.bid;
}
 
эксперт получает только текущее значение цены, и не получает те значения которые пришли когда он делал расчет.
По этому если вам надо все таки учитывать все тики, а не выборочно какие-то да какие-то нет, как это делает эксперт, то пишите индикатор.
 
ALXIMIKS:
эксперт получает только текущее значение цены, и не получает те значения которые пришли когда он делал расчет.
По этому если вам надо все таки учитывать все тики, а не выборочно какие-то да какие-то нет, как это делает эксперт, то пишите индикатор.
Да, это так. Но зато теперь можно всегда проверять, что в итоге получил эксперт, если сравнивать массив - CopyTicks или сразу брать из этого массива значения.
 
спасибо, не в курсе был, слышал анонсы,
а когда вводили - увы отсутствовал пару месяцев.
 

На графике мы видим только цены Bid. По ним же как правило и делают все расчеты советники.

если учесть что нужно только 2 тика, то заводим 2 переменных.  

   double bid0,bid1;
   void OnTick()
     {
      bid1=bid0;
      bid0=Bid; //для Мт4
      bid0=Normalizedouble(SymbolInfoDouble(_Symbol,MODE_BID),Digits); //для МТ5 как то так, лень в справку смотреть
     }
 
dimeon:

На графике мы видим только цены Bid. По ним же как правило и делают все расчеты советники.

если учесть что нужно только 2 тика, то заводим 2 переменных.  

Ну прям как в первый раз. Трудно, что-ли вставить сразу код по-человечески? 
 

Документация рекомендует:

Примечание

Если функция [SymbolInfoDouble()] используется для получения информации о последнем тике, то лучше использовать SymbolInfoTick(). Вполне возможно, что по данному символу с момента подключения терминала к торговому счету не было еще ни одной котировки. В таком случае запрашиваемое значение будет неопределенным...

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