[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 59

 
xrust писал(а) >>
Ändern Sie den Namen des detaillierten Berichts in "normaler Bericht" und Sie werden zufrieden sein.

Können Sie mir sagen, wenn es nicht schwierig ist, wo genau dieser Name geändert werden kann? In der Benutzerhilfe steht dazu überhaupt nichts.

 
Äh... Sie verblüffen mich.... Sie haben noch nie eine Datei umbenannt?
 
Liebe Experten, bitte ignorieren Sie meine Frage nicht.

Gibt es einen Indikator, der die Volatilität zählt, zum Beispiel täglich. Aber nicht die, die eine undefinierte Zahl wie 0,34 ergibt. Er sollte jedoch die Anzahl der Kerzen pro Tag berechnen und diese durch einen bestimmten Zeitraum (Anzahl der Tage) teilen, damit der Indikator den Durchschnittswert kennt. Beispiel: Eröffnung 100, Schluss 200; am zweiten Tag - Eröffnung 200, Schluss 250. Durchschnittliche Volatilität für diese 2 Tage = ((200-100)+(250-200))/2 Tage=(100+50)/2=75
Wo herunterladen, falls verfügbar.
 
xrust писал(а) >>
Äh... Sie verblüffen mich hier.... >> haben Sie noch nie eine Datei umbenannt?

Das Terminal soll automatisch alle 20 Minuten einen Bericht erstellen und ihn an den FTP-Server senden. Diese Funktion speichert standardmäßig einen regelmäßigen Bericht. Diese Funktion des Terminals speichert standardmäßig einen regulären Bericht, während ich gerne einen detaillierten Bericht mit zusätzlichen Informationen und einer Grafik hätte. Sie können den detaillierten Bericht problemlos manuell speichern und den gewünschten Verlaufszeitraum auswählen.

Und Sie haben mich zuerst verwirrt - was und wo soll ich manuell umbenennen, um die Arbeit der automatischen Funktion zu organisieren? Das ist überhaupt nicht klar.

 

Ich wiederhole einen Beitrag von https://forum.mql4.com/ru/10422, aber vielleicht wäre meine eigene Frage hier besser aufgehoben.


Hier ist ein Teil des Codes aus example.ini:

[common]
numCross=3

[cross1]
name=EURUSD

[cross2]
name=GBPUSD

[cross3]
name=USDJPY


liest die Anzahl der Paare und speichert dann die Namen der Paare nacheinander in einem String-Array:

#include <IniFiles.mqh>

extern string config_path = "C:\Program Files\MetaTrader - MetaQuotes\experts\example.ini";

string CrossName[];
int numCross=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
string sectionName = "common";

numCross = ReadIniInteger(config_path, sectionName, "numCross", 0);
ArrayResize(CrossName, numCross);

for (int i=0; i<numCross; i++)
{
sectionName = StringConcatenate("cross", i+1);
CrossName[i] = ReadIniString(config_path, sectionName, "name", "-");
Print("init.1: CrossName[", (i+1), "]=", CrossName[i]);
}
Print("init.1: read complete");

for (i=0; i<numCross; i++)
{
Print("init.2: CrossName[", (i+1), "]=", CrossName[i]);
}


Print("-------------------------------");
for (i=0; i<numCross; i++)
{
sectionName = StringConcatenate("cross", i+1);
CrossName[i] = StringSubstr(ReadIniString(config_path, sectionName, "name", "-"), 0, 0);
Print("init.3: CrossName[", (i+1), "]=", CrossName[i]);
}
Print("init.3: read complete");

for (i=0; i<numCross; i++)
{
Print("init.4: CrossName[", (i+1), "]=", CrossName[i]);
}

return(0);
}


Es scheint einfach zu sein und nach dem Lesen der ini sollten wir ein Array von Paarnamen erhalten.

Aber als Ergebnis, nach dem Lesen eines anderen Parameters aus ini und die Zuweisung eines Wertes zu einem anderen Element des Arrays,

erhalten alle anderen zuvor zugewiesenen Elemente denselben Wert.

2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[1]=EURUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.3: read complete
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[1]=EURUSD
2009.04.09 02:17:06 example GBPUSD,H4: -------------------------------
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[2]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[1]=USDJPY

2009.04.09 02:17:06 example GBPUSD,H4: init.1: read complete
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[1]=EURUSD

Es stellt sich heraus, dass bei der Zuweisung eines String-Arrays an eine Variable tatsächlich die Zuweisung von

Referenz, nicht Wert. Ich habe die gesamte verfügbare Dokumentation und das Forum durchsucht, aber keine Antwort darauf gefunden, warum das so ist.

Ich habe einen Ausweg gefunden, indem ich StringSubstr verwende, aber irgendetwas sagt mir, dass das nicht ganz richtig ist.


Frage an diejenigen, die es wissen: Wie kann man die Werte anderer Variablen korrekt den Elementen eines String-Arrays zuweisen ?

 
Yug >> :

Ich wiederhole einen Beitrag von https://forum.mql4.com/ru/10422, aber vielleicht wäre meine eigene Frage hier besser aufgehoben.


Ich habe mich erinnert! Eigentümlichkeit der String-Implementierung. Nachdem die Größe des Arrays geändert wurde, sollte es durchgereicht und auf Null gesetzt werden:

ArrayResize( CrossName, numCross);

for (int i=0; i< numCross; i++)
{
   CrossName[ i] = "";
}
Ich könnte mich irren, aber es sollte helfen.
 
XinoXano писал(а) >>

Das Terminal soll automatisch alle 20 Minuten einen Bericht erstellen und ihn an den FTP-Server senden. Diese Funktion speichert standardmäßig einen regelmäßigen Bericht. Diese Funktion des Terminals speichert standardmäßig einen regulären Bericht, während ich gerne einen detaillierten Bericht mit zusätzlichen Informationen und einer Grafik hätte. Sie können den detaillierten Bericht problemlos manuell speichern und den gewünschten Verlaufszeitraum auswählen.

Und zuerst bin ich ratlos - was und wo sollte ich manuell umbenennen, um die automatische Funktion zu organisieren? Das ist überhaupt nicht klar.

Die Berichtsvorlagen Statement.htm und der detaillierte Bericht StatementDetailed.htm befinden sich im Ordner terminal\templates\. Standardmäßig sendet das Terminal einen einfachen statement.htm-Bericht, Sie benötigen StatementDetailed.htm. Ich habe Ihnen vorgeschlagen, die Datei StatementDetailed.htm in der Windows-Umgebung in statement.htm umzubenennen. Oder auch eine Anleitung zum Umbenennen schreiben?

 

Liebe Experten,

Bitte helfen Sie mir bei LOKing-Transaktionen

Weitere Einzelheiten und den Code finden Sie hier: Helfen Sie mir bei der LOKierung von Positionen".

Immer respektvoll,

 
xrust писал(а) >>

Die Berichtsvorlagen statement.htm und der detaillierte Bericht StatementDetailed.htm befinden sich im Ordner terminal\templates\. Standardmäßig sendet das Terminal einen regulären Bericht statement.htm, aber Sie brauchen ausführliche statementDetailed.htm, ich schlug Ihnen auf Russisch vor, in Windows die Datei StatementDetailed.htm in statement.htm umzubenennen. Oder auch eine Anleitung zum Umbenennen schreiben?

Umbenennen werde ich mich nicht können, aber eine Vorlage durch eine andere zu ersetzen, kam mir nicht in den Sinn ...

Herzlichen Dank! Jetzt ist alles klar und alles funktioniert!!!!

 
Everlost >> :

Ganz einfach - wenn das Signal Cls_S oder Cls_B kommt, vergessen wir die zuletzt geöffnete Position (setzen den Wert der Variablen Last_Position wieder auf -1 zurück).

if ((Cls_S==true || Cls_B==true) && Last_Position>=0) Last_Position=-1;

Theoretisch schon, aber jetzt hat der Expert Advisor komplett aufgehört, Geschäfte zu machen.

Bei mir sieht es so aus:

//Учет ордеров истории
int ORDtime=0;
double ORDprofit=0.01;
int ORDtype=-1;
for (int j=OrdersHistoryTotal()-1; j>=0; j--) 
{
  if (OrderSelect( j, SELECT_BY_POS, MODE_HISTORY)) 
  {
    if (OrderSymbol()==Symbol()) 
    {
      if (OrderCloseTime()!=0 && OrderCloseTime()> ORDtime) 
      {
        ORDtime=OrderCloseTime();
        ORDtype=OrderType();
        ORDprofit=OrderProfit();
      }
    }
  }
}
...
//Торговые критерии на открытие и экстренное закрытие ордеров
if (( ORDtype==-1)&&(...))
   {
    Opn_B=true;
   }
if (( ORDtype==-1)&&(...))    
   {
    Cls_B=true;
   }
if (...)
   {
    Opn_S=true;
   }
if (...)    
   {
   Cls_S=true;
   }
// Дополнительные условия к открытию
if (( Cls_B==true|| Cls_S==true)&&( ORDtype>=0)) ORDtype=-1;       //ДОПИСАТЬ УСЛОВИЕ ИСТОРИЧЕСКИХ ОРДЕРОВ


Liegt hier ein Fehler vor?
Grund der Beschwerde: