Erreurs, bugs, questions - page 270

 
Rosh:

Faites fonctionner un tel indicateur et vous verrez par vous-même :

Ainsi, en

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

open[] n'est pas non plus une série temporelle ?

Je ne comprends rien, donnez-moi un exemple de série chronologique.

 
Voodoo_King:

construire 375. Le bug est vraiment mauvais, ce qui m'a déjà fait perdre pas mal d'argent...

Les paramètres de l'EA ne sont pas rétablis après la fermeture/ouverture du terminal.

Pour être plus précis, une partie d'entre eux peut être restaurée (par exemple, 3 sur 6), tandis que le reste est remis aux paramètres par défaut.


construire 381. RIEN N'A CHANGÉ ! !!

à chaque fois que le terminal est redémarré, les EA sont initialisés avec des paramètres différents (ceux qu'ils veulent).

Initialisation incorrecte des paramètres de l'expert

 
AlexSTAL:

Cette fonction vérifie la direction, pas le changement.

1) Sans initialisation

2) Avec initialisation

3) Le code ci-dessus, uniquement avec la fonction de direction d'indexation du tableau ArrayGetAsSeries

J'ai fait une erreur dans le service d'assistance avec le nom de la fonction simplement


Oui, j'ai trouvé l'erreur du compilateur. Merci pour le message. Une correction sera apportée dans la prochaine version.
 
BoraBo:

Ainsi, en

open[] n'est pas non plus une série temporelle ?

Je ne comprends pas, donnez-moi un exemple de série chronologique.

Ce n'est pas un CT, et alors ? Définissez-le comme une série temporelle via Set et ce sera un TC. Est-ce la première fois que vous exécutez le terminal ? Que pour vous c'est une si grande nouvelle. Je pense que quelqu'un vient d'écrire que nous devrions décider nous-mêmes comment travailler dans leurs programmes - avec TS ou juste avec des tableaux.
 
joo:


C'est pourquoi je le fais dans OnCalculate() :

Pouvez-vous m'aider à faire en sorte queArrayGetAsSeries(low) donne vrai.

 
BoraBo:

Pouvez-vous nous aider à faire en sorte quela sortie de ArrayGetAsSeries(low) soit vraie?

J'en ai marre :)) réglez-le comme vous voulez et bonjour. Il n'y a rien à vérifier. :))
 
BoraBo:

Ainsi, en

open[] n'est pas non plus une série temporelle ?

Je ne comprends rien, donnez-moi un exemple de série chronologique.

open[] et tous les autres tableaux dans OnCalculate sont des séries temporelles. Au tout début, lorsque le langage MQL5 était écrit, ArrayGetAsSeries() retournait vrai pour eux et leur indexation était effectuée pour eux exactement comme pour les séries temporelles, c'est-à-dire à l'envers.

Mais il s'est avéré très peu pratique et peu naturel d'écrire des calculs de tampon d'indicateur dans le style MQL4 et il n'y avait qu'une seule solution - inverser l'indexation des séries chronologiques pour une utilisation pratique. Nous avons commencé à rédiger des indicateurs personnalisés dans cet esprit :

int OnCalculate (const int rates_total,      // размер входных таймсерий
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const datetime& time[],     // Time
                 const double& open[],       // Open
                 const double& high[],       // High
                 const double& low[],        // Low
                 const double& close[],      // Close
                 const long& tick_volume[],  // Tick Volume
                 const long& volume[],       // Real Volume
                 const int& spread[]         // Spread)
{
//---- переворачиваем все таймсерии, чтобы ими было удобно пользоваться, как обычными массивами
   ArraySetAsSeries(open,false);
   ArraySetAsSeries(high,false);
   ArraySetAsSeries(low,false);
   ArraySetAsSeries(close,false);
   ArraySetAsSeries(time,false);
   ArraySetAsSeries(tick_volume,false);
   ArraySetAsSeries(volume,false);
   ArraySetAsSeries(spread,false);
   ArraySetAsSeries(open,false);
.... остальной код
}

Mais chaque fois que nous avons dû écrire un tel fouillis de conversions, cela s'est avéré ne pas être une bonne idée non plus. Il a donc été décidé de passer ces séries temporelles avec indexation, comme pour les tableaux habituels. C'est ainsi que nous avons obtenu un tel paradoxe, lorsque les séries temporelles ne sont pas indexées comme des séries temporelles. C'est pourquoi l'aide indique qu'il faut vérifier l'ordre d'indexation et, le cas échéant, le régler comme il convient.

 
BoraBo:

Aidez-moi à faire en sorte quela sortie de ArrayGetAsSeries(low) soit vraie.

Elle renvoie déjà vrai, mais à cause d'une erreur de compilation, sa valeur est sortie incorrectement comme paramètre. Vérifiez comme ça :

#property script_show_inputs
input bool isTimeSeria=true;


double Ups[];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {

//--- установим для массивов признак таймсерии
   Print("Установим для массивов признак таймсерии как ",isTimeSeria);
   ArraySetAsSeries(Ups,isTimeSeria);

//--- Проверим таймсерии
   if(ArrayGetAsSeries(Ups))
     {
      Print("1:  ArrayGetAsSeries(Ups)=true");
      Print("2:  ArrayGetAsSeries(Ups)=",ArrayGetAsSeries(Ups));
     }
   else
     {
      Print("ArrayGetAsSeries(Ups)=true!!!");
     }
  }
//+------------------------------------------------------------------+


Résultat :


 
Rosh:

Il donne bien vrai, mais à cause d'une erreur de compilation, sa valeur en tant que paramètre est sortie de manière incorrecte. Vérifiez comme ça :


Résultat :


Merci, j'ai compris.

ArrayIsSeries() etArrayGetAsSeries() dans l'opérateur conditionnel if() fonctionnent comme décrit, mais Print() produit toujours false.


 

Les développeurs.

1) Veuillez vérifier le chargement de l'historique dans le testeur (c'est la première fois que je teste).

Je teste EURUSD en utilisant un MACD Sample standard sur H1 avec l'intervalle "last month".

J'ai atteint 57% des données téléchargées et me suis figé avec succès, avec seulement cette ligne dans le journal

2011.01.19 17:16:23	Tester	EURUSD: history preliminary downloading started

2. Est-il possible de faire le levier de 1:200 et 1:500 dans les nouvelles constructions dans le testeur constamment ?

Je comprends que toutes les sociétés de courtage ne disposent pas d'un tel effet de levier, en particulier sur MT5, mais dans le Strategy Tester, cela devrait probablement être laissé car il est plus pratique de tester les stratégies sur une nouvelle plateforme.

Raison: