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

 
//-------Пример(мой) приказа на открытие позиции с привязкой закрытия ----------------------------------------------------- 
                                                      
                                                      //Локальная переменная, открывающая ордер БАЙ
   int OrdBuy_1() = (OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point));
   
        //-------Тогда закрытие именно для этого приказа может быть таким:-----------------------------------------------------
    
    if (OrdBuy_1()==true)                              //Если был открыт ордер №1, то...
     {                                                 //...выполнить следующее:...
                                                       //...при условии, что Желтая выше красной, с сужением(условие1)...
                                                       //...и есть верхний перелом Средней (условие2)...
                                                       //...ИЛИ при условии, что Желтая выше красной, с расширением(условие1а)...
                                                       //...и есть верхний перелом Боллинджера (условие2а)... 
     if ((Yellow_0>Red_0) && (Yellow_0-Red_0)<(Yellow_1-Red_1) && (MA_2 < MA_1 && MA_1 > MA_0) || (Yellow_0>Red_0) && (Yellow_0-Red_0)>(Yellow_1-Red_1) && (MB_2 < MB_1 && MB_1 > MB_0))
        {                              
       bool Ans=OrderClose(OrdBuy_1,Lots,Bid,0);       //...закрыть ордер №1 по цене Bid (лок.переменная)и выдать сообщение                                                      
         Alert("Попытка закрыть ордер БАЙ лотом("Lots"), с ценой открытия("Ask"). Ожидание ответа..");
        }
      }
   if (Ans==true)                                     // Если получилось,... 
        {                                             //... выдать сообщение
         Alert ("Закрыт ордер БАЙ лотом("Lots"),с ценой открытия("Ask"), цена закрытия("Bid"));
        }
 
Dies ist ein leicht abgewandeltes Beispiel zum obigen Beitrag
 
rapid_minus:

r772ra undartmedia70, danke für die Klarstellung.

Nach meinem Verständnis wird Magie vor allem dann benötigt, wenn ein Händler mehrere EAs mit mehreren offenen Aufträgen für mehrere Währungspaare, Konten usw. verwendet (richtig?).

Ich glaube nicht, und wenn ich denke, dass mein Expert Advisor im Gewinn arbeiten wird, wird es genug für mich sein. Ich entwickle es immer noch für ein Paar, ein Konto bei einem Maklerunternehmen, und nur ein Auftrag sollte offen sein, und der Magier (oder eine andere Kennung für eine offene Position) wird benötigt, damit er nur bei Eintritt bestimmter Bedingungen für genau diesen Auftrag geschlossen wird und andere Bedingungen, die für das Schließen anderer Aufträge gelten (die erst nach dem Schließen dieses Auftrags offen sein können), für diesen Auftrag nicht gelten.

Zum Beispiel kann ein Auftrag offen sein, wenn die Bedingungen (a+b+c+d+d) oder (a+d+e) oder (f+c+i+c) eintreten, und je nach den Bedingungen, zu denen der BAY offen ist, sollte er gemäß seinen eigenen Bedingungen geschlossen werden:(a+b+c+d) durch (f+j+l),(a+d+e) durch (h+l+m+n),(g+z+i+k) durch (p+r+c+t) .

Mir scheint, dass die Auftragsschleife auch hier nicht benötigt wird. Es muss eine einfache Lösung geben, die nicht viel Platz in Anspruch nimmt. Ich habe oben meine Vision dargelegt, bin aber noch nicht zur Analyse gekommen, und neben logischen Fehlern muss ich auch Syntaxfehler haben (es könnten Klammern fehlen oder falsche Variablen gesetzt sein usw.).

Betrachten Sie es nicht als Problem, bitte helfen Sie. Ich komme ohne sie nicht weiter. Danke

Ermitteln Sie das Ticket der letzten offenen Position und bearbeiten Sie es. IMHO ist es schlecht, die Ticketnummer in einer Variablen zu speichern, da sie im Falle eines Fehlers leicht verloren gehen kann. Um mit einem Auftrag zu arbeiten, muss er zunächst ausgewählt werden. Und Sie können sie entweder nach Index oder nach Ticket auswählen. Das Ticket muss genau bekannt sein. Nach einer erfolgreichen Auswahl mit Hilfe des Tickets müssen wir auch prüfen, ob die Position mit diesem Ticket geschlossen wurde. Wenn es nur eine Position auf dem Markt gibt, ist der Zyklus nicht sehr zeitaufwendig. Aber wir brauchen die Nummer des Tickets nicht in einer Variablen zu speichern. Sie können die letzte Reihenfolge in der Liste auswählen, aber es gibt eine Sortierabhängigkeit, die geändert werden kann (früher gab es eine Sortierabhängigkeit im Terminal, dann wurde sie entfernt, dann erschien sie wieder, dann wurde sie wieder entfernt) - glauben Sie, dass sie nicht wieder erscheint? Ich weiß es nicht. Es wird nur eine Iteration in der Schleife geben, wenn es nur eine Position auf dem Markt gibt - ist das viel?

Ist die "Buy close"-Bedingung eingetreten?
Wenn ja, suchen wir nach dem Ticket der letzten offenen Buy-Position
Wenn nein, dann gehen wir zum Anfang.
Wenn wir das Ticket gefunden haben, tun wir das, was wir in der gegebenen Situation brauchen, mit dem Auftrag
Ansonsten gehen Sie zum Anfang

 
rapid_minus:
Dies ist ein leicht abgewandeltes Beispiel zum obigen Beitrag

Was ist die Funktion OrdBuy_1()? Es handelt sich nicht um eine Variable, sondern um eine Funktion. Dieses Konstrukt ist völlig falsch. Eine Funktion wird außerhalb einer anderen Funktion definiert, nicht innerhalb.

 
artmedia70:

Ermitteln Sie das Ticket der letzten offenen Position und bearbeiten Sie es. IMHO ist es schlecht, die Ticketnummer in einer Variablen zu speichern, da sie bei jedem Fehler leicht verloren gehen kann. Um mit dem Auftrag zu arbeiten, muss er zunächst ausgewählt werden. Und Sie können sie entweder nach Index oder nach Ticket auswählen. Das Ticket muss genau bekannt sein. Nach einer erfolgreichen Auswahl mit Hilfe des Tickets müssen wir auch prüfen, ob die Position mit diesem Ticket geschlossen wurde. Wenn es nur eine Position auf dem Markt gibt, ist der Zyklus nicht sehr zeitaufwendig. Aber wir brauchen die Nummer des Tickets nicht in einer Variablen zu speichern. Wir können die letzte Reihenfolge in der Liste auswählen, aber es gibt eine Sortierabhängigkeit, die geändert werden kann (früher gab es eine Sortierabhängigkeit im Terminal, dann wurde sie entfernt, dann erschien sie wieder, dann wurde sie wieder entfernt) - glauben Sie, dass sie nicht wieder auftauchen wird? Ich weiß es nicht. Im Zyklus wird es nur eine Iteration mit nur einer Position auf dem Markt geben - ist das viel?

Ist die "Buy close"-Bedingung eingetreten?
Wenn ja, suchen wir nach dem Ticket der letzten offenen Buy-Position
Wenn nein, dann gehen wir zum Anfang.
Wenn wir das Ticket gefunden haben, tun wir das, was wir in der gegebenen Situation brauchen, mit dem Auftrag
Andernfalls gehen Sie zum Anfang

Danke, ich werde versuchen, sie zu überarbeiten. Trotzdem werde ich versuchen, das Beispiel gemäß Ihrer Erklärung zu überarbeiten, und meine Fehler im obigen Beispiel nennen, damit ich sie nicht wiederhole.

Danke

 
rapid_minus:

Danke, ich werde versuchen, sie zu überarbeiten. Trotzdem werde ich versuchen, das Beispiel entsprechend Ihrer Erklärung zu überarbeiten, und meine Fehler im obigen Beispiel nennen, damit ich sie nicht wiederhole.

Danke

Ich muss gehen - ich habe keine Zeit. Kurz gesagt - wenn die Variable int ist, warum prüfen Sie sie als bool? Stop-Loss- und Take-Profit-Werte sollten normalisiert werden. Ich habe nicht weiter gesucht.
 

Ich habe mit der Trendlinie herumgespielt und gelernt, wie man sie erhält. Es stellt sich jedoch heraus, dass grafische Objekte während der Optimierung im Tester nicht funktionieren.

Was sollte ich tun? Lohnt es sich, sie in einem Indikator zu erhalten?

Buffer[i]= ObjectGetValueByTime(chart_ID,name,Time[1],sub_window);

Wird die Optimierung auf diese Weise funktionieren?

 
artmedia70:
Ich muss gehen - ich habe keine Zeit. Kurz gesagt - wenn die Variable int ist, warum prüfen Sie sie als bool? Stop-Loss- und Take-Profit-Werte sollten normalisiert werden. Ich habe nicht weiter gesucht.

Nun, ich bin völlig verwirrt: OrdBuy_1( ) ist die Funktion, die BAY unter der Bedingung Nr. 1 über dieser Funktion öffnet. Nur ist der richtige Typ wahrscheinlich double und nicht int, denn er gibt den Eröffnungskurs der Bestellung zurück. Und soweit ich das verstehe, habe ich sie nicht in eine Funktion eingefügt; sie ist separat, nach int start(), platziert und extrahiert die Werte aller notwendigen Indikatoren und analysiert die aktuelle Marktsituation (liege ich falsch?).

Und wie kann ich Stop und Take normalisieren, oder besser noch, wie kann ich sie überhaupt nicht einstellen?

Und ich verstehe das mit dem Scheck nicht. Ich muss das Tutorial falsch verstanden haben - "bool OrderClose (int ticket, double lots, double price, int slippage, color Color=CLR_NONE)Funktion zum Schließen einer Market Order." Was ist ein Scheck?

Wie auch immer, je weiter wir gehen, desto dümmer wird es :(.

 
Forexman77:

Ich habe mit der Trendlinie herumgespielt und gelernt, wie man sie erhält. Es stellt sich jedoch heraus, dass grafische Objekte während der Optimierung im Tester nicht funktionieren.

Was sollte ich tun? Lohnt es sich, sie in einem Indikator zu erhalten?

Wird die Optimierung auf diese Weise funktionieren?

Berechnen Sie eine virtuelle Linie anstelle der realen Linie.
 
Forexman77:

Ich habe mit der Trendlinie herumgespielt und gelernt, wie man sie erhält. Es stellt sich jedoch heraus, dass grafische Objekte während der Optimierung im Tester nicht funktionieren.

Was sollte ich tun? Lohnt es sich, sie in einem Indikator zu erhalten?

Wird die Optimierung auf diese Weise funktionieren?

Nein, das wird sie nicht. Die Grafiken werden nur im Visualisierungsmodus angezeigt.