Erreurs, bugs, questions - page 2031

 
La source des cotations FOREX a-t-elle changé sur Metaquotes-Demo ? Les écarts sont beaucoup plus faibles.
 
Slava:
Un quatuor ?

Oui

 
Au lieu d'une erreur de compilation, il y a un comportement étrange lorsque l'on exécute
// Запускаем на MT5

#import "Temp.ex4" // EX4 - не ошибка
  void Func();
#import

void OnInit()
{
  Func();
}

Pas n'importe quelle DLL, pas même Temp.ex4 !

 
Vitaly Muzichenko:

Oui

Le problème est que dans le nouveau MQL4, les chaînes de caractères sont unicode. Dans tous les autres endroits : objets, indicateurs, graphiques, noms de symboles, journaux, paramètres, etc. - les chaînes de caractères restent unicode. Par conséquent, lors de la communication avec le "monde extérieur" dans les programmes MQL4, la conversion WideCharToMultiByte est effectuée à chaque fois. Dans le cas normal, les caractères des chaînes de caractères sont d'un seul octet (mais différents selon le codage), en Asie du Sud-Est, ils sont de plusieurs octets (en chinois, un caractère prend de 1 à 4 octets).

Ainsi, non seulement les Chinois, mais aussi les Européens ne comprendront pas la page de code 1251.

 
Slava:

Le problème est que dans le nouveau MQL4, les chaînes de caractères sont unicode. Dans tous les autres endroits : objets, indicateurs, graphiques, noms de symboles, journaux, paramètres, etc. - les chaînes de caractères restent unicode. Par conséquent, lors de la communication avec le "monde extérieur" dans les programmes MQL4, la conversion WideCharToMultiByte est effectuée à chaque fois. Dans le cas habituel, les caractères des chaînes de caractères sont d'un seul octet (mais différents selon le codage), en Asie du Sud-Est, ils sont de plusieurs octets (en chinois, un caractère prend de 1 à 4 octets).

Ainsi, non seulement les Chinois, mais aussi les Européens ne comprendraient pas la page de code 1251.

Voici l'astuce : nous créons un objet avec un nom en cyrillique, puis au moment du clic, il est géré dans OnChartEvent, mais son nom n'y est pas visible.

Nous vérifierons aujourd'hui dans le cinq pour voir si cet endroit aura un problème.

 
Vitaly Muzichenko:

Voici le problème : nous créons un objet avec un nom en cyrillique, puis, au moment du clic, il est géré dans OnChartEvent, mais son nom n'y apparaît pas.

Aujourd'hui, nous allons vérifier dans FIVE pour voir si cet endroit aura un problème.

Cela fonctionnera dans Fiver.

Et il y a une solution pour votre cas dans Quaternaire.

Appeler MQLSetInteger(MQL_CODEPAGE,CP_ACP) dans OnInit ;

Alors les conversions de chaînes de caractères "aller-retour" seront adéquates.


MQLSetInteger - Проверка состояния - Справочник MQL4
MQLSetInteger - Проверка состояния - Справочник MQL4
  • docs.mql4.com
Функция MQLSetInteger() предназначена для изменения текущей кодовой страницы в запущенной mql4-программе. Это может понадобиться в тех случаях, когда для запускаемых mql4-программ терминал устанавливает по умолчанию кодовую страницу, отличающаяся от той, которая использовалась при её компиляции. Например, mql4-программа скомпилирована на...
 
Dites-moi si vous savez ce que je fais de mal :

ce code fonctionne sur EURUSD 30m

#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0
ENUM_MA_METHOD     MA_Type   = MODE_SMA;
ENUM_APPLIED_PRICE MA_Price  = PRICE_CLOSE;
int handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   handle = iMA("AAPL",_Period, 10,0,MA_Type,MA_Price);

   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[])
{

   return(rates_total);
}
//+------------------------------------------------------------------+


le terminal génère une erreur :
2017.10.11 14:35:23.352 111111111111111111111111 (EURUSD,M30) ne peut pas charger l'indicateur 'Moyenne mobile' [4302]

Lorsque je l'imprime, il génère -1 ;

 
Money_Man:
Dites-moi ce que je fais de mal :

ce code fonctionne sur EURUSD 30m



le terminal donne une erreur :
2017.10.11 14:35:23.352 111111111111111111111111 (EURUSD,M30) ne peut pas charger l'indicateur 'Moyenne mobile' [4302]



Et donc :

   handle = iMA(Symbol(),Period(), 10,0,MA_Type,MA_Price);

?

 
Money_Man:
S'il vous plaît, dites-moi ce que je fais mal :

ce code fonctionne sur EURUSD 30m



le terminal donne une erreur :
2017.10.11 14:35:23.352 111111111111111111111111 (EURUSD,M30) ne peut pas charger l'indicateur 'Moyenne mobile' [4302]


Que signifie l'erreur 4302 ?
 
Money_Man:
Dites-moi ce que je fais de mal :

ce code fonctionne sur EURUSD 30m



le terminal donne une erreur :
2017.10.11 14:35:23.352 111111111111111111111111 (EURUSD,M30) ne peut pas charger l'indicateur 'Moyenne mobile' [4302]



Quelle question "compliquée". Extrait de la documentation - 4302 :Le symbole n'est pas sélectionné dans MarketWatch.

Vous devez sélectionner AAPL dans Market Watch.

Raison: