Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Frage zum FileOpen/Write (http://www.expert-advisor.com/forum/showthread.php?t=3906)

pako 14.10.14 21:36

Zitat:

Zitat von traderdoc (Beitrag 27760)
Nun laß Dir mal nichts von dem pako einreden.
Beim Kerzenwechsel müssen alle Zeilen neu geschrieben werden. Nur solange Bar[0] aufgebaut wird, braucht natürlich nur die erste Zeile jeweils aktualisiert werden. Aber benötigst Du unbedingt Bar[0]?

traderdoc

wozu??? TF m5
12:30----------------12:35
bar[1]=5------------bar[1]=7
bar[2]=15-----------bar[2]=5
bar[3]=3------------bar[3]=15
bar[4]=2------------bar[4]=3

pako 14.10.14 21:40

Zitat:

Zitat von Dick_Turpin (Beitrag 27761)
Kann ich denn mit dem FileWrite auch mitten im csv-File nur eine Zeile neu schreiben?

ja

Code:

bool FileSeek(
  int                 file_handle,    // File handle
  long                 offset,          // In bytes
  ENUM_FILE_POSITION  origin          // Position for reference
  );


Dick_Turpin 14.10.14 22:00

Zitat:

Zitat von pako (Beitrag 27762)
wozu??? TF m5
12:30----------------12:35
bar[1]=5------------bar[1]=7
bar[2]=15-----------bar[2]=5
bar[3]=3------------bar[3]=15
bar[4]=2------------bar[4]=3

Du meinst damit sicher, alle Daten der letzten 10 Bars speichern und immer wenn ein neuer Bar eröffnet wird, die Daten um eine Stelle verschieben.
Aber wenn ein neuer Bar eröffnet wurde, dann haben sich ja die Werte aller 10 Bars geändert und ich muss trotzdem alle Bars neu in das csv-File schreiben.

Dank für den Tip mit dem FileSeek!

Gruß
Dick

pako 14.10.14 22:34

Zitat:

Zitat von Dick_Turpin (Beitrag 27764)
Du meinst damit sicher, alle Daten der letzten 10 Bars speichern und immer wenn ein neuer Bar eröffnet wird, die Daten um eine Stelle verschieben.
Aber wenn ein neuer Bar eröffnet wurde, dann haben sich ja die Werte aller 10 Bars geändert und ich muss trotzdem alle Bars neu in das csv-File schreiben.

Dank für den Tip mit dem FileSeek!

Gruß
Dick

nein,
TF m5-------------------------------------------excel
12:30-------------------------------------------12:30
High[1]=12-------------------------------------A1=12
High[2]=1--------------------------------------A2=1
High[3]=4--------------------------------------A3=4

TF m5-------------------------------------------excel
12:35-------------------------------------------12:35
High[1]=7 neu geschrieben-------------------A1=7
High[2]=12 vorher High[1]--------------------A2=12
High[3]=1 vorher High[2]----------------------A3=1

Dick_Turpin 15.10.14 10:51

Leider vertehe ich nicht so richtig, was Du meinst pako. Wenn ich in Excel immer nur ein Feld aktualisiere und die anderen Felder darauf hin neue Werte erhalten sollen (immer um ein Feld verschieben), dann müsste ich das mit VBA machen...

@traderdoc: Also den Bar 0 wäre schon schön zu haben, besonders in den höheren Timeframes H1, H4 und D1.

Jetzt noch mal meine Gedanken zu dem Thema:
Es soll möglichst eine einfache Lösung gefunden werden, die möglichst wenig Last auf dem Rechner erzeugt.

Wenn ich sowieso jede Minute von jedem Timeframe die Werte des Bar 0 auslesen muss, ist es da nicht am einfachsten, wenn ich dann gleiche alle Bars von 0 bis 10 mit einem Rutsch auslese un in ein csv-File schreibe? Wenn ich mit FileSeek anfange, dann muss ich für jeden Timeframe wo ein neuer Bar angefangen hat erst mal die entsprechende Zeile suchen. Außerdem habe ich in meinem EA ein zusätzliches zweidimensionales Array wo die Bar-Öffnungszeiten der unterschiedlichen Timeframes gespeichert sind.

Gruß
Dick

pako 15.10.14 12:15

Zitat:

Zitat von Dick_Turpin (Beitrag 27766)
Leider vertehe ich nicht so richtig,

Versuchen Sie TF M1
if(NewBar)
{
in file OHLC _1.csv eine zeile schreiben
in file OHLC_10.csv 10 zeilen schreiben
}
nach 10 minuten vergleichen
Zitat:

Zitat von Dick_Turpin (Beitrag 27766)

Außerdem habe ich in meinem EA ein zusätzliches zweidimensionales Array wo die Bar-Öffnungszeiten der unterschiedlichen Timeframes gespeichert sind.

Gruß
Dick

wozu???ein zusätzliches zweidimensionales Array

MqlRates rates[];
ArraySetAsSeries(rates,true);
int copied=CopyRates(Symbol(),0,0,100,rates);

Dick_Turpin 15.10.14 15:09

Ich habe 10 Minuten lang in die beiden OHLC.Files geschrieben, in ein File immer nur 1 Datensatz (OPEN,HIGH,LOW,CLOSE) und in das andere File diesen datensatz 10 mal. Bis auf das in dem einen File ein datensatz und in dem anderen 10 Datensätze drin stehen, konnte ich keinen Unterschied feststellen...

Der Hinweis mit dem MqlRates ist auch interessant, wenn da sowieso schon alle Daten gespeichert sind, die ich zum Ermitteln einer Bar-Eröffnung:) brauche. Da muss ich mich aber erst mal hinsetzen und das irgendwie verstehen, wie das Ganze funktioniert.

Gruß
Dick

Dick_Turpin 16.10.14 21:24

Zitat:

Zitat von pako (Beitrag 27763)
ja

Code:

bool FileSeek(
  int                 file_handle,    // File handle
  long                 offset,          // In bytes
  ENUM_FILE_POSITION  origin          // Position for reference
  );


Muss ich da wirklich jedes Byte / Zeichen abzählen, wenn ich mitten im csv-File eine Zeile neu schreiben möchte?
Eine Positionierung auf eine bestimmte Zeile habe ich leider nicht für den FileSeek gefunden...

Gruß
Dick

Dick_Turpin 17.10.14 07:38

Da sich, abhängig von den Preisen, auch die Anzahl der Zeichen innerhalb des csv-Files ändern kann, versuche ich jetzt erst mal eine Lösung, wo ich ans Ende des bestehenden csv-Files schreibe...


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:47 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum