[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 97

 
MaxZ:

Ich muss etwas übersehen haben:



NewOrder ist erledigt, danke, jetzt funktioniert der Schritt
 
SeALALex:

Ich habe NewOrder implementiert, danke, jetzt funktioniert die Bestellung.

Seien Sie vorsichtig mit diesem Code. Sie wurde spontan geschrieben und nicht getestet! :)))

Und ich habe nur einen Weg geschrieben, um Ihr Problem zu lösen.


Übrigens haben Sie vorhin den folgenden Code angegeben:

Болк открытия на бай
if(Buy==true) 
  {Buy=false;

   ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask, Digits),5,SL,TP,Order,070177,0,Orange);
   if(ticket>0)
    { 
     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
      {Print("BUY order opened : ",OrderOpenPrice());
       Alert("Buy Order for ",Symbol());
       SendMail("Buy Order "+Symbol()+" "+Ask,SL);     
       }
     }
     else Print("Error opening BUY order : ",GetLastError()); 
     return(0); 
   }

Was ist, wenn es z. B. eine Rückfrage gibt? Dann wird die BUY-Order nicht eröffnet, obwohl das Signal korrekt sein könnte. Und in ein paar Stunden werden Sie sehen, dass der Preis weit nach oben gegangen ist, aber die BUY-Order wegen des Requotes noch nicht eröffnet wurde...

 
MaxZ:

Seien Sie vorsichtig mit diesem Code. Sie wurde spontan geschrieben und nicht getestet! :)))

Und ich habe nur einen Weg geschrieben, um Ihr Problem zu lösen.


Übrigens haben Sie vorhin den folgenden Code zitiert:

Was ist, wenn es z. B. eine Rückfrage gibt? Dann wird die BUY-Order nicht eröffnet, obwohl das Signal korrekt sein könnte. Und Sie werden sehen, dass sich der Preis in ein paar Stunden weit nach oben bewegt hat, aber die BUY-Order aufgrund des Requotes noch nicht eröffnet wurde...


Und wie kann man sich dagegen versichern?

 
SeALALex:


und wie kann man sich dagegen absichern?

Die einfachste Möglichkeit besteht darin, den Code anders zu schreiben:

Болк открытия на бай
if(Buy==true) 
  {ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask, Digits),5,SL,TP,Order,070177,0,Orange);
   if(ticket>0)
    { 
     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
      {Buy=false;
       Print("BUY order opened : ",OrderOpenPrice());
       Alert("Buy Order for ",Symbol());
       SendMail("Buy Order "+Symbol()+" "+Ask,SL);     
       }
     }
     else Print("Error opening BUY order : ",GetLastError()); 
     return(0); 
   }

Solange der Auftrag nicht eröffnet wird, bleibt das Signal zum Eröffnen einer Long-Buy-Position im Status True hängen.

 
MaxZ:

Der einfachste Weg ist, den Code anders zu schreiben:

Bis der Auftrag eröffnet wird, bleibt das Signal zur Eröffnung einer Kaufposition im Zustand "True".


Vielen Dank! Und vielen Dank an Roman!

Ich muss das Lot in einer Reihe von offenen Kaufaufträgen ohne Marge erhöhen (denn die Marge wirkt sich manchmal so aus, dass sie das Lot reduziert, und ich brauche sie nicht), ich brauche eine strikte Erhöhung um eine bestimmte Größe in einer Reihe von Aufträgen. D.h. wenn es einen Trend gibt, nach einem Kriterium ein Kaufsignal, dann erscheint nach dem zweiten Kriterium ein zusätzliches Kaufsignal und eine Order wird eröffnet; nach dem ersten Kriterium ist immer noch ein Kaufsignal und nach dem zweiten, nach einer kleinen Korrektur erscheint ein zusätzliches Kaufsignal und eine weitere Order wird eröffnet, aber mit einer größeren Order (die Größe wird in den Anfangsparametern festgelegt); nachdem alle Kauforders geschlossen sind, erscheint ein Verkaufssignal und dann beginnt alles wieder mit der ursprünglichen Größe des Lots.

Welcher Teil des Codes soll bitte angezeigt werden?

 
SeALALex:


Vielen Dank! Und vielen Dank an Roman!

Aber ich kann es immer noch nicht dazu bringen, ein Lot um einen bestimmten Schritt zu erhöhen, ich muss ein Lot in einer Reihe von offenen Kaufaufträgen ohne Marge erhöhen (weil die Marge manchmal stark abnimmt, und ich brauche sie nicht), ich brauche eine strenge Erhöhung um eine bestimmte Größe in einer Reihe von Aufträgen.

Wenn Sie bei der Losberechnung keine Marge verwenden und nur mit konstanten Parametern arbeiten, die z. B. in externen Variablen angegeben sind, steigen die Lose entsprechend nur mit konstanten Werten. Das Prinzip, nach dem der Code geschrieben werden kann, habe ich oben genannt.

SeALALex:


D.h. wenn es einen Trend gibt, nach einem Kriterium ein Kaufsignal, dann erscheint nach dem zweiten Kriterium ein zusätzliches Kaufsignal - eine Order wird eröffnet, dann bleibt nach dem ersten Kriterium das Kaufsignal bestehen und nach dem zweiten, nach einer kleinen Korrektur, erscheint das Kaufsignal wieder und eine weitere Order wird eröffnet, aber mit einer größeren Größe (die Größe wird in den Anfangsparametern eingestellt) und nachdem alle Kauforders geschlossen sind, erscheint ein Verkaufssignal und dann beginnt alles wieder von der anfänglichen Größe des Lots.

Welchen Teil des Codes möchten Sie bitte zeigen?

Sie haben die Variablen Lots, LotsInitial und LotsStep. Wenn sich der Trend ändert, setzen Sie Lots auf Null zurück und weisen LotsInitial einen Anfangswert zu. Wenn der Trend noch anhält und bereits ein Signal zur Eröffnung eines neuen Auftrags gesendet wurde, erhöhen Sie die Variable Lots mit dem Schritt LotsStep und eröffnen einen Auftrag.

Sie scheinen die ganze Logik zu verstehen, aber Sie können sie irgendwie nicht in Wenn-Anweisungen umsetzen. Warum, das weiß ich nicht.

Vielleicht hilft das:

extern LotsInitial = 0.5;
extern LotsStep    = 0.1;
       Lots;

int start()
{
   ...

   if ((Тренд окончен) && (Все ордера закрыты) && (Пришёл сигнал о возможном начале нового тренда))
      Lots = LotsInitial;
 
   if ((Тренд подтверждён) && (Коррекция) && (Пришёл ещё сигнал открыться по тренду))
      Lots += LotsStep;
  
   ...
}
 
MaxZ:

Wenn Sie bei der Berechnung der Lose keine Marge verwenden und nur mit konstanten Parametern arbeiten, die beispielsweise in externen Variablen festgelegt sind, werden die Lose entsprechend nur um konstante Werte erhöht. Das Prinzip, nach dem der Code geschrieben werden kann, habe ich oben genannt.

Sie haben die Variablen Lots und LotsStep. Wenn sich der Trend ändert, setzen Sie Lots auf Null zurück und weisen einen Anfangswert zu. Wenn der Trend noch anhält und bereits ein Signal geöffnet ist, erhöhen Sie die Variable Lots in Schritten von LotsStep und öffnen einen neuen Auftrag.

Sie sehen, dass Sie die ganze Logik verstehen, aber aus irgendeinem Grund können Sie sie nicht in if-Anweisungen umsetzen... Warum, das weiß ich nicht.


Kann ich einen Teil des Codes als Datei ablegen, die für das Öffnen als Datei verantwortlich ist, und Sie sehen... Das habe ich getan, aber es sieht so aus, als ob mit dem Code, den ich gepostet habe, etwas nicht stimmt, er öffnet sich einen Schritt weiter, aber nicht ganz.
Dateien:
 
SeALALex:

Kann ich einen Teil des Codes einfügen, der für das Öffnen als Datei verantwortlich ist, und Sie sehen ihn sich an... eingefügt, aber es sieht so aus, als ob etwas mit dem Code nicht stimmt, da ich ihn gepostet habe, öffnet sich ein Schritt mehr, aber bei weitem nicht.

Sie hätten zuerst alle Fehler beheben müssen. Warum sollten Sie etwas zu Ihrem EA hinzufügen, wenn es ohne dieses Element nicht funktioniert? Allerdings sieht dieser Code nicht wie ein voll funktionsfähiger EA aus. Sie müssen Teile davon herausgeschnitten haben, und jetzt wollen Sie, dass ich die Fehler korrigiere. :)))

Zum Beispiel ist init() nicht geschlossen... Und obskure Variable: LastOrder...

Bitte beheben Sie diese Fehler.

 
MaxZ:

Sie sollten zuerst alle Fehler beheben. Warum sollten Sie dem Expert Advisor etwas hinzufügen, wenn er ohne dies nicht funktioniert? Der Code scheint nicht die volle Funktionalität des Expert Advisors zu haben. Sie müssen Teile davon herausgeschnitten haben, und jetzt wollen Sie, dass ich die Fehler korrigiere. :)))

Zum Beispiel ist init() nicht geschlossen... Und obskure Variable: LastOrder...

Bitte beheben Sie die Fehler.


Ja ich habe es als Baukasten zusammengebaut scheint zu funktionieren, versuche jetzt mehr oder weniger in eine normale Form zu bringen und werde auslegen
 
splxgf:


Es geht nicht um ND. Punkt ist die Punktgröße, multiplizieren Sie es mit Null fünf wäre es zum Beispiel 0,00005, ich sehe keinen Sinn in den Vergleich dieser Zahl mit OrderClosePrice()-OrderTakeProfit(). TP garantiert nicht genau den gleichen Schlusskurs. Außerdem sind die Kontrollbedingungen für Bais und Selves unterschiedlich.

Diese Konstruktion ist zuverlässiger.



Danke!!! Lesen. Außerdem wird es unterschiedliche Testbedingungen für die bai und die selves geben - eine unglaubliche Wahrheit!!!