- проблема с neuroshell2
- Запись по столбцам
- Ограниченное время работы роботы.
если ответить Вам, что можно, то Вы спросите как и напишете код самостоятельно?
если да, тогда возможно Вам поможет https://book.mql4.com/ru/functions/files, выводите в .csv с которым Exel прекрасно работает
Csv пишите.
Автоматизация позволяет закладывать данные в эксель- но работает слишком медленно.
Лажает как на модификации отдельных ячеек- так и на закладке большим блоком.
Как-то ковырялся с этим. Не использую.
Единственное- разберитесь с форматами дат- разделителями- форматом чисел.
Что-то можно через региональные настройки... настроить.
В целом- все зависит от задачи- что нужно.
если ответить Вам, что можно, то Вы спросите как и напишете код самостоятельно?
если да, тогда возможно Вам поможет https://book.mql4.com/ru/functions/files, выводите в .csv с которым Exel прекрасно работает
Ознакомился с указанной статьей. Прочитал аналогичную информацию в форуме. Не понял. Вся информация (пока для меня) фрагментальная и обрывистая и поэтому не смог её систематизировать. Нужен один полный проход (пример), чтобы понять полный (завершенный) цикл выполнения задачи.
Прошу помочь в решении задачи: в экселевой таблице - 1-я строка - "шапка" в колонках "Дата и время" "adx_main" "adx_plus" "adx_minus".
В конечном итоге, к примеру, должна быть таблица, в которой в строках будут указаны время с интервалом 15 минут и показания индикаторов.
//+------------------------------------------------------------------+
//| write_indikator.mq4 |
//| |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
string EASymbol; //--- Текущий символ
int init()
{
//----
EASymbol = Symbol(); //--- Инициализация текущено символа
//----
return(0);
}
int deinit()
{
//----
//----
return(0);
}
int start()
{
int Handle; // Файловый описатель
int Qnt_Symb; // Количество записанных симв.
string File_Name="indikators.csv"; // Имя файла
//----
if (NewBar() == true)
{
//----
double adx_main = iADX(EASymbol,PERIOD_M15,14,PRICE_CLOSE,MODE_MAIN,1);
double adx_plus = iADX(EASymbol,PERIOD_M15,14,PRICE_CLOSE,MODE_PLUSDI,1);
double adx_minus = iADX(EASymbol,PERIOD_M15,14,PRICE_CLOSE,MODE_MINUSDI,1);
//--------------------------------------------------------------- 3 --
Handle=FileOpen(File_Name,FILE_CSV|FILE_READ|FILE_WRITE,";");// Открытие файла
if(Handle<0) // Неудача при открытии файла
{
if(GetLastError()==4103) // Если файла не существует,..
Alert("Нет файла с именем ",File_Name);//.. извещаем трейдера
else // При любой другой ошибке..
Alert("Ошибка при открытии файла ",File_Name);//..такое сообщ
return; // Выход из start()
}
Qnt_Symb=FileWrite(Handle,adx_main,adx_plus,adx_minus );//Запись в файл
if(Qnt_Symb < 0) // Если не получилось
{
Alert("Ошибка записи в файл ",GetLastError());// Сообщение
FileClose( Handle ); // Закрываем файл
return; // Выход из start()
}
//----
}
return(0);
}
//+------------------------------------------------------------------+
bool NewBar()
{
static datetime lastbar = 0;
datetime curbar = Time[0];
if(lastbar!=curbar)
{
lastbar=curbar;
return (true);
} else return(false);
}
ЗАРАНЕЕ БЛАГОДАРЕН.
Сергей.
OK, значит будете писать самостоятельно код, это обнадеживает, вот пример от метаквот: https://www.mql5.com/ru/code/7716
и вот еще в один отличный примерчик https://www.mql5.com/ru/code/9781
void WriteToFile() { string FileName, TimeString; FileName = "8currencyIndexClear" + Period()+"_"+ChartBars; //задаем имя файла int i, index, FileHandle, ChrtBars; ChrtBars = ChartBars; index = 1; FileHandle = FileOpen(FileName, FILE_CSV | FILE_WRITE, ";"); if (FileHandle >= 0) { FileWrite(FileHandle, ChrtBars); //пишем размер выборки for (i = 0; i < ChrtBars; i++) { TimeString = TimeToStr( Time[i], TIME_DATE|TIME_MINUTES); FileWrite(FileHandle, TimeString, b0[i], b1[i], b2[i], b3[i], b4[i], b5[i], b6[i], b7[i]); } FileClose( FileHandle); } }Привет, тезка! Покопался в своих индюках. Наиболее близко то, что ты видишь. Надеюсь, разберешься. Если, что, пиши в личку.
Ознакомился с указанной статьей. Прочитал аналогичную информацию в форуме. Не понял.
не относится к теме вопроса, разобраться с тем как это работает и затем переложить на свой код.
OK, значит будете писать самостоятельно код, это обнадеживает, вот пример от метаквот: https://www.mql5.com/ru/code/7716
и вот еще в один отличный примерчик https://www.mql5.com/ru/code/9781
Благодарю за отзыв. Конечно буду решать задачу самостоятельно, только нужна помощь. Исходя из тех трех примеров, которые мне были рекомендованы, я подкорректировал код, сейчас он очень простой. Мне важно решить следующее: при открытии нового бара должна происходить запись - дата, время и показания нескольких индикаторов. Вот мой шаблон . Пожалуйста подкорректируйте код. Заранее благодарю.
//+------------------------------------------------------------------+
//| write_indikator.mq4 |
//| |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
string EASymbol; //--- Текущий символ
int ChartBars;
extern string File_name = "";
int Handle; // Файловый описатель
extern string Delimiter = ";";
int init()
{
EASymbol = Symbol(); //--- Инициализация текущено символа
if(File_name == "")File_name = Symbol() + Period() + "_Write_ind";
Handle = FileOpen(File_name,FILE_READ | FILE_WRITE | FILE_CSV, Delimiter);
if(Handle == -1){Alert("Ошибка при открытии файла ", File_name + ".csv");}
else{FileWrite(Handle,"Time;adx_main;adx_plus;adx_minus;_Write_ind");}
return(0);
}
int deinit()
{
FileClose(Handle);
return(0);
}
int start()
{
//----
if (NewBar() == true)
{
//--вычисляем значения индикаторов --
double adx_main = iADX(EASymbol,PERIOD_M15,14,PRICE_CLOSE,MODE_MAIN,1);
double adx_plus = iADX(EASymbol,PERIOD_M15,14,PRICE_CLOSE,MODE_PLUSDI,1);
double adx_minus = iADX(EASymbol,PERIOD_M15,14,PRICE_CLOSE,MODE_MINUSDI,1);
//----
WriteToFile(File_name,Handle,adx_main,adx_plus,adx_minus);
}
return(0);
}
//+------------------------------------------------------------------+
void WriteToFile(string d, int f, double a, double b,double c)
{
int status;
string TimeString;
if(f < 0) // Неудача при открытии файла
{
if(GetLastError()==4103) // Если файла не существует,..
Alert("Нет файла с именем ",d);//.. извещаем трейдера
else // При любой другой ошибке..
Alert("Ошибка при открытии файла ",d);//..такое сообщ
return;
}
TimeString = TimeToStr(Time[1],TIME_DATE|TIME_MINUTES);
FileSeek(d,0,SEEK_END);
status = FileWrite(d,TimeString,a,b,c);//Запись в файл
if(status < 0) // Если не получилось
{
Alert("Ошибка записи в файл ",GetLastError());// Сообщение
return;
}
}
bool NewBar()
{
static datetime lastbar = 0;
datetime curbar = Time[0];
if(lastbar!=curbar)
{
lastbar=curbar;
return (true);
} else return(false);
}
Привет, тезка! Покопался в своих индюках. Наиболее близко то, что ты видишь. Надеюсь, разберешься. Если, что, пиши в личку.
string EASymbol; //--- Текущий символ int ChartBars; extern string File_name = ""; int Handle; // Файловый описатель extern string Delimiter = ";"; int init() { EASymbol = Symbol(); //--- Инициализация текущено символа if(File_name == "")File_name = Symbol() + Period() + "_Write_ind"; Handle = FileOpen(File_name,FILE_READ | FILE_WRITE | FILE_CSV, Delimiter); if(Handle == -1){Alert("Ошибка при открытии файла ", File_name + ".csv");} else{FileWrite(Handle,"Time;adx_main;adx_plus;adx_minus;_Write_ind");} return(0); } int deinit() {FileClose(Handle);return(0);} int start() { //---- if (NewBar() == true) { //--вычисляем значения индикаторов -- double adx_main = iADX(EASymbol,PERIOD_M15,14,PRICE_CLOSE,MODE_MAIN,1); double adx_plus = iADX(EASymbol,PERIOD_M15,14,PRICE_CLOSE,MODE_PLUSDI,1); double adx_minus = iADX(EASymbol,PERIOD_M15,14,PRICE_CLOSE,MODE_MINUSDI,1); //---- WriteToFile(File_name,Handle,adx_main,adx_plus,adx_minus); } return(0); } //+------------------------------------------------------------------+ void WriteToFile(string d, int f, double a, double b,double c) { int status; string TimeString; if(f < 0) // Неудача при открытии файла { if(GetLastError()==4103) // Если файла не существует,.. Alert("Нет файла с именем ",d);//.. извещаем трейдера else // При любой другой ошибке.. Alert("Ошибка при открытии файла ",d);//..такое сообщ return; } TimeString = TimeToStr(Time[1],TIME_DATE|TIME_MINUTES); FileSeek(d,0,SEEK_END); status = FileWrite(d,TimeString,a,b,c);//Запись в файл if(status < 0) // Если не получилось { Alert("Ошибка записи в файл ",GetLastError());// Сообщение return; } } bool NewBar() { static datetime lastbar = 0; datetime curbar = Time[0]; if(lastbar!=curbar) { lastbar=curbar; return (true); } else return(false); }Не получается. Мне надо к примеру, прикрепить к 15 мин графику и снимать показания индикаторов. А он мне пишет "Ошибка записи, 4051". Что надо изменить? Не записывается файл.
Не получается. Мне надо к примеру, прикрепить к 15 мин графику и снимать показания индикаторов. А он мне пишет "Ошибка записи, 4051". Что надо изменить? Не записывается файл.
Ошибка записи в следующих двух строчках. Я их исправил.
FileSeek(f,0,SEEK_END);
status = FileWrite(f,TimeString,a,b,c);//Запись в файл
Да, и в твоем коде я не нашел первую строчку:
#property indicator_chart_window
Надеюсь, она просто не скопировалась.
Ошибка записи в следующих двух строчках. Я их исправил.
Да, и в твоем коде я не нашел первую строчку:
Надеюсь, она просто не скопировалась.
Изменил переменную d на f. Не работает. Когда была переменная d советник выдавал сообщение об ошибке 4051, а при переменной f вообще никаких действий. Что-то не так. Посмотри пожалуйста ещё, код прилагаю.
//+------------------------------------------------------------------+ //| write_indikator.mq4 | //| | //+------------------------------------------------------------------+ #property copyright "" #property link "" //#property indicator_chart_window string EASymbol; //--- Текущий символ int ChartBars; extern string File_name = ""; int Handle; // Файловый описатель extern string Delimiter = ";"; int init() { EASymbol = Symbol(); //--- Инициализация текущено символа if(File_name == "")File_name = Symbol() + Period() + "_Write_ind"; Handle = FileOpen(File_name,FILE_READ | FILE_WRITE | FILE_CSV, Delimiter); if(Handle == -1){Alert("Ошибка при открытии файла ", File_name + ".csv");} else{FileWrite(Handle,"Time;adx_main;adx_plus;adx_minus;_Write_ind");} return(0); } int deinit() { FileClose(Handle); return(0); } int start() { //---- if (NewBar() == true) { //--вычисляем значения индикаторов -- double adx_main = iADX(EASymbol,PERIOD_M15,14,PRICE_CLOSE,MODE_MAIN,1); double adx_plus = iADX(EASymbol,PERIOD_M15,14,PRICE_CLOSE,MODE_PLUSDI,1); double adx_minus = iADX(EASymbol,PERIOD_M15,14,PRICE_CLOSE,MODE_MINUSDI,1); //---- WriteToFile(File_name,Handle,adx_main,adx_plus,adx_minus); } return(0); } //+------------------------------------------------------------------+ void WriteToFile(string d, int f, double a, double b,double c) { int status; string TimeString; if(f < 0) // Неудача при открытии файла { if(GetLastError()==4103) // Если файла не существует,.. Alert("Нет файла с именем ",d);//.. извещаем трейдера else // При любой другой ошибке.. Alert("Ошибка при открытии файла ",d);//..такое сообщ return; } TimeString = TimeToStr(Time[1],TIME_DATE|TIME_MINUTES); FileSeek(f,0,SEEK_END); status = FileWrite(f,TimeString,a,b,c);//Запись в файл if(status < 0) // Если не получилось { Alert("Ошибка записи в файл ",GetLastError());// Сообщение return; } } bool NewBar() { static datetime lastbar = 0; datetime curbar = Time[0]; if(lastbar!=curbar) { lastbar=curbar; return (true); } else return(false); }
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования