Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 393

 
YarTrade: VolC - c'est ainsi que j'ai appelé le dossier. Vous n'avez pas besoin d'un nom de fichier ?

Alors ça se passe comme ça :

   string file_name="VolC_"+Symbol()+(string)Period();
   int file_handle=FileOpen(file_name,FILE_WRITE|FILE_TXT);
   FileWrite(file_handle,(double)V5);       // V5 - это что?
   FileClose(file_handle);
 
STARIJ:

Alors ça se passe comme ça :


V5 est une sorte de résultat de calcul. J'ai supprimé V5, mis un tableau à sa place et je veux qu'il soit écrit dans le fichier. Le fichier est créé, mais une seule valeur y est écrite, pas le tableau de données de l'indicateur. Que manque-t-il ? J'ai un indicateur qui est correctement tracé sur le graphique. Je veux écrire ses valeurs dans un fichier pour pouvoir les lire plus tard. Mais un seul numéro est écrit. Pouvez-vous m'aider à comprendre ce qui ne va pas ?

 
STARIJ:

Alors ça se passe comme ça :


Je l'ai fait avec FileWriteArray, mais maintenant le fichier est vide. Il ne veut pas écrire un tableau à cet endroit :(. Savez-vous comment aider ? Bien sûr que si. S'il vous plaît, dites-moi ce qui ne va pas.

 
YarTrade: Je l'ai fait avec FileWriteArray, mais le fichier est vide et le tableau ne peut pas y être écrit :(. Savez-vous comment aider ? Bien sûr que si. S'il vous plaît, dites-moi ce qui ne va pas.

C'est comme ça

   int V5=555;
   string file_name="VolC_"+Symbol()+(string)Period();
   int file_handle=FileOpen(file_name,FILE_WRITE|FILE_TXT);
   FileWrite(file_handle,V5);
   FileClose(file_handle);

Quel type de tableau ? Insérez le code, arrêtez d'être gourmand ! Et voici un tableau écrivant apparemment seulement un tableau de caractères.

   string V5[5]={"Жили","были","дед","и","баба"};
   string file_name="VolC_"+Symbol()+(string)Period();
   int file_handle=FileOpen(file_name,FILE_WRITE|FILE_TXT);
   FileWriteArray(file_handle,V5);
   FileClose(file_handle);

Et le tableau double dans la boucle écrit

   double V5[5]={3.333,7.7777777,1.1,2.22,9.999999999};
   string file_name="VolC_"+Symbol()+(string)Period();
   int file_handle=FileOpen(file_name,FILE_WRITE|FILE_TXT);
   for(int n=0; n<5; n++)FileWrite(file_handle,V5[n]);
   FileClose(file_handle);
 
STARIJ:

C'est comme ça

Quel type de tableau ? Insérez le code, arrêtez d'être gourmand ! Et ce tableau écrit probablement seulement un tableau de caractères

Et voici le tableau double dans la boucle en train d'écrire


C'est cupide, non ? :)

#property copyright "ZyZy"
#property link      "https://www.mql5.com/ru/users/alexeyvik/news"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
// #property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrYellow
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
#property indicator_separate_window
//--- input parameters
input int      Aver=15;
datetime Время=0;   // Время прошлого бара
double Bid1;
long V1; // объем для текущего тика вверх
long V2; // накопленный объем для всех тиков вверх текущего бара
long V3; // накопленный объем для всех тиков вниз для текущего бара
long V4; // объем текущего тика вниз
long V5;

//--- indicator buffers
double         Buf_1[];   // буфер для значений идикатора
double         Counter[];     // буфер для расчетов   
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   IndicatorBuffers(2);
   SetIndexBuffer(0,Buf_1,INDICATOR_DATA); // создаю буфер для значений индикатора
   SetIndexBuffer(1,Counter,INDICATOR_CALCULATIONS);
   SetIndexEmptyValue(0,0.0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
//int limit = prev_calculated > 0 ? rates_total-prev_calculated : rates_total-1;
//for(int i =  limit; i >= 0; i--)
// {
//  Counter[i] = close[i];
//  Indicator[i] = iMAOnArray(Counter, 0, 5, 0, 0, i);
// }
   if(prev_calculated==0)
     {
      ArrayInitialize(Counter,0.0);
      ArrayInitialize(Buf_1,0.0);
     }
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
     {
      Время=Вр;           // Запомнить
      Counter[0]=0;         // и обнулить последний элемент буфера
      V2 = 0;
      V4 = 0;
     }

   if(Bid>=Bid1)
     {
      if(Bid>Bid1)
        {
         V1 = iVolume(NULL, 0, 0);
         V2 = V1 + V2;
        }
      else
        {
         V1 = 0;
         V2 = V1 + V2;
        }
     }
   else
     {
      V3 = iVolume(NULL, 0, 0);
      V4 = V3 + V4;
     }

   V5=V2-V4;
   Bid1=Bid;
   Counter[0]=(double)V5;
   Buf_1[0]=iMAOnArray(Counter,0,Aver,0,MODE_SMA,0);
   Comment("Counter ",Counter[0],"\n"
           ,"Buf_1 ",Buf_1[0]);
   
   string file_name="VolC_"+Symbol()+(string)Period();
   int file_handle=FileOpen(file_name,FILE_WRITE|FILE_TXT);
   FileWriteArray(file_handle,Counter, 0, WHOLE_ARRAY);     
   FileClose(file_handle);

   return(rates_total);
  }
//+------------------------------------------------------------------+
 
YarTrade: Quelle est la cupidité en jeu ? :)

Pourquoi voudriez-vous imprimer quoi que ce soit à partir d'un indicateur ? Tout est sur l'écran - c'est ce qu'est un indicateur. Lorsque j'ai besoin d'un tableau, je lance un script avec iCustom().

 

Bonjour, j'ai du mal avec le code qui est censé vérifier le prix de l'ordre dans le terminal. J'ai décidé d'essayer de vérifier les billets. J'ai mis les tickets dans un tableau, j'ai commencé à vérifier.

Tout est bon, il revient VRAI. Je pense que si j'en supprime un, il retournera FALSE. Mais non((( J'ai tout supprimé, et le script renvoie toujours 1 au lieu de 0. Qu'est-ce que je fais de mal ?


int start()
{
   while(!IsStopped())
   {
      int ordsel = 0;
      double ticord[3] = {8895969,8901032,8901033};
         for(ordsel=0; ordsel<=2;ordsel++) 
         {
            Sleep(5000); 
            Alert(OrderSelect(ticord[ordsel],SELECT_BY_TICKET,MODE_TRADES)); 
         }
      if(!IsExpertEnabled()) break;
   }
   return;
}
 

Bonjour, chers experts ! Veuillez aider un débutant. J'essaie de mettre un indicateur dans mon conseiller expert(je me suis creusé la tête...) ! Donne lieu à une erreur : 'limit' - déclaration sans type.

Dans cette ligne : limit = MathMax(limit,MathMin(Bars,iCustom(NULL,timeFrame,indicatorFileName, "returnBars",0,0)*timeFrame/Period()) ;


 
Dimitry-1983:

Bonjour, j'ai du mal avec le code qui est censé vérifier le prix de la commande dans le terminal. J'ai décidé d'essayer de vérifier les billets. J'ai mis les tickets dans un tableau, j'ai commencé à vérifier.

Tout est bon, il revient VRAI. Je pense que si j'en supprime un, il retournera FALSE. Mais non((( J'ai tout supprimé, et le script renvoie toujours 1 au lieu de 0. Qu'est-ce que je fais de mal ?



Le problème est que si vous sélectionnez (OrderSelect(...)) par ticket, le paramètre 3 est ignoréMODE_TRADES

Ainsi, pour savoir dans quelle liste (fermée, ouverte) vous avez choisi l'ordre, vous devez vérifier son heure de clôture.

0- ouvert et en attente, >0 fermé

 
Ptichka12:

Bonjour, chers experts ! Veuillez aider un débutant. J'essaie de mettre un indicateur dans un conseiller expert (je me suis creusé la tête...) ! Donne lieu à une erreur : 'limit' - déclaration sans type.

Dans cette ligne : limit = MathMax(limit,MathMin(Bars,iCustom(NULL,timeFrame,indicatorFileName, "returnBars",0,0)*timeFrame/Period())) ;



C'est une façon intéressante de procéder.

Essayez ce qui suit sur l'erreur

int limit = MathMax(limit,MathMin(Bars,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
Raison: