Импорт данных из .xlsx - страница 3

 
Уважаемые программисты! Встречал программу индикатора, где код мкл содержал коды строк экзель и все это работало. Где можно прочитать про такой способ кодирования на МКЛ?
 
Yousufkhodja Sultonov:
Уважаемые программисты! Встречал программу индикатора, где код мкл содержал коды строк экзель и все это работало. Где можно прочитать про такой способ кодирования на МКЛ?

Доступ к Excel через сторонние средства ограничен, не говоря уже о том, что нативных средств на уровне MQL просто нет. Лицензионные ограничения не дают пользоваться Office даже через Visual Studio, если офис не установлен на ПК. Не знаю что Вы видели, но навряд ли это то, что Вам показалось.

Другое дело, что современный формат *.xlsx это по сути XML сжатый в zip. Т.е. не проблема получить доступ к файлу напрямую и читать и писать ячейки таблицы прямо из MQL. У меня даже была идея написать библиотеку на MQL для работы с Excel и опубликовать статью, описывающую эту библиотеку. Если сообществу будет интересна данная тематика - могу написать.

 
Vasiliy Sokolov:

Доступ к Excel через сторонние средства ограничен, не говоря уже о том, что нативных средств на уровне MQL просто нет. Лицензионные ограничения не дают пользоваться Office даже через Visual Studio, если офис не установлен на ПК. Не знаю что Вы видели, но навряд ли это то, что Вам показалось.

Другое дело, что современный формат *.xlsx это по сути XML сжатый в zip. Т.е. не проблема получить доступ к файлу напрямую и читать и писать ячейки таблицы прямо из MQL. У меня даже была идея написать библиотеку на MQL для работы с Excel и опубликовать статью, описывающую эту библиотеку. Если сообществу будет интересна данная тематика - могу написать.

Было бы чудненько, из MQL работать с Excel и Pdf
 
Vasiliy Sokolov:

...

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

Интересно конечно. Напишите, пожалуйста. ) 

pako:
Было бы чудненько, из MQL работать с Excel и Pdf

Да, и с Excel и с Pdf. С Pdf интереснее даже в некоторых случаях. ;) 

 
Anatoli Kazharski:

Интересно конечно. Напишите, пожалуйста. ) 

Да, и с Excel и с Pdf. С Pdf интереснее даже в некоторых случаях. ;) 

Вот с pdf едва ли получиться. Ибо формат совсем другой. 
 
Vasiliy Sokolov:
Вот с pdf едва ли получиться. Ибо формат совсем другой. 

Вот пример интеграции Excel в код МКЛ, о чем говорил выше (если я при этом нарушил какие-то правила публикации части кода, модераторов прошу удалить данный пост):

//////////////////////////////////////////////////////////////////////
   ////////////////// Столбец N         t
        double  N[];
        ArrayResize( N , iPeriod );
        ArrayInitialize( N , 0 );
   N[0] = 0.0;
   double Summ_N = 0.0;
   for( i=1; i<iPeriod; i++ )
   {
           N[i]=ExcelIF(L[i]>0,(K[i]+K[i-1])/2,ExcelIF(L[i]<0,(K[i]+K[i-1])/2,0));
           Summ_N += N[i];
   }



   step++;
   err= GetLastError();
   if (err!=0) 
   {
      Print("Step:", step, "; Err:", err);
      return(0);
   }
   //////////////////////////////////////////////////////////////////////
   ////////////////// Столбец O         C=y
        double  O[];
        ArrayResize( O , iPeriod );
        ArrayInitialize( O , 0 );
   O[0] = 0.0;
   double Summ_O = 0.0;
   for( i=1; i<iPeriod; i++ )
   {
           O[i]=ExcelIF(N[i]>0,(L[i]-L[i-1]),0);
           if (O[i]==0) O[i] = Point;
           Summ_O += O[i];
   }



   step++;
   err= GetLastError();
   if (err!=0) 
   {
      Print("Step:", step, "; Err:", err);
      return(0);
   }
   //////////////////////////////////////////////////////////////////////
   ////////////////// Столбец P         LnC/t
        double  P[];
        ArrayResize( P , iPeriod );
        ArrayInitialize( P , 0 );
   P[0] = 0.0;
   double Summ_P = 0.0;
   for( i=1; i<iPeriod; i++ )
   {
           if (N[i]<=0) continue;
           P[i]=ExcelIF(O[i]<0,MathLog(-O[i]/N[i]),MathLog(O[i]/N[i]))*ExcelIF(O[i]==0,0,1);
           Summ_P += P[i];
           //Print(i,": O=", O[i],"; P=", P[i], "; Summ_P=", Summ_P);
   }

   step++;
   err= GetLastError();
   if (err!=0) 
   {
      Print("Step:", step, "; Err:", err);
      return(0);
   }
   //////////////////////////////////////////////////////////////////////
   ////////////////// Столбец Q         tLnC/t
        double  Q[];
        ArrayResize( Q , iPeriod );
        ArrayInitialize( Q , 0 );
   Q[0] = 0.0;
   double Summ_Q = 0.0;
   for( i=1; i<iPeriod; i++ )
   {
           Q[i]=ExcelIF(K[i]>0,N[i]*P[i],0);
           Summ_Q += Q[i];
   }



   step++;
   err= GetLastError();
   if (err!=0) 
   {
      Print("Step:", step, "; Err:", err);
      return(0);
   }
   //////////////////////////////////////////////////////////////////////
   ////////////////// Столбец R         t^2
        double  R[];
        ArrayResize( R , iPeriod );
        ArrayInitialize( R , 0 );
   R[0] = 0.0;
   double Summ_R = 0.0;
   for( i=1; i<iPeriod; i++ )
   {
           R[i]=N[i]*N[i];
           Summ_R += R[i];
   }



   step++;
   err= GetLastError();
   if (err!=0) 
   {
      Print("Step:", step, "; Err:", err);
      return(0);
   }
   //////////////////////////////////////////////////////////////////////
   ////////////////// Столбец S         T
        double  S[];
        ArrayResize( S , iPeriod );
        ArrayInitialize( S , 0 );
   S[0] = 0.0;
   double Summ_S = 0.0;
   for( i=1; i<iPeriod; i++ )
   {
           S[i]=MathAbs((I[i]*Summ_R-Summ_N*Summ_N)/(Summ_N*Summ_P-I[i]*Summ_Q));
           Summ_S += S[i];
   }



   step++;
   err= GetLastError();
   if (err!=0) 
   {
      Print("Step:", step, "; Err:", err);
      return(0);
   }
   //////////////////////////////////////////////////////////////////////
   ////////////////// Столбец B         x^2
        double  B[];
        ArrayResize( B , iPeriod );
        ArrayInitialize( B , 0 );
   double Summ_B = 0.0;
   for( i=0; i<iPeriod; i++ )
   {
           B[i]=N[i]*N[i];
           Summ_B += B[i];
   }



   step++;
   err= GetLastError();
   if (err!=0) 
   {
      Print("Step:", step, "; Err:", err);
      return(0);
   }
   //////////////////////////////////////////////////////////////////////
   ////////////////// Столбец A         xy
        double  A[];
        ArrayResize( A , iPeriod );
        ArrayInitialize( A , 0 );
   double Summ_A = 0.0;
   for( i=0; i<iPeriod; i++ )
   {
           A[i]=N[i]*O[i];
           Summ_A += A[i];
   }



   step++;
   err= GetLastError();
   if (err!=0) 
   {
      Print("Step:", step, "; Err:", err);
      return(0);
   }
   //////////////////////////////////////////////////////////////////////
   ////////////////// Столбец C         b
        double  C[];
        ArrayResize( C , iPeriod );
        ArrayInitialize( C , 0 );
   double Summ_C = 0.0;
   for( i=0; i<iPeriod; i++ )
   {
           C[i]=(I[i]*Summ_A-Summ_N*Summ_O)/((I[i]*Summ_B-Summ_N*Summ_N));
           Summ_C += C[i];
   }



   step++;
   err= GetLastError();
   if (err!=0) 
   {
      Print("Step:", step, "; Err:", err);
      return(0);
   }
   //////////////////////////////////////////////////////////////////////
   ////////////////// Столбец D         Yr
        double  D[];
        ArrayResize( D , iPeriod );
        ArrayInitialize( D , 0 );
   double Summ_D = 0.0;
   for( i=0; i<iPeriod; i++ )
   {
           D[i]=(Summ_O*Summ_B-Summ_N*Summ_A)/(I[i]*Summ_B-Summ_N*Summ_N)+C[i]*J[i];
           Summ_D += D[i];
   }



   step++;
   err= GetLastError();
   if (err!=0) 
   {
      Print("Step:", step, "; Err:", err);
      return(0);
   }
   //////////////////////////////////////////////////////////////////////
   ////////////////// Столбец H         Тр3
        double  H[];
        ArrayResize( H , iPeriod );
        ArrayInitialize( H , 0 );
   double Summ_H = 0.0;
   for( i=0; i<iPeriod; i++ )
   {
           H[i]=ExcelIF(D[i]>0,1,-1);
           Summ_H += H[i];
   }
 
Yousufkhodja Sultonov:

Вот пример интеграции Excel в код МКЛ, о чем говорил выше:

Это не интеграция а имитация.

Код создает обычные массивы MQL и работает с ними в стиле Excel. 

 
Vasiliy Sokolov:
Вот с pdf едва ли получиться. Ибо формат совсем другой. 
Жаль
 
Vasiliy Sokolov:

Это не интеграция а имитация.

Код создает обычные массивы MQL и работает с ними в стиле Excel. 

Имел ввиду, что, путем такой имитации, удается полностью интегрировать столбцы Excel в МКЛ, т. е., запрограммировать в Excel, проверить расчеты и внедрить все столбцы в МКЛ. Так?

 
Yousufkhodja Sultonov:

Имел ввиду, что, путем такой имитации, удается полностью интегрировать столбцы Excel в МКЛ, т. е., запрограммировать в Excel, проверить расчеты и внедрить все столбцы в МКЛ. Так?

Нет, не так. Просто кому-то было удобнее работать с массивами в стиле Excel. Приведенный код никак не взаимодействует с Excel файлами. Он просто работает с MQL массивами в стиле Excel.
Причина обращения: