Вопрос: как самому собрать минутные котировки, по всевозможным парам из доступных, через доллар?

 

что имеем: есть Хистори Центр с архивом котировок, минуток, с 1999 года, но далеко не по всем валютным парам, по основным есть

что хотелось бы: иметь все возможные котировки, минутки, с 1999 года по всем возможным валютным парам

мысль: сделать из имеющихся котировок через доллар, к примеру, все пары, которые можно сделать (отклонения в пару пунктов ерунда)

решение: экспорт котировок по основным парам в *.csv файлы и дальше "клеить"


вопрос в том - как это делать и с помошью чего?


может у кого есть опыт/мысли, поделитесь, будьте любезны

 
Пробовал такое дело, отказался от него. Open и Close можно расчитать, а вот High и Low - это задачка. Если умножать High на High, Low на Low - понятно. Если делить надо, High на High а Low на Low - не факт, что получится High и Low, Тогда High делить на Low, а Low на High, то слишком лохмато получается, а если еще взять котировки из хистори центра, то вообще... Может кто придумает. Может как-то брать отношение и смещение тени относительно тела у исходных котировок и таким образом определить размер тела - здесь надо экспериментировать, чтобы получилось хотя бы с виду нечто похожее на котировки.
 
меня больше беспокоит вопрос чем/в чем синхронизировать по времени массивы котировок меж собой, перед вычислениями, ибо там же и дыры неизбежны..
 
Можно сделать цикл с шагом равным времени одного бара, если ни по какому символу нет бара соответствующего этому времени - пропускаем, если есть только по одному символу, то по другому символу брать последний бар, который был до этого времени.
 
т.е. скриптом всё это сделать, через чтение/запись из/в файл?
 
Проще всего будет открыть два графика, на одном запустить скрипт, скрипт будет пользоваться iClose() и т.п. Писать в csv потом импортировать. Еще под вопросом, что с объемами делать?
 

да складывать и делить на пополам, округлять до единицы в меньшую сторону, они-то для генерации тиков нужны, так с ними особо делать нечего (как по мне)

Дмитрий, а могли бы Вы набросать код скрипта?

 

Пробовал такое дело, отказался от него. Open и Close можно расчитать, а вот High и Low - это задачка. Если умножать High на High, Low на Low - понятно. Если делить надо, High на High а Low на Low - не факт, что получится High и Low, Тогда High делить на Low, а Low на High, то слишком лохмато получается, а если еще взять котировки из хистори центра, то вообще... Может кто придумает.

хм.. странно, чего вас так смущают хаи и лоу?

вот взял для примера AUDUSD & AUDJPY & USDJPY, минутки, прикинул хаи на калькуляторе - один в один сходятся... может из-за того смущают, что мыслите делать тоже самое и на старших ТФ? так незачем это делать, старшие ТФ генерировать из минуток нужно, нормальные графики будут получаться, абсолютно нормальные
 

Нашел вот скрипт Кима, попробую переделать под задачу.

ЗЫ: советы и помощь приветствуется :)

 

Наваял (переделал) я тут черновой вариант скрипта, работает, выгружает нужные котировки, но работает не красиво/не рационально (в цикле):

extern datetime BeginDate = D'2008.09.11';
extern datetime EndDate   = D'2008.09.12';
extern string   Separator = ",";
extern string   Symbol_2  = "AUDUSD";
extern string   OutSymbol = "AUDJPY";
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
void start()
{
  int    i, j, b=0, bb=0, eb;
  string comm, st;
  string fn=OutSymbol+Period()+" "+
         TimeToStr(BeginDate, TIME_DATE)+"-"+
         TimeToStr(EndDate, TIME_DATE)+".csv";
  double OutSymbolOpen, OutSymbolHigh, OutSymbolLow, OutSymbolClose, OutSymbolVolume;
 
  for (i=Bars; i>0; i--)
  {
    if (Time[i]>=BeginDate && Time[i]<=EndDate)
    {
      for (j=iBars(Symbol_2,PERIOD_M1); j>0; j--)
      {
        if (iTime(Symbol_2,PERIOD_M1,j)>=BeginDate && iTime(Symbol_2,PERIOD_M1,j)<=EndDate)
        {
          if (iTime(Symbol_2,PERIOD_M1,j)==Time[i])
          {
            if (bb==0) bb=j;       // фиксируем номер первого бара
               
               //здесь будут реальные вычисления выгружаемых котировок
               OutSymbolOpen   = Open[i]*iOpen(Symbol_2,PERIOD_M1,j);
               OutSymbolHigh   = High[i]*iHigh(Symbol_2,PERIOD_M1,j);
               OutSymbolLow    = Low[i]*iLow(Symbol_2,PERIOD_M1,j);
               OutSymbolClose  = Close[i]*iClose(Symbol_2,PERIOD_M1,j);
               OutSymbolVolume = (Volume[i]+iVolume(Symbol_2,PERIOD_M1,j))/2;
               
            st=TimeToStr(Time[i], TIME_DATE)+Separator+
               TimeToStr(Time[i], TIME_MINUTES)+Separator+
               DoubleToStr(OutSymbolOpen, 2)+Separator+
               DoubleToStr(OutSymbolHigh, 2)+Separator+
               DoubleToStr(OutSymbolLow, 2)+Separator+
               DoubleToStr(OutSymbolClose, 2)+Separator+
               DoubleToStr(OutSymbolVolume, 0);
               WritingLineInFile(fn, st);
               b++;
               eb=j;        // фиксируем номер последнего бара
          }
        }  
      }
    }
  }
 
  comm="Начало: "+TimeToStr(Time[bb], TIME_DATE|TIME_MINUTES)+"\n";
  comm=comm+"Конец: "+TimeToStr(Time[eb], TIME_DATE|TIME_MINUTES)+"\n";
  comm=comm+"Выгружено баров: "+DoubleToStr(b, 0);
 
  Comment(comm);
}
 
//+------------------------------------------------------------------+
//| Запись строки в файл                                             |
//+------------------------------------------------------------------+
void WritingLineInFile(string FileName, string text)
{
  int file_handle=FileOpen(FileName, FILE_READ|FILE_WRITE, " ");
 
    if (file_handle>0)
    {
        FileSeek(file_handle, 0, SEEK_END);
        FileWrite(file_handle, text);
        FileClose(file_handle);
    }
}
//+------------------------------------------------------------------+

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

как поправить, подскажите

 
хоть бери и ник меняй на Swetten, к примеру, ну вообще никто не реагирует на просьбы :)