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

 
Warum sind die Zeit- und Preispunkte 2 bis 30 inObjectCreate verfügbar? Ich habe versucht, sie dem Diagramm hinzuzufügen, aber nur der erste Punkt wird angezeigt
ObjectCreate(0,"name",OBJ_ARROW_LEFT_PRICE,0,TimeCurrent()-600,1.29400,TimeCurrent()-1200,1.29500);   
 
Valerius:

Sie brauchen diesen Code nicht in OnInit, sondern in OnTick() zu schreiben.

Ich habe es versucht, es funktioniert überhaupt nicht.
1 Warnung
 
Igor Makanu:

Nein, das können Sie nicht.

Ich kann nicht erklären, wie.... Vorlagen funktionieren es ist so - bis Sie eine solche Funktion aufrufen, weiß der Compiler nichts von ihrer Existenz (oft gibt es sogar keine Compilerfehler, wenn es keinen Aufruf gibt)

dann rufen Sie eine solche Vorlagenfunktion auf und der Compiler füllt die benötigten Typen aus und prüft erst dann, ob alles richtig funktioniert

und dann rufen Sie die Vorlage erneut mit anderen Parametern auf - und der Compiler erstellt eine neue Funktion, d.h. eine weitere, d.h. als ob Sie 2 Funktionen schreiben würden, die dasselbe tun, aber mit unterschiedlichen Parametern


Puh, so funktioniert das ))))



UPD:

Sie können, aber wenn die Typen in der Vorlage übereinstimmen, hier ist ein Beispiel, funktioniert es richtig:

Vielen Dank, noch klarer als in den Dokumenten) Es stellt sich heraus, in der Vorlage Vordefinition von Variablen nicht erlauben, sie nicht angeben. Ich brauche sie für den Druck in eine Datei. Das Protokoll gibt mir nicht die Möglichkeit, die Datensätze aufzuteilen. Ich wünschte, es gäbe 5 Protokolle). Infolgedessen bieten Vorlagen die Möglichkeit, den Variablentyp nicht auf den gewünschten Typ zu bringen; dies kann innerhalb einer Vorlagenfunktion geschehen, aber die Anzahl der Variablen muss vollständig angegeben werden. Und eine einfache Funktion mit vordefinierten Variablen des gewünschten Typs bietet die Möglichkeit, weniger Variablen bei einem Aufruf anzugeben, aber die Typen der Variablen sollten auf den gewünschten Typ gebracht werden. Natürlich kann dies auch bei der Aufforderung geschehen, aber die Aufzeichnung wird dann zu lang sein.

 
Valerius:

Guten Tag zusammen!

Ich habe eine Funktion zur Änderung des Stoploss erstellt. Aber wenn es funktioniert, gibt es EURUSD,H1: OrderModify Fehler 130.

Und der Preis ist weit von dem Ort entfernt, an dem der Stoploss gesetzt werden sollte.

Hier ist die Funktion:


....
    err=OrderModify(OrderTicket(), OrderOpenPrice(),New_Stop( NormalizeDouble(OrderOpenPrice()+spred*point, 
digits)), OrderProfit(), 0, clrNONE);// Цена открытия плюс спред может быть в зоне заморозки.
.....
.....
double New_Stop(double Parametr) // Проверка стоп-прик.
  {
   double Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Миним. дистанция
   if(Parametr<Min_Dist) // Если меньше допуст.
     {
      Parametr=Min_Dist;                        // Установим допуст.
      Alert("Increased the distance of a stop order or the opening price of pending orders.");
     }
   return(Parametr);                            // Возврат значения
  }
 
Valerius:

Versuchen Sie es auf diese Weise:


Danke, es hat funktioniert!

Aber zwei weitere Nuancen:

1 Welche Bedingung ist hinzuzufügen, damit Aufträge, die am Freitag der aktuellen Woche geöffnet wurden, nicht geschlossen werden, und am Freitag der vorangegangenen Wochen geschlossen wurden?

2. wie man den Code korrigiert - OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);

um die Warnung"möglicher Datenverlust durch Typkonvertierung" zu entfernen? Es scheint sich um "...MarketInfo(nameSym,MODE_DIGITS)..." zu handeln.

 
Guten Abend. Wie sollte der Code aussehen, der den zuletzt abgeschlossenen Auftrag auswählt? Ist es wirklich so:"OrderSelect(OrdersHistoryTotal, SELECT_BY_POS, MODE_HISTORY"?
 
Die Funktion GetAmountLotFromOpenPos gibt -1717986918 zurück, wie kann ich das beheben?
 

Bitte beraten Sie mich.

Im Testgerät ergibt der Rückgabewert der Los-Summierungsfunktion GetAmountLotFromOpenPos einen Wert von -1717986918.

 
Valeriy Yastremskiy:

Ich habe den Grund gefunden. Ich hätte OrderTakeProfit() in OrderModify anstelle von OrderProft() einsetzen sollen. Ich habe sie ein wenig durchgesehen.

Trotzdem vielen Dank für die Hilfe.

 
Yerkin Sagandykov:

Danke, es hat funktioniert!

Aber zwei weitere Nuancen:

1 Welche Bedingung ist hinzuzufügen, damit Aufträge, die am Freitag der laufenden Woche geöffnet wurden, nicht geschlossen werden, und welche, die an den Freitagen der vorangegangenen Wochen geöffnet wurden, geschlossen werden?

2. wie man den Code korrigiert - OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);

um die Warnung"möglicher Datenverlust durch Typkonvertierung" zu entfernen? Es muss sich um "...MarketInfo(nameSym,MODE_DIGITS)..." handeln.

Für die erste Frage müssen Sie diese Funktion ausführen:


for(int is=OrdersTotal()-1; is>=0; is--)
{
if(OrderSelect(is,SELECT_BY_POS,MODE_TRADES))
{//Close Orders, die am Freitag der Woche eröffnet wurden, die nicht die aktuelle Woche ist. In diesem Fall schließen wir die Aufträge nicht am Freitag der laufenden Woche ab.
if(OrderMagicNumber()==Magic && TimeDayOfWeek(TimeCurrent())==5 && TimeDayOfWeek(OrderOpenTime())==5 && TimeDayOfYear(OrderOpenTime())<TimeDayOfYear(TimeCurrent())
{
if (OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_BID),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);
if (OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);
if(!result) {error=GetLastError(); Print("LastError = ",error, ",Symbol()); }
else {error=0;}
sonst
{Print("NoMagic ",OrderMagicNumber();} // für Debug
sonst

{Drucken("Fehler bei der Auswahl der Bestellung ", GetLastError();}


Bei der zweiten Frage ist folgender Eintrag zu machen:

OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(MarketInfo(nameSym,MODE_ASK)), 3, clrNONE);

Viel Glück!

Grund der Beschwerde: