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

 
(NormalizeDouble(AccountFreeMargin()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),2)-Lots*(CountTrades()+1));

Ich habe eine Formel zur Berechnung der Menge erstellt. Können Sie mir sagen, wo der Fehler liegen könnte? Die Bestellung lässt sich wegen einiger Ungenauigkeiten nicht öffnen.

Die Formel ist immer noch gültig für eine Einzahlung von 100$ und mehr, mit einer Hebelwirkung von 1-100 und mehr. Und wenn die Einzahlung ohne Hebelwirkung 1 000$ es stellt sich heraus, dass die Formel nicht funktioniert, weil wir FreeMargin/Contract = 0,01 haben und wir können nicht von diesem Wert abziehen, weil wir die Handelsbedingungen nicht erfüllen werden.


Andererseits, warum sollte man sie abziehen, wenn FR&Margin die offenen Positionen bereits berücksichtigt? Dann würde es wie folgt aussehen

lot=NormalizeDouble(AccountFreeMargin()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),2)

Ich werde es testen.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением...
 
geratdc: Ich habe mir eine Formel ausgedacht, um das Los zu berechnen. Können Sie mir sagen, wo es einen Fehler geben könnte? Die Bestellung lässt sich wegen einiger Ungenauigkeiten nicht öffnen.
      Лот=NormalizeDouble(0.65*AccountBalance()*AccountLeverage()/          // Использую такую формулу
                             MarketInfo(_Symbol, MODE_LOTSIZE),2);
 
STARIJ:

Grüße)) Was ist 0,65 und woher kommt der Wert?

Ich habe über eine Hebelwirkung nachgedacht, bin aber zu dem Schluss gekommen, dass das Gleichgewicht theoretisch bereits mit der Hebelwirkung festgelegt ist. Oder liege ich da falsch?


Ist 0,65 eine Reserve für 35% Schlupf oder was? Das ist übrigens eine gute Idee, denn wenn Sie das Los so einstellen, verlieren Sie eine Position, und das ist dann das Ende der Fahnenstange!

Ich mag es! die Formel funktionierte, nachdem ich entfernt verlieren, es ist cool)) kurz gesagt, das Los war 0,02, dann, wenn drei Positionen ging in Drawdown, die Notfall-Lot wurde als 0,1, das heißt, 5 mal berechnet! Meine Funktion ist jedoch empfindlich gegenüber weiteren Verlusten, wenn ein Notauftrag eröffnet wird, so dass es keine Probleme geben sollte.

Herr Kollege, vielen Dank für die wertvollen Hinweise, ich werde es ausprobieren!


Ich habe auch beschlossen, die Handelsbedingungen zu prüfen. Wie gefällt Ihnen dieser Code?


// Проверка Баланса
   if(cn==0 && TradeCheck==true && AccountBalance()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE)<SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN))
     {
      Print("Баланс счёта не обеспечивает торговые требования");
      SendMail("EA BJH","Баланс счёта не обеспечивает торговые требования");
      ExpertRemove();  // Снять советник с графика
     }
// Проверка Lots
   else if(cn==0 && TradeCheck==true && AccountBalance()/Lots<SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE))
     {
      Print("Lots не обеспечивает торговые требования");
      SendMail("EA BJH","Lots не обеспечивает торговые требования");
      ExpertRemove();  // Снять советник с графика
     }
Dateien:
1.gif  10 kb
 
geratdc: Herr Kollege, danke für die wertvollen Hinweise, ich werde es ausprobieren!

Wenn man es umdreht - KAUFEN statt VERKAUFEN und VERKAUFEN statt KAUFEN - wird es besser sein

Probieren Sie es aus, Kollege!!!

Anstatt eine Tatsache festzustellen, muss der Roboter eine Empfehlung aussprechen: Chef, füge Geld hinzu. Die habe ich schon vergeudet...

 
STARIJ:

Wenn wir es umkehren - KAUFEN statt VERKAUFEN und VERKAUFEN statt KAUFEN - wird es besser sein.

Probieren Sie es aus, Kollege!!!

Der Roboter sollte keine Fakten nennen, sondern Empfehlungen aussprechen: Chef, gib Geld dazu. Du hast sie bereits vergeudet...


Es ist in Ordnung, es gab spezielle Einstellungen, um einen Notauftrag auszulösen - ich musste sehen, was das Los aufheben würde.

lot=NormalizeDouble(AccountFreeMargin()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),2);

Ich habe es vorerst dabei belassen. Ich habe es mit dem Saldo probiert, ich glaube, dass es in Bezug auf den freien Spielraum genauer sein wird, aber das Ergebnis ist das gleiche. Wir werden uns die Testergebnisse später ansehen.

 
geratdc: Das ist in Ordnung.

Das Internet ist wieder da! Kann ich an eine E-Mail schreiben?

 
STARIJ:

Sollte es so sein? Die Stufen -0,75 und +0,75.

Es ist einfacher, eine Variable zu verwenden. Zuerst 0, dann +1 -1 +1 -1


Ja, genau so. Wie sollte ich es in den Expert Advisor so schreiben, dass er beim Start, wenn wir uns in einer Lücke zwischen den Levels befinden, den Wert des letzten Levels nimmt, von dem wir abgeprallt sind?

 
AlGuru: Aber wie schreibe ich es in den EA, so dass, wenn es startet, wenn wir in der Lücke zwischen den Ebenen sind, es nimmt den Wert der letzten, von dem wir rebounded?

Was meinen Sie mit "abgewehrt"? Hat es uns angegriffen? Wann wurde er bekämpft - vor der Markteinführung? Wie hätten wir uns wehren können, wenn wir einfach losgelegt hätten? Lesen Sie, bevor Sie ihn abschicken - ergibt alles einen Sinn?

 
STARIJ:

Was meinen Sie mit zurückschlagen? Hat es uns angegriffen? Wurden wir vor dem Start zurückgeschlagen? Wie könnten wir uns wehren, wenn wir einfach loslegen? Lesen Sie ihn, bevor Sie ihn abschicken - ist er sinnvoll?


OK, er ist nicht abgeprallt, aber er hat einen Abpraller von der Linie gemacht. Vorausgesetzt, dass der EA auf einem anderen Rechner/Terminal platziert wird oder im Falle einer Computerabschaltung das Terminal neu gestartet wird, beginnt er (der EA) sofort zu arbeiten, indem er berechnet, auf welchem Niveau der Preis zuletzt war und den richtigen Variablenwert setzt, anstatt zu warten, bis der Preis das gewünschte Niveau erreicht. Ich hoffe, ich habe es deutlich beschrieben.

 
AlGuru OK, er ist nicht abgeprallt, aber er hat einen Abpraller von der Linie gemacht. Vorausgesetzt, dass der EA auf einem anderen Rechner/Terminal platziert wird oder im Falle einer Computerabschaltung das Terminal neu gestartet wird, beginnt er (der EA) sofort zu arbeiten, indem er berechnet, auf welchem Niveau der Preis zuletzt war und den richtigen Variablenwert setzt, anstatt zu warten, bis der Preis das gewünschte Niveau erreicht. Ich hoffe, ich habe es deutlich beschrieben.

Was hat das mit einer anderen Maschine oder einem anderen Terminal zu tun? Oder Herunterfahren - Neustart. Meinen Sie, dass Sie den Computer einschalten oder den Expert Advisor neu starten müssen? Warum muss es sich um einen Abprall handeln, aber wenn er die Linie verlässt und zurückgeht? Und wenn er wartet, lässt er beim Einschalten nur eine Gelegenheit aus. Sie können das zunächst verwerfen und später wieder darauf zurückkommen, wenn Sie fertig sind. Und woher kommen die Zeilen, wann erscheinen sie, wer setzt sie ein, oder wie berechnet der EA sie. Wenn sie auf einen anderen Computer gelegt werden oder bevor der Computer ausgeschaltet wird, kann der Preis weit weg gehen. Wenn die Levels vom Expert Advisor selbst berechnet werden, ist das eine andere Sache. Schauen Sie jetzt: Der Kurs ist vom oberen Niveau abgeprallt und eine Stunde lang zwischen den Niveaus gewandert. Und dann haben wir den Computer eingeschaltet und den Expert Advisor aktiviert. Natürlich müssen wir den Zeitpunkt des Aufpralls bestimmen. Eine Stunde ist vergangen und der Rückschlag ist vergessen. Sie sehen, es gibt eine Menge Fragen! Und Sie sind klar. Es ist Ihnen klar, Sie kennen das Wesentliche der Angelegenheit. Aber von außen betrachtet ist es dunkel. Die Kunst des Programmierens besteht in der Fähigkeit, viele Fragen zu stellen und Antworten zu finden. Schauen Sie sich das Skript an - vielleicht gibt es hier einen vernünftigen Punkt

//+-------------------------------------------------------+
//| Проверка                                     PROBA.mq4|
//+-------------------------------------------------------+
#property strict

void OnStart()
{
  bool ДостигнутПервыйУровень=false,
       ДостигнутВторойУровень=false;
  int Переменная1=0, Переменная2=0;
  double Уровень;
  int x;

  Alert("----- Снизу вверх --------");
  for(x=13; x<27; x++)
  {
    Уровень=round(sin(x)*10)/10;

    if(Уровень>0.75)
    {
      Переменная1=1;
      Переменная2=0;
    }

    if(Уровень<-0.75)
    {
      Переменная1=0;
      Переменная2=1;
    }

    Alert("  ", x, "       ", Уровень, "        ", Переменная1, "        ", Переменная2);
  }
  Alert("Номер  Уров  Пер1  Пер2");
}
Grund der Beschwerde: