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
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
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.
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 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 ?
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));
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.
1) si les commandes sont de type irrégulier
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.
if(CopyTime(Symbol(),Period(),0,1,TM)<0) return;
TIME0=TM[0];
UtilisezCopyTime, j'ai également remarqué ce problème lors de la construction d'objets graphiques etCopyTime a résolu le problème.
if(CopyTime(Symbol(),Period(),0,1,TM)<0) return;
TIME0=TM[0];
C'est la première fois que j'en entends parler.
Ici, le graphique a 5 chiffres et l'indicateur en a 4.
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.