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

 

Mache ich es richtig?

y = OrderOpenPrice()-Ask;

Ich ziehe den aktuellen Preis vom Preis des letzten offenen Auftrags ab?

int i_buy=0; int i_sell=0;

for(int i=0;i<OrdersTotal();i++){

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==Symbol()){

switch(OrderType()){// Есть ли открыте ордера

case OP_BUY:

i_buy++;

break;

case OP_SELL:

i_sell++;

break;

}

y = OrderOpenPrice()-Ask;

}

}


if((i_buy==0 && i_sell==0) || y > Step) //--- нет открытых ордеров, открываем или расстояние от последнего ордера до текущей цены. Больше step

OrderSend(Symbol(), OP_BUY,StartLot,Ask,Slippage,0,Ask+TakeProfit*Point(),WindowExpertName()+" "+(string)0,0,0,clrBlue);


 
woin2110:

https://docs.mql4.com/ru/trading/orderselecthttps://docs.mql4.com/ru/trading/orderopenprice https://docs.mql4.com/ru/trading/orderlots

double z; //die Variable "z" deklarieren
double y; //die Variable "y" deklarieren


if(OrderSelect(10,SELECT_BY_POS)==true) //wenn die ausgewählte Bestellung (nach Ticket) vorhanden ist

{

OrderLots()=z //Zuweisung des Loses für diesen Auftrag an die Variable "z".

OrderOpenPrice()=y //Zuweisung des Eröffnungskurses an die Variable "y".

}

Versuchen Sie dies

Bitte verwirren Sie die Leute nicht und erzählen Sie keinen Blödsinn. Sie sagen nach Ticket, aber Sie schreiben Auswahl nach Index. Und wenn Sie nach Ticket auswählen, brauchen Sie den Pool nicht anzugeben - die Funktion ignoriert ihn und wählt ihn in einer der beiden Listen aus - in der, in der er steht. Um zu prüfen, aus welcher Liste der Auftrag ausgewählt wurde, muss man die Zeit der Schließung des Auftrags nach der erfolgreichen Auswahl prüfen, und wenn sie größer als Null ist, dann wurde der Auftrag bereits geschlossen, andernfalls wird er aus der Liste der offenen Positionen ausgewählt.

Sie ordnen den Wert des Loses nicht einer Variablen zu und umgekehrt - Sie versuchen, den Wert der Variablen der Funktion zuzuordnen, die das Los des ausgewählten Auftrags zurückgibt - das ist völliger Unsinn

Genau das Gleiche versuchen Sie mit der Funktion, die den Eröffnungskurs zurückgibt.

 

artmedia70:

Sagen Sie mir, was ich falsch mache. Alles scheint korrekt zu sein.

if((i_buy==0 && i_sell==0) || y > Step)

Oder (i_buy==0 && i_sell==0) oder y > Step. Wenn eines von beiden zutrifft. Dann überspringen wir es und eröffnen einen Auftrag.

 
evillive:

Wenn Alpari - Sie konnten nie. Bei einem anderen Maklerunternehmen hängt es vom Konto ab. Wenn wir eine gute Arbeitsbeziehung mit Alpari haben, werden wir auf die Rücknahme zurückkommen. Bevor man etwas unternimmt, sollte man die Geschäftsbedingungen studieren, dort steht alles drin.

Der Helpdesk 8-800-200-01-31 erklärte, dass Ende letzter Woche ein Fehler behoben wurde, der es ermöglichte, Aufträge in ECN-Konten zu eröffnen, während gleichzeitig SL und TP gesetzt wurden. Ich habe die letzte Position am Donnerstag geschlossen.

Sie haben insofern Recht, als dass die Handelsvorschriften nichts darüber aussagen und dass nur OrderModify() die Daten speichern wird.

Danke für die Antwort.

 
Zolotai:

artmedia70:

Sagen Sie mir, was ich falsch mache. Alles scheint korrekt zu sein.

if((i_buy==0 && i_sell==0) || y > Step)

Oder (i_buy==0 && i_sell==0) oder y > Step. Wenn eines von beiden zutrifft. Dann überspringen wir das und eröffnen einen Auftrag.

Ich verstehe die Frage praktisch nicht...

Ich weiß nicht, was uns noch fehlt, aber eine Bestellung kann eröffnet werden... D.h. wenn diese Bedingung erfüllt ist und ein Auftrag eröffnet werden soll, dann

Ich kann Ihnen sagen, was hier steht:

Wenn i_buy und i_sell beide gleich Null sind, kann ein Auftrag eröffnet werden. Oder, wenn einer der Werte ungleich Null ist, oder vielleicht sogar beide ungleich sind, aber wenn y größer als Step ist, dann eröffne ebenfalls einen Auftrag.

 
artmedia70:

Ich verstehe die Frage praktisch nicht...

Ich weiß nicht, was uns noch fehlt, aber eine Bestellung kann eröffnet werden... D.h., wenn diese Bedingung erfüllt ist und ein Auftrag eröffnet werden soll.

Ich kann Ihnen sagen, was hier steht:

"Eröffne einen Auftrag, wenn i_buy und i_sell beide gleich Null sind. Oder wenn einer von ihnen ungleich Null ist, oder vielleicht sogar beide ungleich sind, aber wenn y größer als Step ist, dann sollte auch ein Auftrag eröffnet werden.



Ich verstehe das in der Schleife richtig. Wir gehen vom ersten offenen Auftrag zum letzten. Daher sollten wir den Preis der letzten Bestellung nehmen.

Es gibt noch mehr. Ich habe Alert("d") in OnTick eingefügt. Ich habe den Code im Testprogramm ausgeführt, aber ich habe keine Pieptöne oder Fenster gehört.

 
Zolotai:

Im Gabelzyklus verstehe ich das richtig. Wir gehen vom ersten offenen Auftrag zum letzten. Dementsprechend nehme ich den Preis der letzten Bestellung.

Ich habe auch das hier. Ich habe Alert("d") in OnTick eingefügt. Ich habe den Code im Testprogramm ausgeführt, aber ich habe keine Pieptöne oder Fenster gehört.

Die Warnungen des Testers werden im Testerprotokoll angezeigt. Aber über den Zyklus, Überspringen, Auswählen, Brute-Force ist nicht klar. Können Sie sich ein Bild davon machen, was Sie am Ende haben wollen?
 

Guten Tag!

Wie kann man mit "MetaEditor nicht gefunden" kämpfen, wenn man versucht, einen EA zu bearbeiten? MetaTrader Build 600.

Ich kann mich nicht erinnern, dass es in älteren Versionen ein solches Problem gab...

Kann es daran liegen, dass der Computer, an dem ich arbeite, ziemlich leistungsschwach ist und zu 50-75 % ausgelastet ist? Ich habe 7 MT4-Instanzen darauf laufen, aber unter normalen Bedingungen (d.h. ohne externe Belastung wie z.B. Zugriff über TeamViewer und Versuch, MetaEditor zu starten) ist die Leistung ausreichend, und der im Hintergrund laufende Task-Manager zeigt eine durchschnittliche CPU-Auslastung von <=45-50% für 15-20 Minuten.

Dieses Problem tritt nicht in 100 % der Fälle auf, und MetaEditor wird, nachdem er ungewöhnliche Geduld und Ausdauer bewiesen hat, ab dem 5. bis 10. und 25. Aber es ist wirklich ärgerlich, wenn man eine halbe Stunde lang versucht, MetaEditor zu starten.

 
artmedia70:
Die Warnungen des Testers werden im Protokoll des Testers ausgedruckt. Und was es mit der Schleife, dem Überspringen, der Auswahl und dem Brute-Forcing auf sich hat, ist nicht klar. Können Sie sich ein Bild davon machen, was Sie als Ergebnis haben wollen?


Ich möchte nur den einfachsten Roboter schreiben. Es funktioniert von selbst.

Genau hier liegt der Fehler.

y = OrderOpenPrice()-Ask;

Ich bekomme keine ganzzahligen Zahlen, wie ich dachte. Aber zum Beispiel 0,0044. Wie bekomme ich 44, eine ganze Zahl?

 
Zolotai:


Ich möchte nur den einfachsten Roboter schreiben. Es funktioniert von selbst.

Genau hier liegt der Fehler.

y = OrderOpenPrice()-Ask;

Ich bekomme keine ganzzahligen Zahlen, wie ich dachte. Aber zum Beispiel 0,0044. Wie bekomme ich 44, eine ganze Zahl?



int y = int((OrderOpenPrice()-Ask)/Point);