Вывод данных в файл - страница 2

 
По идеи программа считает значение скользящих средних, ищет точку пересечения, потом считает эти же скользящие но со смещением опять ищет точку пересечение, если точка пересечение скользящих находится ниже скользящих без смещение, то значит 8-ми дневная пересекла 14-ти дневную снизу вверх, далее проверяется следующая свеча после пересечения скользящих без смещения бела или черная, если белая, то суммируется один счетчик, если черная, то другой. Потом находится вероятность, значение которой и должно выводится в файл! Не понимаю, почему этого не происходит!!!
 
Yura187 писал (а):
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

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

Ваш эксперт явно сказал "zero divide". Пожалуйств, внимательно читайте справку MetaEditor

===
Существует ряд критических ошибок, при возникновении которых выполнение программы немедленно прерывается:
...
Константа Значение Описание
ERR_ZERO_DIVIDE 4013 Деление на 0
...
Если работа программы была прервана из-за критической ошибки, то при следующем запуске функции start или функции deinit можно прочитать код этой ошибки, используя функцию GetLastError(). Перед запуском функций start и deinit переменная last_error не сбрасывается.
===
Взято отсюда https://docs.mql4.com/ru/runtime/errors

просто-напросто эксперт вылетал раньше, чем начинал работать с файлои

 
Получается что счетчики N++ и M++ не суммируют...
Каким ещё способ можно реализовать счетчик?
 
Yura187 писал (а):
Получается что счетчики N++ и M++ не суммируют...

Я не могу сделать такой вывод. Вы сказали про некие счётчики, а код не представили
 
stringo:
Yura187 писал (а):
Получается что счетчики N++ и M++ не суммируют...

Я не могу сделать такой вывод. Вы сказали про некие счётчики, а код не представили
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);
}
}
//+------------------------------------------------------------------+
 
Yura187:
Получается что счетчики N++ и M++ не суммируют...
Каким ещё способ можно реализовать счетчик?

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

Деление на ноль происходит в строке
st=M/Sum;
Просто отформатируйте свой код (он абсолютно нечитаем), проследите логику и внесите исправления.
В качестве подсказки: самый первый проход цикла не меняет значений указанных счетчиков, что приводит к делению на ноль.
Если бы код был отформатирован, то эта ошибка сразу стала бы заметна.
 
Renat:
Yura187:
Получается что счетчики N++ и M++ не суммируют...
Каким ещё способ можно реализовать счетчик?

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

Деление на ноль происходит в строке
st=M/Sum;
Просто отформатируйте свой код (он абсолютно нечитаем), проследите логику и внесите исправления.
В качестве подсказки: самый первый проход цикла не меняет значений указанных счетчиков, что приводит к делению на ноль.
Если бы код был отформатирован, то эта ошибка сразу стала бы заметна.

Спасибо, буду думать.... :-)
Причина обращения: