Erreurs, bugs, questions - page 1488

 
Alexey Kozitsyn:

Même si je ne suis pas de l'administration, vous n'avez pas répondu à ma question non plus...

Oui, je me suis connecté au forum sous mon compte et qu'est-ce que ça donne ? Pour satisfaire votre curiosité ?


Artyom Trishkin:
Le quatrième forum n'est plus soutenu depuis longtemps, mais il a été conservé comme matériel de référence. Au moins, cette décision a été exprimée par l'administration.

Ils l'auraient donc fermé et auraient tout redirigé vers le forum mql5. Pourquoi le castrer ?

Les gens continuent à l'utiliser et à communiquer, ce qui signifie qu'il est nécessaire et que sa fonctionnalité doit être maintenue !

Il s'avère donc que, comme toujours, les utilisateurs et leur avis sont ignorés et que tout est décidé unilatéralement.

 
Aleksandr Novikov:

Oui, je me suis connecté au forum sous mon compte et qu'est-ce que cela vous apporte ? Pour satisfaire votre curiosité ?

Comment savoir si vous voulez voir un astérisque sans vous connecter à votre compte ? Il est donc logique que vous ne le voyiez pas là.
 
Aleksandr Novikov:

Oui, je me suis connecté au forum sous mon compte et qu'est-ce que cela vous apporte ? Cela ne fera-t-il que satisfaire votre curiosité ?


Alors pourquoi ne pas le fermer et le rediriger vers le forum mql5 ? Pourquoi voulez-vous le castrer ?

Les gens continuent à l'utiliser et à communiquer, ce qui signifie qu'il est nécessaire et que sa fonctionnalité doit être maintenue !

Mais il s'avère que, comme toujours, les utilisateurs et leur avis sont ignorés et que tout est décidé unilatéralement.

C'est exactement la raison pour laquelle vous n'avez pas été sollicité il y a environ un an, lorsqu'ils ont pris la décision de ne plus soutenir le quatrième forum. C'est précisément parce qu'il y a là beaucoup d'informations utiles qu'elles n'ont pas été tuées - utilisez-les. Mais à titre de référence.
 
Andrey Voytenko:

A propos de l'initialisation. Est-il possible de l'écrire de cette façon ?

...

Quoi qu'il en soit, mon initialisation préférée via ={0} avec des chaînes de caractères ne fonctionne pas. C'est une honte.

Merci pour le post, bug corrigé. La correction sera incluse dans la prochaine version.
 

Question sur MT4 .

Bon après-midi. Confronté à un problème de définition de la taille du lot. Voici le code.

Plus précisément sur Alpari. Spécifiquement pour l'USD-JPY. Il devrait sortir les données sur les ordres vers le graphique, mais .....pour USD-JPY ne peut pas montrer la valeur correcte ! Je suis intéressé par les données du tableau !

Que puis-je faire de plus ?

#property version "1.00"
#property strict
#property indicator_chart_window
double Mas_Ord_Old[1000][19];
double Mas_Ord_New[1000][19];
double Mas_Tip[6];
string Mas_tip[6];
extern int FontSize=12;
extern color TextColor=clrIvory;
extern color TextColor1=clrGray;
extern color TextColor2=clrRed;
extern color TextColor3=clrYellow;
extern int X=20;
extern int Y=15;
int n;

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
Terminal();
//---
Comment(" пример неправильного лота ");
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
DeleteLabel();
}
//+------------------------------------------------------------------+
//| 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[])
{
//---
Terminal();
int shift=15;
DeleteLabel();
n=13;
double proffit=0;
double pro=0;
double stloss=0;
double los=0;
int a9=(int)NormalizeDouble( Mas_Ord_Old [0][10],0);//MathIsValidNumber
//for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
for(int cnt=a9-1;cnt>=0;cnt--)
{
//.. и наша вал.пара
double a0= Mas_Ord_Old [cnt][0]; // OrderTicket(); I // Тикет ордера
double a1= Mas_Ord_Old [cnt][1]; // OrderOpenPrice(); D // Курс открытия орд
double a2= Mas_Ord_Old [cnt][2]; // OrderLots(); D // Количество лотов !!!!!!!!!!!!!!!!
double a3= Mas_Ord_Old [cnt][3]; // OrderTakeProfit(); D // Курс ТР
double a4= Mas_Ord_Old [cnt][4]; // OrderSwap(); D // Своп
double a5= Mas_Ord_Old [cnt][5]; // OrderStopLoss(); D // Курс SL
double a6= Mas_Ord_Old [cnt][6]; // OrderType(); I // Тип ордера
double a7= Mas_Ord_Old [cnt][7]; // OrderMagicNumber(); I // Магическое число
double a8= Mas_Ord_Old [cnt][8]; //
double Aa2= (double)((NormalizeDouble( a2,2))*100);
double Aaa2=(double)((NormalizeDouble( Aa2,2))/100);
// Print("2- OrderLots= ",Aa2," OrderType= ",Aaa2," OrderMagicNumber= ",a7," Ciomment= ",a8," кол-во = ",a0);
string text=StringConcatenate(" Тикет= Опен= ",a1," ЛОТ!!!= ",a2," ЛОТ 2= ",Aa2," 4= ",a4," 5= ",a5," 6= ",a6," 7= ",a7," 8= ",a8);
CreateLabel(StringConcatenate("Label_",n),text,X,Y+n*shift,clrYellow);
}

//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
// double Mas_Ord_Old[1000][9];
// double Mas_Ord_New[1000][9];
// double Mas_Tip[6];
// ~~~~~~~~~~~~~~~~~~ Работа с ордерами ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bool Terminal()
{
int Qnt=0; // Счётчик количества ордеров

//--------------------------------------------------------------- 3 --
ArrayCopy(Mas_Ord_Old, Mas_Ord_New,0,0,WHOLE_ARRAY);// Сохраняем предыдущую историю
Qnt=0; // Обнуление счётчика ордеров
ArrayInitialize(Mas_Ord_New,0); // Обнуление массива
// ArrayInitialize(Mas_Tip, 0); // Обнуление массива
//--------------------------------------------------------------- 4 --
for(int i=OrdersTotal()-1; i>=0; i--) // По рыночн. и отлож. ордерам
{ //.. и наша вал.пара && (OrderSymbol()==Symbol())
if((OrderSelect(i,SELECT_BY_POS)==true) )
{
//------------------------------------------------------ 5 --
Mas_Ord_New[Qnt][0]=OrderTicket(); // Курс открытия орд
Mas_Ord_New[Qnt][1]=OrderOpenPrice(); // Курс открытия орд
Mas_Ord_New[Qnt][2]= OrderLots(); // Курс SL
Mas_Ord_New[Qnt][3]=OrderTakeProfit(); // Курс ТР
Mas_Ord_New[Qnt][4]=OrderSwap(); // Номер ордера
Mas_Ord_New[Qnt][5]=OrderStopLoss(); // Количество лотов
// Mas_Tip[OrderType()]++; // Кол. ордеров типа
Mas_Ord_New[Qnt][6]=OrderType(); // Тип ордера
Mas_Ord_New[Qnt][7]=OrderMagicNumber(); // Магическое число
if (OrderComment()=="")
Mas_Ord_New[Qnt][8]=0; // Если нет коммент
else
Mas_Ord_New[Qnt][8]=1; // Если есть коммент
Qnt++; // Колич. ордеров
//------------------------------------------------------ 6 --
}
}
Mas_Ord_New[0][10]=Qnt; // Колич. ордеров
//--------------------------------------------------------------- 7 --
return 0;
}
// ~~~~~~~~~~~~~~~~~~ Работа с ордерами ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//+--------------------------------------------------------------------+
void CreateLabel(string name, string text,int x, int y, color c) //
{ //
ObjectCreate(name, OBJ_LABEL,0,0,0); //
ObjectSetText(name,text,FontSize,"Times New Roman",TextColor); //
ObjectSet(name,OBJPROP_CORNER,0
); //
ObjectSet(name,OBJPROP_XDISTANCE,x); //
ObjectSet(name,OBJPROP_YDISTANCE,y); //
ObjectSet(name,OBJPROP_COLOR,c); //
n++; //
} //
void DeleteLabel() //
{ //
for(int i=ObjectsTotal();i>=0;i--) //
{ //
if(StringSubstr(ObjectName(i),0,6)=="Label_") //
ObjectDelete(ObjectName(i)); //
} //
} //
//+--------------------------------------------------------------------+
 
Sergey Vedmanov:

Question sur MT4 .

Bon après-midi. Confronté à un problème de définition de la taille du lot. Voici le code.

Plus précisément sur Alpari. Spécifiquement pour l'USD-JPY. Il devrait sortir les données sur les ordres vers le graphique, mais .....pour USD-JPY ne peut pas montrer la valeur correcte ! Je suis intéressé par les données du tableau !

Que puis-je faire de plus ?

Mais ça marche dans le tutoriel de Kovalev. Qu'est-ce qui m'empêche de le copier correctement et de l'adapter aux nouvelles exigences ?
 
Artyom Trishkin:
Mais le tutoriel de Kovalev fonctionne toujours. Qu'est-ce qui nous empêche de le copier correctement et de l'adapter aux nouvelles exigences ?

Je vais vous surprendre, mais ça marche aussi dans d'autres centres commerciaux. Si vous lisez attentivement le post depuis le début...

Plus précisément sur Alpari. Plus précisément sur l'USD-JPY.

Que pouvons-nous faire de plus ?

 
Sergey Vedmanov:

Je vais vous surprendre, mais ça marche aussi dans d'autres centres commerciaux. Si vous lisez attentivement le post depuis le début...

Plus précisément sur Alpari. Plus précisément sur l'USD-JPY.

Ce que vous pouvez faire en plus

... ... dans d'autres centres commerciaux ? :)

J'ai vu vos spécificités. Je n'ai pas fouillé parce que je pense que c'est redondant. Tous ces terminaux Kovalev...

Mais dans votre code je vois une divergence entre les données stockées et la description de ces données dans les commentaires - c'est déjà déroutant.

Plus loin :

string text=StringConcatenate(" Тикет= Опен= ",a1," ЛОТ!!!= ",a2," ЛОТ 2= ",Aa2," 4= ",a4," 5= ",a5," 6= ",a6," 7= ",a7," 8= ",a8);

votre lot est imprimé à partir de la variable a2, mais qu'est-ce qu'on y enregistre ? C'est ici :

Mas_Ord_New[Qnt][2]= OrderLots(); // Курс SL

Ou peut-être devrions-nous l'imprimer en utilisant DoubleToString() ?

Et tu normalises le lot de manière incorrecte. Vous avez besoin d'une fonction pour la normalisation des lots. Je ne le chercherai pas. Vous pouvez le chercher chez Kim's - il fera l'affaire pour vous.

 
Artyom Trishkin:

... dans d'autres centres commerciaux ? :)

J'ai vu vos spécificités. Je n'ai pas fouillé parce que je pense que c'est redondant. Tous ces terminaux Kovalev...

Mais dans votre code je vois une divergence entre les données stockées et la description de ces données dans les commentaires - c'est déjà déroutant.

Plus loin :

votre lot est imprimé à partir de la variable a2, mais qu'est-ce qu'on y enregistre ? C'est ici :

Ou peut-être devrions-nous l'afficher via DoubleToString() ?

Le lot est normalisé de manière incorrecte. Nous avons besoin d'une fonction pour la normalisation des lots. Je ne le chercherai pas. Vous pouvez le chercher chez Kim - il vous conviendra.

Je l'ai trouvé. Merci. Mais cela ne résout pas la tâche à accomplir.

Il fonctionne correctement sur d'autres AC et avec ce code.

Il ne fonctionne pas correctement avec la fonction de Kim.

Il se lit correctement via DoubleToString() mais ne calcule pas correctement. Je ne compterai pas à travers DoubleToString(). Si je fais l'aller-retour, il transfère correctement les cordes mais les doublons de cordes sont à nouveau faux.

Le problème est dans Alpari et nous avons besoin d'une béquille pour le contourner.

USD-SEK affiche incorrectement le prix d'ouverture sur une autre paire.

#property version   "1.00"
#property strict
#property indicator_chart_window
  double Mas_Ord_Old[1000][19];
  double Mas_Ord_New[1000][19];
  double Mas_Tip[6];
  string Mas_tip[6];
extern int FontSize=12;
extern color TextColor=clrIvory;
extern color TextColor1=clrGray;
extern color TextColor2=clrRed;
extern color TextColor3=clrYellow;
extern int X=20;
extern int Y=15;
int n;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   Terminal();
//---
Comment(" пример неправильного лота ");
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
 DeleteLabel();
 }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
Terminal();
int shift=15;
DeleteLabel();
n=13;
double proffit=0;
double pro=0;
double stloss=0;
double los=0;
      int a9=(int)NormalizeDouble( Mas_Ord_Old [0][10],0);//MathIsValidNumber
//for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
for(int cnt=a9-1;cnt>=0;cnt--)
 {
                                 //.. и наша вал.пара
    double a0= Mas_Ord_Old [cnt][0];  //  OrderTicket();      I // Тикет ордера
    double a1= Mas_Ord_Old [cnt][1];  //  OrderOpenPrice();   D // Курс открытия орд
    string a2= DoubleToString(Mas_Ord_Old [cnt][2],2);  //  OrderLots();        D // Количество лотов !!!!!!!!!!!!!!!!
    double a3= Mas_Ord_Old [cnt][3];  //  OrderTakeProfit();  D // Курс ТР
    double a4= Mas_Ord_Old [cnt][4];  //  OrderSwap();        D // Своп
    double a5= Mas_Ord_Old [cnt][5];  //  OrderStopLoss();    D // Курс SL
    double a6= Mas_Ord_Old [cnt][6];  //  OrderType();        I // Тип ордера
    double a7= Mas_Ord_Old [cnt][7];  //  OrderMagicNumber(); I // Магическое число 
    double a8= Mas_Ord_Old [cnt][8];  //  
    double Aa2= (double)(StringToDouble(a2));
    double Aaa2=(double)((NormalizeDouble( Aa2,2))/100); 
   //   Print("2-  OrderLots= ",Aa2," OrderType= ",Aaa2," OrderMagicNumber= ",a7," Ciomment= ",a8," кол-во = ",a0);
    string text=StringConcatenate(" Опен= ",a1," ЛОТ string= ",a2," ЛОТ double= ",Aa2 );
    CreateLabel(StringConcatenate("Label_",n),text,X,Y+n*shift,clrYellow);
  }
  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//  double Mas_Ord_Old[1000][9];
//  double Mas_Ord_New[1000][9];
//  double Mas_Tip[6];
// ~~~~~~~~~~~~~~~~~~ Работа с ордерами  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  bool Terminal()
  {
   int Qnt=0;                          // Счётчик количества ордеров
 
//--------------------------------------------------------------- 3 --
   ArrayCopy(Mas_Ord_Old, Mas_Ord_New,0,0,WHOLE_ARRAY);// Сохраняем предыдущую историю
   Qnt=0;                              // Обнуление счётчика ордеров
   ArrayInitialize(Mas_Ord_New,0);     // Обнуление массива
 //  ArrayInitialize(Mas_Tip,    0);     // Обнуление массива
//--------------------------------------------------------------- 4 --
   for(int i=OrdersTotal()-1; i>=0; i--) // По рыночн. и отлож. ордерам
     {                                //.. и наша вал.пара && (OrderSymbol()==Symbol())
      if((OrderSelect(i,SELECT_BY_POS)==true) )              
        {
         //------------------------------------------------------ 5 --
         Mas_Ord_New[Qnt][0]=OrderTicket();       // Курс открытия орд
         Mas_Ord_New[Qnt][1]=OrderOpenPrice();    // Курс открытия орд
         Mas_Ord_New[Qnt][2]=NormalizeLot( OrderLots(),0,Symbol());     // Курс SL
         Mas_Ord_New[Qnt][3]=OrderTakeProfit();   // Курс ТР
         Mas_Ord_New[Qnt][4]=OrderSwap();         // Номер ордера
         Mas_Ord_New[Qnt][5]=OrderStopLoss();        // Количество лотов
       //  Mas_Tip[OrderType()]++;                // Кол. ордеров типа
         Mas_Ord_New[Qnt][6]=OrderType();         // Тип ордера
         Mas_Ord_New[Qnt][7]=OrderMagicNumber();  // Магическое число 
         if (OrderComment()=="")
            Mas_Ord_New[Qnt][8]=0;                // Если нет коммент
         else
            Mas_Ord_New[Qnt][8]=1;                // Если есть коммент
          Qnt++;                                   // Колич. ордеров
        //------------------------------------------------------ 6 --
        }
     }
   Mas_Ord_New[0][10]=Qnt;                         // Колич. ордеров
//--------------------------------------------------------------- 7 --
   return 0;
  }
// ~~~~~~~~~~~~~~~~~~ Работа с ордерами ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//+----------------------------------------------------------------------------+
double NormalizeLot(double lo, bool ro=False, string sy="") {
  double l, k;
  if (sy=="" || sy=="0") sy=Symbol();
  double ls=MarketInfo(sy, MODE_LOTSTEP);
  double ml=MarketInfo(sy, MODE_MINLOT);
  double mx=MarketInfo(sy, MODE_MAXLOT);

  if (ml==0) ml=0.1;
  if (mx==0) mx=100;

  if (ls>0) k=1/ls; else k=1/ml;
  if (ro) l=MathCeil(lo*k)/k; else l=MathFloor(lo*k)/k;

  if (l<ml) l=ml;
  if (l>mx) l=mx;

  return(l);
//+----------------------------------------------------------------------------+
}
//+--------------------------------------------------------------------+
void CreateLabel(string name, string text,int x, int y, color c)              // 
   {                                                                 //
   ObjectCreate(name, OBJ_LABEL,0,0,0);                              //
   ObjectSetText(name,text,FontSize,"Times New Roman",TextColor);    //
   ObjectSet(name,OBJPROP_CORNER,0
   );                                 //
   ObjectSet(name,OBJPROP_XDISTANCE,x);                              //
   ObjectSet(name,OBJPROP_YDISTANCE,y);                              //
   ObjectSet(name,OBJPROP_COLOR,c);                              //
   n++;                                                              //
   }                                                                 //
void DeleteLabel()                                                   //
   {                                                                 //
   for(int i=ObjectsTotal();i>=0;i--)                                //
      {                                                              //
      if(StringSubstr(ObjectName(i),0,6)=="Label_")                  //
      ObjectDelete(ObjectName(i));                                   //
      }                                                              //
   }                                                                 //
//+--------------------------------------------------------------------+
 
Artyom Trishkin:
Mais le manuel de Kovalev fonctionne. Qu'est-ce qui vous empêche de le copier correctement et de l'adapter aux nouvelles exigences ?
Artem, quel est le manuel de Kovalev ?
Raison: