Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
У тебя Linux? Узнай, как установить на нее MetaTrader!
Almaz_KG
16
Almaz_KG 2015.10.18 10:20 
Привет, всем!

Ребята, как получить исторические данные по фин инструменту от сервера?
Хочу в конце дня выгрузить данные по всем символам M1, M5, M15, M30, H1, H4, D1 данные.
Сейчас файлики создаются, но в них ничего нет, потому что база пустая, как эту базу заполнить от сервера?

Спасибо.


//+------------------------------------------------------------------+
//|                                           QuoteDataExtractor.mq4 |
//|                                                         Almaz-KG |
//|                           https://www.github.com/Almaz-KG/Germes |
//+------------------------------------------------------------------+
#property copyright "Almaz-KG"
#property link      "https://www.github.com/Almaz-KG/Germes"
#property version   "1.00"
#property strict

string DEFAULT_OUTPUT_DIRECTORY = "E:/germes/archive/";
int symbolCount = 0;


enum TIME_FRAME_SAVE_OPTIONS{
   WEEK,
   DAY,
   HOUR4,
   HOUR1,
   MINUTE30,
   MINUTE15,
   MINUTE5,
   MINUTE1
};


int OnInit(){
   symbolCount = SymbolsTotal(false);
   
   for(int i = 0; i < symbolCount; i++){
      Print(SymbolName(i, false));
      if(RefreshRates())
         Print("Dates is not refreshed");
         
      Print("Total number of bars for the symbol-period at this moment = ",
         SeriesInfoInteger(SymbolName(i, false), 0, SERIES_BARS_COUNT));
 
      Print("The first date for the symbol-period at this moment = ",
         (datetime)SeriesInfoInteger(SymbolName(i, false), 0, SERIES_FIRSTDATE));
   
      saveData(i, MINUTE1);   
   }
   
   
   return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason){
   
}
void OnTick(){
   
   
   
}
void OnTimer(){
}

void test(){
   
}

bool saveDataMinuteBySymbol(int symbolIndex){
   int barsCount = Bars(SymbolName(symbolIndex, false), PERIOD_M1);

   string file_name = StringConcatenate(SymbolName(symbolIndex, false), TIME_DATE, ".csv");
   Print(file_name);
   
   ResetLastError();    
   int filehandle=FileOpen(file_name,FILE_WRITE|FILE_CSV); 
   if(filehandle!=INVALID_HANDLE) { 
      for(int j = 0; j < barsCount; j++){
         FileWrite(filehandle,
               iTime(SymbolName(symbolIndex, false), PERIOD_M1, j),", ",  
               iOpen(SymbolName(symbolIndex, false), PERIOD_M1, j),", ",
               iHigh(SymbolName(symbolIndex, false), PERIOD_M1, j),", ",
               iLow(SymbolName(symbolIndex, false), PERIOD_M1, j),", ",
               iClose(SymbolName(symbolIndex, false), PERIOD_M1, j),", ",
               iVolume(SymbolName(symbolIndex, false), PERIOD_M1, j));
               
      }
      FileClose(filehandle);
      Print("Succesfull saved");
      return true;
   } 
   else 
      Print("Operation FileOpen failed, error ",GetLastError()); 
      
   return false;
}
void saveData(int symbol, TIME_FRAME_SAVE_OPTIONS saveOption){
   switch(saveOption){
      case  MINUTE1:
         saveDataMinuteBySymbol(symbol);
            
        break;
      default:
        break;
   }
}
Mihail Marchukajtes
3296
Mihail Marchukajtes 2015.10.18 14:05  

Уже давно этот вопрос придуман, зачем изобретать велосипед????

Выгружает котировки, индикаторы, с любыми параметрами.... Разобраться думаю не сложно будет. 

Almaz_KG
16
Almaz_KG 2015.10.18 14:17  
Спасибо большое! Просто я не нашел этого решения - решил написать сам.

Твой скрипт выгружает только текущий символ, щас попробую его под себя переделать, чтоб он выгружал все-все доступные символы.  
Almaz_KG
16
Almaz_KG 2015.10.20 18:44  

чет не получается нифига под себя переделать :-(
 
Как скачать другой символ, а не который сейчас отображается?

Vitalie Postolache
11137
Vitalie Postolache 2015.10.20 19:03  
Almaz_KG:

чет не получается нифига под себя переделать :-(
 
Как скачать другой символ, а не который сейчас отображается?


При смене символа или ТФ в окне со скриптом, скрипт выгружается. Нужно открывать новое окно и все действия производить там. Примеры в кодобазе есть.
Almaz_KG
16
Almaz_KG 2015.10.20 21:53  
-- Нужно открывать новое окно и все действия производить там. 

А нельзя ли это автоматизировать? Я понимаю это надо вручную открывать и запускать скрипт, так?

Уже позднняя ночь, может я чет и туплю совсем
Almaz_KG
16
Almaz_KG 2015.10.20 21:56  
И еще один вопрос, если торговая стратегия на тесте показывает профит фактор - (от 12 до 34 в зависимости от параметров) это нормально вообще, или нужно усердно искать ошибку?

Обычно, стратегии которые я писал у них пф была от 0.5 до 3
Vitalie Postolache
11137
Vitalie Postolache 2015.10.21 08:43  
Almaz_KG:
-- Нужно открывать новое окно и все действия производить там. 

А нельзя ли это автоматизировать? Я понимаю это надо вручную открывать и запускать скрипт, так?

Уже позднняя ночь, может я чет и туплю совсем

Конечно можно, даже нужно автоматизировать. В кодобазе даже есть примеры, правда там с помощью самописной dll, которую автор не выдаёт в исходнике.

Almaz_KG:
И еще один вопрос, если торговая стратегия на тесте показывает профит фактор - (от 12 до 34 в зависимости от параметров) это нормально вообще, или нужно усердно искать ошибку?

Обычно, стратегии которые я писал у них пф была от 0.5 до 3

Большое значение ПФ в тестере говорит о переоптимизации. Или о пересиживании убытков, лишь бы не закрывать сделки в минусе. А если все сделки закрыты в прибыль, то ПФ стремится к бесконечности )))

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