Erreurs, bugs, questions - page 949

 
olyakish:

Ce n'est pas le problème, mais le comportement différent sur le serveur Win2003x64 (VPS) et Win7x64 Home.

http://file.karelia.ru/6v55j5/ la vidéo sur le lien indique que lors du démarrage du terminal, il consomme beaucoup plus de mémoire allouée que ce que le système d'exploitation indique pour ce processus.

Oh, comme tout court.

Trop long à expliquer et cela n'a rien à voir avec le terminal. Oubliez-le et ne lésinez pas sur le VPS.

 
Renat:

Oh, c'est vraiment le bordel.

Trop long à expliquer et cela n'a rien à voir avec le terminal. Oubliez-le et ne lésinez pas sur le VPS.

Peut-être pas tant que ça.

Par exemple, il se peut que le terminal capte des services tiers qui consomment plus que le terminal lui-même. Et sur mon ordinateur portable, ils sont juste initialement au démarrage,

Alors pourquoi la mémoire est consommée comme lors de la première exécution du terminal - il suffit d'exécuter le service une fois. (bien que l'on puisse se demander si le service peut exécuter des threads pour chaque copie du terminal).

OK, je vais demander d'une autre manière, si le serveur est 2008 sur un VPN il n'aura pas cet effet si c'est trop long à expliquer.

 
olyakish:

Peut-être pas tant que ça.

Par exemple, il se peut que le terminal capte des services tiers qui consomment plus que le terminal lui-même. Sur mon ordinateur portable, ils sont juste initialement au démarrage,

alors pourquoi la consommation de mémoire est-elle similaire à la première exécution du terminal - le service ne doit être exécuté qu'une seule fois. (bien que l'on puisse se demander si le service peut démarrer des threads pour chaque copie du terminal)

Ok je vais demander d'une autre manière, si le serveur est 2008 sur pps il n'aura pas cet effet si c'est trop long à expliquer.

J'ai sur le VPS (Win XP) environ 200 MB consommés par le terminal MT4.
 
Pourquoi ne pas autoriser (en cochant la case correspondante dans les paramètres) le terminal à utiliser un cache swap ? L'utilisateur pourra choisir le compromis vitesse/chargement de la mémoire.
 

...Cela semble être une opération simple, mais les valeurs entières correctes en pips ne peuvent être obtenues. Voici le code du script :

void OnStart() {
//---
   double max_price = NormalizeDouble(ChartGetDouble(0, CHART_PRICE_MAX), _Digits);
   double min_price = NormalizeDouble(ChartGetDouble(0, CHART_PRICE_MIN), _Digits);
   
   double entry_price, stop_price, profit_price;
   entry_price = NormalizeDouble((max_price+min_price)/2, _Digits);
   stop_price = NormalizeDouble(entry_price-(entry_price-min_price)/2, _Digits);
   profit_price = NormalizeDouble(max_price-(max_price-entry_price)/2, _Digits);
   
   int stop_pips = int((entry_price - stop_price)/_Point);
   int profit_pips = int((profit_price - entry_price)/_Point);
   
   Print("Entry: ", entry_price, ", Stop: ", stop_price, ", Profit: ", profit_price,
         ", Stop pips: ", stop_pips, ", Profit pips: ", profit_pips);
//---   
}

Voici les résultats de la course :

2013.03.29 16:42:03 Experiment_Script (EURUSD,H4) Entrée : 1.29445, Stop : 1.28453, Profit : 1.30438, Stop pips : 991, Profit pips : 993
2013.03.29 16:41:57 Experiment_Script (GBPUSD,H4) Entrée : 1.50465, Stop : 1.49348, Profit : 1.51583, Stop pips : 1117, Profit pips : 1117

Elle devrait être de 992 et 993 (pour EURUSD), 1117 et 1118 (pour GBPUSD). Pouvez-vous me dire comment obtenir un résultat correct ?

 
Rone:

...

Essayez de diviser par 2.0 au lieu de 2.

Le résultat d'une opération sur un nombre entier est un nombre entier, et le fait que le résultat soit écrit en double n'a aucune incidence.

 
muallch: Pourquoi ne pas autoriser (en cochant la case correspondante dans les paramètres) le terminal à utiliser un cache swap ? Il y aura un compromis vitesse/charge mémoire sélectionnable par l'utilisateur.
Il est préférable de s'adresser directement au Service Desk pour ce genre de questions. Sinon, ils se perdront.
 
fyords: Essayez de diviser par 2.0 au lieu de 2 seulement.

Non, ce n'est pas le problème. Le divisible est un double.

Le problème est très probablement causé par ces lignes :

   int stop_pips = int((entry_price - stop_price)/_Point);
   int profit_pips = int((profit_price - entry_price)/_Point);
Rone:
Essayez d'imprimer la valeur "(entry_price - stop_price)/_Point" sans arrondir.
 

Veuillez me dire si quelqu'un a déjà rencontré un tel problème.

Il y a un code :

//+------------------------------------------------------------------+
double date[];
//+------------------------------------------------------------------+
void OnInit()
{
   ArrayResize(date,3);
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   Print("ArraySize(date)=",ArraySize(date));
}
//+------------------------------------------------------------------+
En temps réel dans le terminal, cela fonctionne :
DH      0       12:39:43        test (EURGBP.m,M5)      ArraySize(date)=3
LN      0       12:39:43        test (EURGBP.m,M5)      ArraySize(date)=3
DG      0       12:39:43        test (EURGBP.m,M5)      ArraySize(date)=3
Mais dans le testeur, le même code donne un résultat différent :
MN      0       12:34:21        test (EURGBP.m,M15)     2013.01.02 07:59:59   ArraySize(date)=0
OG      0       12:34:21        test (EURGBP.m,M15)     2013.01.02 07:59:59   ArraySize(date)=0
IM      0       12:34:21        test (EURGBP.m,M15)     2013.01.02 07:59:59   ArraySize(date)=0
 
fyords:

Veuillez me dire si quelqu'un a déjà rencontré un tel problème.

Il y a un code :

En temps réel, dans le terminal, cela fonctionne : mais dans le testeur, le même code donne un résultat différent :

La taille du tableau doit-elle être obtenue indépendamment de l'événement qui s'est produit ?