[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 86

 
BeerGod:

Übersetzen Sie die Variable, die auf einen Ausdruck oder Kommentar abgebildet werden soll, in einen String DoubleToStr( double value, int digits) und stellen Sie die gewünschte Genauigkeit ein.

https://docs.mql4.com/ru/convert/DoubleToStr

https://docs.mql4.com/ru/common/comment


Okay, danke. Ich war auch denken, tun es auf diese Weise, oder Gebäude durch ObjecCreate()...
 
okvseok:

Bitte schlagen Sie eine Funktion vor, die die Anzahl der Verlustaufträge (vom letzten) bis zum letzten Take Profit zählt...

Ich danke Ihnen!

Sie können es so versuchen:
//+----------------------------------------------------------------------------+
// Убыточно ли закрылся последний ордер, и подсчет количества
int fHistory(){
  int loss = 0;
  for(int i=OrdersHistoryTotal()-1; i >= 0; i--){               // Выборка в истории
     if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true){    // Если есть следующий в истории
        if(OrderMagicNumber()!=magN) continue;                // Ордера не нашего эксперта

        if(OrderProfit() < 0 ) loss = loss++;                 // Если убыток по посл.ордеру - считаем
        
        if(OrderProfit() > 0 ) return(loss);                  // Если прибыль, вернем количество убыточных
     }
  }
  return(-1);
}
 

Wie oft muss ichOrderSelect aufrufen, bevor ich OrderProfit(), OrderType() usw. verwende? Ist ein Mal innerhalb von Start genug oder muss ich jedes Mal, bevor ich OrderProfit, OrderType usw. verwende,OrderSelect aufrufen?

und muss OrderSelect unmittelbar vor OrderProfit aufgerufen werden oder kann es an beliebiger Stelle am Anfang aufgerufen werden, solange es ?

 
hoz:

Ich habe die Frage geschrieben, aber niemand schien sie zu bemerken. Ich wollte hier nicht eine so lange Frage schreiben, um nicht alle zu verwirren. Bitte beachten Sie...

https://www.mql5.com/ru/forum/142983

Versuchen Sie es auf diese Weise:

int OrderCloseCount(double ordOpPrice, datetime ordOpTime)
{
  // slippage= Взять из OrderSend
  int timePlusMinus=20; // Пусть будет 20 сек.
  int count = 0;
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0 ; i--)
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderSymbol() != Symbol()) continue;
          if (MathAbs(OrderOpenPrice()-ordOpPrice) <= slippage*Point && MathAbs(OrderOpenTime()-ordOpTime))< timePlusMinus)
              count++;
  }
  
   return (count);
}

Denn es gibt keine Garantie dafür, dass Ihre Aufträge zu exakt demselben Preis und zur selben Zeit eröffnet werden.

 
hoz:

Ich habe die Frage geschrieben, aber niemand schien sie zu bemerken. Ich wollte hier nicht eine so lange Frage schreiben, um nicht alle zu verwirren. Bitte beachten Sie...

https://www.mql5.com/ru/forum/142983

Ich habe Ihnen in diesem Thread bereits einen groben Algorithmus gegeben (den ich hier zum besseren Verständnis einiger Nuancen leicht korrigiert habe), und es besteht keine Notwendigkeit, einen Gemüsegarten anzulegen:


Der Algorithmus ist so einfach wie ein Bagel.

Die teilweise Schließung ändert nichts an der Magic. Das Ticket ändert sich, aber die Magie nicht.

Es gibt eine offene Pose und Stufen, in denen diese Pose teilweise geschlossen sein sollte.

Angenommen, Level1, Level2 und Level3.

Wenn die Buy-Position im Gewinn ist und Bid >= Level1 && Bid< Level2 ---> schließen wir den ersten Teil der Position (mit dem Lot, das kleiner ist als das Lot dieser Position, vorausgesetzt, das verbleibende Lot ist nicht kleiner als das Mindestlot), dann:

Wenn Bid >= Level2 && Bid< Level3 ---> schließe den zweiten Teil der Position (um ein Lot kleiner als das Lot dieser Position, vorausgesetzt, das verbleibende Lot ist nicht kleiner als das Mindestlot), weiter:

Wenn Bid >= Level3 && Bid<Level4 ---> schließe den dritten Teil der Position (um ein Lot kleiner als das Lot dieser Position, vorausgesetzt, das verbleibende Lot ist nicht kleiner als das Mindestlot), weiter:

1. Wenn bei der teilweisen Schließung auf dem Niveau Bid>=LevelX das Lot kleiner als das Mindestlot geworden ist ---> schließen Sie die gesamte Position

2) Wenn nach der dritten Schließung auf dem Niveau Bid>=Level3 immer noch eine Position vorhanden ist, können Sie entweder die verbleibende Position mit einem Schleppnetz begleiten, nachdem Level4 überschritten wurde, oder sie auf einmal schließen.

Das ist alles.

Für Verkaufen betrachten wir Ask: Ask<=Level1 && Ask>Level2 ... usw. ...

Führen Sie eine Schleife über alle unsere Positionen durch, wählen Sie jede von ihnen nach Index aus, berechnen Sie die Niveaus und die Schlusskurse für die ausgewählte Position und genießen Sie den Arbeitsalgorithmus ... :)

Gleichzeitig ist es nicht notwendig, die Werte dieser Niveaus im Speicher des EA (in den Variablen) zu speichern, was sehr praktisch ist - wenn der EA aus irgendeinem Grund seine Arbeit beendet, dann wird er nach der Wiederaufnahme die Daten über die Niveaus nicht verlieren - er wird sie für jede Position sofort neu berechnen.

Und noch etwas: Vergessen Sie nicht, nach einem Teilschluss den schützenden Stopp zurückzuziehen. Nach Schließung auf Level 1 - Stopp auf Break-Even, nach Schließung auf Level 2 - Stopp auf Level 1, nach Schließung auf Level 3 - Stopp auf Level 2, usw...


 
Hallo zusammen, hat jemand ein Beispiel für einen Expert Advisor, der einen benutzerdefinierten Indikator verwendet?
 
dimarik0000:
Hallo zusammen, hat jemand ein Beispiel für einen EA, der einen benutzerdefinierten Indikator verwendet?
Was ist das Problem?
 
artmedia70:
Wo liegt das Problem?


Ich habe den Artikel über die Übertragung eines benutzerdefinierten Indikators in den Code des Expert Advisors gelesen und war verwirrt: Soll ich das tun oder reicht es, bestimmte Parameter des Indikators im Code anzugeben?
 
dimarik0000:

Ich habe den Artikel über die Portierung eines benutzerdefinierten Indikators in den Expert Advisor Code gelesen und bin verwirrt, sollte ich es tun oder ist es genug, um nur einige spezifische Indikator-Parameter im Code angeben?
Wenn Sie nicht viel Erfahrung haben, sollten Sie besser iCustom() verwenden oder das Funktionsprinzip des Indikators gründlich studieren und verstehen, bevor Sie seine Logik zum Expert Advisor hinzufügen.
 

713
borilunad 15.01.2013 12:10

Könnten Sie bitte ein Rätsel lösen: Warum, wenn ich diese Funktion eingefügt habe || isCloseLastPosByTake() == True || begann der Experte im Testgerät sehr langsam zu werden, mal 10! Dies ist eine der 4 sich gegenseitig ausschließenden Bedingungen, so dass ich die if-Kette nicht wie bei summierten Bedingungen verwenden kann, um den Code schneller laufen zu lassen. Was können Sie mir raten? Ich danke Ihnen im Voraus für Ihren Rat!

Grund der Beschwerde: