Статистику в файл

 

Сделал советника, который собирает статистику и выводит на экран при прогоне с визуализацией, а как вывести статистику в файл? Т.е. как вывести весь блок "Соммent" в файл?

static datetime   PrevTime=0;
extern int        Razvorot_Vos=0;
extern int        Prodolshenie_Vos=0;
extern int        Razvorot_Pad=0;
extern int        Prodolshenie_Pad=0;
extern int        Summ_Vos=0;
extern int        Razvorot_Vos_Proc=0;
extern int        Prodolshenie_Vos_Proc=0;
extern int        Summ_Pad=0;
extern int        Razvorot_Pad_Proc=0;
extern int        Prodolshenie_Pad_Proc=0;


int start()
{
  if (PrevTime!=Time[0]) 
  {
    PrevTime=Time[0];
    if (iOpen(NULL,0,1)>iClose(NULL,0,1) && iOpen(NULL,0,2)<iClose(NULL,0,2) && iOpen(NULL,0,3)<iClose(NULL,0,3) && iOpen(NULL,0,4)<iClose(NULL,0,4))
    {Razvorot_Vos++;}
    if (iOpen(NULL,0,1)<iClose(NULL,0,1) && iOpen(NULL,0,2)<iClose(NULL,0,2) && iOpen(NULL,0,3)<iClose(NULL,0,3) && iOpen(NULL,0,4)<iClose(NULL,0,4))
    {Prodolshenie_Vos++;}
    int Summ_Vos=Razvorot_Vos+Prodolshenie_Vos;
    if (Summ_Vos!=0)
    {Razvorot_Vos_Proc=Razvorot_Vos*100/Summ_Vos; Prodolshenie_Vos_Proc=Prodolshenie_Vos*100/Summ_Vos;}
    
    if (iOpen(NULL,0,1)<iClose(NULL,0,1) && iOpen(NULL,0,2)>iClose(NULL,0,2) && iOpen(NULL,0,3)>iClose(NULL,0,3) && iOpen(NULL,0,4)>iClose(NULL,0,4))
    {Razvorot_Pad++;}
    if (iOpen(NULL,0,1)>iClose(NULL,0,1) && iOpen(NULL,0,2)>iClose(NULL,0,2) && iOpen(NULL,0,3)>iClose(NULL,0,3) && iOpen(NULL,0,4)>iClose(NULL,0,4))
    {Prodolshenie_Pad++;}
    int Summ_Pad=Razvorot_Pad+Prodolshenie_Pad;
    if (Summ_Pad!=0)
    {Razvorot_Pad_Proc=Razvorot_Pad*100/Summ_Pad; Prodolshenie_Pad_Proc=Prodolshenie_Pad*100/Summ_Pad;}
    
    Comment 
    (" После трех бычьих свечей: ","\n",
    "идет медвежья свеча в ", Razvorot_Vos, " случаях, ", "вероятность ", Razvorot_Vos_Proc, "%", "\n",
    "идет бычья свеча в ",  Prodolshenie_Vos,  " случаях, ", "вероятность ", Prodolshenie_Vos_Proc, "%", "\n",
    " После трех медвежьих свечей: ","\n",
    "идет бычья свеча в ", Razvorot_Pad, " случаях, ", "вероятность ", Razvorot_Pad_Proc, "%", "\n",
    "идет медвежья свеча в ",  Prodolshenie_Pad,  " случаях, ", "вероятность ", Prodolshenie_Pad_Proc, "%");
  }
  return(0);
}
//+------------------------------------------------------------------+
Файлы:
 

Запишите всю необходимую информацию в массив, а потом в нужном месте выведите ее в файл одной функцией:

//+------------------------------------------------------------------+
//| запись содержимого файла в массив строк array[]                  |
//| в случае неудачи вернем false                                    |
//+------------------------------------------------------------------+
bool ReadFileToArray(string &array[],string FileName, string WorkFolderName)
  {
   bool res=false;
   int FileHandle;
   string tempArray[64000],currString;
   int stringCounter;
   int devider='\x90';
   string FullFileName;
   if (StringLen(WorkFolderName)>0) FullFileName=StringConcatenate(WorkFolderName,"\\",FileName);
   else FullFileName=FileName;
//----
   Print("Попытка прочитать файл ",FileName);
   FileHandle=FileOpen(FullFileName,FILE_READ,devider);
   if (FileHandle!=-1)
      {
      while(!FileIsEnding(FileHandle)) 
         {
         tempArray[stringCounter]=FileReadString(FileHandle);
         stringCounter++;
         }
      stringCounter--;
      if (stringCounter>0) 
         {
         ArrayResize(array,stringCounter);
         for (int i=0;i<stringCounter;i++) array[i]=htmlToXML_2(tempArray[i]);
         res=true;
         }
      FileClose(FileHandle);   
      }
   else
      {
      Print("Не удалось прочитать файл ",FileName);
      }      
//----
   return(res);
  }
 

Я дамал запись в файл проще.

Ладно, спасибо, буду разбираться.

 
Alfa писал (а) >>

Я дамал запись в файл проще.

Ладно, спасибо, буду разбираться.

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

//+------------------------------------------------------------------+
//| записывает содежимое массива строк в файл                        |
//+------------------------------------------------------------------+
void TestWrite(string Array[],string FileName)
   {
   
   int handle=-1;
   int size=ArraySize(Array);
   if (size==0 || StringLen(FileName)==0) return;
   if (StringLen(FileName)==0)
      {
      Print("Не задано имя для отладочного файла!");
      return;
      }
//----
   handle=FileOpen(FileName,FILE_WRITE|FILE_CSV);
   if (handle==-1) 
      {
      Print("Не удалось открыть файл ",FileName);
      return;
      }
   if (handle>0) for (int i=0;i<size;i++) FileWrite(handle,Array[i]);
   if (handle>0) FileClose(handle);
//----
   return;
   }
 

Спасибо!

Значит мне все что в "Comment" нужно в строковый массив записать, а потом уже этот массив в файл.

Буду пробовать.

 
Alfa писал (а) >>

Спасибо!

Значит мне все что в "Comment" нужно в строковый массив записать, а потом уже этот массив в файл.

Буду пробовать.

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

 
Alfa писал (а) >>

Спасибо!

Буду пробовать.

Тут на форуме есть статьи по применению статистики (штуки четыре). Может будут полезны.

 
StatBars писал (а) >>

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

А в скрипте как вывести статистику (результаты) в файл?

А по поводу бесполезности - возможно, что и так. Но мы же русские люди, пока не удостоверимся - не поверим.

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

 
sergeev писал (а) >>

Тут на форуме есть статьи по применению статистики (штуки четыре). Может будут полезны.

Я некоторые читал, но довольно тяжело для понимания награмождения математических формул. Мне бы что попроще. Может ссылоччкой поделишься?

 
Alfa писал (а) >>

А в скрипте как вывести статистику (результаты) в файл?

А по поводу бесполезности - возможно, что и так. Но мы же русские люди, пока не удостоверимся - не поверим.

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

Точно так же как и в советнике.

Вот советник, скрипт не могу написать - занят :(


static datetime PrevTime=0;
extern int Razvorot_Vos=0;
extern int Prodolshenie_Vos=0;
extern int Razvorot_Pad=0;
extern int Prodolshenie_Pad=0;
extern int Summ_Vos=0;
extern int Razvorot_Vos_Proc=0;
extern int Prodolshenie_Vos_Proc=0;
extern int Summ_Pad=0;
extern int Razvorot_Pad_Proc=0;
extern int Prodolshenie_Pad_Proc=0;
//----------------------------------------------------------------+
int deinit(){
// если оптимизация то файл репорта не создаём
if(IsOptimization()==false) fail_pis(); return(0);}
//----------------------------------------------------------------+
int start()
{
if (PrevTime!=Time[0])
{
PrevTime=Time[0];
if (iOpen(NULL,0,1)>iClose(NULL,0,1) && iOpen(NULL,0,2)<iClose(NULL,0,2) && iOpen(NULL,0,3)<iClose(NULL,0,3) && iOpen(NULL,0,4)<iClose(NULL,0,4))
{Razvorot_Vos++;}
if (iOpen(NULL,0,1)<iClose(NULL,0,1) && iOpen(NULL,0,2)<iClose(NULL,0,2) && iOpen(NULL,0,3)<iClose(NULL,0,3) && iOpen(NULL,0,4)<iClose(NULL,0,4))
{Prodolshenie_Vos++;}
int Summ_Vos=Razvorot_Vos+Prodolshenie_Vos;
if (Summ_Vos!=0)
{Razvorot_Vos_Proc=Razvorot_Vos*100/Summ_Vos; Prodolshenie_Vos_Proc=Prodolshenie_Vos*100/Summ_Vos;}
if (iOpen(NULL,0,1)<iClose(NULL,0,1) && iOpen(NULL,0,2)>iClose(NULL,0,2) && iOpen(NULL,0,3)>iClose(NULL,0,3) && iOpen(NULL,0,4)>iClose(NULL,0,4))
{Razvorot_Pad++;}
if (iOpen(NULL,0,1)>iClose(NULL,0,1) && iOpen(NULL,0,2)>iClose(NULL,0,2) && iOpen(NULL,0,3)>iClose(NULL,0,3) && iOpen(NULL,0,4)>iClose(NULL,0,4))
{Prodolshenie_Pad++;}
int Summ_Pad=Razvorot_Pad+Prodolshenie_Pad;
if (Summ_Pad!=0)
{Razvorot_Pad_Proc=Razvorot_Pad*100/Summ_Pad; Prodolshenie_Pad_Proc=Prodolshenie_Pad*100/Summ_Pad;}
Comment
(" После трех бычьих свечей: ","\n",
"идет медвежья свеча в ", Razvorot_Vos, " случаях, ", "вероятность ", Razvorot_Vos_Proc, "%", "\n",
"идет бычья свеча в ", Prodolshenie_Vos, " случаях, ", "вероятность ", Prodolshenie_Vos_Proc, "%", "\n",
" После трех медвежьих свечей: ","\n",
"идет бычья свеча в ", Razvorot_Pad, " случаях, ", "вероятность ", Razvorot_Pad_Proc, "%", "\n",
"идет медвежья свеча в ", Prodolshenie_Pad, " случаях, ", "вероятность ", Prodolshenie_Pad_Proc, "%");
}
return(0);
}
//+------------------------------------------------------------------+

void fail_pis (){
int handle=FileOpen("report.txt",FILE_READ|FILE_WRITE,' ');
if(handle<1) return;
FileSeek(handle,FileSize(handle),SEEK_SET);
FileWrite(handle," После трех бычьих свечей: ","\n",
"идет медвежья свеча в ", Razvorot_Vos, " случаях, ", "вероятность ", Razvorot_Vos_Proc, "%", "\n",
"идет бычья свеча в ", Prodolshenie_Vos, " случаях, ", "вероятность ", Prodolshenie_Vos_Proc, "%", "\n",
" После трех медвежьих свечей: ","\n",
"идет бычья свеча в ", Razvorot_Pad, " случаях, ", "вероятность ", Razvorot_Pad_Proc, "%", "\n",
"идет медвежья свеча в ", Prodolshenie_Pad, " случаях, ", "вероятность ", Prodolshenie_Pad_Proc, "%");
FileClose(handle);}








 
Alfa писал (а) >>

Я некоторые читал, но довольно тяжело для понимания награмождения математических формул. Мне бы что попроще. Может ссылоччкой поделишься?

Вы наверно про статью от математика?

Вот статья https://www.mql5.com/ru/articles/1522 от ForexTools. У него в профиле сайт, где он выкладывал по сбору статистике скрипты.

Вот статья https://www.mql5.com/ru/articles/1536. Там как раз то что ты исследуешь. Пример сбора статистики для оценки японского анализа. Также и по индикаторам.

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