Erreurs, bugs, questions - page 2457

 
fxsaber:
Est-ce que quelqu'un sur le marché a l'habitude, lors de la mise à jour de son produit, d'y intégrer (via des ressources) l'EX5 de la version précédente, afin que l'utilisateur ait toujours la possibilité de revenir en arrière en cas d'erreur ?

Cela peut être fait sans ressources...

Le problème est que les nouvelles versions peuvent avoir des paramètres différents...

Faire ressortir d'autres paramètres est déjà un problème...

 
Vladimir Pastushak:

Cela peut être fait sans ressources...

Le problème est que les nouvelles versions peuvent avoir des paramètres différents...

Faire ressortir d'autres paramètres est déjà un problème...

Je ne vois pas de problème à cela.

 

Lorsque l'on demande les journaux d'un VPS actif, l'erreur "Failed to get terminal logs" s'affiche.

Qui sait ce qui peut être le problème ? En même temps, les EAs sur le VPS fonctionnent (ouverture/fermeture de trades), mais je ne peux pas charger les logs.

 
fxsaber:

Je ne vois pas de problème à cela.

Ce n'est que maintenant que je me suis rendu compte que l'EX5 de la version précédente doit être doté d'un mécanisme de protection.

Et grâce aux ressources de la version précédente EX5 pourra transférer sans protection, ce qui n'est pas convenable.

 

Je suis en train d'écrire un indicateur sur 5.

Je n'arrive pas à mettre à jour la période de la moyenne à partir du champ de saisie du graphique. Sur 4, cette conception fonctionnera.

Qu'est-ce qui ne va pas ? Le champ dans l'inite est mis à jour parOnChartEvent, mais la période ne l'est pas. Je ne peux pas le changer de quelque façon que ce soit.

Je joins un exemple simple et fonctionnel.

//+------------------------------------------------------------------+
//|                                                      Probe_2.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                                 https://mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://mql5.com"
#property description "The MA "
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot MA1
#property indicator_label1  "MA 1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrDarkOrange
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

//--- input parameters
 extern int PBB=10;  //  период МА
//--- indicator buffers
double         BufferMA1[];
//--- global variables
int            period_ma1;
int            period_max;

int            handle_ma1;
string sn,sPBB;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
  

   sPBB=IntegerToString(PBB);
   if(ObjectFind(0,"P2edit")!=0)
    {
       ObjectCreate(0,"P2edit",OBJ_EDIT,0,0,0);
       ObjectSetInteger(0,"P2edit",OBJPROP_XDISTANCE,300);
       ObjectSetInteger(0,"P2edit",OBJPROP_YDISTANCE,1);
       ObjectSetInteger(0,"P2edit",OBJPROP_XSIZE,70);
       ObjectSetInteger(0,"P2edit",OBJPROP_YSIZE,40);
       ObjectSetInteger(0,"P2edit",OBJPROP_SELECTABLE,false);
       ObjectSetInteger(0,"P2edit",OBJPROP_BGCOLOR,clrBlack);
       ObjectSetString (0,"P2edit",OBJPROP_TEXT,sPBB);
       ObjectSetInteger(0,"P2edit",OBJPROP_FONTSIZE,16);
       ObjectSetInteger(0,"P2edit",OBJPROP_COLOR,clrGray);
       ObjectSetInteger(0,"P2edit",OBJPROP_ALIGN,ALIGN_CENTER);
       ObjectSetInteger(0,"P2edit",OBJPROP_READONLY,false);
    }


//--- set global variables
   period_ma1=int(PBB<1 ? 1 : PBB);
//--- indicator buffers mapping
   SetIndexBuffer(0,BufferMA1,INDICATOR_DATA);
   ArraySetAsSeries(BufferMA1,true);
   IndicatorSetInteger(INDICATOR_DIGITS,Digits());
//--- create handle
   ResetLastError();

   Comment("Должна соответствовать зеленой, а равна= ",PBB);
   
   handle_ma1=iMA(NULL,PERIOD_CURRENT,period_ma1,0,1,PRICE_CLOSE);
   if(handle_ma1==INVALID_HANDLE)
     {
      Print("The iMA(",(string)period_ma1,") object was not created: Error ",GetLastError());
      return INIT_FAILED;
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
 {
  if(id==CHARTEVENT_OBJECT_ENDEDIT)
   {
    string obj_name=sparam;
    if(!StringCompare(obj_name,"P2edit"))
     {
     string novPBB=NULL;
     if(ObjectGetString(0,obj_name,OBJPROP_TEXT,0,novPBB))
      {
       if(StringCompare(novPBB,sPBB,false))
        {
         PBB= (int)StringToInteger(novPBB);
         ObjectSetInteger(0,"P2edit",OBJPROP_BGCOLOR,clrBlack);
         ObjectSetInteger(0,"P2edit",OBJPROP_COLOR,clrLime);
        }
       }
Print("B OnChartEvent PBB=",PBB);
      ChartSetSymbolPeriod(0,_Symbol,_Period);
      }
    }
    return;
 }
//+------------------------------------------------------------------+
//| 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[])
  {
//    Пробовал от сюда запускать.
//   sPBB=IntegerToString(PBB);
//   if(ObjectFind(0,"P2edit")!=0)
//    {
//       ObjectCreate(0,"P2edit",OBJ_EDIT,0,0,0);
//       ObjectSetInteger(0,"P2edit",OBJPROP_XDISTANCE,300);
//       ObjectSetInteger(0,"P2edit",OBJPROP_YDISTANCE,1);
//       ObjectSetInteger(0,"P2edit",OBJPROP_XSIZE,70);
//       ObjectSetInteger(0,"P2edit",OBJPROP_YSIZE,40);
//       ObjectSetInteger(0,"P2edit",OBJPROP_SELECTABLE,false);
//       ObjectSetInteger(0,"P2edit",OBJPROP_BGCOLOR,clrBlack);
//       ObjectSetString (0,"P2edit",OBJPROP_TEXT,sPBB);
//       ObjectSetInteger(0,"P2edit",OBJPROP_FONTSIZE,16);
//       ObjectSetInteger(0,"P2edit",OBJPROP_COLOR,clrGray);
//       ObjectSetInteger(0,"P2edit",OBJPROP_ALIGN,ALIGN_CENTER);
//       ObjectSetInteger(0,"P2edit",OBJPROP_READONLY,false);
//    } 
//   
//   if(PBB==0) PBB=(int)StringToInteger(sPBB);
// 
//   if(PBB<5) period_ma1=5; else  period_ma1=PBB;
//   if(PBB>300) period_ma1=300; else  period_ma1=PBB;
   
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

   ArraySetAsSeries(close,true);//--- Установка массивов буферов как таймсерий
//--- Проверка количества доступных баров
   if(rates_total<fmax(period_max,4)) return 0;
//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      limit=rates_total-2;
      ArrayInitialize(BufferMA1,EMPTY_VALUE);
     }

//--- Подготовка данных
   int count=(limit>0 ? rates_total : 1),copied=0;
   copied=CopyBuffer(handle_ma1,0,0,count,BufferMA1);
   if(copied!=count) return 0;

 //Comment("ошибка = ");
 
//--- возвращаемое значение prev_calculated для следующего вызова
   return(rates_total);
  }

//+------------------------------------------------------------------+
//|            deinit                                                |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   int i;
   int obj_total=ObjectsTotal(0,0,-1);
   for(i=obj_total-1;i>=0;i--)
     {
      sn=ObjectName(0,i,0,-1);
      if(ObjectFind(0,sn)==0) 
        {
         if (StringFind(sn,"P2edit",0)==0) ObjectDelete(0,sn);
        }
     }
  
   Comment("");
   return;
  }
 
Zakhar Chumak:

Lorsque l'on demande les journaux d'un VPS actif, l'erreur "Failed to get terminal logs" s'affiche.

Qui sait ce qui peut être le problème ? En même temps, les EAs sur le VPS fonctionnent (ouverture/fermeture de trades), mais je ne peux pas charger les logs.

On dirait que le chemin vers le dossier temporaire est trop long.

Les journaux archivés sont d'abord lus dans un fichier temporaire (avec l'extension tmp) dans le dossier temp du système. Une erreur de formation de nom de fichier temporaire s'est produite

 

Ai-je raison de supposer qu'après un passage, les agents dorment et attendent que les autres agents occupés aient terminé leur travail ?


 

Quoi ?

Personne ne peut répondre à ma question?

Ce qui est intéressant. Avec cette variante,OnCalculate fonctionne. Mais cette variante ne fonctionne pas.

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
 
Uladzimir Izerski:

Quoi ?

Personne ne peut répondre à ma question?

Ce qui est intéressant. Avec cette variante,OnCalculate fonctionne. Mais cette variante ne fonctionne pas.

Lorsque vous modifiez le calendrier / la période, PBB obtient une valeur de 10, quelle que soit la valeur que vous avez spécifiée dans le champ de saisie.

Au moment de la réinitialisation, tout se passe comme s'il s'agissait de la première exécution.

Il y a deux façons de résoudre votre problème

1 - Stocker la valeur PBB dans des variables globales et récupérer la période à partir de là.

2 - Quand OnChartEvent se déclenche, réinitialiser l'indicateur MA et obtenir un nouveau handle...

 

En passant de MQL4 à MQL5, j'ai rencontré un problème :

Code :

ResetLastError() ;

int ObjTotal = ObjectsTotal(0) ;

int Erreur = GetLastError() ;

retours :

ObjTotal = 0.

Erreur = 4022

Quelle est cette erreur et pourquoi n'est-elle pas mentionnée dans la documentation ?

J'ai essayé différentes variantes : ObjectsTotal(0, -1, -1), ObjectsTotal(ChartID(), 0, OBJ_TREND), etc.

Le résultat est le même.

Comment faire pour que ça marche ?

Terminal : MetaTrader 5, Version 5.00 build 2025.