Вывод данных в файл

 
Доброе время суток!

Пишу програму для расчета вероятностей, и вывода значения вероятности в файл!
Сам только начал осваивать этот язык, поэтому опыта явно не хватает!
Синтаксических ошибок в программе нет, но значение вероятности она не выводит!

В чем причина не могу понять!

Может я что-то не так сделал. Может у кого есть идеи по улучшению программы.

Буду признателен за критику, идеи и предложения.
С уважением Юрий.

extern datetime BeginDate = D'2005.11.11';
extern datetime EndDate = D'2005.12.21';
#property indicator_buffers 2

double ExtMapBuffer1[];
double ExtMapBuffer2[];

//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
void start()
{
int i, b=0, bb=0, eb;
string comm, st;
double cc8, cc14, cc80, cc140, Del, Del0, Sum;
int M, N; ///переменные могут принимать только целые значения
cc8=0;
cc14=0;
cc80=0;
cc140=0;
Del=0;
Del0=0;
Sum=0;

string fn="Verojatnost"+Symbol()+Period()+" "+
TimeToStr(BeginDate, TIME_DATE)+"-"+
TimeToStr(EndDate, TIME_DATE)+".csv";


for (i=Bars; i>0; i--) {
if (Time[i]>=BeginDate && Time[i]<=EndDate) {
if (bb==0) bb=i; // фиксируем номер первого бара
cc8=iMA(NULL,0,8,0,MODE_SMMA,PRICE_CLOSE,i);
cc14=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,i);
cc80=iMA(NULL,0,8,-5,MODE_SMMA,PRICE_CLOSE,i);
cc140=iMA(NULL,0,14,-5,MODE_SMMA,PRICE_CLOSE,i);
Del=cc8-cc14;
Del0=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,i-5)-cc140;
if(Del<0.00005 && Del>-0.00005 && Del0>0) /// Если скользящая средняя 8-ми пересикает
/// 14-ти и точка пересечения скользящих со смещением ниже
{
if(Open[i+1]-Close[i+1]<Open[i]-Close[i]) /// проверяем следующая свеча после пересечения
/// белая или черная (должна черная)
M++;
else N++;
ExtMapBuffer1[i] = M;
ExtMapBuffer2[i] = N;
b++;
eb=i; // фиксируем номер последнего бара
}
}
Sum=M+N;
st=M/Sum;
WritingLineInFile(fn, st);

}

//+------------------------------------------------------------------+
//| Запись строки в файл |
//+------------------------------------------------------------------+
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);
}
}
//+------------------------------------------------------------------+


------------------------------------

Я не волшебник, я только учусь...
 

Когда открываете FileOpen, указывайте тип файла: бинари или текстовый.

int handle; handle=FileOpen("my_data.csv",FILE_CSV|FILE_READ,';'); if(handle<1) { Print("Файл my_data.dat не обнаружен, последняя ошибка ", GetLastError()); return(false); }
 
chv:

Когда открываете FileOpen, указывайте тип файла: бинари или текстовый.

int handle; handle=FileOpen("my_data.csv",FILE_CSV|FILE_READ,';'); if(handle<1) { Print("Файл my_data.dat не обнаружен, последняя ошибка ", GetLastError()); return(false); }
Очень признателен, за быстрый ответ.
Но и теперь данные не выводятся в файл, файл просто не появляется. ..
Может быть я где-то в самой програме допустил "смысловую" ошибку?
 

Какие ошибки выводятся в лог эксперта. Что говорит GetLastError?

 
stringo:

Какие ошибки выводятся в лог эксперта. Что говорит GetLastError?

Где это можно посмотреть?
 
Yura187 писал (а):
stringo писал (а):

Какие ошибки выводятся в лог эксперта. Что говорит GetLastError?

Где это можно посмотреть?


Лог выводится в файл terminal_dir\experts\logs\YYYYMMDD.log и во вкладку Experts терминала

GetLastError вызывается после вызова функции, чью работу Вы хотите проконтролировать

 
stringo:
Yura187 писал (а):
stringo писал (а):

Какие ошибки выводятся в лог эксперта. Что говорит GetLastError?

Где это можно посмотреть?


Лог выводится в файл terminal_direxpertslogsYYYYMMDD.log и во вкладку Experts терминала

GetLastError вызывается после вызова функции, чью работу Вы хотите проконтролировать

15:43:44 Script 2564 USDCAD,H1: loaded successfully
15:43:44 Script 2564 USDCAD,H1: removed
 
extern datetime BeginDate = D'2005.11.11';
extern datetime EndDate = D'2005.12.21';
#property indicator_buffers 2
 
double ExtMapBuffer1[];
double ExtMapBuffer2[];
 
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
void start()
{
int i, b=0, bb=0, eb;
string comm, st;
double cc8, cc14, cc80, cc140, Del, Del0, Sum;
int M, N; ///переменные могут принимать только целые значения
cc8=0;
cc14=0;
cc80=0;
cc140=0;
Del=0;
Del0=0;
Sum=0;
 
string fn="Verojatnost"+Symbol()+Period()+" "+
TimeToStr(BeginDate, TIME_DATE)+"-"+
TimeToStr(EndDate, TIME_DATE)+".csv";
 
 
for (i=Bars; i>0; i--) {
if (Time[i]>=BeginDate && Time[i]<=EndDate) {
if (bb==0) bb=i; // фиксируем номер первого бара
cc8=iMA(NULL,0,8,0,MODE_SMMA,PRICE_CLOSE,i);
cc14=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,i);
cc80=iMA(NULL,0,8,-5,MODE_SMMA,PRICE_CLOSE,i);
cc140=iMA(NULL,0,14,-5,MODE_SMMA,PRICE_CLOSE,i);
Del=cc8-cc14;
Del0=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,i-5)-cc140;
if(Del<0.00005 && Del>-0.00005 && Del0>0) /// Если скользящая средняя 8-ми пересикает
/// 14-ти и точка пересечения скользящих со смещением ниже
{
if(Open[i+1]-Close[i+1]<Open[i]-Close[i]) /// проверяем следующая свеча после пересечения
/// белая или черная (должна черная)
M++;
else N++;
ExtMapBuffer1[i] = M;
ExtMapBuffer2[i] = N;
b++;
eb=i; // фиксируем номер последнего бара
}
}
Sum=M+N;
st=M/Sum;
WritingLineInFile(fn, st);
 
}
 
//+------------------------------------------------------------------+
//| Запись строки в файл |
//+------------------------------------------------------------------+
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);
}
}
//+------------------------------------------------------------------+
 
Почему для начала не написать так?
if (Time[i]>=BeginDate && Time[i]<=EndDate) {
if(GetLastError()==0) Print("Гляди ка, считает чего-то все таки !?"); else Print("Какая то фигня на баре ",i);
if (bb==0) bb=i; // фиксируем номер первого бара
 
Yura187 писал (а):
15:43:44 Script 2564 USDCAD,H1: loaded successfully
15:43:44 Script 2564 USDCAD,H1: removed
Я же сказал, что надо смотреть лог эксперта terminal_dir\experts\logs\YYYYMMDD.log, а не лог терминала
 
stringo:
Yura187 писал (а):
15:43:44 Script 2564 USDCAD,H1: loaded successfully
15:43:44 Script 2564 USDCAD,H1: removed
Я же сказал, что надо смотреть лог эксперта terminal_direxpertslogsYYYYMMDD.log, а не лог терминала
15:45:29 2564 USDCAD,H1: loaded successfully
15:45:29 2564 USDCAD,H1: zero divide
15:45:29 2564 USDCAD,H1: removed
15:45:33 2564 USDCAD,H1: loaded successfully
15:45:33 2564 USDCAD,H1: zero divide
15:45:33 2564 USDCAD,H1: removed

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