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

 
Vitaly Muzichenko #:

Können Sie mir sagen, wie ich die Konstruktion kürzen kann?

Es geht darum, Paare abzuschneiden, die bereits ein Symbol enthalten

Ich habe eine Position auf USDCHF

===

Es gibt eine Position auf EURGBP, das Signal kam vom AUDUSD - wie können wir erkennen, dass es keine Position auf AUD oder USD gibt?

Valery hat eine richtige Denkweise. Aber ich verstehe nicht, warum wir die gesuchte Währung in den Auftragswährungen bei jeder Iteration des Zyklus identifizieren sollten? Und es scheint mir einfacher zu sein, die Margenwährung und die Gewinnwährung zu nehmen, anstatt in die Zeile zu schauen. Sehen Sie sich die Währungsspezifikation an... Ich würde Folgendes tun

bool Search(string _sy)
 {
  int OT = OrdersTotal();
  string curencyProfit = SymbolInfoString(_sy, SYMBOL_CURRENCY_PROFIT),
         currencyMargin = SymbolInfoString(_sy, SYMBOL_CURRENCY_MARGIN);
  for(int i = 0; i < OT; i++)
   {
    if(OrderSelect(i, SELECT_BY_POS))
     {
      bool res = StringFind(OrderSymbol(), curencyProfit) >= 0 ||
                 StringFind(OrderSymbol(), currencyMargin) >= 0;
      if(res)
        return(true);
     }
   }
  return(false);
 }/******************************************************************/
 
Valeriy Yastremskiy #:

StringFind

Ich denke, es sollte 2 Zeilen geben, die sowohl die 0- als auch die 3-Positionen durchsuchen. Um ein zufälliges Spiel in der Mitte abzuschneiden.

SZ

Dumm nur, dass es 4 Bedingungen gibt.

Nicht gleich A B und nicht gleich C D

Bedingung A==C oder A==D oder B==C oder B==D

Ich glaube nicht, dass irgendjemand sie schreiben könnte)))

Dumm beim zweiten Versuch. Offenbar ist die Zeit am Abend gekommen.

 
Vitaly Muzichenko #:

Können Sie mir sagen, wie ich die Konstruktion kürzen kann?

Es geht darum, Paare abzuschneiden, die bereits ein Symbol enthalten

Ich habe eine Position auf USDCHF

===

Es gibt eine Position auf EURGBP, das Signal kam von AUDUSD - wie kann man erkennen, dass es keine Position auf AUD oder USD gibt?

Ich würde alle offenen Auftragswährungen in einem Array sammeln und das Array nach Erhalt des Signals durchgehen.

 
Alexey Viktorov #:

Valeri hat die richtige Richtung eingeschlagen. Aber ich verstehe nicht, warum wir die Währung, nach der wir suchen, in den Auftragswährungen bei jeder Iteration des Zyklus definieren müssen? Und ich denke, es ist einfacher, die Margenwährung und die Gewinnwährung zu nehmen, als in die Zeile zu schauen. Sehen Sie sich die Spezifikation für Währungen an ... Ich würde dies tun

Ich werde es morgen überprüfen.


Taras Slobodyanik #:

Ich würde alle offenen Auftragswährungen in einem Array sammeln und das Array durchsehen, sobald ich ein Signal erhalte.

Die Idee ist dieselbe, aber Sie benötigen zusätzlich ein Array

 

Sie können auch eine magische 1 = AUD, 2 = EUR.... für jede Währung einstellen und Magie vergleichen,

über die Arrays, imho, ist es rational, jetzt 3 Währungspaare 4 Bedingungen, morgen 33 Währungspaare 34 Bedingungen?

 
Vitaly Muzichenko #:

Ich werde es morgen überprüfen.


Der Punkt ist derselbe, aber Sie brauchen auch ein Array

Warum bis morgen warten? Wenn Sie zu faul sind, die Spezifikationen durchzusehen, lassen Sie das Skript durch alle Symbole laufen, die Sie interessieren, und suchen Sie eine Übereinstimmung für Margin-Währung und Profit-Währung.
/********************Script program start function*******************/
void OnStart()
 {

  Comment(SymbolInfoString(_Symbol, SYMBOL_CURRENCY_PROFIT), "\n",
          SymbolInfoString(_Symbol, SYMBOL_CURRENCY_MARGIN)
         );
 }/******************************************************************/
Ich habe vor dem Schreiben nicht alles überprüft, aber ich habe keine Übereinstimmungen gefunden...
 
Vitaly Muzichenko #:

Die Bedeutung ist dieselbe, aber Sie brauchen auch ein Array

Nun, der Punkt ist schnell - nahm den Währungscode, machte eine Suche mit einem vorgefertigten Array, das aktualisiert wird, wenn ein Handel eröffnet wird.

 

Hilfe mit dem Code. Ich möchte, dass sich der schwebende Auftrag mit der Eröffnung eines neuen Balkens entlang der Trendlinie bewegt.

D.h. es wäre eine dauerhafte Überschreitung des Auftrags und der Linie.

Wir sollten den Kreuzungspunkt der Trendlinie und die Zeit kennen, um sie zu verschieben. Wie wird sie berechnet?

 
Zalevsky1234 schwebende Auftrag mit der Eröffnung eines neuen Balkens entlang der Trendlinie bewegt.

D.h. es wäre eine dauerhafte Überschreitung des Auftrags und der Linie.

Wir sollten den Kreuzungspunkt der Trendlinie und die Zeit kennen, um sie zu verschieben. Wie wird sie berechnet?

Hier ist die Funktion zur Berechnung des Schnittpunkts
 

Frage zur statischen Variable var der Methode X::doJob(). Es gibt eine Klasse U, die ein Objekt des Typs X erzeugt, einige Arbeiten ausführt und es dann zerstört. Und das geschieht regelmäßig. Frage: Wann wird die Variable var gelöscht?


class X {
public:
   void doJob() {
      static int var = 0;
   }
};

class U {
private:
   X *x;
public:
   U(){

   }
   ~U() {
      delete x;
   }
   void U::dojob(){
      x = new X();
      x.doJob();
      delete x;
   }
};
Grund der Beschwerde: