[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 605

 
VAM_ 08.06.2010 18:48bearbeiten | löschen

Wie kann man es stummschalten? Fuhr zu den weißen Knien. Es gibt viele Werkzeugfenster (33). Es gibt keine EAs. Nur Mitte und Zup. Ich kann nicht herausfinden, woher der Gesang kommt. Ich flehe Sie an, zu helfen. Service, Veranstaltungen wurden. Die Kreuze bei den Ereignissen sind nicht hilfreich. Er singt immer noch, der Mistkerl.

Techno:


Stare können im Truthahn sitzen )))

Ich habe den Code durchgesehen - nirgends eine Warnung! Was ist zu tun?
 
VAM_:

Ich habe den Code durchgesehen - nirgends eine Warnung! Was ist zu tun?

Überprüfung von PlaySound().
 
Wie kann ich es ermöglichen, einer global definierten Variablen während der Ausführung beim Aufruf verschiedener Funktionen unterschiedliche Werte zuzuweisen und diese zu speichern?

Ich muss der Variablen Part, die global gesetzt ist, bestimmte Werte für den teilweisen Abschluss einer Position zuweisen und sie als Parameter an die Funktion übergeben, die den teilweisen Abschluss des Auftrags ausführt. Diese Variable ist ein einfacher Divisor. Mit anderen Worten: Wenn der Wert anfänglich auf 1 gesetzt wird, wird die Partie durch 1 geteilt und die gesamte Position geschlossen. Wenn sich die Handelsbedingungen ändern, erhält diese Variable neue Werte und kann z.B. 1,5 oder 2 betragen, dann wird das Positionslot durch diese Zahl geteilt und die Teilschließung durchgeführt. Ein Funktionsaufruf mit Parameterübergabe sieht wortwörtlich wie folgt aus:

// На глобальном уровне
double Part = 1;                           // на сколько разделить лот для частичного закрытия 
//..........

void ClosePartPosBySelect(double Part)    // Объявление функции
// ... тру-ля-ля ... тело функции ...
ll=NormalizeLot((OrderLots()/Part));      // рассчёт лота внутри функции
// ... дальнейший код ф-ции ...

//--------- Вызов функции частичного закрытия ---------
// Происходит из тела этой функции
void TrailingPositionsTLE(int MAGIC, int CloseMethod, double Part, int LastTrailing)
// таким образом:
if (CloseMethod==1)
            ClosePartPosBySelect(Part);

Trotz der Tatsache, dass beim Aufruf der Funktion ...

TrailingPositionsTLE(561, 1, 2, 1);

... CloseMethod = 1 (partielle Schließung) gesetzt ist und Part = 2 explizit angegeben wird, übergibt die Funktion ihren global gesetzten Anfangswert = 1 anstelle des im Programmverlauf angegebenen Part-Wertes(z.B. 2)...

Wie kann ich das verhindern? Danke...

 
artmedia70: Wenn sich die Handelsbedingungen ändern, erhält diese Variable neue Werte und kann z.B. 1,5 oder 2 betragen, dann wird das Lot der Position durch diese Zahl geteilt und eine Teilschließung durchgeführt.


Nun, wenn sich die Handelsbedingungen ändern, dann ändern Sie Ihre Teilvariable. Oder Sie haben sie in einem anderen EA? Dann muss diese Variable immer gelesen werden, d.h.

int init()

{

.....

GlobalVariableSet("Teil0",Teil);

.....

}

int start()

{

...

Teil=StrToInteger(GlobalVariableGet("Teil0"));

...

}

 
Roger:

Nun, wenn sich die Handelsbedingungen ändern, dann ändern Sie Ihre Teilvariable. Oder Sie haben sie in einem anderen EA? Dann muss diese Variable immer gelesen werden, d.h.

int init()

{

.....

GlobalVariableSet("Teil0",Teil);

.....

}

int start()

{

...

Teil=StrToInteger(GlobalVariableGet("Teil0"));

...

}

Nein, die Variable befindet sich in demselben EA. Er ist global definiert und kann von Funktionen verwendet werden, aber sein Wert wird, wenn er innerhalb von Funktionen geändert wird, nicht an externe Funktionen zurückgegeben. Daher sehen die Funktionen ihren Wert als ursprünglich festgelegt an. Wenn ich sie nicht auf globaler Ebene einstelle, dann passen die Funktionen auf die nicht eingestellte Variable...
 

Wenn Sie eine Variable über ihren Parameter an eine Funktion übergeben, wird die Variable als Wert übergeben, was bedeutet, dass eine Änderung der Variable in der Funktion selbst nicht dazu führt, dass sie überschrieben wird.
Versuchen Sie, ihn als Referenz zu übergeben, indem Sie ein "&" vor den Parameternamen setzen

void simple(string &s){
//                 ^
//       спец сим. & перед именем переменной задает передачу по ссылке, а не по значению
//
}
 
VAM_:

Ich habe den Code durchgesehen - nirgends eine Warnung! Was ist zu tun?

Deaktivieren Sie auf der Registerkarte "Ereignisse" das Kontrollkästchen "Zulassen".

 

Hallo liebe Fachleute.

Ich würde wirklich gerne einen EA schreiben, der zwei Verkaufs- und Kaufaufträge gleichzeitig öffnet.

Nach einer bestimmten Anzahl von Punkten (Parameter lim) würde der Verlustauftrag geschlossen werden,

und ein gewinnbringender Auftrag wird geschlossen, wenn der Kurs unter den Höchstkurs seit Eröffnung des Auftrags gefallen ist

(eine Art virtueller Trailing-Stop).

Unter Qualen habe ich dies erstellt, aber es funktioniert nicht... funktioniert nicht

Bitte schlagen Sie etwas vor

int start()
  {
 
  double 
   max, min;                                            
  int b, s;
   if (Bid>max) max=Bid; 
    if (Ask<min) min=Ask;  
       if (OrdersTotal()>0)
       {                                   
           if ((max-Bid)>=lim*Point) 
           {                   
          OrderSelect(b,SELECT_BY_TICKET);                                  
          b=OrderClose(OrderTicket(),0.1,Bid,3,Blue);
          }
          
          
          if ((Ask-min)>=lim*Point)  
          {         
      OrderSelect(s,SELECT_BY_TICKET); 
      s=OrderClose(OrderTicket(),0.1,Ask,3,Red);
         }
}
else
{
  if (OrdersTotal()<1)
  {
 b=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",5,0);
      
 s=OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",5,0); 
    }                           
   }
         return;

   return(0);
  }
 
artmedia70:
Wie kann man es ermöglichen, einer global definierten Variablen zur Laufzeit unterschiedliche Werte zuzuweisen, wenn man verschiedene Funktionen aufruft und diese speichert?

zwei Möglichkeiten

1. Fügen Sie der Funktion, in der der Wert geändert wird, einen Amperewert hinzu,

z.B. void function( double& Part ){}

Wenn ein Wert innerhalb der Funktion geändert wird, kehrt der neue Wert an die Stelle des Aufrufs zurück

2. Entfernen Sie die Variable aus der Parameterliste der Funktion. Da die Variable global definiert ist, kann ihr Wert an jeder Stelle des Codes geändert werden, ohne sie als Parameter zu übergeben...

Aber um Verwirrung zu vermeiden, ist die 1. Variante besser, um nicht zu denken, was diese Variable ist, da es mehr als eine solche global definierte Variable (und innerhalb einer Funktion) geben kann...


Ich habe den Beitrag überflogen, die Antwort ist bereits gegeben worden...

 
artmedia70:
aber sein Wert, der innerhalb von Funktionen geändert wird, wird nicht an externe Funktionen zurückgegeben.


Zeigen Sie die Funktion selbst.

Wenn es sich um void ClosePartPosBySelect(double Part) handelt, ändern Sie in

void ClosePartPosBySelect()

Grund der Beschwerde: