Erreurs, bugs, questions - page 2898

 
Alexander Mikheev:

Chers développeurs, si je me trompe ou si je n'ai pas considéré quelque chose, veuillez me corriger.

Voulez-vous que quelqu'un prenne le temps d'écrire un code source basé sur vos données et de le tester sur différents serveurs commerciaux ?

Cela n'arrivera pas. Respectez le temps des autres : fournissez toutes les données permettant de reproduire le problème - source, serveur, configuration de la machine, etc.


La source est concise et assortie de commentaires, de sorte que vous ne perdez pas de temps à analyser ce qui y est écrit. Dites ce que vous vouliez obtenir et ce que vous avez obtenu.

 
fxsaber:

Une archive ZIP protégée par un mot de passe.

Les archives verrouillées sont-elles prises en charge par MQL ?

 
Stanislav Korotky:

Les archives verrouillées sont-elles prises en charge par MQL ?

Je ne sais pas.

 
suncrypto:

Message aux développeurs. Le script Python se bloque lors de la réception de données via copy_rates_from_pos dans certaines circonstances.

Laissez-moi vous expliquer la situation. Le courtier dispose d'environ 4 000 instruments.
Je fais une sélection primaire des instruments en les recherchant et en les filtrant selon certaines règles.

Sur un des instruments du terminal, il n'y a pas d'historique (c'est-à-dire que dans la surveillance du marché et dans la liste des symboles, l'instrument est présent, mais les données sont vides).

En essayant d'exécuter le script : rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 1, analysis_days),
le script se bloque. Il ne sert à rien d'essayer ou de vérifier None car l'erreur elle-même ne se produit pas, tout se bloque sur cette ligne.

Si j'essaie d'exécuter : rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 0, analysis_days),
, c'est-à-dire de spécifier le numéro de barre de départ à partir de 0, il ne se bloque pas et renvoie un tableau vide.

Addendum. J'ai également trouvé un problème similaire lorsque je récupère FIRST les données via copy_rates_from_pos avec le nombre de barres demandées, plus qu'il n'y en a dans l'historique. Le script se bloque également. Il n'y a pas d'erreur de ce genre dans la deuxième demande. C'est pourquoi il semble difficile de répéter l'erreur (peut-être, seulement en supprimant l'historique complet du symbole).

Peut-être me suis-je trompé ou ai-je manqué quelque chose, mais il semble qu'il s'agisse d'un bogue puisque la fonction doit soit renvoyer les données, soit commettre une erreur.

Reproduit, corrigé.

 
TesterHideIndicators(false) a cessé de fonctionner ;
 
suncrypto:

Message aux développeurs. Le script Python se bloque lors de la réception de données via copy_rates_from_pos dans certaines circonstances.

Laissez-moi vous expliquer la situation. Le courtier dispose d'environ 4 000 instruments.
Je fais une sélection primaire des instruments en les recherchant et en les filtrant selon certaines règles.

Sur un des instruments du terminal, il n'y a pas d'historique (c'est-à-dire que dans la surveillance du marché et dans la liste des symboles, l'instrument est présent, mais les données sont vides).

En essayant d'exécuter le script : rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 1, analysis_days),
le script se bloque. Il ne sert à rien d'essayer ou de vérifier None car l'erreur elle-même ne se produit pas, tout se bloque sur cette ligne.

Si j'essaie d'exécuter : rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 0, analysis_days),
, c'est-à-dire de spécifier le numéro de barre de départ à partir de 0, il ne se bloque pas et renvoie un tableau vide.

Addendum. J'ai également trouvé un problème similaire lorsque je récupère FIRST les données via copy_rates_from_pos avec le nombre de barres demandées, plus qu'il n'y en a dans l'historique. Le script se bloque également. Il n'y a pas d'erreur de ce genre dans la deuxième demande. C'est pourquoi il semble difficile de répéter l'erreur (peut-être, seulement en supprimant l'historique complet du symbole).

Je me trompe peut-être ou j'ai manqué quelque chose, mais il semble qu'il s'agisse d'un bogue puisque la fonction devrait soit renvoyer les données, soit produire une erreur.

Corrigé, sera dans la prochaine bêta
 
Aleksey Vyazmikin:
TesterHideIndicators(false) a cessé de fonctionner ;

TesterHideIndicator définit le drapeau de visibilité pour les indicateurs qui sont créés par la suite.

Il ne change pas le drapeau de visibilité des indicateurs précédemment créés.

Vous pouvez vérifier auprès de l'expert suivant

//+------------------------------------------------------------------+
//|                                     TestTesterHideIndicators.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

int ExtHandleMacd;
int ExtHandleEma;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   TesterHideIndicators(true);
   ExtHandleMacd=iMACD(NULL,0,12,26,9,PRICE_CLOSE);
   TesterHideIndicators(false);
   ExtHandleEma=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  }
//+------------------------------------------------------------------+

Dans le visualiseur et dans le graphique ouvert après le test simple, l'indicateur MACD n'est pas visible, la moyenne mobile est visible.

Donc, cela fonctionne comme prévu

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Комбинация флагов видимости объекта определяет таймфреймы графика, на которых объект отображаем. Для установки/получения значения свойства OBJPROP_TIMEFRAMES можно использовать функции ObjectSetInteger()/ObjectGetInteger...
 
DMITRII PECHERITSA:
Bogue - fonctionnement incohérent des pointeurs (5.00, 2650)

Erreur de compilation. Des idées ?



Utilisez l'instruction de déréférencement de manière explicite

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   C201022_090654 c_1(* new C201022_090641); //works
   C201022_090654 c_3(* new C201022_092325(1)); //works
//---'new' - parameter passed as reference, variable expected
   C201022_090654 c_2(* new C201022_090641(1)); //not works
                      ^
  }
 

A100:
Ошибка при компиляции:

typedef void (*fn)();
void f() {}
fn g() { return f; }
oid OnStart()
{
        g()(); //Error: ')' - expression expected
}

J'ai déjà fait des recherches sur cette question, voici ce que j'ai trouvé :

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Bugs, bugs, questions

Sergey Dzyublik, 2020.04.04 21:46

Bug MT5 (build 2375) : erreur de compilation lors de l'appel d'une fonction via son pointeur, lorsqu'un tableau de pointeurs vers une fonction est utilisé :

.
#define  PRINT(x) ; Print(#x, ":", string(x))

void test(){
   PRINT(__FUNCSIG__);
}

template<typename T>
void call(T f_ptr){
   f_ptr();
}


template<typename T>
class A{
public:
   T arr_1[1];
   
   typedef void (*ff)();
   ff arr_2[1];  
   
   
   T test_1(){
      return arr_1[0];
   } 
   
   ff test_2(){
      return arr_2[0];
   } 
   
   T operator[](int index){
      return arr_1[index];
   }
};

void OnStart(){
   typedef void (*ff)();
   ff arr[1];
   arr[0] = test;   
   
   ff f_ptr = arr[0];
   f_ptr();             //Ok
   call(arr[0]);        //Ok
   arr[0]();            //Compile Error: ')' - expression expected   
   
   
   A<ff> a;             
   a.arr_1[0] = test;
   a.arr_2[0] = test;
   
   
   a.arr_1[0]();        //Compile Error: ')' - expression expected   
   a.arr_2[0]();        //Compile Error: ')' - expression expected   
   
   a.test_1()();        //Compile Error: ')' - expression expected   
   a.test_2()();        //Compile Error: ')' - expression expected   
   
   a[0]();              //Ok ???
}



 

MetaQuotes:
Corrigé, sera dans la prochaine bêta

Super, merci pour la rapidité !