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

 
Maxim Kuznetsov:

if (time[i]>=time_m1 && time[i]<time_m1+PeriodSeconds(PERIOD_M1) {

  // время time[i] попало внутрь бара открытого в time_m1

}

OK) ein Pfeil, aber durch diese Bedingung wird bei M15 und höher der Pfeil auf 21:00 gesetzt

 if(time[i]>=StringToTime("2019.04.22 20:55:00") && time[i]<StringToTime("2019.04.22 20:55:00")+Period()*PeriodSeconds(PERIOD_M1))

und wenn Sie nur+PeriodSeconds(PERIOD_M1) ohnePeriod()* verwenden, wird sie überhaupt nicht gesetzt)

 
yiduwi:

OK) ein Pfeil, aber durch diese Bedingung wird bei M15 und höher der Pfeil auf 21:00 gesetzt

Und wenn Sie nur+PeriodSeconds(PERIOD_M1) ohnePeriod()* verwenden, wird sie überhaupt nicht gesetzt)

Lesen Sie die Dokumentation :-) Periode() gibt nur die ID der aktuellen Periode zurück - warum multiplizieren Sie mit ihr?

anstelle von PERIOD_M1 (das als Beispiel angegeben ist), an PeriodSeconds( Period() ) übergeben - dann erhalten Sie, wie viele Sekunden in 1 Bar der aktuellen Periode.

 
kopeyka2:

So viel zum Rätsel des "Bermuda-Quaders".

Das funktioniert bei mir :) Ich habe sogar versucht, das Terminal zu öffnen und zu schließen.

PS: Artyom, du hast die Frage zu den fünf zum Thema vier verschoben... Ich habe sie zufällig gefunden.

 
kopeyka2:


EMA Linie 20 23.04.2019 00:00

Beim Einschalten von MT5, OHNE Online-Verbindung, erscheint sofort die Meldung "array out....".

Die Fehler sind unterschiedlich, aber immer vorhanden. Kann sich online replizieren, ist aber häufiger vorhanden, wenn MT eingeschaltet ist.


Das ist das Geheimnis des "Bermuda-Parallelepipeds".

In der Fehlermeldung wird die Zeilennummer angegeben, in der der Fehler aufgetreten ist. Beginnen Sie von dort aus zu graben
 
Igor Zakharov:

Das funktioniert bei mir :) Ich habe sogar versucht, das Terminal zu öffnen und zu schließen.

PS: Artyom, du hast die Frage zu den fünf in das Thema der vier verschoben... Ich habe sie zufällig gefunden.

Dies ist ein gemeinsames Thema - wir helfen hier nicht nur mit MQL4, sondern auch bei der Migration zu MQL5. Es steht also im Thema.

 
Bitte beraten Sie, wie man konzeptionell EA-Code schreiben, die Preise der Trades aus Text .csv-Datei nimmt. Warum sich diese Frage stellt: bei jedem Tick vergleicht der EA den aktuellen Preis mit dem Preis in der .csv-Datei, die durch eine Schleife in der fileopen-Funktion vollständig gelesen wird, wenn ich das richtig verstehe. Aber die Datei enthält mehr als 5000 Zeilen für das letzte Jahr, jede Zeile enthält den Namen des Instruments, den Preis, die Art des Geschäfts (Kauf/Verkauf), das Datum der Aufzeichnung und das Datum der Auftragsstornierung. Beim Testen durchläuft der Expert Advisor bei jedem Tick alle Dateizeilen, um festzustellen, ob es an der Zeit ist, eine Order zu platzieren? Oder, zum Testen, sollten wir unsere EA machen alle Aufträge mit dem Datum der Stornierung auf einmal während der Initialisierung und überprüfen Sie die tatsächlichen Aufträge durch ihr Ablaufdatum auf jedem Tick für den realen Handel? Vielleicht ist dies nicht das, was ich erwartet habe. Vielleicht ist dies das Richtige aus der Sicht der Ressourcen oder es gibt andere Varianten (zum Beispiel sollten wir grafische Objekte machen und den aktuellen Preis mit ihnen vergleichen, aber es scheint der gleiche Zyklus zu sein); Ich verstehe nicht, bitte beraten.
 

Hallo!


Ich habe das Video-Tutorial zur MQL4-Programmierung heruntergeladen.

Ich habe einen Expert Advisor gemäß der Lektion erstellt.

Aber es funktioniert nicht, wenn ich Handel treibe.

Beim Kompilieren treten keine Fehler auf.

Da ich noch am Anfang meiner Reise stehe, ist es schwer, den Fehler zu finden.

Ich bitte um Hilfe, falls mir jemand helfen kann.

Ich danke Ihnen!

Code:

/+----Входные параметры----------------+

extern inttern BarCount=10;

extern int int HourStart=14;

extern double Lots=0.1;

extern int StopLoss=120;

extern int TakeProfit=300;

extern int Magic=1456;

//+------------Глобальные переменные----------------+

double minprice=999999,mp,

maxprice=-99999,SL,TP;

int-Ticket;

//+------------------------------------------------------------------+

Experten-Initialisierungsfunktion //|.

//+------------------------------------------------------------------+

int OnInit()

{

return(INIT_SUCCEEDED);

}

//+------------------------------------------------------------------+

//| Experten-Deinitialisierungsfunktion |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

{


}

//+------------------------------------------------------------------+

//| Experten-Tick-Funktion |

//+------------------------------------------------------------------+

void OnTick()

{

GetMinPrice();

GetMaxPrice();


if(TimeHour(TimeCurrent())==HourStart)

{

if(BuyLimitCount()&& BuyCount() ==0)

{

SL=NormalizeDouble(minprice-StopLoss*Point,5);

TP=NormalizeDouble(minprice+TakeProfit*Point,5);

ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,minprice,5,SL,TP,"",Magic,0,Blue);

if(ticket<0)

Print("Kauflimit konnte nicht geöffnet werden");

}

if(SellLimitCount()&& SellCount()==0)

{

SL=NormalizeDouble(maxprice+StopLoss*Point,5);

TP=NormalizeDouble(maxprice-TakeProfit*Point,5);

ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lots,maxprice,5,SL,TP,"",Magic,0,Red);

if(ticket<0)

Print("Failure to open Sell Limit");

}

}



Comment("MinPrice: "+DoubleToStr(minprice,5)+"\n "+"MaxPrice: "+DoubleToStr(maxprice,5));


}

//+FUNKTION ZUR FESTLEGUNG DES MINDESTPREISES BEI BARCOUNT BAR-NUMMER

void GetMinPrice()

{

for(int i=0; i<BarCount; i++)

{

mp=iLow(Symbol(),PERIOD_CURRENT,i);

if(mp<minprice)

minprice=mp;

}

Rückkehr;

}

//+FUNKTION ZUR ERMITTLUNG DES HÖCHSTPREISES BEI BARCOUNT-NUMMER

void GetMaxPrice()

{

for(int i=0; i<BarCount; i++)

{

mp=iHigh(Symbol(),PERIOD_CURRENT,i);

if(mp>maxprice)

maxprice=mp;

}

Rückkehr;

}

//+FUNKTION DER ANZAHL DER OFFENEN LIMITAUFTRÄGE ZUM KAUF

int BuyLimitCount()

{

int count=0;

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_BUYLIMIT)

{

zählen++;

}

}

return(count);

}

//+-FUNKTION DER ANZAHL DER OFFENEN VERKAUF-LIMITAUFTRÄGE

int SellLimitCount()

{

int count=0;

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_SELLLIMIT)

{

zählen++;

}

}

return(count);

}

//+FUNKTION DER ANZAHL DER OFFENEN MARKTBUCHUNGSAUFTRÄGE

int BuyCount()

{

int count=0;

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_BUY)

{

zählen++;

}

}

return(count);

}

//+-FUNKTION DER ANZAHL DER FREIVERKAUFSAUFTRÄGE

int SellCount()

{

int count=0;

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_SELL)

{

zählen++;

}

}

return(count);

}

//+------------------------------------------------------------------+


//+------------------------------------------------------------------+

 

Seric29

Vielen Dank, ich werde Ihre Informationen in mein Gepäck aufnehmen.

 
WinProject:
Können Sie bitte beraten, wie man konzeptionell schreiben EA-Code, der Handelspreise aus .csv-Datei nimmt. Warum diese Frage: Der EA vergleicht bei jedem Tick den aktuellen Preis mit dem Preis in der .csv-Datei, die komplett von der fileopen-Funktion gelesen wird, wenn ich es richtig verstehe. Aber die Datei enthält mehr als 5000 Zeilen für das letzte Jahr, jede Zeile enthält den Namen des Instruments, den Preis, die Art des Geschäfts (Kauf/Verkauf), das Datum der Aufzeichnung und das Datum der Auftragsstornierung. Beim Testen durchläuft der Expert Advisor bei jedem Tick alle Dateizeilen, um festzustellen, ob es an der Zeit ist, eine Order zu platzieren? Oder, zum Testen, sollten wir unsere EA machen alle Aufträge mit dem Datum der Stornierung auf einmal während der Initialisierung und überprüfen Sie die tatsächlichen Aufträge durch ihr Ablaufdatum auf jedem Tick für den realen Handel? Vielleicht ist dies nicht das, was ich erwartet habe. Vielleicht ist dies das Richtige aus der Sicht der Ressourcen oder es gibt andere Varianten (zum Beispiel sollten wir grafische Objekte machen und den aktuellen Preis mit ihnen vergleichen, aber es scheint der gleiche Zyklus zu sein); bitte beraten Sie mich.

Normalerweise versucht man, so wenig wie möglich in die Datei zu lesen (zu schreiben).

Für Ihre Aufgabe wäre es besser, die Daten beim Laden in ein Array einzulesen (obwohl es wahrscheinlich bequemer ist, sie in eine Struktur einzulesen) und dann die aktuellen Preis- und Zeitwerte mit den Arraywerten zu vergleichen

SZY: Suche auf Codebase "Datei" oder "csv" war einmal eine solche vorgefertigte Expert Advisors - lesen Sie aus einer Datei Handel auf die Daten

 
Igor Makanu:

Normalerweise versucht man, so wenig wie möglich in die Datei zu lesen (zu schreiben).

Für Ihre Aufgabe wäre es besser, die Daten beim Laden in ein Array einzulesen (obwohl es wahrscheinlich bequemer ist, sie in eine Struktur einzulesen) und dann die aktuellen Preis- und Zeitwerte mit den Arraywerten zu vergleichen

ZS: Suche auf Codebase "Datei" oder "csv" war einmal eine solche vorgefertigte EAs - lesen Sie aus einer Datei Handel auf, dass Daten

Vielen Dank, ich habe die gewünschte Antwort erhalten.

Grund der Beschwerde: