Импорт данных в текстовом формате в МТ4

 

Стоит задача написать индикатор для таймфрейма дневки, чтобы он брал значения из стороннего текстового файла, н-р, такого вида:

--

1.06.2010(разделитель)2.06.2010(разделитель)...

Значение1(разделитель)Значение2(разделитель)...

--


Т. о., можно было бы иметь индикаторы самых разных данных (н-р, СОТ, или опционные уровни, или еще много чего, что доступно в текстовом/табличном формате).


Как установить референцию к внешнему файлу в МТ, и как описать структуру внешнего файла в сорце индикатора, чтобы он «понимал», что откуда брать?


Заранее спасибо!

 

Точнее, такого вида:

--

Дата1(разделитель)Значение1(LF)

Дата2(разделитель)Значение2(LF)

...

ДатаN(разделитель)ЗначениеN(EOF)

--

 

И никто не ответил.

Полезно было бы иметь такой индикатор для импорта данных в мт4 в виде индикатора.

 
Forex Trader:

Стоит задача написать индикатор для таймфрейма дневки, чтобы он брал значения из стороннего текстового файла, н-р, такого вида:

--

1.06.2010(разделитель)2.06.2010(разделитель)...

Значение1(разделитель)Значение2(разделитель)...

--


Т. о., можно было бы иметь индикаторы самых разных данных (н-р, СОТ, или опционные уровни, или еще много чего, что доступно в текстовом/табличном формате).


Как установить референцию к внешнему файлу в МТ, и как описать структуру внешнего файла в сорце индикатора, чтобы он «понимал», что откуда брать?


Заранее спасибо!

Так обычный файл в формате .csv, в чем трудности? Вот так открываем. Потом считываем строку, значения в ней должны быть разделены запятыми. Или задать другой разделитель вместо ','

        string FileName = MQLInfoString(MQL_PROGRAM_NAME) + "_AllOrders" + ".ord";
        int FileHandler = FileOpen(LogFileName, FILE_CSV | FILE_READ | FILE_SHARE_READ, ',');
        
        if(FileHandler == INVALID_HANDLE)
            Alert("Не могу открыть файл " + FileName);
        else    
        {
            Print(FileName + " is opened");
            FileSeek(FileHandler, 0, SEEK_END);
        }    
 
Alexey Volchanskiy:

Так обычный файл в формате .csv, в чем трудности? Вот так открываем. Потом считываем строку, значения в ней должны быть разделены запятыми. Или задать другой разделитель вместо ','

Спасибо большое. Это хоть что-то.

Я так понимаю, это лишь часть кода и надо дописывать?

Я если честно, не имею опыта в программировании.

 
Din-Dan:

Спасибо большое. Это хоть что-то.

Я так понимаю, это лишь часть кода и надо дописывать?

Я если честно, не имею опыта в программировании.

Да, это часть кода. Раз нет опыта, кину побольше. В предыдущем примере открыли файл .csv на чтение, но я в попыхах допустил ошибку. Вот так правильно

//+------------------------------------------------------------------+
//|                                              TestReadCsvFile.mq4 |
//|                               Copyright 2015, Alexey Volchanskiy |
//| https://mql.gnomio.com/ - обучение программирования на MQL4, MQL5, для платформы cAlgo, Matlab |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Alexey Volchanskiy"
#property link      "https://mql.gnomio.com/"
#property version   "1.00"
#property strict
#property script_show_inputs

input string FileName = "EURUSD.csv";
int FileHandler = -1;

void OnStart()
{
    if(!OpenFile(FileName)) 
        return;   
    while(!FileIsEnding(FileHandler))    
    {
        datetime dt = FileReadDatetime(FileHandler);
        double bid = FileReadNumber(FileHandler);
        double ask = FileReadNumber(FileHandler);
        Print(TimeToString(dt, TIME_DATE | TIME_MINUTES | TIME_SECONDS), "  ", DoubleToString(bid, Digits()),  "  ", DoubleToString(ask, Digits()));
    }
    FileClose(FileHandler);
}

bool OpenFile(string fName)
{
    FileHandler = FileOpen(fName, FILE_CSV | FILE_READ | FILE_SHARE_READ, ',');
    if(FileHandler != INVALID_HANDLE)
    {
        Print(fName + " is opened");
        FileSeek(FileHandler, 0, SEEK_SET);
        return true;
    }    
    Alert("Can't open file " + fName);
    return false;
}

Блин!!!Ну почему нельзя прикрепить файл .csv, надо обязательно зиповать!! 

 Файлы положить по путям 

\MQL4\Scripts\TestReadCsvFile.mq4 

 \MQL4\Files\EURUSD.csv

Файлы:
 
Alexey Volchanskiy:

Да, это часть кода. Раз нет опыта, кину побольше. В предыдущем примере открыли файл .csv на чтение, но я в попыхах допустил ошибку. Вот так правильно

Блин!!!Ну почему нельзя прикрепить файл .csv, надо обязательно зиповать!! 

 Файлы положить по путям 

\MQL4\Scripts\TestReadCsvFile.mq4 

 \MQL4\Files\EURUSD.csv

Добрый вечер.

Позвольте, спросить, предназначением данного кода является открытие файла EURUSD и всё? Я расположил оба файла так, как вы указали. Но в результате выполнения скрипта у меня ничего не происходит. Единственное, если я открою csv файл до выполнения скрипта, появляется алерт (см. прикрепленные рисунки).

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

Файлы:
 
Din-Dan:

Добрый вечер.

Позвольте, спросить, предназначением данного кода является открытие файла EURUSD и всё? Я расположил оба файла так, как вы указали. Но в результате выполнения скрипта у меня ничего не происходит. Единственное, если я открою csv файл до выполнения скрипта, появляется алерт (см. прикрепленные рисунки).

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

Вы во вкладке Журнал пытаетесь увидеть результаты вывода? Смотрите во вкладке Эксперты.

2015.11.07 20:47:58.262 Script TestReadCsvFile GBPUSD.e,M30: removed

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: uninit reason 0

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:30:41  1.08796  1.08805

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:30:37  1.08796  1.08806

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:30:33  1.08796  1.08807

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:30:25  1.08797  1.08806

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:30:24  1.08797  1.08805

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:30:23  1.08795  1.08806

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:30:21  1.08795  1.08805

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:30:17  1.08795  1.08806

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:30:16  1.08795  1.08805

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:30:15  1.08795  1.08806

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:30:07  1.08796  1.08806

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:30:02  1.08795  1.08805

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:30:01  1.08796  1.08807

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:30:00  1.08799  1.08808

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:29:53  1.08798  1.08808

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:29:51  1.08798  1.08809

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:29:50  1.08798  1.08807

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:29:49  1.08796  1.08807

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: 2015.11.06 13:29:42  1.08796  1.08806

2015.11.07 20:47:58.262 TestReadCsvFile GBPUSD.e,M30: EURUSD.csv is opened

2015.11.07 20:47:58.238 TestReadCsvFile GBPUSD.e,M30: initialized

2015.11.07 20:47:58.233 TestReadCsvFile GBPUSD.e,M30 inputs: FileName=EURUSD.csv; 

2015.11.07 20:47:50.961 Script Tests\TestReadCsvFile GBPUSD.e,M30: loaded successfully

По поводу дальнейших доработок обращайтесь в личку плз. 

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