Sokaylita
08-06-2024 02:57,
Hier ist eine schnelle Funktion, auf die Sie verweisen können und die die Anzahl der Bestellungen zurückgibt, die der EA für das aktuelle Symbol geöffnet hat. Eingefügter Code #define MAGIC_NUMBER 8675309 int getOpenOrders() {/anfängliche Bestellanzahl auf Null setzen int iOrders = 0;/alle offenen Aufträge iterieren for (int i=OrdersTotal()-1;igt;=0;i--) {/den Auftrag auswählen OrderSelect(i,SELECT_BY_POS);/wenn die Bestellung nicht mit diesem Symbol oder EA übereinstimmt, fahren Sie mit der nächsten Bestellung fort if (OrderSymbol() != Symbol() || OrderMagicNumber() != MAGIC_NUMBER) continue;/es ist eine Übereinstimmung, addiere 1, um iOrders zu zählen; }/die Bestellanzahl zurückgeben return(iOrders); }
Vielen Dank für den Hinweis auf meinen Fehler. Ich dachte, der Test für die offene Bestellung betreffe nur den spezifischen EA/die spezifische Währung. Ich passe meinen Code an. Danke noch einmal. verschneit2
anaguthrro7
08-06-2024 05:37,
So überprüfe ich, ob für eine bestimmte Währung Bestellungen offen sind: Eingefügter Code for(i=0;ilt;total;i ) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); { if(OrderSymbol()==Symbol()) { open ; } } } Ihr Code prüft terminalweit, ob offene Aufträge vorhanden sind. Sie möchten nur symbolweit prüfen.
CARLTTYLIDAY
08-06-2024 07:23,
Ich denke darüber nach, das Programmieren von EAs zu lernen, aber ich sehe, dass das eine große Aufgabe wäre. Ich wünschte, es gäbe mehr Dokumentation für Anfänger mit Beispielen ... oder ich wünschte, Tesla wäre nicht so beschäftigt und könnte für mich programmieren!!!
Tyyequiyxex
08-06-2024 08:44,
Ihr Code besagt, dass eine Bestellung nur dann geöffnet werden soll, wenn keine anderen Bestellungen offen sind. if(totallt;1) lt;lt; Dies betrifft Ihre offene Routine. Sie kann nicht nach einer anderen Order-Offen-Bedingung suchen, wenn gerade eine Order offen ist. Außerdem ist Ihre enge Routine ein wenig durcheinander.
Hallo Telsa, hier ist der EA mit dem Magic Number-Code. Auch hier gilt: Für unterschiedliche Währungen, auch mit unterschiedlichen Magic-Zahlen, läuft es jeweils nur für eine Währung. Ich bin verloren. Danke, Snowy2/ ----------------------------- -------- /| MACD Magic Number.mq4 |/| |/ -------------------------------- ------------------- int MagicNumber = 260384; externes Double TakeProfit = 40; externe doppelte Lots = 0,01; extern double TrailingStop = 20; externes Double MACDOpenLevel=3; externes Double MACDCloseLevel=2; extern double MATrendPeriod=26;/ -------------------------------- ------------------- /| |/ -------------------------------- ------------------- int start() { double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; int cnt, Ticket, Gesamt;/Erste Datenprüfungen/Es ist wichtig sicherzustellen, dass der Experte mit einem normalen/Diagramm arbeitet und der Benutzer keine Fehler bei der Festlegung externer/Variablen (Lots, StopLoss, TakeProfit,/TrailingStop) in unserem Fall gemacht hat , wir prüfen TakeProfit/auf einem Chart mit weniger als 100 Balken if(Barslt;100) { Print(bars less than 100); return(0); } if(TakeProfitlt;10) { Print(TakeProfit kleiner als 10); return(0);/TakeProfit prüfen }/um die Codierung zu vereinfachen und den Zugriff zu beschleunigen/Daten werden in interne Variablen abgelegt MacdCurrent=iMACD(NULL,0,12,24,9,PRICE_CLOSE,MODE_ MAIN,0); MacdPrevious=iMACD(NULL,0,12,24,9,PRICE_CLOSE,MODE _MAIN,1); SignalCurrent=iMACD(NULL,0,12,24,9,PRICE_CLOSE,MOD E_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,24,9,PRICE_CLOSE,MO DE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRIC E_CLOSE,0); MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRI CE_CLOSE,1); total=OrdersTotal(); if(totallt;1) {/keine offenen Aufträge identifiziert if(AccountFreeMargin()lt;(1000*Lots)) { Print(Wir haben kein Geld. Free Margin = , AccountFreeMargin()); return(0); }/auf die Möglichkeit einer Long-Position (KAUF) prüfen if(MacdCurrentlt;0 MacdCurrentgt;SignalCurrent MacdPreviouslt;SignalPrevious) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask TakeProfit*Point,MagicNoTest, MagicNumber,0,Grün); if(ticketgt;0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print(BUY order open : ,OrderOpenPrice()); } else Print(Fehler beim Öffnen der KAUF-Bestellung: ,GetLastError()); return(0); }/auf die Möglichkeit einer Short-Position (SELL) prüfen if(MacdCurrentgt;0 MacdCurrentlt;SignalCurrent MacdPreviousgt;SignalPrevious) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,MagicNoTest, MagicNumber,0,Rot);if(ticketgt;0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print(SELL order open : ,OrderOpenPrice()); } else Print(Fehler beim Öffnen der VERKAUFSorder: ,GetLastError()); return(0); } return(0); }/Es ist wichtig, den Markt richtig zu betreten,/aber es ist noch wichtiger, ihn richtig zu verlassen... for(cnt=0;cntlt;total;cnt ) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()lt;=OP_SELL/auf offene Position prüfen OrderSymbol()==Symbol() OrderMagicNumber()==MagicNumber)/auf Symbol prüfen { if(OrderType()==OP_BUY)/Long-Position ist geöffnet {/soll es geschlossen werden? if(MacdCurrentgt;0 MacdCurrentlt;SignalCurrent MacdPreviousgt;SignalPrevious) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;/Position schließen return(0);/Beenden }/Auf Trailing Stop prüfen if(TrailingStopgt;0) { if(Bid-OrderOpenPrice()gt;Point*TrailingStop) { if(OrderStopLoss()lt;Bid-Point*TrailingStop) { OrderModify(OrderTicket() ,OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green); return(0); } } } } else/gehe zur Short-Position {/soll sie geschlossen werden? if(MacdCurrentlt;0 MacdCurrentgt;SignalCurrent MacdPreviouslt;SignalPrevious) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ;/Position schließen return(0);/Beenden }/Auf Trailing Stop prüfen if(TrailingStopgt;0) { if((OrderOpenPrice()-Ask)gt;(Point*TrailingStop)) { if((OrderStopLoss()gt;(Ask Point*TrailingStop) ) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask Point*TrailingStop,OrderTakeProfit(),0,Red); return(0); } } } } } } return(0); }/das Ende.
Sokaylita
08-06-2024 10:53,
Es sind nicht genügend Informationen vorhanden, um zu erkennen, wo das Problem liegt. Seien Sie nicht schüchtern, posten Sie den EA.
Codierung für Magic Number. int MagicNumber = 260384; externes Double TakeProfit = 40; externe doppelte Lots = 0,01; extern double TrailingStop = 20; externes Double MACDOpenLevel=3; ... if(MacdCurrentlt;0 MacdCurrentgt;SignalCurrent MacdPreviouslt;SignalPrevious) { Alert(Sie kaufen hier.); ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask TakeProfit*Point,EAMACD,MagicNumber,0,Green); if(ticketgt;0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print(BUY order open : ,OrderOpenPrice()); } else Print(Fehler beim Öffnen der KAUF-Bestellung: ,GetLastError()); return(0); } Danke.
Sokaylita
08-06-2024 12:32,
Auf Blackberry, kurze Antwort. Vermutlich ist EA nicht robust codiert. Posten Sie es und Sie erhalten Feedback.
Ich habe ein Demokonto bei InterbankFX und habe mehrere Kopien eines EA erstellt. Jeder EA hat seine eigene Magic Number. Ich habe einen separaten EA an verschiedene Charts angehängt, kann aber nicht mehrere Positionen gleichzeitig für verschiedene Währungen öffnen. Es scheint, als ob es jeweils nur für eine Währung laufen kann. Sobald ich eine Position schließe, wird automatisch eine andere Position für eine andere Währung eröffnet. Gibt es eine Einstellung in MQ, die mir fehlt? Vielen Dank für jede Hilfe. Verschneit2
Powered by vBulletin® Version 4.2.5 Copyright ©2026 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.