Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1129

 
Vladimir:
Il existe une possibilité, si l'EA (ou le script) est à votre disposition du point de vue de la prise et de la correction du code source. Vous devez mettre une condition autour de toutes les alertes pour vérifier si le bouton est pressé. Si le bouton n'est pas pressé, n'appelez pas les alertes.

MerciVladimir - Je pense que je vais soit utiliser votre méthode, soit mettre l'ensemble de l'EA dans cette condition.

Merci à Vitalie Postolache- je vais étudier votre recommandation. Je n'ai pas encore étudié le mql5.

 
miss.natasha:

Je dois écrire des données dans un fichier hst, afin de pouvoir les utiliser pour construire un graphique autonome.

Je me bats depuis deux jours mais rien ne fonctionne.

Code :

#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
ulong    last_fpos=0;         //
int      HandleHistory=-1;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string symbol=Symbol();
   int per=Period()*9;

   ResetLastError();
   if(CreateHeader()==true)//если создали заголовок
     {
      HandleHistory=FileOpenHistory(symbol+(string)per+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);
      if(HandleHistory!=INVALID_HANDLE)
        {

         for(int i=199;i>0;i--)//заполняем данными
           {
            MqlRates r;
            r.time=Time[i];//просто пытаюсь записать, это так для примера
            r.open=Open[i];//просто пытаюсь записать, это так для примера
            r.low=Low[i];
            r.high=High[i];
            r.close=Close[i];
            r.tick_volume=(long)10;
            r.spread=0;
            r.real_volume=(long)10;
            uint byteswritten=FileWriteStruct(HandleHistory,r);
            Print("FileOpen OK ",byteswritten," ",Time[i]);
           }
       FileClose(HandleHistory);
       // FileFlush(HandleHistory);
        }
      else Print("Операция FileOpen неудачна, ошибка ",GetLastError());
     }
// long id=ChartOpen(symbol,per);
//Alert(id);
  }
//+------------------------------------------------------------------+
bool CreateHeader()//создаем файл с историей hst(заголовок)
  {

   int      file_version=401;
   string   c_copyright;
   string   c_symbol=Symbol();
   int i_period=Period()*9;
   int      i_digits=Digits;
   int      i_unused[13];
//---  
   ResetLastError();
   HandleHistory=FileOpenHistory(c_symbol+(string)i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);
   if(HandleHistory<0)
     {
      Print("Error open ",c_symbol+(string)i_period,".hst file ",GetLastError());
      return(false);
     }
   c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
   ArrayInitialize(i_unused,0);
//--- write history file header
   FileWriteInteger(HandleHistory,file_version,LONG_VALUE);
   FileWriteString(HandleHistory,c_copyright,64);
   FileWriteString(HandleHistory,c_symbol,12);
   FileWriteInteger(HandleHistory,i_period,LONG_VALUE);
   FileWriteInteger(HandleHistory,i_digits,LONG_VALUE);
   FileWriteInteger(HandleHistory,0,LONG_VALUE);
   FileWriteInteger(HandleHistory,0,LONG_VALUE);
   FileWriteArray(HandleHistory,i_unused,0,13);
   return(true);
  }

À la suite de l'exécution, un fichier avec l'historique est créé, mais le graphe autonome n'est pas créé.

Voici l'information sur le graphique

Pour une raison quelconque, les données datent de 2003 !

En conséquence, j'obtiens une erreur lorsque je lance le graphique HistoryBase : 196 erreurs dans 'NZDCHF45'.

Je comprends que j'ai écrit quelque chose de mal. Je ne sais pas comment l'écrire correctement, j'ai trop peu d'informations. Qui sait ?


Je ne me souviens pas que MQ ait officiellement ouvert la structure des fichiers .hst (si c'est le cas, vérifiez les spécifications officielles).

peut-être est-ce un extrait d'un très, très vieux projet (C, gcc) :


/* .hst file header
*/
struct HstHeader {
    uint32_t    version;        // +0 4 LE  : database version
    char        copyright[64];  // +4 64    : copyright data
    char        symbol[12];     // +68 12   : symbol (EURUSD..)
    uint32_t    period;         // +80 4 LE : timeframe (sec. in period)
    uint32_t    digits;         // +84 4 LE : decimals after .
    datetime    timesign;       // +88 4 LE : creation time sign.
    datetime    last_sync;      // +92 4 LE : last sync. timestamp
    uint8_t     unused[52];     // +96 52   : reserved for feauture use
                                // total 148 bytes, packed, aligned by 1
};

/* .hst bar array (file payload)
*/
// when HstHeader.version==400
struct HstRates400 {
    datetime    ctm;            // +0 4 LE  : start (creation) time
    double      open;           // +4 8 LE  : open price
    double      low;            // +12 8 LE : lowest price
    double      high;           // +20 8 LE : highst price
    double      close;          // +28 8 LE : close price
    double      volume;         // +36 8 LE : volume (nr of ticks)
                                // total 44 bytes,packed, aligned by 1
} __attribute__((packed));

// when HstHeader.version==401

struct HstRates401 {
    datetime    ctm;            // +0 8 LE  : bar start time (with ms?)
    double      open;           // +8 8 LE  : open price
    double      low;            // +16 8 LE : lowest price
    double      high;           // +24 8 LE : highst price
    double      close;          // +32 8 LE : close price
    uint64_t    volume;         // +40 8 LE : volume (nr of ticks)
    uint32_t    spread;         // +48 4 LE : spread
    long        real_volume;    // +52 8 LE : real volume
                                // total 60 bytes,packed,aligned by 1
} __attribute__((packed));


maintenant, après de nombreuses années, je ne suis pas sûr que le haut et le bas doivent être dans cet ordre, mais vérifiez que vos structures sont au moins de la même taille (en-tête et enregistrement).
 

Bonjour à tous, je continue juste à affiner ce que nous avons déjà

Nous avons une grille irrégulière de commandes et une ligne horizontale qui peut être n'importe où

Nous devons mettre cela en œuvre :

si le prix est en dessous de la ligne, fermez tous les ordres.

Les difficultés sont les suivantes

1) si les commandes sont de type non-uniforme et que déjà lors de l'établissement de la ligne tout est fait, et non pas lorsque nous mettons le marquage et établissons la ligne (dans ce cas nous devrions également établir le drapeau on/off)

2) Mise en place d'une inscription en haut à droite de la ligne par type (si l'ordre est clôturé à ce prix, le résultat sera le même pour le solde, c'est-à-dire qu'il faut changer l'affichage à chaque tick et aussi lors du déplacement de la ligne ; c'est en général similaire à un trailing stop ou sl si l'ordre est placé manuellement, seulement flottant et avec la possibilité de déclenchements erronés au départ).

Le robot est là, à l'exception du marqueur numérique tout est déjà dessiné, la question est dans l'attribution correcte des valeurs et le traitement de l'information de toute la grille.

Dossiers :
USDCHFH1.png  26 kb
 
trader781:


1) si les commandes sont de type irrégulier

C'est la première fois que j'en entends parler.
 
Bonjour. Je ne comprends pas pourquoi iTime affiche parfois la mauvaise heure. A l'ouverture d'une nouvelle bougie, PERIOD_H1 doit afficher l'heure dans le journal Print(iTime(NULL,PERIOD_M1,30)). Il affiche tout correctement lors des tests, mais en réalité l'heure est parfois différente, même de plusieurs heures. Pourquoi en est-il ainsi ?
 
Nauris Zukas:
Bonjour. Je ne comprends pas pourquoi iTime donne parfois une heure erronée. L'ouverture d'une nouvelle bougie PERIOD_H1 doit faire apparaître l'heure dans le journal Print(iTime(NULL,PERIOD_M1,30)). Il affiche tout correctement lors des tests, mais en réalité l'heure est parfois différente, même de plusieurs heures. Pourquoi en est-il ainsi ?

UtilisezCopyTime, j'ai également remarqué ce problème lors de la construction d'objets graphiques etCopyTime a résolu le problème.

datetime TM[];
if(CopyTime(Symbol(),Period(),0,1,TM)<0) return;
TIME0=TM[0];
 
Vitaly Muzichenko:

UtilisezCopyTime, j'ai également remarqué ce problème lors de la construction d'objets graphiques etCopyTime a résolu le problème.

datetime TM[];
if(CopyTime(Symbol(),Period(),0,1,TM)<0) return;
TIME0=TM[0];
Merci !
 
Evgeny Belyaev:
C'est la première fois que j'en entends parler.
J'ai juste besoin d'une prise flottante qui est liée à un objet.
 
Comment faire pour que l'échelle de mon indicateur affiche 5 décimales ?

Ici, le graphique a 5 chiffres et l'indicateur en a 4.
 
igrok333:
Comment faire pour que l'échelle de mon indicateur affiche 5 décimales ?

Ici, le graphique a 5 chiffres et l'indicateur en a 4.
IndicatorSetInteger(INDICATOR_DIGITS,Digits());