[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 607

 
rustein:
Ja, ich verstehe, vielen Dank.

Sagen wir es so, ich kenne keinen anderen Weg.......)

Und so...

double BullSumm()
{
  double MySummBull=0;
  for(int Cnt=0;Cnt<OrdersTotal();Cnt++)
  { 
    if(!OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES))continue; // если нет продолжим цикл
    if(OrderType()==OP_BUY)
    {
      MySummBull+=OrderOpenPrice()*OrderLots();
    }
  }
  if(MySummBull==0)return(380/*v*/);
  return(MySummBull);
}
 
griha:
EA-Aktionen in einer Datei protokollieren möchten
Ich habe ein Beispiel aus dem Handbuch des MQL-Editors genommen und es für meine eigenen Bedürfnisse leicht umgestaltet


Das Ergebnis ist, dass die Datei OrdersReport.csv leer ist, obwohl die Aufträge geöffnet sind.


Ich bin auf das gleiche Problem gestoßen: Wenn ich eine Datei zum Lesen öffne und versuche, in sie zu schreiben, wird die Datei entweder nicht erstellt oder es wird nichts in sie geschrieben.

Anwendung Servicedeck :

Wenn versucht wird, eine mit dem Schlüssel FILE_READ|FILE_WRITE deregistrierte Textdatei zu ergänzen, ohne vorher den Dateizeiger mit FileSeek() explizit zu setzen, wird überhaupt nicht geschrieben.

In früheren Versionen des Terminals wurde beim Vorlesen einer Textdatei mit dem Befehl FileReadString() der Dateizeiger automatisch gesetzt.

Hier ist eine Antwort von Entwicklern:

Die letzte Änderung der Dateifunktionalität geht auf Mitte 2008 zurück.

Noch nie war es möglich, an eine Datei anzuhängen, ohne vorher einen Dateizeiger am Ende zu setzen.

Nochmals eine Frage zu zusätzlichen Informationen. Hat dies etwas mit dem Anhängen an das Ende einer Datei zu tun?

Bei allen Lese- und Schreiboperationen wird der Dateizeiger automatisch verschoben. Das war schon immer so und hat sich nicht geändert. Wird die Datei jedoch als csv-Datei geöffnet, ist eine Zwischenpufferung der Daten möglich. Dann ist der Dateizeiger möglicherweise nicht dort, wo Sie ihn erwarten. Auch dies war schon immer der Fall, sowohl in der Vorgängerversion als auch in der Vorabversion, seit Beginn der offiziellen Veröffentlichung.

Wir haben immer wieder darauf hingewiesen, dass das Ausfallprinzip äußerst nachteilig ist. Auch bei Dateizeigern. Behandeln Sie den Dateizeiger explizit, es sei denn, Sie verwenden kontinuierliches Lesen oder kontinuierliches Schreiben (insbesondere die exotischen gemischten Lese-Schreib-Fälle).

Fazit: FileSeek verwenden

 
khorosh:
Prüfen.
Ich danke Ihnen.
 
Roll:

Ihr Expert Advisor handelt mit 30-Minuten-ADX-Signalen. Wenn Ihr Expert Advisor mit 1min-ADX-Signalen handelt, werden solche Signale häufiger auftreten als bei der ersten Variante. Der Screenshot in Ihrer Variante wird nur beim Öffnen der BUY-Position gemacht.
Sie interessieren sich für das Fehlen von Indikatoren im Chart auf dem Screenshot (im Testmodus). Sie wurden gebeten, das Vorhandensein von Indikatoren auf dem Screenshot im Demomodus zu überprüfen. Das Skript mit der entsprechenden Funktion wurde hinzugefügt, so dass Sie Ihre Frage schnell überprüfen und verstehen können, anstatt stundenlang zu warten. Es ist mehr als ein Tag vergangen. Ich möchte wissen, wie Ihre Ergebnisse aussehen?

Ich halte Sie auf dem Laufenden. Ich habe zu tun, aber ich werde versuchen, morgen nachzusehen.
 

Können Sie mir sagen, was der Unterschied ist, wenn man einen Namen in einer Funktion definiert oder wenn man eine Variable benennt und sie dann an eine Funktion übergibt?

//-------------- первый вариант (рабочий)

string up_line = "upline_", down_line = "downline_";
 
     flatlineup(up_line+TimeToStr(Time[i]), y2,x2,y22,x2,Red,1);     Имя присваиваю в теле функции
     flatlinedown(down_line+TimeToStr(Time[i]), y1,x1,y11,x1,Blue,1);
     dellline(up_line, down_line);

TimeToStr(Time[i]) указывал в имени тренд лайн в теле функции
//--------------- второй вариант (нерабочий)

string up_line = "upline_"+TimeToStr(Time[i]); //--или пробовал StringConcatenate()        ИМЯ ПРИСВАИВАЮ В ПЕРЕМЕННОЙ
string down_line = "downline_"+TimeToStr(Time[i]); //--или пробовал StringConcatenate()
 
     flatlineup(up_line, y2,x2,y22,x2,Red,1);                 ПЕРЕДАЮ ПЕРЕМЕННУЮ В ФУНКЦИЮ
     flatlinedown(down_line, y1,x1,y11,x1,Blue,1);
     dellline(up_line, down_line);
 
rustein:
Helfen Sie mir, den Fehler der Nullteilung im EA zu beseitigen.

Ich danke Ihnen im Voraus.

Sie können es so machen, das funktioniert bei mir

double BullPrice()

{

double BullAveragePrice=0;

doubleSummBullLots=0;

for (int i = OrdersTotal() - 1; i >= 0; i--)

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol()) continue;

if (OrderSymbol() == Symbol() && OrderType() == OP_BUY)

{

BullAveragePrice+=OrderOpenPrice()*OrderLots();

MySummBullLots+=OrderLots();

}

}

if (MySummBullLots>0) BullAveragePrice = NormalizeDouble(BullAveragePrice / MySummBullLots, Digits);

return(BullAveragePrice);

}

 
Zhunko:

Im MT4-Ordner befindet sich ein C++-Beispielcode für alle Fälle in MQL4. Kompilieren Sie diesen Code und fügen Sie Ihren eigenen Code ein. Sie werden sofort den Unterschied zwischen Ihnen und dem Beispiel feststellen.

Mein MT hat keins. Es gibt nur 1 in MQL geschriebene Bibliothek (stdlib.mq4). Können Sie hier ein Beispiel nennen?
 
Fox_RM:

Können Sie mir sagen, was der Unterschied zwischen der Definition eines Namens in einer Funktion und der Zuweisung eines Variablennamens und der anschließenden Übergabe der Variable an eine Funktion ist?

In Ihrem Beispiel besteht der einzige Unterschied in der Übergabe der Parameter an die Funktion
.
dellline(...)
 
costy_:

Ansonsten...

Ich danke Ihnen!
 

Bitte beraten Sie die Situation ist dies, ich lese eine csv-Datei wie folgt

void ReadDate(){
   while(!IsStopped()){
      string dTime = FileReadString(ExtCsvHandle); // читаем строчку 1
      string sValue = FileReadString(ExtCsvHandle); // читаем строчку 2
      Print("Date=",StrToTime(dTime), "Value=",sValue);   
      
   }
}

aber die csv-Datei hat einen Header, die erste zusätzliche Zeile

Time,Value
15.02.2012 00:00:00;Значение1
15.02.2012 00:01:07;Значение2
15.02.2012 00:02:26;Значение3
15.02.2012 00:00:00;Значение1
15.02.2012 00:01:07;Значение2
15.02.2012 00:02:26;Значение3

Wie kann man die erste Zeile programmatisch überspringen oder generell programmatisch löschen, wenn man den Wert speichert, verdirbt das alles.

Vielen Dank im Voraus.