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

 
multiplicator:
aus irgendeinem Grund zeigt das Terminal keine Fehler an)

Können Sie das nicht selbst tun?

 
multiplicator:
Aus irgendeinem Grund zeigt das Terminal keine Fehler an)

Was hat das Terminal damit zu tun? Sie müssen die Mengenstaffelung in Ihrem Programm berücksichtigen.

Versuchen Sie, einen Auftrag zur Eröffnung einer Position mit einem Lot von 0,000001 oder 0,12345678 oder 100000,1 usw. programmatisch zu senden.

 
Алексей Тарабанов:

Können Sie das nicht selbst tun?

Was? Es ist nicht zu sehen.
 
Artyom Trishkin:


Versuchen Sie, einen programmierten Auftrag zur Eröffnung einer Position mit Lot 0.12345678 zu senden.

wird mit Los 0.12 eröffnet.

Die Frage ist, ob man normalisieren oder nicht normalisieren soll.

 
Artem, warum vergisst du sie nicht einfach?
 
Alekseu Fedotov:

Versuchen Sie dies.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает нормализованное значение торгуемого лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    lo - нормализуемое значение лота.                                       |
//|    ro - способ округления          (   False    - в меньшую,               |
//|                                        True     - в большую сторону)       |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//+----------------------------------------------------------------------------+
double NormalizeLot(double lo, bool ro=False, string sy="") {
  double l, k;
  if (sy=="" || sy=="0") sy=Symbol();
  double ls=MarketInfo(sy, MODE_LOTSTEP);
  double ml=MarketInfo(sy, MODE_MINLOT);
  double mx=MarketInfo(sy, MODE_MAXLOT);

  if (ml==0) ml=0.1;
  if (mx==0) mx=100;

  if (ls>0) k=1/ls; else k=1/ml;
  if (ro) l=MathCeil(lo*k)/k; else l=MathFloor(lo*k)/k;

  if (l<ml) l=ml;
  if (l>mx) l=mx;

  return(l);
}


Das ist der Punkt, an dem es nicht klar ist:
  if (ls>0) k=1/ls; else k=1/ml;
Welchen Unterschied macht es, ob die Parzelle mehr oder weniger als Null ist?
 
Алексей Тарабанов:
Artem, warum vergisst du sie nicht einfach?
Du kannst mich mal.
schlafen gehen.
 
multiplicator:

eröffnet mit einem Los von 0,12.

Die Frage ist: normalisieren oder nicht normalisieren.

Ich habe es satt. Was hat das Grundstück mit dem Preis zu tun, zu dem er eröffnet hat, Sie Patient?

 
Алексей Тарабанов:

Ich habe es satt. Was hat das Grundstück mit dem Preis zu tun, zu dem Sie es eröffnet haben, Sie Patient?

Alter Mann, niemand hat dich etwas gefragt. Geh schlafen.

Wenn ich Ihre Beiträge im Forum lese, denke ich: "Dieser Mann hat ein schwaches Gehirn".
 
Alekseu Fedotov:

Versuchen Sie dies.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает нормализованное значение торгуемого лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    lo - нормализуемое значение лота.                                       |
//|    ro - способ округления          (   False    - в меньшую,               |
//|                                        True     - в большую сторону)       |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//+----------------------------------------------------------------------------+
double NormalizeLot(double lo, bool ro=False, string sy="") {
  double l, k;
  if (sy=="" || sy=="0") sy=Symbol();
  double ls=MarketInfo(sy, MODE_LOTSTEP);
  double ml=MarketInfo(sy, MODE_MINLOT);
  double mx=MarketInfo(sy, MODE_MAXLOT);

  if (ml==0) ml=0.1;
  if (mx==0) mx=100;

  if (ls>0) k=1/ls; else k=1/ml;
  if (ro) l=MathCeil(lo*k)/k; else l=MathFloor(lo*k)/k;

  if (l<ml) l=ml;
  if (l>mx) l=mx;

  return(l);
}

Hier wird durch die Größe des Loses geteilt, der Rest verworfen und dann die Anzahl der erhaltenen Losschritte genommen.

Hier könnte ein Fehler vorliegen.

Wir geben zum Beispiel den Wert in die Funktion ein: 7 Lose.
Der Broker hat ein minimales Lotvolumen von 5 und einen Lotschritt von 2.


Er dividiert 7 durch die Losgröße und nimmt die Anzahl der ganzen Teile. Und multiplizieren Sie noch einmal mit der Losgröße. Das Ergebnis wird 6 Lots sein, und er wird versuchen, einen Auftrag mit diesem Volumen zu eröffnen.
Der Auftrag kann jedoch nur mit den Bänden 5, 7, 9 usw. eröffnet werden.


Es wäre besser, die Mindestgröße des Grundstücks (5) von unserem Grundstück (7) abzuziehen. Und mit dem Rest zur Arbeit.

alle Aktionen mit dem Rest durchführen, dass er eine Funktion hat.

Zählen Sie, wie viele ganze Schritte es gibt, die Größe des Losschrittes. Multiplizieren Sie dann die Anzahl der Schritte mit der Schrittweite der Partie. Damit haben wir 2.

Dann wird diese 2 wieder zur Größe der Mindestmenge (5) addiert. Das Ergebnis ist 5+2=7.


Aber dies ist ein fantastisches Beispiel.
Makler haben jetzt ein Mindestlos und Losgrößen von 0,01
oder Mindestlosgröße und Losgrößenschritte von 0,1

Grund der Beschwerde: