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

 
evillive:

Читать можно справку, там всё есть, с примерами.


Спасибо
 

Возникла идея нарисовать из данных файла индикатор.

Взял пример из учебника. Переделал скрипт под себя:

int start()                            // Спец. функция start
  {
//--------------------------------------------------------------- 2 --
   int Handle,                         // Файловый описатель
       shift,Text;                            // Стиль вертикальной линии
   string File_Name="News.csv",        // Имя файла
          Obj_Name,                    // Bмя объекта
          Instr,                       // Название валюты
          One,Two,                     // 1я и 2я чать названия инстр.
          Str_DtTm;                    // Дата и время события(строка)
   datetime Dat_DtTm;                  // Дата и время события(дата)
//--------------------------------------------------------------- 3 --
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");// Открытие файла
   if(Handle<0)                        // Неудача при открытии файла
     {
      if(GetLastError()==4103)         // Если файла не существует,..
         Alert("Нет файла с именем ",File_Name);//.. извещаем трейдера 
      else                             // При любой другой ошибке..
         Alert("Ошибка при открытии файла ",File_Name);//..такое сообщ
      PlaySound("Bzrrr.wav");          // Звуковое сопровождение
      return(0);                          // Выход из start()      
     }
//--------------------------------------------------------------- 4 --
   while(FileIsEnding(Handle)==false)// До тех пор, пока файловый ..
     {                                // ..указатель не в конце файла
      //--------------------------------------------------------- 5 --
      Str_DtTm =FileReadString(Handle);// Дата и время события(дата)
      Text     =FileReadString(Handle);// Текст описания события
      //--------------------------------------------------------- 6 --
      Dat_DtTm =StrToTime(Str_DtTm);   // Преобразование типа данных
      //--------------------------------------------------------- 7 --
      shift=iBarShift(NULL,0,Dat_DtTm);
      Alert("Время=",TimeToString(Time[shift]),"Text=",Text); 
      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
      break;                        // Выход из чтения и рисования
     }
//--------------------------------------------------------------- 8 --
   FileClose( Handle );                // Закрываем файл
   return(0);                             // Выход из start()
  }
//--------------------------------------------------------------- 9 --

Строку с «Alert» можно убрать.

По логике нужно получать дату в индикаторе и сравнивать с файлом и  при совпадении присваивать значение буферу.

Но, вот думаю, если на каждом баре начинать поиск с начала файла, где данные уже учтены, будет весьма затратно.

Вопрос как в индикаторе фиксировать обработанные строки файла и начинать поиск после них?

 
Forexman77:

Есть большой файл в котором даты в таком виде "20141231". Чтобы преобразовать строку в формат datetime нужны точки "YYYY.MM.DD"  между годом, месяцем и числом.

Как можно это сделать? 

 

string sdt="20141231"
string dt=StringSubstr(sdt,0,4)+"."+StringSubstr(sdt,4,2)+"."+StringSubstr(sdt,6,2)
 
vicmos:

Спасибо уже разобрался. Конвертировал файл, где изначально разделялось на запятые. Поменял запятые на точки и потом второй столбец добавил, все прогой "uniCSVed".

Теперь буду знать, как программно сделать. 

Теперь другая титаническая задача, как индикатор из этих данных нарисовать? Скрипт сделал, все правильно выводит.

Но в индикаторе, чтобы не было тормозов, как-то нужно запоминать строку на которой в прошлой итерации данные были получены. 

 
Forexman77:

Спасибо уже разобрался. Конвертировал файл, где изначально разделялось на запятые. Поменял запятые на точки и потом второй столбец добавил, все прогой "uniCSVed".

Теперь буду знать, как программно сделать. 

Теперь другая титаническая задача, как индикатор из этих данных нарисовать? Скрипт сделал, все правильно выводит.

Но в индикаторе, чтобы не было тормозов, как-то нужно запоминать строку на которой в прошлой итерации данные были получены. 

Наверное это возможно с помощью FileTell(Возвращает текущее положение файлового указателя соответствующего открытого файла) и FileSeek(Перемещает положение файлового указателя на указанное количество байт относительно указанного положения).
 
evillive:
Наверное это возможно с помощью FileTell(Возвращает текущее положениефайлового указателя соответствующего открытого файла) и FileSeek(Перемещает положение файлового указателя на указанноеколичество байт относительно указанного положения).

Спасибо! Тоже обратил внимание на данные фукнкции. Еще есть FileIsLineEnding. Буду думать дальше, как сделать.

 
lexdemon:
А как определить Тикет_первого_ордера?

Присвой значение функции OrderTicket() переменной. Например : int Ticket= OrderTicket(). Ну и потом используй это значение в OrderSelect. 

OrderSelect(Ticket,SELECT_BY_TICKET); .

 

Можно и по другому. Не будем определять тикет, а просто найдем ордер методом перебора (SELECT_BY_POS).

 

 Получится:

 

 string Symb=Symbol();

for(i=0;i<=OrdersTotal() ;i++)

   if(OrderSelect(i,SELECT_BY_POS)==true)

 {

   if(OrderSymbol()!=Symb)continue;

   if(OrderType()==OP_BUY)

     {

   break;

     }

   }

}

 

  if(OrderOpenPrice()+10*Point<=Ask)

 OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,Green);

 

 
CJIeCaPb:

Присвой значение функции OrderTicket() переменной. Например : int Ticket= OrderTicket(). Ну и потом используй это значение в OrderSelect. 

OrderSelect(Ticket,SELECT_BY_TICKET); .

 

Можно и по другому. Не будем определять тикет, а просто найдем ордер методом перебора (SELECT_BY_POS).

 

 Получится:

 

Метод перебора уже ближе к истине
 

Раз уж это тема для вопросов новичков, то задам свои...

1. Существует ли программное API для загрузки котировок? В идеале get/post запросом.

2. Если такого для широкого доступа нет, то какие платформы легче всего парсятся и могут предоставлять доступ к котировкам в режиме реального времени раз в секунду.

3. Писать автоматизацию можно на чём угодно, конечно. Но всё таки хотелось бы знать, какие языки и инструменты наиболее удобны и популярны?

 
Вот, например, здесь https://iqoption.com/us/options/turbo (если кто зареган там) очень хорошо в реальном времени отображается график. В идеале отпарсить бы его, да что-то FireBug не показывает, куда обращается скрипт для получения котировок. Там каждую секунду точка на графике рисуется.
Причина обращения: