Die von Kim zuletzt veröffentlichte Funktion GetPotentialLossInCurrency (https://forum.mql4.com/ru/11287/page107) berücksichtigt nur offene Aufträge:
Ich habe versucht, sie ein wenig zu erweitern, indem ich schwebende Aufträge einbezog (indem ich einfach andere Typen hinzufügte): aber schwebende Aufträge werden nicht berücksichtigt. Werden sie unterschiedlich gezählt? Die Dokumentation sagt nichts darüber aus....
Bei schwebenden Aufträgen gibt es keinen "potenziellen Totalverlust der offenen Positionen in der Einzahlungswährung".
Die Funktion GetPotentialLossInCurrency() gibt den gesamten potenziellen Verlust der offenen Positionen in der Depotwährung zurück.
Er bezieht sich auf Positionen auf dem Markt. Drücken Sie F1 auf diese Marktfunktionen, lesen Sie die Informationen sorgfältig durch:
tv=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
if (OrderType()==OP_BUY) {
pl+=(OrderOpenPrice()-OrderStopLoss())/po*OrderLots()*tv;
}
if (OrderType()==OP_SELL) {
pl+=(OrderStopLoss()-OrderOpenPrice())/po*OrderLots()*tv;
}
pl+=OrderCommission()+OrderSwap();
Frage an die Programmierer: auf einem neuen bar, der Expert Advisor prüft, ob die Bestellung auf Euro ist lebendig (zum Beispiel), wenn nicht - es macht ein neues Geschäft, wenn ja - es lässt alles, wie es ist. setzen eine solche Bedingung:
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:int Tip=OrderType(); // Тип ордераif(OrderSymbol()!="EURUSD"||Tip>1){continue;}else{// Не наш ордерRefreshRates();
double point5 =MarketInfo("EURUSD", MODE_POINT);//Запрос Pointdouble bid5 =MarketInfo("EURUSD", MODE_BID); // Запрос значения Biddouble ask5 =MarketInfo("EURUSD", MODE_ASK); // Запрос значения Askdouble SL5 = NormalizeDouble(bid5+(Stop*point5), MarketInfo("EURUSD", MODE_DIGITS));
double TP5 = NormalizeDouble(bid5-(Profit*point5), MarketInfo("EURUSD", MODE_DIGITS));
double SL5v = NormalizeDouble(bid5-(Stop*point5), MarketInfo("EURUSD", MODE_DIGITS));
double TP5v = NormalizeDouble(bid5+(Profit*point5), MarketInfo("EURUSD", MODE_DIGITS));
if ((iVolume("EURUSD",Period(),4)) > (iVolume("EURUSD",Period(),1))) {
ticket=OrderSend("EURUSD",OP_SELL,lot_EUR,bid5,Slip,0,0);// Открытие SellOrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),SL5,TP5 ,0,CLR_NONE);
{Alert (GetLastError());} // Сообщение об ошибке
}else{ticket=OrderSend("EURUSD",OP_BUY,lot_EUR,ask5,Slip,0,0); // Открытие BUYOrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),SL5v,TP5v ,0,CLR_NONE);
{ Alert (GetLastError());} // Сообщение об ошибке
}}
} // Конец анализа орд.
} // Конец перебора орд.
Aber der Code funktioniert nicht. Wo liegt der Fehler?
Hier ist eine Frage an die Programmierer: Bei einem neuen Balken prüft der EA, ob die EUR-Order noch gültig ist (wenn nicht, eröffnet er ein neues Geschäft, wenn ja, lässt er alles so, wie es ist). Ich habe eine solche Bedingung gestellt:
Aber der Code funktioniert nicht. Wo liegt der Fehler?
Was passiert, wenn es ein Dutzend Bestellungen gibt und Ihre die siebte ist (zum Beispiel)?
Die Idee dahinter ist, dass Sie, wenn Sie eine Reihe von Aufträgen für ein Paar eröffnen, alle sich überschneidenden Aufträge in einer Bewegung schließen können.
was passiert, wenn es ein Dutzend Bestellungen gibt und Ihre die siebte ist (zum Beispiel)
Prüfen Sie das erste - es ist nicht unseres.
Überprüfen Sie das zweite, es ist nicht unseres.
...
Prüfen Sie die siebte - unsere
Prüfen Sie die achte, es ist nicht unsere, setzen Sie die Reihenfolge
...
Für dieses Paar gibt es nur einen offenen Auftrag. Ich prüfe nur für das angegebene EURUSD-Symbol, aber ich muss die Bedingung nicht richtig eingestellt haben
Wenn Sie nur 1 Symbol in einem Expert Advisor haben, können Sie sich einfach dessen Ticket merken und es jedes Mal überprüfen, ohne alle Aufträge durchgehen zu müssen
ilunga: Wenn Sie nur 1 in Ihrem EA haben, können Sie sich einfach sein Ticket merken und jedes Mal überprüfen, ob es geschlossen ist oder nicht, ohne alle Aufträge durchzugehen
Vielen Dank für die Empfehlung, ich habe es fast herausgefunden, ich weiß nur nicht mehr, ob die Bestellung ausgelöst wird, dann nimmt das Ticket den Wert -10?
Bei schwebenden Aufträgen gibt es keinen "potenziellen Totalverlust der offenen Positionen in der Währung der Einlage".
Die Funktion GetPotentialLossInCurrency() gibt den gesamten potenziellen Verlust der offenen Positionen in der Depotwährung zurück.
Er bezieht sich auf Positionen auf dem Markt. Drücken Sie F1 auf diese Marktfunktionen, lesen Sie die Informationen sorgfältig durch:
Ich verstehe sehr gut, dass sich die Funktion GetPotentialLossInCurrency() auf offene Positionen bezieht. Ich habe eine Frage: Warum können schwebende Aufträge nicht ebenfalls berücksichtigt werden?
Die Dokumentation:
doubleOrderOpenPrice( )
Возвращает цену открытия для выбранного ордера.
Ордер должен быть предварительно выбран с помощью функции OrderSelect().
doubleOrderStopLoss( )
Возвращает значение цены закрытия позиции при достижении уровня убыточности (stop loss) для текущего выбранного ордера.
Ордер должен быть предварительно выбран с помощью функции OrderSelect().
Nirgendwo steht, dass OrderOpenPrice und/oder OrderStopLoss nur für offene Aufträge gelten.
Vielen Dank für die Empfehlung, ich habe es fast herausgefunden, kann mich nur nicht erinnern, ob der Auftrag ausgelöst wird, nimmt das Ticket einen Wert von -10?
Die von Kim zuletzt veröffentlichte Funktion GetPotentialLossInCurrency (https://forum.mql4.com/ru/11287/page107) berücksichtigt nur offene Aufträge:
Ich habe versucht, sie ein wenig zu erweitern, indem ich schwebende Aufträge einbezog (indem ich einfach andere Typen hinzufügte): aber schwebende Aufträge werden nicht berücksichtigt. Werden sie unterschiedlich gezählt? Die Dokumentation sagt nichts darüber aus....Bei schwebenden Aufträgen gibt es keinen "potenziellen Totalverlust der offenen Positionen in der Einzahlungswährung".
Die Funktion GetPotentialLossInCurrency() gibt den gesamten potenziellen Verlust der offenen Positionen in der Depotwährung zurück.
Er bezieht sich auf Positionen auf dem Markt. Drücken Sie F1 auf diese Marktfunktionen, lesen Sie die Informationen sorgfältig durch:
Beischwebenden Aufträgen gibt es keinen "potenziellen Totalverlust der offenen Positionen in der Einzahlungswährung".
Die Funktion GetPotentialLossInCurrency() gibt den gesamten potenziellen Verlust der offenen Positionen in der Depotwährung zurück.
Es geht um Positionen auf dem Markt. Drücken Sie F1 auf diese Marktfunktionen, lesen Sie die Informationen sorgfältig durch:
Frage an die Programmierer:
auf einem neuen bar, der Expert Advisor prüft, ob die Bestellung auf Euro ist lebendig (zum Beispiel), wenn nicht - es macht ein neues Geschäft, wenn ja - es lässt alles, wie es ist.
setzen eine solche Bedingung:
Aber der Code funktioniert nicht. Wo liegt der Fehler?
Hier ist eine Frage an die Programmierer:
Bei einem neuen Balken prüft der EA, ob die EUR-Order noch gültig ist (wenn nicht, eröffnet er ein neues Geschäft, wenn ja, lässt er alles so, wie es ist).
Ich habe eine solche Bedingung gestellt:
Aber der Code funktioniert nicht. Wo liegt der Fehler?
Was passiert, wenn es ein Dutzend Bestellungen gibt und Ihre die siebte ist (zum Beispiel)?
Prüfen Sie das erste - es ist nicht unseres.
Überprüfen Sie das zweite, es ist nicht unseres.
...
Prüfen Sie die siebte - unsere
Prüfen Sie das achte, es ist nicht unseres.
...
Die Idee dahinter ist, dass Sie, wenn Sie eine Reihe von Aufträgen für ein Paar eröffnen, alle sich überschneidenden Aufträge in einer Bewegung schließen können.
Auftrag ändern/löschen--->Typ---->Überlappende Aufträge schließen
Er löscht sich überschneidende Aufträge... Gibt es eine solche Funktion in MQL?
Ups, gefunden:https://forum.mql4.com/ru/4822
was passiert, wenn es ein Dutzend Bestellungen gibt und Ihre die siebte ist (zum Beispiel)
Prüfen Sie das erste - es ist nicht unseres.
Überprüfen Sie das zweite, es ist nicht unseres.
...
Prüfen Sie die siebte - unsere
Prüfen Sie die achte, es ist nicht unsere, setzen Sie die Reihenfolge
...
Für dieses Paar gibt es nur einen offenen Auftrag. Ich prüfe nur für das angegebene EURUSD-Symbol, aber ich muss die Bedingung nicht richtig eingestellt haben
if(OrderSymbol()!="EURUSD"||Tip>1){Fortfahren;}else{
wir brauchen if(OrderSymbol()= Symbol("EURUSD"){
Es gibt nur einen offenen Auftrag für dieses Paar. Ich prüfe nur für das angegebene EURUSD-Symbol, aber ich muss die Bedingung falsch gesetzt haben
if(OrderSymbol()!="EURUSD"||Tip>1){Fortfahren;}else{
muss if(OrderSymbol()= Symbol("EURUSD"){
Wenn Sie nur 1 in Ihrem EA haben, können Sie sich einfach sein Ticket merken und jedes Mal überprüfen, ob es geschlossen ist oder nicht, ohne alle Aufträge durchzugehen
Vielen Dank für die Empfehlung, ich habe es fast herausgefunden, ich weiß nur nicht mehr, ob die Bestellung ausgelöst wird, dann nimmt das Ticket den Wert -10?
Bei schwebenden Aufträgen gibt es keinen "potenziellen Totalverlust der offenen Positionen in der Währung der Einlage".
Die Funktion GetPotentialLossInCurrency() gibt den gesamten potenziellen Verlust der offenen Positionen in der Depotwährung zurück.
Er bezieht sich auf Positionen auf dem Markt. Drücken Sie F1 auf diese Marktfunktionen, lesen Sie die Informationen sorgfältig durch:
Ich verstehe sehr gut, dass sich die Funktion GetPotentialLossInCurrency() auf offene Positionen bezieht. Ich habe eine Frage: Warum können schwebende Aufträge nicht ebenfalls berücksichtigt werden?
Die Dokumentation:
Nirgendwo steht, dass OrderOpenPrice und/oder OrderStopLoss nur für offene Aufträge gelten.
Vielen Dank für die Empfehlung, ich habe es fast herausgefunden, kann mich nur nicht erinnern, ob der Auftrag ausgelöst wird, nimmt das Ticket einen Wert von -10?