Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 857

 

Здравствуйте! Где взять (где находится) потиковая история котировок? И, главное, как в mql обратиться к каждому тику?

 
ikatsko:

Здравствуйте! Где взять (где находится) потиковая история котировок? И, главное, как в mql обратиться к каждому тику?

 

Может поможет. Метод позволяет получить историю котировок, по тикам

;

 
Top2n:

Может поможет. Метод позволяет получить историю котировок, по тикам

;

Хорошая ссылка. Спасибо! Но есть же  и второй вопрос: как средствами MQL обратиться к каждому выбранному тику? 
 
ikatsko:
Хорошая ссылка. Спасибо! Но есть же  и второй вопрос: как средствами MQL обратиться к каждому выбранному тику? 

Cредствами MQL.  Пробуйте, компилируйте как советник и на график, и ищите в файлах файл   "Запись"

//+------------------------------------------------------------------+
//|                                                ЗаписьBid_Ask.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
Запись();
   
  }
//+------------------------------------------------------------------+
void Запись()
{
  int handle;
  string st=TimeToStr(TimeCurrent(), TIME_DATE);
  string filename = st+" Запись.csv"; // Формируем имя файла
  handle = FileOpen(filename,FILE_CSV|FILE_READ | FILE_WRITE,';');
  if(handle < 1)
  {
    Print("Не удалось создать файл. Ошибка #", GetLastError());
    return;
    //FileClose(handle);
  }
  
  FileWrite(handle,                   
            " Время ",
            " Bid ",
            " Ask ",
            " Volume "
            ); // заголовок
  FileSeek(handle, 0, SEEK_END);
  FileWrite(handle,
            TimeToStr(TimeCurrent(),TIME_MINUTES|TIME_SECONDS),
            Bid,
            Ask,
            Volume[0]
            );
 
  FileClose(handle);
  return;
}

 Удачи.

 
r772ra:

Cредствами MQL.  Пробуйте, компилируйте как советник и на график, и ищите в файлах файл   "Запись"

 Удачи.

Спасибо и Вам! Я так понял, что эта процедура будет записывать в файл текущие тики. Да?
 
ikatsko:
Спасибо и Вам! Я так понял, что эта процедура будет записывать в файл текущие тики. Да?

Да. Bid b Ask, и также Volume. При Volume == 1, там время прихода 1 тика нового бара.

 









 
r772ra:

Да. Bid b Ask, и также Volume. При Volume == 1, там время прихода 1 тика нового бара.

 










 

Хотелось иметь массив, аналогичный массиву баров, чтобы можно было обратиться, например, последовательно к каждому тику, ясное дело, что речь идет об истории. Чувствую, что придется  вручную (самостоятельно) формировать такой массив из имеющихся в истории значений котировок. И потом уж обращаться к элементам этого массива

 

 Здравствуйте!  Разбираю индикатор SMA. Не могу понять:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- check for bars count
   if(rates_total<InpMAPeriod-1 || InpMAPeriod<2)
      return(0);
//--- counting from 0 to rates_total
   ArraySetAsSeries(ExtLineBuffer,false); //  если не объявлять то по умолчанию разве не стоит тоже самое?
   ArraySetAsSeries(close,false);
//--- first calculation or number of bars was changed

 

//+------------------------------------------------------------------+
//|   simple moving average                                          |
//+------------------------------------------------------------------+
void CalculateSimpleMA(int rates_total,int prev_calculated,const double &price[])
  {
   int i,limit;
//--- first calculation or number of bars was changed
   if(prev_calculated==0)
   
     {
      limit=InpMAPeriod;
      //--- calculate first visible value
      double firstValue=0;
      for(i=0; i<limit; i++)
         firstValue+=price[i];
      firstValue/=InpMAPeriod;
      ExtLineBuffer[limit-1]=firstValue;          Не чего не пойму, записываем в массив где limit =периоду(например 15-1),
     }
   else
      limit=prev_calculated-1;                       После первого запуска пусть будет равен Limit = 256 - 1;
//--- main loop
   for(i=limit; i<rates_total && !IsStopped(); i++)
      ExtLineBuffer[i]=ExtLineBuffer[i-1]+(price[i]-price[i-InpMAPeriod])/InpMAPeriod;  Тогда ExtLineBuffer[i-1]=0 т.к. ExtLineBuffer[256-1]=0 так получается, объясните пожалуйста эту строчку.
                                                                                                       Заранее благодарю
//---
  }
Если надо вставить (High[i+j]+Low[i+j])*0.5; то есть применить Median Price (HL/2)  Куда лучше подставить?
 

При оптимизации в тестере часто выскакивает в журнале такое сообщение

"2015.03.05 11:04:55.924    Memory handler: cannot allocate 343699140 bytes of memory"

Уважаемые, подскажите какую такую память не может обнаружить терминал? Как лечится?

 

Добрый день! Посмотрите пожалуйста код ниже, создание объекта "Стрелка" на сигнале, в тестере стрелки не рисует,хотя по журналу проходят, и еще в журнале при запуске в тестере пишет ошибку  TestGenerator: unmatched data error (volume limit 412 at 2014.10.13 17:10 exceeded),

и во время тестирования выдает ошибку "Проверка стрелки USDJPYm,M5: Ошибка создания объекта: code #4200" - но я так понимаю, что это нормально, так как вначале программа находит что объект создан, а после удаления,создает вновь.  В общем буду благодарен за Ваши комментарии к вопросам.

Не судите строго, как написано.   

//+------------------------------------------------------------------+
//| SignalOpenOrderBuy SendMail                                      |
//+------------------------------------------------------------------+
if (PLO0>S0 && PLO1<=S1 && PLO2<S2 && Time[0] > SignalTime)
{
SignalTime = TimeCurrent();
bool SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);
Print("Стрелка Buy установлена");
ObjectSetInteger(0,"ArrowBay",OBJPROP_COLOR,clrGreen);
if(!SignalBuy)
Print("Ошибка создания объекта: code #",GetLastError());
ResetLastError();
ObjectDelete(0,"ArrowBay");
RefreshRates();
SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);
ObjectSetInteger(0,"ArrowBay",OBJPROP_COLOR,clrGreen);
if(!SignalBuy)
Print("Ошибка создания объекта: code #",GetLastError());
else
Print("Стрелка Buy установлена");
}

 


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