Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 149

 
ALXIMIKS:

Die Frage ist langweilig, aber die Antwort ist nirgends zu sehen, oder vielleicht habe ich nur falsch geschaut:

In Funktionen, oder vielleicht auch irgendwo anders, habe ich das Symbol & nach dem Datentyp gesehen und, wenn ich mich nicht irre, einmal &&

func(int& mm_mode, string symbol, int magic,bool& stop) {

Wozu ist es da? Was macht es? (Hinweis, wenn Sie mehr darüber erfahren können)))

Dies ist eine Parameterübergabe per Referenz.
hoz:


Und was noch wichtiger ist? Es wurde erörtert, dass INIT z. B. bei Verbindungsabbrüchen oder anderen ähnlichen Situationen fehlschlagen kann. Denn er initialisiert die Daten selbst nicht neu, falls es zu Unfällen kommt, und er läuft nur einmal! Das ist also nicht gerade der richtige Weg, um es zu tun.
Niemand hindert Sie daran, init() dort aufzurufen, wo Sie es brauchen, je nach Ihren Bedingungen.
 
gInitTrue = false;   // В глобальных
-------------------------------------
// Сама функция нашего ИНИТА
bool myInit()
{
   // Инициализируем..
   // неоходимые..
   // нам..
   // переменные.
   return(gInitTrue =true);
}
-------------------------------------
//Вызов из старта так:
if (gInitTrue = false)
   myInit();
 

hoz:

gInitTrue = false;   // В глобальных
-------------------------------------
// Сама функция нашего ИНИТА
bool myInit()
{
   // Инициализируем..
   // неоходимые..
   // нам..
   // переменные.
   return(gInitTrue =true);
}
-------------------------------------
//Вызов из старта так:
if (gInitTrue = false)
   myInit();

Es ist dasselbe wie:

gInitTrue = false;   // В глобальных
-------------------------------------

bool init()
{
   if
   {
   // Инициализируем..
   // неоходимые..
   // нам..
   // переменные..
   }
   return(gInitTrue =true);
}
-------------------------------------
void start()
 {//Вызов из старта так:
  if (gInitTrue = false) init();
 }
 
001:

Ich kann nicht herausfinden, wie ich die Logik mit möglichst geringem Aufwand umsetzen kann.

If(...) setzt eine Stop-Order;

If(Lebensdauer>Zeit der Bestellung) die Bestellung zurückziehen und if(...) eine neue Bestellung aufgeben;

Die Schwierigkeit besteht darin, dass es mehrere Positionen geben kann, die bereits offen sind, und wie sollen wir sie alle bekämpfen? Was ist der einfachste Weg?

Ich danke Ihnen!

int MagicNumber=555;
//---
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  //--- фильтр по символу
         if (OrderSymbol()!=Symbol()) continue;
         //--- фильтр по магик номеру (если такая проверка предусмотрена)
         if (OrderMagicNumber()!=MagicNumber) continue;
         //--- срабатывает условие удаления отложенного ордера
         if (OrderOpenPrice()>vremya)
         {  
            if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
            {  
               if (OrderDelete(OrderTicket())==true)
               {  Sleep(5*1000); //после удачного удаления усыпляем советник на 5 секунд
                  if (/*установить стоповый ордер*/)
                  {   OrderSend(...)
                  }
               }
            }
            else return(0);
         }
}  }  }
 
Zhunko:
Dies ist die Übergabe des Parameters per Referenz.
Niemand hindert Sie daran, init() dort aufzurufen, wo Sie es wollen, je nach Ihren Bedingungen.


Dann wiederum müssen wir die Frage der Kontrolle über diesen Moment lösen. Denn um zu wissen, "wo es sein sollte", muss man es wissen. Und das kann man z. B. durch eine Flagge herausfinden. Es stellt sich zum Beispiel heraus, dass die Flagge in global sein wird:

gInitTrue = false;

In init() weisen Sie ganz am Ende der Funktion einen Wert zu:

gInitTrue = true;

Und wir werden den Start ganz am Anfang der Funktion kontrollieren:

if (gInitTrue != true)
    init();
Verstehe ich das richtig? Oder gibt es etwas anderes zu beachten?
 
hoz:


Aber was ist der springende Punkt? Es wurde erörtert, dass INIT z. B. bei Verbindungsabbrüchen oder anderen ähnlichen Situationen fehlschlagen kann. Denn er initialisiert die Daten selbst nicht nachträglich neu, falls es zu Unfällen kommt, und er läuft nur einmal! Diese Vorgehensweise ist also nicht ganz korrekt.
Es gibt keine zeitliche Begrenzung für init(), theoretisch können die Berechnungen mehrere Sekunden/Minuten lang laufen. Es macht keinen Sinn, hier eine Verbindung abzubrechen. D.h., owl wurde auf einem Chart gestartet -> ein Tick ist gekommen -> Berechnungen in init() haben begonnen (zu diesem Zeitpunkt kann es viele Ticks oder einen Verbindungsfehler geben) -> der Expert Advisor für die erste Operation start() und wartet somit auf einen neuen Tick.
 
Wie sollte der Code korrekt geschrieben werden, so dass, wenn der angegebene Stop-Loss oder Take-Profit kleiner ist als der Minimum-Stop, diese gleich gemacht werden und die Stops als Minimum-Stop verwendet werden. ?
 
webip:
Wie sollte der Code korrekt geschrieben werden, so dass, wenn der angegebene Stop-Loss oder Take-Profit kleiner ist als der Minimum-Stop, diese gleich gemacht werden und die Stops als Minimum-Stop verwendet werden. ?
MathMax().
 
Können Sie mir einen kleinen Code nennen? Geöffnete Datei.... Welche Funktionen können verwendet werden, um einen Datensatz zu schreiben, zu speichern und dann zu schließen...
 
Zolotai:
Können Sie mir einen kleinen Code nennen? Geöffnete Datei.... Mit welcher Funktion kann man eine Aufzeichnung schreiben, speichern und dann schließen?

https://docs.mql4.com/ru/files