Ошибки, баги, вопросы - страница 2441

 
Sergey Dzyublik:

Может MD5 от ex5 файла?
Может внутри ex5 файла хранится, поищите с помощью hex редактора...

Так нужно через MQL5 получить какую-нибудь хэш-сумму самого себя.

 
 SSASultonov.mqh |
//|                                            Copyright 2018, IgorM |
//|                              https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict

double FactorialsTable[21]=
  {
   1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,87178291200,1307674368000,
   20922789888000,355687428096000,6402373705728000,121645100408832000,2432902008176640000
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CSSASultonov
  {
private:
   int               mcountSLAE;
   int               mdigits;
   double            Cx[],Cx2[],V1x[],C2xy[],C2xx[],V2xx[],C3xxy[],C3xxx[],V3xxx[];
   int               mSumN;
   double            calcV(int index);
   double            calcxx(int index1,int index2,int shift);
   double            Factorial(const int n);
public:
                     CSSASultonov(int countSLAE,int digits);
                    ~CSSASultonov();
   void              SSA(int shift);
   double            a[5];
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CSSASultonov::CSSASultonov(int countSLAE,int digits)
  {
   mcountSLAE=countSLAE;
   mdigits=digits;
   ArrayResize(Cx,mcountSLAE);
   ArrayResize(Cx2,mcountSLAE);
   ArrayResize(V1x,mcountSLAE);
   ArrayResize(C2xy,mcountSLAE);
   ArrayResize(V2xx,mcountSLAE-2);
   ArrayResize(C3xxy,mcountSLAE-2);
   ArrayResize(C3xxx,mcountSLAE-2);
   ArrayResize(V3xxx,mcountSLAE-3);
   mSumN=0;
   for(int i=1; i<=mcountSLAE; i++) mSumN+=i;
   int n=mcountSLAE-1;
   int size_cxx=(int)(Factorial(n)/((Factorial(n-2))*2));
   ArrayResize(C2xx,size_cxx);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CSSASultonov::~CSSASultonov()
  {
  }
//+------------------------------------------------------------------+
double CSSASultonov::calcxx(int index1,int index2,int shift)
  {
   double result=0.0;
   for(int i=0;i<mcountSLAE; i++)
     {
      result+=NormalizeDouble(Open[index1+i+shift],mdigits)*NormalizeDouble(Open[i+shift+index2],mdigits);
     }
   return(result);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CSSASultonov::calcV(int index)
  {
   return(NormalizeDouble((-0.5+sqrt(0.25+2.0 *mSumN))*Cx2[index]-Cx[index]*Cx[index],8));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CSSASultonov::SSA(int shift)
  {
   int i,j;
   double open;
   ZeroMemory(a);
   ZeroMemory(Cx);
   ZeroMemory(Cx2);
   ZeroMemory(V1x);
   ZeroMemory(C2xy);
   ZeroMemory(C2xx);
   ZeroMemory(V2xx);
   ZeroMemory(C3xxy);
   ZeroMemory(C3xxx);
   ZeroMemory(V3xxx);
// формулы   27 - 35 суммы столбцов:
// AI = Cx[0]  AJ = Cx[1] AK = Cx[2] AL = Cx[3] AM = Cx[4]
   for(i=0;i<mcountSLAE; i++)
     {
      for(j=0;j<mcountSLAE; j++)
        {
         open=NormalizeDouble(Open[j+i+shift],mdigits);
         Cx[i]+=open;
         Cx2[i]+=open*open;
        }
      //AB - AE        
      //V(x1)   V(x2)   V(x3)   V(x4)
      V1x[i]=calcV(i);
     }
// формулы   17 - 26
   int countcxx=0;
   for(i=0;i<mcountSLAE; i++)
     {
// AF- AI
//C(x1y)        C(x2y)  C(x3y)  C(x4y)    
      C2xy[i]=NormalizeDouble((-0.5+sqrt(0.25+2.0 *mSumN))*calcxx(i,mcountSLAE-1,shift)-Cx[i]*Cx[mcountSLAE-1],8);
      for(j=i;j<mcountSLAE-2; j++)
        {
// AJ - AO       
//C(x1X2)       C(x1x3) C(x1x4) C(x2x3)=20      C(x2x4)=21      C(x3x4)=22         
         C2xx[countcxx]=NormalizeDouble((-0.5+sqrt(0.25+2.0 *mSumN))*calcxx(i,j+1,shift)-Cx[i]*Cx[j+1],8);
         countcxx++; // 0 = x1x2 (17) , 1 = x1x3 (18) , 2 = x1x4 (19) , 3= x2x3 (20) , 4 = x2x4 (21) , 5 = x3x4 (22)
        }
     }
// формулы   14,15,16
// AV - AX
// V(x1x2)=V2=14        V(x1x3)=15      V(x1x4)=16
   for(i=0;i<ArraySize(V2xx); i++) V2xx[i]=V1x[0]*V1x[i+1]-C2xx[i]*C2xx[i];
// формулы   11,12,13
// AS - AU
//C(x1x2y)=13   C(x1x3y)=12     C(x1x4y)=11
   for(i=0;i<ArraySize(C3xxy); i++) C3xxy[ArraySize(C3xxy)-i-1]=V1x[0]*C2xy[i+1]-C2xx[i]*C2xy[0];
// формулы   6,7,8
// AP - AR
// C(x1x2x3)=8  C(x1x2x4)=7     C(x1x3x4)=6
   C3xxx[0] = V1x[0]*C2xx[5] - C2xx[1]*C2xx[2];
   C3xxx[1] = V1x[0]*C2xx[4] - C2xx[0]*C2xx[2];
   C3xxx[2] = V1x[0]*C2xx[3] - C2xx[0]*C2xx[1];
// формулы   9,10
// AY - AZ
//V(x1x2x3)=V3=10       V(x1x2x4)=9
   V3xxx[0] = V2xx[0]*V2xx[2] - C3xxx[1]*C3xxx[1];
   V3xxx[1] = V2xx[0]*V2xx[1] - C3xxx[2]*C3xxx[2];
// формулы   3,4,5

// BC
// C(x1x2x4y)=3
   double Cx1x2x4y   = V2xx[0]*C3xxy[0] - C3xxy[2]*C3xxx[1];
// BA
// C(x1x2x3x4)=4
   double Cx1x2x3x4  = V2xx[0]*C3xxx[0] - C3xxx[2]*C3xxx[1];
// BB
// C(x1x2x3y)=C3=5
   double Cx1x2x3y   = V2xx[0]*C3xxy[1] - C3xxy[2]*C3xxx[2];
// формулы   1,2
// BE
// V(x1x2x3x4)=V4=2
   double Vx1x2x3x4 = V3xxx[1]*V3xxx[0] - Cx1x2x3x4 * Cx1x2x3x4;
// BD
// C(x1x2x3x4y)=C4=1
   double Cx1x2x3x4y= V3xxx[1]*Cx1x2x4y - Cx1x2x3x4 * Cx1x2x3y;
// расчет а   
   a[4] = Vx1x2x3x4!=0.0 ? Cx1x2x3x4y / Vx1x2x3x4 : 0.0;
   a[3] = V3xxx[1]!=0.0  ? (Cx1x2x3y - a[4]*Cx1x2x3x4) / V3xxx[1] : 0.0;
  
   a[2] = V2xx[0]!=0.0   ? (C3xxy[2] - a[3]*C3xxx[2] - a[4]*C3xxx[1])/V2xx[0] : 0.0;
   a[1] = V1x[0]!=0.0    ? (C2xy[0] - a[2]*C2xx[0] - a[3]*C2xx[1] - a[4]*C2xx[2])/V1x[0] : 0.0;
   a[0] = (Cx[4] - a[1]*Cx[0] - a[2]*Cx[1] - a[3]*Cx[2] - a[4]*Cx[3])/mcountSLAE;
/*
   Print("a[4] = ",a[4]);
   Print("a[3] = ",a[3]);
   Print("a[2] = ",a[2]);
   Print("a[1] = ",a[1]);
   Print("a[0] = ",a[0]);
*/
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CSSASultonov::Factorial(const int n)
  {
   if(n<0) return(0);
   if(n<=20) return(FactorialsTable[n]);
   else
     {
      double val=FactorialsTable[20];
      for(int i=21; i<=n; i++) val*=i;
      return(val);
     }
  }
//+------------------------------------------------------------------+

Как добавить код индикатора в статью? Так подойдет?
 
Помогите, пожалуйста, как грамотно и правильно вставить код индикатора в статью, который приведен в аттаче.
Файлы:
MQL4.zip  122 kb
 
fxsaber:

Так нужно через MQL5 получить какую-нибудь хэш-сумму самого себя.

Что бы решить задачу, вначале нужно понимать суть задачи, то есть найти, что это за хеш.
Для этого нужно иметь opt файл от конкретного ex5, затем распарсить opt файл согласно приведенным структурам.
Проверив адекватность полей после поля хешей наконец-то можно получить хеш.

Имея хеш и имея ex5 файл можно искать откуда он взялся, первых два варианта возможного происхождения хеша мной и были предложены:

Может MD5 от ex5 файла?
Может внутри ex5 файла хранится, поищите с помощью hex редактора...

 
Уважаемые форумчане, есть-ли во фрилансе услуга по подготовки статьи к изданию? Я сам подзабыл все правила и тонкости исполнения. Если нет, то, кто возьмется подготопить текст статьи "Системный индикатор" за оплату работы. Переписка в "личке", если не запрещено.
 
Yousufkhodja Sultonov:
Уважаемые форумчане, есть-ли во фрилансе услуга по подготовки статьи к изданию? Я сам подзабыл все правила и тонкости исполнения. Если нет, то, кто возьмется подготопить текст статьи "Системный индикатор" за оплату работы. Переписка в "личке", если не запрещено.
Увод любой работы в личные сообщения запрещён. Для всяких нестандартных работ во фрилансе есть категория «Обучение»
 
Vladimir Karputov:
Увод любой работы в личные сообщения запрещён. Для всяких нестандартных работ во фрилансе есть категория «Обучение»

Спасибо за напоминание, воспользуюсь этой категорией.

 
Sergey Dzyublik:

Что бы решить задачу, вначале нужно понимать суть задачи, то есть найти, что это за хеш.

Есть такой советник

void OnDeinit( const int )
{
  int Array[] = {123};
  
  FileSave((string)MQLInfoInteger(MQL_PROGRAM_HASH), Array);
}


Когда делаю проход, пишется файл с одним и тем же названием. Это правильно.


Затем перекомпилирую, прописав вместо 123 число 456.

После этого каждый проход будет писать соответствующий один и тот же файл, но уже с другим названием.


Вот такой функционал и нужно как-то реализовать. Т.е. если EX5 поменялся, то и создаваемые им названия файлов меняются.


ЗЫ Использование макроса __DATETIME__ не подходит.

 
fxsaber:

Вот такой функционал и нужно как-то реализовать. Т.е. если EX5 поменялся, то и создаваемые им названия файлов меняются.

а если вынести в подключаемую библиотеку .ex5 и ее перекомпилировать?

 
Igor Makanu:

а если вынести в подключаемую библиотеку .ex5 и ее перекомпилировать?

Что это изменит?