Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 432

 
WinProject:

Danke!) die Variable Cena=FileReadString(handle); ich füge in die Funktion Separator=StringReplace(Sepa,",",".") ein; es wird die Fehlermeldung "implicit conversion from number to string" geschrieben -

will den Wert mit dem Trennzeichen "," (1,22426) nicht als String lesen, und StringReplace funktioniert nicht. Oder mache ich es falsch?


Bitte kopieren Sie den Teil des Codes, wie Sie ihn haben, vom Beginn des Lesens der Datei, der den Typ der CENA-Variable angibt

 
Vladislav Andruschenko:

Bitte kopieren Sie den Teil des Codes, wie Sie ihn haben, vom Beginn des Lesens der Datei, der den Typ der CENA-Variable angibt


void MyFunc()

{

handle=FileOpen('Data.csv',FILE_CSV|FILE_READ,';');

while(FileIsEnding(handle)!=true)

{ string cena=FileReadString(handle);

string Separ=StringReplace(cena,",".");

if(FileIsEnding(handle)==true)

Pause;

}

FileClose(handle);

}

 
WinProject:

void MyFunc()

{

handle=FileOpen('Data.csv',FILE_CSV|FILE_READ,';');

while(FileIsEnding(handle)!=true)

{ string cena=FileReadString(handle);

string Separ=StringReplace(cena,",".");

if(FileIsEnding(handle)==true)

Pause;

}

FileClose(handle);

}

Bitte lesen Sie, was diese Funktion zurückgibt. Sie versuchen, das Ergebnis zu verknüpfen. Diese Funktion ersetzt jedoch nur ein Zeichen durch eine Zeichenkette. Sie können cena mit Änderungen weiter verwenden
 
Vladislav Andruschenko:
Bitte lesen Sie, was diese Funktion zurückgibt. Sie versuchen, das Ergebnis zu verknüpfen. Aber diese Funktion ersetzt nur ein Zeichen durch ein Zeichen. Sie können cena bereits mit den Änderungen weiter verwenden
Ich habe meinen Fehler herausgefunden (String Separ=ist hier redundant) und es hat funktioniert.

Danke, danke!)

 

Hilfe, ich muss ein Rechteck vom Höchststand der vorherigen Kerze bis zu einem Punkt 200p darüber zeichnen und einen Balken im Voraus berechnen.

Ich habe den Code geschrieben, aber ich verstehe nicht, warum sich der linke Punkt des Rechtecks nicht bewegt? Und die rechte gleitet hinter die Hai.

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   //ObjectDelete(0,"Name");
   ArraySetAsSeries(high,true);
   ObjectCreate(0,"Name",OBJ_RECTANGLE,0,TimeCurrent(),high[0],TimeCurrent()+PeriodSeconds(PERIOD_CURRENT)*2,high[0]+200*_Point);
   ObjectSetInteger(0,"Name",OBJPROP_FILL,true);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Roman Sharanov:

Hilfe, ich muss ein Rechteck vom Hoch der vorherigen Kerze bis zu einem Punkt 200p darüber zeichnen und einen Balken im Voraus festlegen.

Ich habe den Code geschrieben, aber ich verstehe nicht, warum sich der linke Punkt des Rechtecks nicht bewegt? Und die rechte gleitet hinter die Hai.


Vielleicht versuchen Sie, ein Objekt zu erstellen, das sich bereits im Diagramm befindet?


Und der vorherige Balken ist 1 und nicht 0.

high[0] - это ХАЙ текущего бара
 
Vladislav Andruschenko:

Vielleicht versuchen Sie, ein Objekt zu erstellen, das sich bereits im Diagramm befindet? Es wäre vielleicht besser zu prüfen, ob sich bereits Objekte im Diagramm befinden.


Ja, und der vorherige Balken ist 1 und nicht 0.


Das stimmt, die Indizes sind bereits festgelegt.

Habe den Namen geändert, die Liste angeschaut, nichts hat sich geändert, alles ist gleich, ein Punkt hängt an einer Stelle, der andere folgt dem Hai

 
Roman Sharanov Das stimmt, die Indizes sind bereits festgelegt.

Ich habe den Namen geändert, habe mir die Liste angesehen, es hat sich nichts geändert, es ist immer noch dasselbe, ein Punkt hängt an einer Stelle, der andere folgt dem Hai

   ObjectDelete(0,"Name");
   ObjectCreate(0,"Name",OBJ_RECTANGLE,0,
                TimeCurrent()-_Period*60,high[1],
                TimeCurrent()+PeriodSeconds(PERIOD_CURRENT)*2,high[0]+200*_Point);
   ObjectSetInteger(0,"Name",OBJPROP_FILL,true);
   return(rates_total);

Es geht voran.


 
STARIJ:
Es ist ganz einfach. Sie müssen 7 Parameter für die Berechnung von iMA einstellen. Der erste Parameter, der Name des Symbols, ist offensichtlich. Für den zweiten, den Zeitrahmen, setzen Sie M1. Der dritte Parameter - der Zeitraum - kann so oft wie nötig eingestellt werden, wobei die Anzahl der Tage mehr als eine Minute beträgt. Der vierte Parameter - Verschiebung = 0. Die nächsten beiden Parameter - die Methode der Mittelwertbildung und der Preistyp - sind Ihnen bekannt. Bitte berechnen Sie die Taktzahl, wenn Sie die benötigte Zeit wissen. Das ist alles! Überprüfen Sie dies, indem Sie Berechnungen für die Zeiträume M5 und M15 anstellen. Vielleicht sogar für M30.

STARIJ, Danke für die Hilfe, geprüft, leider ist die Übereinstimmung mit dem Original schlecht, und wenn die TF zunimmt (z.B. von 30 min auf wöchentlich), nimmt die Übereinstimmung deutlich ab. Diese Methode ist besser als nichts, aber sie ist nicht sehr genau. Gibt es noch andere Varianten?

 
Boss11:

STARIJ, Danke für die Hilfe, geprüft, leider ist die Übereinstimmung mit dem Original schlecht, und wenn die TF zunimmt (z.B. von 30 min auf wöchentlich), nimmt die Übereinstimmung deutlich ab. Diese Methode ist besser als nichts, aber sie ist nicht sehr genau. Gibt es noch andere Varianten?

Ja. Wir sollten M1 und M5 verwenden, ... - zu überprüfen. Vielleicht sollten wir eine Interpolation verwenden? MT5 hat eine Tick-Historie. Wenn Sie mir sagen, wo der Gewinn liegt, werde ich mir das noch einmal ansehen.
Grund der Beschwerde: