Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 1129
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Es besteht die Möglichkeit, wenn der EA (oder das Skript) unter dem Gesichtspunkt der Übernahme und Korrektur des Quellcodes zur Verfügung steht. Sie müssen alle Warnmeldungen mit einer Bedingung versehen, die prüft, ob die Schaltfläche gedrückt wird. Wenn die Taste nicht gedrückt wird, werden die Alarme nicht aufgerufen.
DankeVladimir - ich denke, ich werde entweder Ihre Methode verwenden oder den gesamten EA in diesen Zustand versetzen.
Danke an Vitalie Postolache- ich werde Ihre Empfehlung studieren. Ich habe mql5 noch nicht studiert.
Ich muss Daten in eine hst-Datei schreiben, damit ich die Daten zur Erstellung eines autonomen Diagramms verwenden kann.
Ich bemühe mich schon seit zwei Tagen, aber nichts funktioniert.
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);
}
Als Ergebnis der Ausführung wird eine Datei mit der Historie erstellt, aber es wird kein eigenständiger Graph erstellt.
Hier sind die Informationen zum Diagramm
Aus irgendeinem Grund sind die Daten von 2003!
Infolgedessen erhalte ich einen Fehler, wenn ich das Diagramm starte HistoryBase: 196 Fehler in 'NZDCHF45'.
Ich verstehe, dass ich etwas falsch geschrieben habe. Ich weiß nicht, wie ich es richtig schreiben soll, ich habe zu wenig Informationen. Wer weiß - bitte um Rat.
vielleicht ist dies ein Auszug aus einem sehr, sehr alten Projekt (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));
Hallo zusammen, wir arbeiten weiter an der Verfeinerung dessen, was wir bereits haben.
Wir haben ein unregelmäßiges Raster von Aufträgen und eine horizontale Linie, die überall sein kann
Wir müssen dies umsetzen:
wenn der Preis unter der Linie liegt, alle Aufträge schließen
Die Schwierigkeiten sind wie folgt
1) wenn die Aufträge nicht einheitlich sind und bereits beim Setzen der Linie alles erledigt ist, und nicht erst beim Setzen der Markierung und der Linie (in diesem Fall sollte man auch das Ein/Aus-Flag setzen)
2) Implementierung einer Aufschrift oben rechts auf der Linie nach Typ (wenn der Auftrag zu diesem Preis geschlossen wird, ist das Ergebnis das gleiche für den Saldo, d.h. wir müssen die Anzeige bei jedem Tick und auch beim Verschieben der Linie ändern; es ist im Allgemeinen ähnlich wie ein Trailing-Stop oder Sl, wenn der Auftrag manuell platziert wird, nur fließend und mit der Möglichkeit von fehlerhaften Auslösern am Anfang)
Der Roboter ist da, bis auf die numerische Beschriftung ist alles schon gezeichnet, die Frage liegt in der richtigen Zuordnung der Werte und der Informationsverarbeitung des gesamten Rasters.
1) wenn die Aufträge unregelmäßig sind
Hallo. Ich verstehe nicht, warum iTime manchmal die falsche Zeit anzeigt. Bei der Eröffnung einer neuen Kerze soll PERIOD_H1 die Zeit im Protokoll Print(iTime(NULL,PERIOD_M1,30)) anzeigen. In Tests wird alles korrekt angezeigt, aber in der Realität weicht die Zeit manchmal sogar um mehrere Stunden ab. Warum ist das so?
Verwenden SieCopyTime, ich habe dieses Problem auch beim Erstellen von grafischen Objekten bemerkt undCopyTime hat das Problem gelöst
if(CopyTime(Symbol(),Period(),0,1,TM)<0) return;
TIME0=TM[0];
Verwenden SieCopyTime, ich habe dieses Problem auch beim Erstellen von grafischen Objekten bemerkt undCopyTime hat das Problem gelöst
if(CopyTime(Symbol(),Period(),0,1,TM)<0) return;
TIME0=TM[0];
Das ist das erste Mal, dass ich von ihnen höre.
Hier hat das Diagramm 5 Stellen und der Indikator 4 Stellen.
Wie kann ich erreichen, dass die Skala meines Indikators 5 Dezimalstellen anzeigt?
Hier hat das Diagramm 5 Stellen und der Indikator 4 Stellen.