Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Справочник MQL5 доступен на 8 языках. Изучай MQL5 на удобном тебе языке!
puzhaev
17
puzhaev 2015.01.31 12:31 
Добрый вечер ! Помогите, мне написать кусок программы для получения двух значений цены за прошедшие два  тика   с помощью графика.
Vladimir Karputov
Модератор
45578
Vladimir Karputov 2015.01.31 12:43  
puzhaev:
Добрый вечер ! Помогите, мне написать кусок программы для получения двух значений цены за прошедшие два  тика   с помощью графика.

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

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

puzhaev
17
puzhaev 2015.01.31 13:20  

эксперт 

Vladimir Karputov
Модератор
45578
Vladimir Karputov 2015.01.31 13:40  
puzhaev:

эксперт 

Эксперт будет получать значение цен текущего графика и текущего таймфрейма или будет получать цены с другого графика и другого таймфрейма?
IgorM М
4801
IgorM М 2015.01.31 13:53  

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

#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;
}
Sergey Dzyublik
4818
Sergey Dzyublik 2015.01.31 14:39  
эксперт получает только текущее значение цены, и не получает те значения которые пришли когда он делал расчет.
По этому если вам надо все таки учитывать все тики, а не выборочно какие-то да какие-то нет, как это делает эксперт, то пишите индикатор.
Vladimir Karputov
Модератор
45578
Vladimir Karputov 2015.01.31 14:43  
ALXIMIKS:
эксперт получает только текущее значение цены, и не получает те значения которые пришли когда он делал расчет.
По этому если вам надо все таки учитывать все тики, а не выборочно какие-то да какие-то нет, как это делает эксперт, то пишите индикатор.
Да, это так. Но зато теперь можно всегда проверять, что в итоге получил эксперт, если сравнивать массив - CopyTicks или сразу брать из этого массива значения.
Sergey Dzyublik
4818
Sergey Dzyublik 2015.01.31 14:53  
спасибо, не в курсе был, слышал анонсы,
а когда вводили - увы отсутствовал пару месяцев.
Dmitiry Ananiev
6578
Dmitiry Ananiev 2015.01.31 17:21  

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

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

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

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

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

Ну прям как в первый раз. Трудно, что-ли вставить сразу код по-человечески? 
Dennis Kirichenko
11317
Dennis Kirichenko 2015.01.31 22:48  

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

Примечание

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий