[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 30

 
AndrewX:

Bitte teilen Sie mir mit, wie ich die korrekte Prüfung in der Positionseröffnungsbedingung einstellen kann - ob es eine offene Position für dieses Instrument gibt oder nicht. Und wenn es eine Position für das Symbol gibt (egal ob Verkauf oder Kauf), dann findet die Eröffnung nicht statt, andernfalls wird das Signal zur Eröffnung der Position ausgelöst?

Hier ist der Code (ich denke, er ist für das Öffnen von Positionen zuständig):

Scheint in der Logik richtig zu sein, aber es funktioniert nicht noch öffnet mehrere Posen auf ein Werkzeug.

P.S.: Ich bin kein Programmierer. Wenn es möglich ist, dem Dummie das genauer zu erklären.


Das ist nicht schwer. Es ist am besten, 2 Unterprogramme zu organisieren, die die Aufträge zählen.

// =================================================================================================
// ************************* Счётчики ордеров ******************************************************
// =================================================================================================


//=========== SchBuy()  ===============================
//  Функция возвращает количество Buy-ордеров
//   SchBuy      - счётчик Buy ордеров
//-----------------------------------------------------------
int SchBuy(int MAGIC){
  string SMB=Symbol();
  int SchBuy=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--) {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
    else {
      if(OrderSymbol()!= SMB || OrderMagicNumber()!= MAGIC){ continue;}
      if(OrderType()==OP_BUY){ 
        SchBuy++;
      }  
    }
  }
  return(SchBuy);
}                  
//==================================================================================================


//=========== SchSell()  ===============================
//  Функция возвращает количество Sell-ордеров
//  SchSell  - счётчик Sell ордеров
//-----------------------------------------------------------
int SchSell(int MAGIC){
  string SMB=Symbol();
  int SchSell=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--){
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
    else {
      if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGIC){ continue;} 
      if(OrderType()==OP_SELL){
        SchSell++;
      }
    }
  }
 return(SchSell);     
}                  
//==================================================================================================

Außerdem ist im Kodex selbst, prich:

if(SchBuy(MAGIC)+SchSell(MAGIC)<=0){
// ордеров нет - устанавливаем ордер при наличии торгового сигнала
}

Die MAGIC-Konstante wird besser in Benutzervariablen deklariert. Zum Beispiel so:

extern int      MAGIC=467223; // У ордеров открытых вручную MAGIC=0
 

Versucht


if (NumberOfPositions(Symbol_1,-1,Magic)<1

все равно не пашет
 
drknn:


Es ist nicht kompliziert. Es ist am besten, 2 Unterprogramme zu organisieren, die die Aufträge zählen.

Als nächstes, im Code selbst, prich:

Es ist besser, die MAGIC-Konstante in Benutzervariablen zu deklarieren. Zum Beispiel so:

Danke, ich werde mir das mal ansehen, aber es ist wahrscheinlich etwas zu kompliziert für mich.
 
AndrewX:
Danke, ich werde mir das mal ansehen, aber es ist wahrscheinlich etwas zu kompliziert für mich.

Ich habe eine EA-Datei an diesen Beitrag angehängt. Schauen Sie es sich an.
Dateien:
 
Guten Morgen! Vielleicht ist meine Frage nach der Nicht-Optimierung kompliziert oder uninteressant?
 
volshebnik:
Guten Morgen! Vielleicht ist meine Frage nach der Nicht-Optimierung kompliziert oder uninteressant?

Hierfür gibt es viele mögliche Gründe. Vom Trivialen - fehlende Geschichte - bis hin zur Variante - keine rentablen Optionen. Obwohl es einfacher sein könnte - ein Fehler im Expert Advisor
 

Bitte sagen Sie mir, ob der Roboter schwebende Aufträge erstellt.

Befehle für schwebende Aufträge werden an den Server gesendet.

Werden die in die Warteschlange eingestellten ausstehenden Aufträge auf dem Terminal angezeigt?

Sind die offenen Aufträge oben, unterhalb der in der Warteschlange platzierten ausstehenden Aufträge, so wie wenn ich die ausstehenden Aufträge manuell einstelle?

 
Jaguar1974:

Bitte sagen Sie mir, ob der Roboter schwebende Aufträge erstellt.

Befehle für schwebende Aufträge werden an den Server gesendet.

Werden die in die Warteschlange gestellten ausstehenden Aufträge auf dem Terminal angezeigt?

Ist es dasselbe, wenn ich die ausstehenden Aufträge manuell einstelle?


Was meinen Sie mit "in der Warteschlange"? Der Expert Advisor sendet eine Order an den Server , um eine Pending Order zu setzen. Wenn die Parameter dieses Auftrags korrekt sind, setzt der Server den ausstehenden Auftrag fest und dieser wird sofort auf dem Client-Terminal angezeigt. Wenn der Expert Advisor einen Auftrag sendet, um ausstehende Aufträge in einem bestimmten Schritt zu platzieren (dies geschieht durch eine Schleife), dann wird jeder neue Auftrag vom Server separat verarbeitet. Diese Aufträge werden in die Warteschlange gestellt - Expert Advisor hat einen Auftrag erteilt - Server hat geantwortet. Der Expert Advisor hat wieder einen Auftrag erteilt und wartet auf die Antwort des Servers.

Was bedeutet "Aufträge in der Warteschlange"? Was meinen Sie damit?

 
Vinin:

Hierfür gibt es viele mögliche Gründe. Von der trivialen - Mangel an Geschichte, um die Variante - keine profitablen Optionen. Obwohl es vielleicht einfacher ist - ein Fehler im Expert Advisor.
Ich habe es überprüft und es hat die Geschichte der Expert Advisors seit 1999. Ich habe alle Varianten geprüft (auch die nicht rentablen). Wenn ich nur einen MA-Parameter einstelle, zum Beispiel von 100 auf 110, dann "stirbt" die Optimierung - keine Ergebnisse, kein Chart.... Ganz zu schweigen von der Einbeziehung anderer Parameter.
 
volshebnik:
Ich habe nachgesehen - es gibt ein Protokoll von 1999. Ich habe das Kontrollkästchen aktiviert, um alle Varianten (auch die unrentablen) anzuzeigen. Ich setze auch nur einen MA-Parameter auf die Optimierung, zum Beispiel von 100 auf 110 und alles - die Optimierung "stirbt" - keine Ergebnisse, kein Chart.... Ganz zu schweigen von der Einbeziehung anderer Parameter.

Ich muss mir den Expert Advisor ansehen. Es gibt nichts auf diese Weise zu sagen
Grund der Beschwerde: