[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 272

 
TarasBY:

J'ai déjà répondu à cette question, où à propos de multidevise - symbole actuel = Symbol() - ce n'est qu'un cas spécial.

P.S. Votre approche est intéressante : vous prenez le code de quelqu'un d'autre et vous essayez de l'adapter à votre logique - vous avez tous les droits, mais ne me demandez pas : "Pourquoi votre logique est différente de la mienne !



Je ne vais pas l'ajuster. Je veux juste étudier comment elle est mise en œuvre. Mais je ne copierai rien. Je suis intéressé de voir comment un pro pense. C'est la vraie raison. Alors, voilà.

Je regarde la fonction void fGet_MarketInfo (string fs_Symbol, int fi_Ticket = 0):

if (fs_Symbol != bs_Symbol || fi_Ticket < 0)

Cette variable n'est pas déclarée dans cette fonction. Il n'est pas non plus déclaré dans les deux autres fichiers de base (inclusion et fonction). Il n'est pas évident de savoir où le chercher. C'est ce que je demande. Je veux comprendre où il est apparu à l'origine, c'est-à-dire déclaré. Si ça ne vous dérange pas de me dire...

Il y a aussi une autre chose étrange avec une autre variable. Les lignes suivantes dans la fonctionbool fCheck_LevelsBLOC:

   if (fi_Type == 0) li_cmd = 0; else if (fi_Type == 1) li_cmd = 1;
    else if (fi_Type % 2 == 0) li_cmd = 1; else li_cmd = 0;
    ld_Price = bda_Price[li_cmd];

bda_Price [li_cmd] est mentionné pour la première fois dans la bibliothèqueb-PSI@Base.mqh:

bda_Price[2];

Leséléments du tableau ne sont pas spécifiés. Ils sont donc égaux à zéro chacun. Cela signifie qu'une expression quel que soit le paramètre du tableau li_cmd prendra la valeur 0 ?

ld_Price = bda_Price[li_cmd];
 
bikrus13:
Bonjour à tous. Veuillez répondre à tous ceux qui peuvent créer un script qui augmente les lots lors de l'ouverture d'une transaction.

Vous ouvrez un appel d'offres ici pour la satisfaction au travail ??? En général, ce ne sont pas les tâches qui satisfont...

Si vous ne comprenez pas quelque chose, demandez-nous, nous vous aiderons.

Ou bien allez au travail - vous serez satisfaits, vous et le travail... à titre onéreux

 
Est-il possible de trouver les prix (Ask et Bid) dans l'historique par temps à partir de l'EA ? Par exemple Asc 10 min ago ou 10 sec ago. Il existe des fonctions connues permettant d'obtenir une série chronologique de barres avec les prix d'ouverture et de clôture ainsi que les prix les plus bas sur une période donnée, mais à un moment précis, comment connaître les prix d'achat et de vente.
 
Dikii:
Est-il possible de trouver les prix (Ask et Bid) dans l'historique par temps à partir de l'EA ? Par exemple Asc 10 min ago ou 10 sec ago. Il existe des fonctions connues permettant d'obtenir une série chronologique de barres avec les prix d'ouverture et de clôture ainsi que les prix les plus bas sur une période donnée, mais à un moment précis, comment connaître les prix d'achat et de vente.

Il n'y a pas de demande, seulement des offres ! D'ailleurs, tout le monde aimerait ça, moi y compris !
 
borilunad:

Asq pas question, seulement Bid ! D'ailleurs, tout le monde aimerait ça, moi y compris !

Expliquez comment trouver l'enchère d'il y a 10 secondes, de préférence en code.
 

J'ai posé une question sur les tableaux plus tôt. On dirait qu'on n'y arrive toujours pas. Lorsque vous le passez sur le testeur, il y a une division par zéro. Cela signifie qu'il y a un zéro dans un tableau. Je n'arrive pas à savoir où se trouve l'erreur. Code en annexe. Les commentaires sont en russe dans WORDe. Désolé pour ça. Mon Metaeditor ne supporte pas la langue russe.

Aidez-moi à trouver l'erreur ou les erreurs. Et si ça ne vous dérange pas de les expliquer.

Неполучилось сразу и два файла поместить. Вордовский документ неразрешается всавлять. Как иначе проконтировать на русском незнаю , только полностью код скопировать с ворда и поместить сюда

//быстры MA
extern int     MA_Period1     =  8;
extern int     plius1         =  100;
extern int     MA_Shift1      =  0;
extern int     MA_Method1     =  0;                                                 
//медленый MA
extern int     MA_Period2     =  13;
extern int     plius2         =  100;
extern int     MA_Shift2      =  0;
extern int     MA_Method2     =  3;                                                 
//начало флета
//поиск флета по сигналу или время
extern bool  start       =  true;    // true ->по сигналу, false->по времени
// по сигналу начинаем с данного времени
extern int     startHourFlatMA        =  16;    
extern int     startMinFlatMA        =  00;
//сигнал есть, ждем пока закроется  BarEnd бар
extern int     BarEnd         =  240;
datetime       LastTime;
//datetime       startTime;
// по времени начьнем искать флет с
extern int     startHourFlat        =  0;   
extern int     startMinFlat         =  0;    
//конец флета в промежутке времени или по истечению времени
//начало промежутка
extern int     startHourEnd        =  4;    
extern int     startMinEnd         =  45;
//конец промежутка, и истечение времени по времени
extern int     endHourEnd        =  7;    
extern int     endMinEnd         =  30;

//включение фильтра Volumes
extern bool volFiltr = true;            //true -> включено,   false -> выключено
//skirtumas tarp penktadienio uzdarymo ir pirmadienio atidarymo
extern int   gep = 300;  
bool           susikirtimas = false;      //пересечение индикаторных линий
bool           flat; 
//массивы
double chPriceH[], chPriceL[], chPriceO[], chPriceC[], chTime[];
double avgPriceH[], avgPriceL[], avgPriceO[], avgPriceC[]; 
int iH, iL ,iO, iC, iT;
double C[], T[], y[];
int i = -1;                      // индекс массива
int j = -1;                      // индекс массива
int n = -1;                              // индекс массива
double max;                               //максимаьная разница между элементами масивов

int init ()
{
ArrayResize(chPriceH, 0);
ArrayResize(chPriceL, 0);
ArrayResize(chPriceO, 0);
ArrayResize(chPriceC, 0);
ArrayResize(chTime, 0);
ArrayResize(avgPriceH, 0); 
ArrayResize(avgPriceL, 0); 
ArrayResize(avgPriceO, 0); 
ArrayResize(avgPriceC, 0); 
ArrayResize (C, 0); 
ArrayResize (T, 0);
ArrayResize (y, 0);
}
 int start()
 {
   double volMA11, volMA12, volMA21, volMA22;  
   double x[], y[]; 
   
   Print("***старт***");
   
   if(!TF_F_NewBar())return(0);
 
   Print("---1-собираем данные индикаторов---");
   volMA11 = iCustom(NULL, 15, "volumeMA",  2, 1);         
   volMA12 = iCustom(NULL, 15, "volumeMA",  2, 2);
   volMA21 = iCustom(NULL, 15, "volumeMA",  3, 1);
   volMA22 = iCustom(NULL, 15, "volumeMA",  3, 2);
   Print("volMA11 = "+volMA11);
   Print("volMA12 = "+volMA12);
   Print("volMA21 = "+volMA21);
   Print("volMA22 = "+volMA22);
   Print("----1 данные собраны---END");   
   Print("---2 какой день недели--");
   if(DayOfWeek()==1 || DayOfWeek()==2 || DayOfWeek()==3 || DayOfWeek()==4)
   {         
      Print("DayOfWeek = "+DayOfWeek());
  Print("----2---END");    
      if(Hour() >= startHourFlatMA && Minute() >= startMinFlatMA)
  Print("---3 проверка времени, разрешается ли искать флет---");
      {
         Print("время начала флета >=  "+Hour()+":"+Minute());
 Print("----3--end");
 Print("---4 есть ли пересечение линий индикатора----");
         if(volMA21 - volMA11 > 0 && volMA12 - volMA22 > 0)
         {                                                                                   //если было пересечение
            susikirtimas = true;
            Print("пересечение = "+susikirtimas);
Print("---4---END");
Print("---5 жшдем окончания  M240 свечи--");
            LastTime = iTime(NULL, BarEnd, 1);
            Print("LastTime = "+LastTime);
            //startTime = Time[1];
         }      
         if(susikirtimas == true && iTime(NULL, BarEnd, 1)!= LastTime)
         {
            LastTime = iTime(NULL, BarEnd, 1);
            flat = true;
            Print("flat = "+flat);
         }
         if(flat == true)
         {
Print(-начало флета есть");
Print("-- 6 собираем данные в массивы--");
            //увеличиваем число элементов массива на один
            i++; 
            Print("увеличиваем длину массива в зависимости от i "); 
            ArrayResize(avgPriceH,i); 
            ArrayResize(avgPriceL,i); 
            ArrayResize(avgPriceO,i); 
            ArrayResize(avgPriceC,i);           
             
            Print("с каждой новой свечой должны получить новые элементы массивов");
            avgPriceH[i] = High[1];  Print("AVG элемент avgPriceH["+i+"] = "+avgPriceH[i]);   
            avgPriceL[i] = Low[1];   Print("AVG элемент avgPriceL["+i+"] = "+avgPriceL[i]);   
            avgPriceO[i] = Open[1];  Print("AVG элемент avgPriceO["+i+"] = "+avgPriceO[i]);   
            avgPriceC[i] = Close[1]; Print("AVG mэлементasyvo elementas avgPriceC["+i+"] = "+avgPriceC[i]);            
            j++; Print("индех канальных массивов  j = "+j);      
            ArrayResize(chPriceC,j); Print("CH masyvo ilgis chPriceC = "+j); 
            ArrayResize(chTime,j);     Print("CH masyvo ilgis chTime = "+j); 
            //включен ли фильтр
            if(volFiltr)
            {               
               //да
               Print("да включен");
               Print("volMA11 = "+volMA11, "   Volume[1] = "+Volume[1]); 
               if(volMA11 - Volume[1] >= 0)//фильтр
               {
                  Print("записываем Close[1] ir Time[1] в массивы");
                  chPriceC[j] = Close[1];  Print("masyvo elementas chPriceC["+j+"] = "+j);                   
                  chTime[j] = Time[1];     Print("masyvo elementas chTimev["+j+"] = "+j); 
               }
               else
               {
                  //renkam
                  chPriceC[j] = 0;    Print("masyvo elementas chPriceC["+j+"] = "+j); 
                  chTime[j] = 0;      Print("masyvo elementas chTimev["+j+"] = "+j); 
               }
            }
Print("получилис отфильтрваные массивы с нулями ");
            else // jei filtras isjungtas, tada duomenys kanalo skaiciavimui
            {
               //renkam
               Print("если фильтр выключен");
               Print("pradedam rinkti Close[1] ir Time[1] duomenis i masyvus po filtracijos");
               //chPriceH[j] = High[1]; Print("masyvo elementas chPriceH["+j+"] = "+j); 
               //chPriceL[j] = Low[1];  Print("masyvo elementas chPriceL["+j+"] = "+j); 
               chPriceC[j] = Close[1];  Print("masyvo elementas chPriceC["+j+"] = "+j); 
               //chPriceO[j] = Open[1]; Print("masyvo elementas chPriceO["+j+"] = "+j); 
               chTime[j] = Time[1];     Print("masyvo elementas chTimev["+j+"] = "+j);                                                                                              
            }
         //suzinom kokio ilgio masyvai
         Print("после того как массивы собраны узнаем их длину");
         Print("ArrayRange(chPriceC, 0) = "+iC);         
         Print("фильтруем их от нулей, после фильтрции длина массивов меньше чем была до фильтрции");                 
         for(int k = 0; k <= iC; k++)        
         {            
            if(chPriceC[k] > 0)          
            {
               n++;                           
                ArrayResize(C,n);
                ArrayResize(T,n);
                C[n] = chPriceC[k];
               T[n] = chTime[k];        
               Print("naujo masyvo elementas C["+n+"] = "+C[n]);
               Print("naujo masyvo elementas irasytas T["+n+"] = ",T[n]);
               Print("naujo atfiltruoto masyvo ilgis n = ",n);
            }
         }         
       }              
     }
   }
Print("так масивы набирается свеча за свечой пока несработает 7 – ая часть кода"); 

   Print("----------- 6 массивы набирается------------------------end");
Print("----------- 7 массивы набраны------------------------end"); 

   //if(DayOfWeek()==0 || DayOfWeek()==6) return(0);
   
   if(((Hour() >  startHourEnd && Minute() > startMinEnd) &&                                          //jei jau laikas po 6.30
Print("если начялось время начала поиска конца флета"); 

      (volMA11 - volMA21 > 0 && volMA22 - volMA12 > 0))  ||                               //пересечение индикаторных линий
      (Hour() >  endHourEnd && Minute() > endMinEnd))
      {                                                      // или кончилось время флета
        susikirtimas = false; //сбрасываем флаг начала пересичения инд. линий на вход во флет
         flat = false;  //сбрасываем флаг начала флета
         i = -1; //Возвращаем начальные индексы массивов
         j = -1;
   //ищем линию регрении     
        ArrayChLR(C, y, max);//ArrayLR(x, y)
//ищем точки для фибо уровней
        double y161Plus_1 = y[1] + max/50 * 161;
        double y261Plus_1 = y[1] + max/50 * 261;
        double y361Plus_1 = y[1] + max/50 * 361;
        double y423Plus_1 = y[1] + max/50 * 423;
        
        double y161Minus_1 = y[1] - max/50 * 161;
        double y261Minus_1 = y[1] - max/50 * 261;
        double y361Minus_1 = y[1] - max/50 * 361;
        double y423Minus_1 = y[1] - max/50 * 423;
        
        double y161Plus_2 = y[n-1] + max/50 * 161;
        double y261Plus_2 = y[n-1] + max/50 * 261;
        double y361Plus_2 = y[n-1] + max/50 * 361;
        double y423Plus_2 = y[n-1] + max/50 * 423;
        
        double y161Minus_2 = y[n-1] - max/50 * 161;
        double y261Minus_2 = y[n-1] - max/50 * 261;
        double y361Minus_2 = y[n-1] - max/50 * 361;
        double y423Minus_2 = y[n-1] - max/50 * 423;
        
        //turim po dvi kainos koordinate, o laiko galim paimti is masyvo T[]
        //galim brezti linijas
        //y=(y2-y1)/(x2-x1)*(x-x1)+y1
        double y161Plus_3 = (y161Plus_2-y161Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y161Plus_1;
        double y261Plus_3 = (y261Plus_2-y261Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y261Plus_1;
        double y361Plus_3 = (y361Plus_2-y361Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y361Plus_1;
        double y423Plus_3 = (y423Plus_2-y423Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y423Plus_1;
        
        double y161Minus_3 = (y161Plus_2-y161Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y161Plus_1;
        double y261Minus_3 = (y261Plus_2-y261Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y261Plus_1;
        double y361Minus_3 = (y361Plus_2-y361Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y361Plus_1;
        double y423Minus_3 = (y423Plus_2-y423Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y423Plus_1;
        //чертим линии 
        SetTLine(Thistle, "", T[1], y161Plus_1, StrToTime("20:00"), y161Plus_3, 0, 1);
        SetTLine(Thistle, "", T[1], y261Plus_1, StrToTime("20:00"), y261Plus_3, 0, 1);
        SetTLine(Thistle, "", T[1], y361Plus_1, StrToTime("20:00"), y361Plus_3, 0, 1);
        SetTLine(Thistle, "", T[1], y423Plus_1, StrToTime("20:00"), y423Plus_3, 0, 1);
        
        SetTLine(Thistle, "", T[1], y161Minus_1, StrToTime("20:00"), y161Minus_3, 0, 1);
        SetTLine(Thistle, "", T[1], y261Minus_1, StrToTime("20:00"), y261Minus_3, 0, 1);
        SetTLine(Thistle, "", T[1], y361Minus_1, StrToTime("20:00"), y361Minus_3, 0, 1);
        SetTLine(Thistle, "", T[1], y423Minus_1, StrToTime("20:00"), y423Minus_3, 0, 1);
        
         
      } 
      
   return(0);
 }

 //-----------------------------------------------------------------------------------------------------
 
void ArrayChLR(double& x[], double& y[], double& max) {
  double a, b, c, sx=0, sx2=0, sxy=0, sy=0;
  int    i, n=ArraySize(x);

  if (n>1) {
    for (i=0; i<n; i++) {
      sx+=i+1;
      sy+=x[i];
      sxy+=(i+1)*x[i];
      sx2+=(i+1)*(i+1);
    }
    a=sx*sy-n*sxy;
    c=sx*sx-n*sx2;
    if (c!=0) a=a/c; else a=0;
    b=(sy-a*sx)/n;
    ArrayResize(y, n);
    max = 0; 
    double dif[];
    ArrayResize(dif, n);
    for (i=0; i<n; i++) 
    {
      y[i]=a*(i+1)+b;
      dif[i] = MathAbs(Close[i] - y[i]);
      if(dif[i] > max) max = dif[i];      
    }
  } else Print("ArrayLR(): per mazas x masyvo elementu skaicius! n=", n);
}

 
Dossiers :
 
Dikii:
Est-il possible de trouver les prix (Ask et Bid) dans l'historique par temps à partir de l'EA ? Par exemple Asc 10 min ago ou 10 sec ago. Il existe des fonctions connues permettant d'obtenir des séries temporelles de barres avec les prix d'ouverture et de clôture et les creux des hausses au cours d'une certaine période, mais à un moment précis, comment trouver les prix d'achat et de vente.

Il y a un fichier ticks.raw dans le dossier /history/server/, à partir duquel vous pouvez théoriquement obtenir l'offre et la demande par les symboles de Market Watch pour une courte période avant le moment actuel. Faites une recherche sur le forum dans cette direction... De mémoire, je ne peux rien dire de précis sur le mécanisme de stockage des données dans ce fichier.
 
gince:

J'ai posé une question sur les tableaux plus tôt. On dirait qu'on n'y arrive toujours pas. Lorsque vous le passez sur le testeur, il y a une division par zéro. Cela signifie qu'il y a un zéro dans un tableau. Je n'arrive pas à savoir où se trouve l'erreur. Code en annexe. Les commentaires sont en russe dans WORDe. Désolé pour ça. Mon Metaeditor ne supporte pas la langue russe.

Aidez-moi à trouver l'erreur ou les erreurs. Et si ça ne vous dérange pas de les expliquer.


Je recommande d'écrire Print(à ce que nous divisons) avant chaque division - vous saurez immédiatement où se trouve le zéro.
 
alsu:

Je recommande d'entrer Print(à ce que nous divisons) ; avant chaque division, vous saurez immédiatement où se trouve le zéro
.

Il n'y a qu'une seule division. Et selon la fonction CMM (bien qu'elle soit pleine), il est dit qu'il n'y a pas assez de données dans le tableau résultant de la fonction. Je ne comprends pas pourquoi. C'est pourquoi j'ai des divisions par zéro.
 
Dikii:

Expliquez comment trouver l'enchère d'il y a 10 secondes, de préférence en code.

Je n'en ai pas besoin, donc je ne suis pas intéressé par la façon de le faire. Cherchez, vous trouverez peut-être quelque chose ! Bonne chance !
Raison: