[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 285

 
TarasBY:

ArrayInitialize() fonctionne probablement !

ArrayInitialize(ask, EMPTY_VALUE) ; vous voulez dire ? Je ne l'ai pas fait. Pourquoi l'ai-je coupé exactement, j'avais peur d'un tel cas :

(a, b, c)//valeurs en demande après trois ticks par seconde (fantastique, mais supposons).

ArrayInitialize(ask, 0);//être (0, 0, 0)

FileWriteDouble(hand1e, ask[ArraySize(ask)-1], DOUBLE_VALUE) ;//Close[]

- La cellule Close recevra 0. C'est pourquoi je redéfinis la taille pour éviter que cela ne se produise. Vérifier ArrayInitialize(ask, EMPTY_VALUE) ;.

TarasBY:

Vous devez arrêter d'utiliser les tableaux d'indicateurs.

Ils sont dynamiques, c'est pour ça que j'ai craqué. Moins de commandes, moins de cycles du processeur. Vous devez faire 500 millisecondes de traitement à n'importe quel moment théoriquement possible... ...pour y arriver.

 
savez-vous s'il est possible de remplacer les ordres d'envoi et de fermeture dans un EA par une fenêtre manuelle et d'entrer sur le marché par cette fenêtre, c'est nécessaire pour les courtiers qui ne permettent pas d'utiliser les EAs.
 
gyfto:

ArrayInitialize(ask, EMPTY_VALUE) ; vous voulez dire ? Je ne l'ai pas fait. J'avais peur d'un tel cas, c'est pourquoi j'ai commencé à le réduire :

(a, b, c)//valeurs en demande après trois ticks par seconde (fantastique, mais supposons).

ArrayInitialize(ask, 0);//être (0, 0, 0)

FileWriteDouble(hand1e, ask[ArraySize(ask)-1], DOUBLE_VALUE) ;//Close[]

- La cellule Close recevra 0. C'est pourquoi je redéfinis la taille pour éviter que cela ne se produise. ArrayInitialize(ask, EMPTY_VALUE);; ; les vérifier.


Ils sont dynamiques, c'est pour ça que j'ai craqué. Moins de commandes, moins de cycles du processeur. Vous devez gérer 500 millisecondes de traitement à chaque goulot d'étranglement théoriquement possible... ...pour y arriver.

Ce n'est pas ce que je veux dire : quelque chose me dit que vous ne parviendrez pas à réduire le tableau des indicateurs. En outre, s'il y a des cellules non remplies dans un tel tableau, il y a TOUJOURS une valeur à cet endroit : 0 ou EMPTY_VALUE, et qu'obtenez-vous dans ces calculs :

bid[ArrayMaximum(bid)];
ask[ArrayMinimum(ask)];
Et selon la logique générale : j'exécuterais toute la collection de tics dans une boucle et contrôlerais séparément le temps et, dès que le temps de la "nouvelle barre" est passé, je l'écrirais dans le fichier, en mettant à zéro et en coupant les tableaux de travail dans le processus.
 
ex_kalibur:
Si je le sais, est-il possible de changer les ordres d'envoi et de fermeture dans le conseiller pour appeler la fenêtre de négociation manuellement et entrer sur le marché par cette fenêtre, c'est nécessaire pour les courtiers qui ne permettent pas l'utilisation des conseillers.
Fenêtre "Propriétés" du conseiller -> onglet "Général" -> "Trading automatique". -> Mettre une case à cocher sur "Confirmation manuelle" - Je ne connais pas d'autre moyen.
 
TarasBY:

Et selon la logique générale : j'exécuterais toute la collection de tics dans une boucle et contrôlerais séparément le temps et, une fois que le temps de la "nouvelle barre" est passé, je l'écrirais dans le fichier, en mettant à zéro et en coupant les tableaux de travail dans le processus.


C'est étrange... Je l'ai comme ça... La seule différence est que le temps est contrôlé dans le cycle de collecte des tics lui-même, et le tableau de travail n'est pas coupé tant qu'une copie du tic n'a pas été dessinée autant de fois qu'il n'y a pas eu de tic moins une seconde. Une seconde passée - un nouveau tick est dessiné, deux - une copie du tick précédent et un nouveau tick, trois - deux copies du tick précédent et un nouveau tick, etc. Au lieu des copies du tick précédent il est possible de dessiner un tiret par le niveau Close, cette variante est commentée dans le code.
 
gyfto:

C'est étrange... Je l'ai comme ça... La seule différence est que le temps est contrôlé dans la boucle elle-même, et que le tableau de travail n'est pas coupé tant qu'une copie du tick n'est pas dessinée autant de fois qu'il n'y a pas eu de ticks moins un. Une seconde passée - un nouveau tick est dessiné, deux - une copie du tick précédent et un nouveau tick, trois - deux copies du tick précédent et un nouveau tick, etc. Au lieu des copies du tick précédent il est possible de dessiner un tiret par le niveau Close, cette variante est commentée dans le code.

Vous et moi parlons de cycles différents. Je parle de ça :

    while (!IsStopped() && IsExpertEnabled())
    {
        //---- Сбор тиков
    }
 
Quelqu'un peut-il me dire comment supprimer les zéros après la virgule ? J'ai 4 décimales dans mon code pour une raison quelconque. Voici le code. chaîne l_dbl2str_12 = DoubleToStr(g_ibuf_140[0] - g_ibuf_144[0],3) ;
 
Demon2057:
Quelqu'un peut-il me dire comment supprimer les zéros après la virgule ? J'ai 4 décimales dans mon code pour une raison quelconque. Voici le code. chaîne l_dbl2str_12 = DoubleToStr(g_ibuf_140[0] - g_ibuf_144[0],3) ;
https://docs.mql4.com/ru/strings/StringSubstr
 

Pouvez-vous me dire ce que je fais mal...

J'ai besoin d'une variable de type double pour contenir la date 0,20130429164459 (c'est-à-dire 2013.04.29 16:44:59).

Fait partie du code de l'EA :

#include <stdlib.mqh>
bool once=false;
int start()
  {
  if (once==false)
     {
    double DTM; // дата и время в формате 0,20130429164459
    int YY=TimeYear(   TimeCurrent());   // Year
    int MN=TimeMonth(  TimeCurrent());   // Month         
    int DD=TimeDay(    TimeCurrent());   // Day
    int HH=TimeHour(   TimeCurrent());   // Hour         
    int MM=TimeMinute( TimeCurrent());   // Minute
    int SS=TimeSeconds(TimeCurrent());   // Second
    DTM = YY*0.0001+MN*0.000001+DD*0.00000001+HH*0.0000000001+MM*0.000000000001+SS;
    
   Alert ("Значение переменной DTM с 06 знаками равно ", DoubleToStrMorePrecision(DTM,6));
   Alert ("Значение переменной DTM с 07 знаками равно ", DoubleToStrMorePrecision(DTM,7));
   Alert ("Значение переменной DTM с 08 знаками равно ", DoubleToStrMorePrecision(DTM,8));
   Alert ("Значение переменной DTM с 09 знаками равно ", DoubleToStrMorePrecision(DTM,9));
   Alert ("Значение переменной DTM с 10 знаками равно ", DoubleToStrMorePrecision(DTM,10));
   Alert ("Значение переменной DTM с 11 знаками равно ", DoubleToStrMorePrecision(DTM,11));
   Alert ("Значение переменной DTM с 12 знаками равно ", DoubleToStrMorePrecision(DTM,12));
   Alert ("Значение переменной DTM с 13 знаками равно ", DoubleToStrMorePrecision(DTM,13));
   Alert ("Значение переменной DTM с 14 знаками равно ", DoubleToStrMorePrecision(DTM,14));
   Alert ("Значение переменной DTM с 15 знаками равно ", DoubleToStrMorePrecision(DTM,15));
   once=true;
      }
   return(0);
  }

Le journal des événements pour Precision 12, 13 et 14 donne un résultat erroné, voir l'image.


 

Je voudrais profiter de cette occasion pour répéter ma première question.

Pouvez-vous me dire comment résoudre un problème "simple" ?

Par exemple, je dois supprimer la deuxième ligne d'un fichier CSV. Je n'ai pas trouvé d'information dans la documentation sur la façon de le faire.

Exemple :

12:30;1;1.34818;12:32;3;3;100;1.34939;18:45\r\n

14:00;1;1.32219;14:26;6;6;100;0.0000;00:00\r\n

19:00;0;1.35828;19:12;12;6;600;1.37939;19:59\r\n