Замена функций файлов MT4. - страница 10

 

Замена файлов

Я хочу протестировать советника, который использует внешние сигналы в тестере стратегий, и в теме говорится, что родная обработка файлов не работает в тестере стратегий. Поэтому я попытался использовать dll, предоставленную в этой теме. Входные данные, которые я хочу обработать, находятся в файле, выглядящем следующим образом:

2007-01-02;EURUSD;2.InstPipDown;;Yes

2007-01-02;USDJPY;1.InstPipUp;;Yes

2007-01-02;USDCHF;1.InstPipUp;;Yes

2007-01-03;EURUSD;2.InstPipDown;;Yes

2007-01-03;EURUSD;4.PipMax1Down;;Yes

2007-01-03;GBPUSD;4.PipMax1Down;;Yes

2007-01-04;USDJPY;8.PipRevBear;;Yes

2007-01-05;EURUSD;5.PipMax2Up;;Yes

2007-01-05;USDJPY;1.InstPipUp;;Yes

Я сам создаю файл, поэтому могу использовать другие типы разделителей.

Как мне использовать dll для получения одной "записи" за раз? Я могу сделать парсинг для отдельных полей.

Как узнать, когда я достиг EOF?

Я пробовал несколько вариантов, но получаю непоследовательные результаты, а иногда и мусор. Запись данных, как в примере, работает нормально, но я хочу читать данные.

 

Что ж, настойчивость рулит!

После нескольких часов работы я обнаружил следующее:

Обработчик файлов отказывается открывать файл, который я создал с помощью другой программы. Open возвращает -1. Если я использую файл, созданный демо-версией (mt4.log) и копирую в него свое содержимое, то открытие работает. Не могу понять почему. Странный

Я сделал свои "записи" фиксированной длины и считывал длину "записи" плюс 2 для учета "CRLF" в конце каждой записи. Я получил длину файла, разделил на длину записи и зациклил, чтобы получить все мои записи в массив:

Вот код:

int init()

{

string inArr[500];

int file;

int filesize;

int records;

int i;

file = gFileOpen("c:\mt4.log",READ);

// Print(file);

filesize = gFileSize(file);

// Print(filesize);

records = filesize/25;

// Print(records);

for(i=1;i<=records;i++)

{

inArr = gFileRead(file,25);

}

gFileClose(file);

Print(inArr[filesize-1]); //Проверка последней записи

return(0);

}

 

индикатор с файловым выводом

здравствуйте трейдеры и программисты.

мне нужна помощь с кодексом для нового индикатора.

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

Как это можно сделать? Я пытаюсь сделать следующее: на каждой новой свече записывать OHCL последних 1000 баров для обучения PNN. это должно быть сделано снаружи с помощью RAPID-I.

и с некоторыми другими данными, чтобы узнать, какова вероятность закрытия свечи.

пожалуйста, помогите. это был бы отличный проект, но такие простые вещи, которые я слишком глуп (или ленив), чтобы сделать :-)

PriNova

 

datetime timeprev=0; перед init()

и

if(timeprev==Time[0])

return(0);

timeprev=Time[0]; прямо под start()

и все.

 

очень быстрый ответ.

спасибо elitecamper

 

Почему функция перемещения была удалена из библиотеки

CodersGuru,

Я не могу выразить, насколько вы ценны для меня, Вы заслуживаете большей части похвалы, которую я получаю от своих клиентов, поскольку без вас я не смог бы выполнять свою работу по их поддержке.

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

Еще раз большое спасибо за ваш сервис.

Джон МакГлафлин

 

gFileRead

Здравствуйте,

Посмотрев исходный код mtguru1.dll я обнаружил, что функция gFileRead() не должна работать. Я не прав?

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

Поэтому, с точки зрения эксперта MQL4, такая инструкция должна привести к аварийному завершению:

string buffer = gFileRead( handle, 50 );

а если она работает, то это странно ...

P.S.: Я написал это не в ту тему, раньше. https://www.mql5.com/en/forum/172885.

 

Errata Corrige:

.... но этот указатель может быть действительным ....

но этот указатель НЕ МОЖЕТ быть действительным

 

Выполнить exe-файл

Здравствуйте,

Я хочу сделать простую вещь (так я думал). Я хочу просто открыть (запустить) внешнюю программу из советника. (не в советнике).

Просто для примера. Допустим, я хочу открыть Microsoft word, когда в советнике происходит определенная вещь.

Я уже делал это раньше, но не могу найти скрипт, я потратил 2 часа на поиск в Интернете. В следующий раз я сохраню код в надежном месте!

 

какой-то вопрос?

Я получил эту ошибку "2008.10.21 01:54:34 Fundamental Trader DailyFX_MQL4 v0.02: handle 2 does not exist in FileClose".

Как мне быть?