Questions des débutants MQL5 MT5 MetaTrader 5 - page 1192

 
Artem Mordvinkin:


Il est écrit en clair que les symboles sont automatiquement liés au test.

Quand vous y accédez.
 
Artem Mordvinkin:


Oui, il est écrit en russe que les symboles sont automatiquement connectés pendant les tests.

Pour créer un indicateur, vous devez d'abord connecter un symbole dans Market Watch (dans votre cas dans Market Watch du testeur).

 
Artyom Trishkin:
Demandez n'importe quelle donnée à chaque symbole souhaité.

Ils par SymbolSelect() sont manquants - non sélectionnés

Chers Messieurs Avant de me renvoyer à des publications (pour lesquelles je vous remercie) vérifiez - si vos multidevises fonctionnent dans le testeur Et si c'est le cas, c'est logique

 
Artem Mordvinkin:

Ils par SymbolSelect() sont manquants - non sélectionnés

Chers Messieurs Avant de me renvoyer à des publications (pour lesquelles je vous remercie) vérifiez - si vos multidevises fonctionnent dans le testeur Et si c'est le cas, c'est logique

Ils fonctionnent. Sur la dernière version. Aucun problème.
 
Artyom Trishkin:
Ça marche. Sur la dernière version. Aucun problème.

Comment les avez-vous reliés (symboles) - pouvez-vous me dire quelle fonction ?

 
Artem Mordvinkin:

Comment les avez-vous reliés (symboles) - pouvez-vous me dire quelle fonction ?

SymbolSelect(nom du caractère,true) ;

 
Vladimir Karputov:

SymbolSelect(nom du caractère,true) ;

Je fais la même chose.

SymbolSelect(EURUSD_inst, true);
  SymbolSelect(GBPUSD_inst, true);
  SymbolSelect(USDJPY_inst, true);
  SymbolSelect(AUDUSD_inst, true);


Je le reçois comme ça

2020.03.09 19:19:45.766 Le symbole EURUSDrfd n'existe pas.

2020.03.09 19:19:45.766 Le symbole USDJPYrfd n'existe pas.

2020.03.09 19:19:45.766 Le symbole AUDUSDrfd n'existe pas.


Le câble ne donne pas d'erreur car il est sélectionné dans le testeur.

Les noms des symboles sont corrects.


L'UPD me semble devoir faire quelque chose dans les paramètres du terminal lui-même. Si tout fonctionnait avant la dernière version, cela n'a rien à voir avec le code. Le testeur ne peut pas voir les symboles.

 
Artem Mordvinkin:


2020.03.09 19:19:45.766 Le symbole EURUSDrfd n'existe pas.

2020.03.09 19:19:45.766 Le symbole USDJPYrfd n'existe pas.

2020.03.09 19:19:45.766 Le symbole AUDUSDrfd n'existe pas.


Le câble ne donne pas d'erreur car il est sélectionné dans le testeur.

Qu'est-ce que c'est ? Où est le code ? Comment l'obtenir ? Surtout que vous sélectionnez des personnages complètement différents.

 
Vladimir Karputov:

Qu'est-ce que c'est ? Où est le code ? Comment l'obtenir ? Surtout que vous choisissez des personnages complètement différents.

Compris, on va faire comme ça.

Prénom (nom des personnages)


Code (fragments)

//----------------------------название инструмента
string EURUSD_inst = "EURUSDrfd";
string GBPUSD_inst = "GBPUSDrfd";
string AUDUSD_inst = "AUDUSDrfd";
string USDJPY_inst = "USDJPYrfd";


void OnTick()
  {
  SymbolSelect(EURUSD_inst, true);
  SymbolSelect(GBPUSD_inst, true);
  SymbolSelect(USDJPY_inst, true);
  SymbolSelect(AUDUSD_inst, true);
}

Prenons l'exemple du câble dans le testeur.


Exécutez-le et

2020.03.09 19:19:45.766 Le symbole EURUSDrfd n'existe pas.

2020.03.09 19:19:45.766 Le symbole USDJPYrfd n'existe pas.

2020.03.09 19:19:45.766 Le symbole AUDUSDrfd n'existe pas.

Il n'y a pas d'erreur sur le câble - il est sélectionné par défaut dans le testeur.

Et juste au cas où, je dirai que ce problème ne concerne que le testeur. Et que la chouette a plusieurs années et l'erreur date de 2 jours et que c'est le cas de toutes mes chouettes multidevises.
 

Exemple de création d'un indicateur iMA sur le symbole 'USDJPY', avec le testeur fonctionnant sur 'EURUSD'.

//+------------------------------------------------------------------+
//|                                        iMA Values on a Chart.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property version   "1.001"
//--- input parameters
input  string              Inp_MA_symbol        = "USDJPY";    // MA: symbol name
input ENUM_TIMEFRAMES      Inp_MA_period        = PERIOD_D1;   // MA: timeframe
input int                  Inp_MA_ma_period     = 12;          // MA: averaging period
input int                  Inp_MA_ma_shift      = 5;           // MA: horizontal shift
input ENUM_MA_METHOD       Inp_MA_ma_method     = MODE_SMA;    // MA: smoothing type
input ENUM_APPLIED_PRICE   Inp_MA_applied_price = PRICE_CLOSE; // MA: type of price
//---
int    handle_iMA;                           // variable for storing the handle of the iMA indicator
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(!SymbolSelect(Inp_MA_symbol,true))
     {
      PrintFormat("Failed select symbol %s",
                  Inp_MA_symbol);
      return(INIT_FAILED);
     }
//--- create handle of the indicator iMA
   handle_iMA=iMA(Inp_MA_symbol,Inp_MA_period,Inp_MA_ma_period,Inp_MA_ma_shift,
                  Inp_MA_ma_method,Inp_MA_applied_price);
//--- if the handle is not created
   if(handle_iMA==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code
      PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
                  Inp_MA_symbol,
                  EnumToString(Inp_MA_period),
                  GetLastError());
      //--- the indicator is stopped early
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double array_ma[];
   ArraySetAsSeries(array_ma,true);
   int start_pos=0,count=3;
   if(!iGetArray(handle_iMA,0,start_pos,count,array_ma))
      return;

   string text="";
   for(int i=0; i<count; i++)
      text=text+IntegerToString(i)+": "+DoubleToString(array_ma[i],Digits()+1)+"\n";
//---
   Comment(text);
  }
//+------------------------------------------------------------------+
//| Get value of buffers                                             |
//+------------------------------------------------------------------+
bool iGetArray(const int handle,const int buffer,const int start_pos,
               const int count,double &arr_buffer[])
  {
   bool result=true;
   if(!ArrayIsDynamic(arr_buffer))
     {
      //if(InpPrintLog)
      PrintFormat("ERROR! EA: %s, FUNCTION: %s, this a no dynamic array!",__FILE__,__FUNCTION__);
      return(false);
     }
   ArrayFree(arr_buffer);
//--- reset error code
   ResetLastError();
//--- fill a part of the iBands array with values from the indicator buffer
   int copied=CopyBuffer(handle,buffer,start_pos,count,arr_buffer);
   if(copied!=count)
     {
      //--- if the copying fails, tell the error code
      //if(InpPrintLog)
      PrintFormat("ERROR! EA: %s, FUNCTION: %s, amount to copy: %d, copied: %d, error code %d",
                  __FILE__,__FUNCTION__,count,copied,GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated
      return(false);
     }
   return(result);
  }
//+------------------------------------------------------------------+

Le résultat est correct. Le symbole est d'abord sélectionné, puis l'indicateur est créé à partir de celui-ci.


Dossiers :