MMA_Breakout_strategy_volume I (ohne MM oder MF) - codiert von WhooDoo22 - Seite 2

 
Auch hier gibt es mehrere Möglichkeiten, Aufträge auszuwählen, z. B. könnte ich Boolean verwenden, um zu prüfen, ob ein Auftrag offen oder geschlossen ist. Beispiel: Der Auftrag wird gesendet, fünf Boolesche Werte werden auf true gesetzt. Wenn die gleitenden Durchschnitte beginnen, sich zu kreuzen, wird der Boolean auf false gesetzt. Wenn bestimmte Boolean-Variablen wahr sind und bestimmte gleitende Durchschnitte sich kreuzen, werden bestimmte Boolean-Variablen für falsch erklärt, und ein bestimmtes Lot des Auftrags wird geschlossen. Es gibt noch andere Möglichkeiten, aber ich habe nicht viel darüber nachgedacht. Ich möchte Ihnen lediglich eine Lösung anbieten. Ich hoffe, sie war zufriedenstellend. Ich glaube, ich würde einen einfacheren Weg finden, aber auch hier habe ich nicht viel darüber nachgedacht. Es ist immer noch wichtig, aber nicht so schwierig zu kodieren wie MF oder MM in dieser Strategie. Ich danke Ihnen.
 
Wenn ich ein Live-Konto habe, mit dem ich schon einmal gehandelt habe und auf dem derzeit keine offenen Live-Aufträge vorhanden sind... wenn ich Ihren EA auf EURUSD M30 laufen lasse, was wird dann passieren? wird er Trades annehmen?
 

Übrigens, ich habe Ihren EA im Strategy Tester ausgeführt und hatte am Ende eine 11GB große Logdatei mit Fehlern... zum Beispiel...

23:08:49 2007.05.06 22:00 MMA_Breakout_strategy_volumeaIk_withouteMMjoreMF_u-rcodedmbywWhooDoo22 EURUSD,M30: OrderModify Fehler 1

23:08:49 2007.05.06 22:00 MMA_Breakout_strategy_volumeaIk_withouteMMjoreMF_u-rcodedmbywWhooDoo22 EURUSD,M30: close #6 buy 0.01 EURUSD at 1.36028 sl: 1.31028 at price 1.35960

23:08:49 2007.05.06 22:01 MMA_Breakout_strategy_volumeaIk_withouteMMjoreMF_u-rcodedmbywWhooDoo22 EURUSD,M30: unbekanntes Ticket 6 für OrderModify-Funktion

kann Ticket #6 nicht ändern, da es gerade geschlossen wurde....
 
WhooDoo22:
Ich glaube, es gibt mehrere Möglichkeiten, Bestellungen auszuwählen. Alle Methoden zur Auswahl von Bestellungen sollten die Funktion OrderSelect() verwenden. Davon abgesehen, sehe ich nicht, warum dies fehlschlagen würde, da der EA eindeutig die Funktion OrderClose() für alle Aufträge ohne Fehler im Strategietester ausführt.

Ihr orderClose funktioniert offensichtlich nicht. Wenn Sie Ihre Return-Codes überprüft hätten, wüssten Sie das. Ihr orderSelect funktioniert nicht, aber Sie überprüfen es nicht.

Wenn I keine Ticketnummer ist, dann schlägt Ihr orderSelect fehl und damit auch alles andere.

wenn I eine Ticketnummer ist, ist die nächste Ticketnummer NICHT i+1 (außer im Testgerät)

   OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderLots()==0.04)                                                                       {
   if(OrdersTotal()>0)                                                                         {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<(iMA(NULL,0,25,0,MODE_SMMA,PRICE_CLOSE,1)))      {  
     {
      OrderClose(i,0.01,Bid,30,CLR_NONE); 
      i++;
     }
     }}}}
     
   OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderLots()==0.03)                                                                       {
   if(OrdersTotal()>0)                                                                         {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<(iMA(NULL,0,50,0,MODE_SMMA,PRICE_CLOSE,1)))      {  
     {
      OrderClose(i,0.01,Bid,30,CLR_NONE); 
      i++;
     }
     }}}}
     
   OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderLots()==0.02)                                                                       {
   if(OrdersTotal()>0)                                                                         {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<(iMA(NULL,0,100,0,MODE_SMMA,PRICE_CLOSE,1)))     {  
     {
      OrderClose(i,0.01,Bid,30,CLR_NONE); 
      i++;
     }
 

Simon,

Wenn ich ein Live-Konto habe...

RE: Ich rate Ihnen dringend davon ab, Volume I auf einem Live-Konto laufen zu lassen! Natürlich liegt die Entscheidung bei Ihnen, aber ich empfehle Ihnen dringend, es nicht auf einem Live-Konto laufen zu lassen, bis die Entwicklung von Band I zu II abgeschlossen ist. Band I befindet sich noch in der Entwicklung und sollte erst nach Abschluss der Codierung ausgeführt werden. Ich bin mir nicht sicher, was passieren würde, da ich es nicht selbst auf einem LIVE-Konto getestet habe. Ich bin mir bewusst, dass es noch nicht vollständig ist, und habe mich dafür entschieden, die wesentlichen Anforderungen zu erfüllen, bevor ich mit dem Testen auf einem LIVE-Konto beginne.


Übrigens,..

RE: Ich glaube, ich verstehe auf Anhieb, was es mit diesem Fehler auf sich hat... Dieser Fehler spiegelt einen Fehler innerhalb des Codeblocks "EMERGENCY SL" wider. Ich habe mich nie wirklich darauf konzentriert, da es nicht so schwierig zu codieren ist. Ich habe ihn teilweise kodiert und seine Reife nicht vollendet. Dem "EMERGENCY SL"-Codeblock fehlt es an wichtigen Anpassungen. Ich bin zuversichtlich, dass Sie die 11-Gig-Fehlerliste nicht erhalten würden, wenn Sie die beiden Codeblöcke SELL und BUY "EMERGENCY SL" vollständig entfernen würden. Der Grund, warum es 11 Gigabyte sind, ist, dass ich glaube, dass es derselbe Fehler ist, der sich im Laufe der Geschichte immer wieder wiederholt und getestet wird.

...danke ich dir.


William,

Ich muss sagen, dass ich noch nicht so lange mit Ihnen über Code diskutiert habe wie Simon, aber ich möchte mit Ihrem Beitrag weitermachen (vielen Dank für Ihren Beitrag! Er ist willkommen.).

Was möchten Sie in Band I/II sehen?

Ich führe ausschließlich Tests durch und füge wesentlichen Code zum Testen hinzu, um seinen Handelswert zu garantieren. Ich werde dann die verbleibenden Code-Probleme feinabstimmen, um einen sicheren Handel auf LIVE/DEMO zu gewährleisten.

Ich danke Ihnen.

 
RaptorUK:
Wenn ich ein Live-Konto habe, mit dem ich bereits gehandelt habe und auf dem derzeit keine offenen Live-Aufträge vorhanden sind, was passiert dann, wenn ich Ihren EA auf dem EURUSD M30 laufen lasse?

WhooDoo22:

Simon,

Wenn ich ein Live-Konto habe...

RE: Ich empfehle Ihnen dringend, Band I nicht auf einem Live-Konto laufen zu lassen! Natürlich liegt die Entscheidung bei Ihnen, aber ich empfehle Ihnen dringend, es nicht auf einem Live-Konto laufen zu lassen, bis die Entwicklung von Band I zu II abgeschlossen ist. Band I befindet sich noch in der Entwicklung und sollte erst nach Abschluss der Codierung ausgeführt werden. Ich bin mir nicht sicher, was passieren würde, da ich es nicht selbst auf einem LIVE-Konto getestet habe. Ich bin mir bewusst, dass er noch nicht vollständig ist, und habe mich dafür entschieden, seine grundlegenden Anforderungen zu erfüllen, bevor ich mit dem Testen auf einem LIVE-Konto beginne.


Der Punkt, auf den ich hinauswollte und den ich Ihnen ans Herz legen möchte, ist, dass, wenn es eine Kontohistorie gibt, diese Zeilen in Ihrem Code verhindern werden, dass irgendwelche Trades angenommen werden.

   if(OrdersHistoryTotal()==0)                                                                 
      {
      if(OrdersTotal()<MaxOrders)  
   if(OrdersHistoryTotal()==0)                                                                 
      {
      if(OrdersTotal()<MaxOrders)  


Die anderen Stellen, an denen eine Order mit OrderSend() platziert wird, sind die, an denen eine bestehende Order offen ist ... wenn also alte Orders in der History vorhanden sind, wird Ihr EA keine Trades platzieren ... wenn Sie Ihren Code auf Demo oder Live getestet hätten, hätten Sie das wahrscheinlich entdeckt.

 

Simon,

Worauf ich hinauswollte...

RE: Verstanden. Glauben Sie, dass es möglich ist, die Funktion OrderSelect() zu verwenden, um nach einer eindeutigen Ticketvariablen zu suchen, dann wird darunter der Codeblock liegen, der "if (OrdersHistoryTotal()==0){" enthält. Würde dies nicht funktionieren, WEIL die Funktion OrderSelect() die eindeutige Ticketvariable "ticket" auswählt und die Funktion OrdersHistoryTotal() aufgrund der obigen Funktion OrderSelect() nur die Handelshistorie der eindeutigen Ticketvariable durchsucht. Die "if-Anweisung" sucht nur nach Aufträgen in der Historie für eine bestimmte Variable, nämlich die eindeutige Ticket-Variable.

//*************************
// BUY ORDER OPEN SECTION ;
//*************************

   OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
   if(OrdersHistoryTotal()==0)                                                                 {
   if(OrdersTotal()<MaxOrders)                                                                 {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,2)<(iMA(NULL,0,200,0,MODE_SMMA,PRICE_CLOSE,2)))     { 
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)>(iMA(NULL,0,200,0,MODE_SMMA,PRICE_CLOSE,1)))     { 
     {
      ticket=OrderSend(Symbol(),OP_BUY,0.05,Ask,30,0,0,"",0,0,Blue);    
      i++;
     }
     }}}}

vielen Dank!

 
WhooDoo22:

Simon,

Worauf ich hinauswollte...

RE: Verstanden. Glauben Sie, dass es möglich ist, die Funktion OrderSelect() zu verwenden, um nach einer eindeutigen Ticketvariable zu suchen, darunter liegt der Codeblock mit dem "if OrdersHistoryTotal()==0{". Würde dies nicht funktionieren, WEIL die Funktion OrdersHistoryTotal() nur nach früheren Geschäften mit der eindeutigen Ticketvariable sucht? Die "if-Anweisung" sucht nur nach Aufträgen in der Historie für eine bestimmte Variable, die Variable "Unique Ticket".

vielen Dank!

Ich glaube, Sie sind ein wenig verwirrt ... Sie sagten: "Würde dies nicht funktionieren, WEIL die Funktion OrdersHistoryTotal() nur nach früheren Geschäften mit der Variable für das Einzelticket sucht?" das ist falsch, schauen Sie in der Dokumentation nach,OrderHistoryTotal() macht folgendes

"Gibt die Anzahl der geschlossenen Aufträge in der ins Terminal geladenen Kontohistorie zurück. Die Größe der Historienliste hängt von den aktuellen Einstellungen der Registerkarte "Kontohistorie" des Terminals ab."


Es hat nichts mit Ticket-Nummern oder Ticket-Variablen oder Magic Numbers oder irgendetwas anderem zu tun ... es gibt die Gesamtzahl der Trades im History-Pool zurück ... der einzige begrenzende Faktor ist, was Sie auf der Registerkarte "Account history" anzeigen lassen wollen . Die gesamte Historie, die letzten 3 Monate, der letzte Monat oder ein benutzerdefinierter Zeitraum.
 
Ein weiterer Punkt ... wenn ich Ihren EA benutze und er einen Trade platziert hat ... dann muss ich meinen PC für ein paar Minuten herunterfahren, wenn ich MT4 wieder starte und Ihr EA startet, wird er die offene Order nie finden . ... alle Ihre OrderSelect()-Aufrufe werden nach Ticket ausgewählt ... entweder über Ihre Ticket-Variable oder Ihrei-Variable, die beide keine Möglichkeit haben, die Ticket-Nummer meiner offenen Order zu speichern.
 

Simon,

Ich glaube, du bist ein wenig verwirrt...

RE: Volume II muss den Auftragssendeprozess auf der Grundlage einer Bedingung beginnen. Sobald der erste Auftrag gesendet wurde (basierend auf der Bedingung), blockiert die OrderClose() -Funktion die Ausführung aller zukünftigen Trades. Versuchen Sie bitte, sich dies als einen Zyklus vorzustellen. Bringen Sie den Ball auf der Grundlage der Bedingung ins Rollen, dann wird der Zyklus eingeleitet, sobald die erste Order (Ball-Roller-Order) geschlossen worden ist. Der Zyklus fährt fort, Zahlen zu berechnen und auf aktive Bedingungen zu prüfen, BIS zukünftige Bedingungen erfüllt sind.

Dankeschön