Addieren Sie, erhalten Sie die Kauf-Sommer 3 Lose und kontern Sie dieses Volumen mit Verkauf 3 Lose.
.......................
Als Option, ja. Wenn jedoch bereits offene Verkaufsaufträge vorliegen, schließt der EA möglicherweise nicht die von Ihnen benötigten Aufträge. Das Problem sollte gelöst werden.
Aber um Ihre Frage zu beantworten: Ist es möglich, alle Positionen zu schließen?
ja, eins nach dem anderen, es ist ein schnelles Skript, aap! und das war's...
.........................
Das ist es, was ich jetzt benutze. Eine Reihe von Skripten - Sie verwenden dieses und jenes... Ich habe jedoch versucht, meine Strategie in Expert Advisor zu kodieren und bin dabei auf eine Reihe von Schwierigkeiten gestoßen.
gince >> : Ich habe etwas, das nicht funktioniert hier, es bedeutet, dass es nicht schließen keine Fehler.
In der Funktion ClosePositions(), seiner Bibliothek b-Positions.mqh, verwendet KimIV einen Aufruf seiner anderen Funktion ClosePosBySelect(), die die Verwendung von ee im Tester verbietet:
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
Für Geschichtstests verwenden Sie seine Bibliothek b-ForTest.mqh
In der Funktion ClosePositions(), seiner Bibliothek b-Positions.mqh, verwendet KimIV einen Aufruf seiner anderen Funktion ClosePosBySelect(), die die Verwendung von ee im Tester verbietet:
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
Für Geschichtstests verwenden Sie seine Bibliothek b-ForTest.mqh
Sie haben meinen Code missverstanden... Übersetzen ins Russische... Wenn NICHT Testmodus UND (EA darf NICHT handeln ODER der Expert Advisor wird gestoppt), dann Schleife abbrechen. Einfach ausgedrückt, sorgt diese Zeile dafür, dass die Schleife verlassen wird, wenn Sie die Schaltfläche "Expert Advisors" in der Symbolleiste drücken.
Leider gibt es auch eine Diskrepanz mit dem Array... Wenn die Auftragszählung mit einer Bedingung durchgeführt wird, wenn die Lose größer als 0 sind (Lts>0), werden die Lose einzeln geschlossen (wenn der Gewinn erreicht ist), aber der Gesamtgewinn sollte berücksichtigt werden:
int Tip;// Тип ордераint Ticket=0,// Номер ордера
Tkt;// Количество номеров ордеровdouble Lot=0,// Количество закр. лотов
Lts;// Количество лотов всегоdouble Price_Cls;// Цена закрытия ордераint Errors;//--------------------------------------------------------------- 3 --for(int mm=1; mm<= Mas_Ord_Tek[0][0]; mm++)// Цикл по живым ордерам{if( Mas_Ord_Tek[ mm][6]== Tip &&// Среди ордеров нашего типа
Mas_Ord_Tek[ mm][5]> Lot &&// .. выбираем лоты
Mas_Ord_Tek[ mm][4]> Ticket)// .. выбираем номер ордера{// Этот больше ранее найден.
Lts= Mas_Ord_Tek[ mm][5]+ Lot;
Tkt= Mas_Ord_Tek[ mm][4]+ Ticket;}}if( Tip==0) Price_Cls=Bid;// Для ордеров Buyif( Tip==1) Price_Cls=Ask;// Для ордеров Sellif( BuyOrdProf>100&& Lts>0)
Ans=OrderClose( Tkt, Lts, Price_Cls,0,Red);// Закрыть все ордера
Und bei der Bedingung in der Auftragszählung, wenn die Lose mehr als 1 sind (Lts>1), werden die Lose nicht geschlossen:
int Tip;// Тип ордераint Ticket=0,// Номер ордера
Tkt;// Количество номеров ордеровdouble Lot=0,// Количество закр. лотов
Lts;// Количество лотов всегоdouble Price_Cls;// Цена закрытия ордераint Errors;//--------------------------------------------------------------- 3 --for(int mm=1; mm<= Mas_Ord_Tek[0][0]; mm++)// Цикл по живым ордерам{if( Mas_Ord_Tek[ mm][6]== Tip &&// Среди ордеров нашего типа
Mas_Ord_Tek[ mm][5]> Lot &&// .. выбираем лоты
Mas_Ord_Tek[ mm][4]> Ticket)// .. выбираем номер ордера{// Этот больше ранее найден.
Lts= Mas_Ord_Tek[ mm][5]+ Lot;
Tkt= Mas_Ord_Tek[ mm][4]+ Ticket;}}if( Tip==0) Price_Cls=Bid;// Для ордеров Buyif( Tip==1) Price_Cls=Ask;// Для ордеров Sellif( BuyOrdProf>100&& Lts>1)
Ans=OrderClose( Tkt, Lts, Price_Cls,0,Red);// Закрыть все ордера
Bitte teilen Sie mit, wer den Fehler sehen kann.
Oder vielleicht, Igor, habe ich ein Missverständnis bei der Verwendung Ihrer Funktion?
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает суммарный профит открытых позиций в валюте депозита |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+double GetProfitOpenPosInCurrency(string sy="",int op=-1,int mn=-1){double p=0;int i, k=OrdersTotal();if( sy=="0") sy=Symbol();for( i=0; i< k; i++){if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES)){if((OrderSymbol()== sy || sy=="")&&( op<0||OrderType()== op)){if(OrderType()==OP_BUY||OrderType()==OP_SELL){if( mn<0||OrderMagicNumber()== mn){
p+=OrderProfit()+OrderCommission()+OrderSwap();}}}}}return( p);}
Ich implementiere die Logik der Handelssignalbildung in einem Indikator und sende das generierte Signal über eine globale Variable an den Expert Advisor, um Aufträge zu öffnen/zu schließen.
Ich benötige den Eröffnungskurs eines Auftrags, um einige Entscheidungen zu treffen, also versuche ich, das zu tun. Mein Indikator ist ein dynamischer Indikator und kann nur im Demomodus oder im Visualisierungsmodus eines Testers getestet werden.
Angela, der Compiler hat nicht erwartet, meine Funktionsdefinition an dieser Stelle zu finden. Das bedeutet, dass irgendwo weiter oben im Code etwas fehlt. Vielleicht ein Semikolon oder eine schließende geschweifte Klammer. Prüfen Sie den Code auf jeden Fall sorgfältig.
Falsche Parameterübergabe an die Funktion. Das sollte so sein:
Das Hinzufügen einer Bindung an das Symbol im Funktionsaufruf ist nicht hilfreich. Warum wird der Gewinn für jede Position separat gezählt (Bild oben)?
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
kombat 17.07.2009 22:13
Addieren Sie, erhalten Sie die Kauf-Sommer 3 Lose und kontern Sie dieses Volumen mit Verkauf 3 Lose.
.......................
Als Option, ja. Wenn jedoch bereits offene Verkaufsaufträge vorliegen, schließt der EA möglicherweise nicht die von Ihnen benötigten Aufträge. Das Problem sollte gelöst werden.
kombat 17.07.2009 22:13.
Aber um Ihre Frage zu beantworten: Ist es möglich, alle Positionen zu schließen?
ja, eins nach dem anderen, es ist ein schnelles Skript, aap! und das war's...
.........................
Das ist es, was ich jetzt benutze. Eine Reihe von Skripten - Sie verwenden dieses und jenes... Ich habe jedoch versucht, meine Strategie in Expert Advisor zu kodieren und bin dabei auf eine Reihe von Schwierigkeiten gestoßen.
Ich habe etwas, das nicht funktioniert hier, es bedeutet, dass es nicht schließen keine Fehler.
In der Funktion ClosePositions(), seiner Bibliothek b-Positions.mqh, verwendet KimIV einen Aufruf seiner anderen Funktion ClosePosBySelect(), die die Verwendung von ee im Tester verbietet:
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
Für Geschichtstests verwenden Sie seine Bibliothek b-ForTest.mqh
In der Funktion ClosePositions(), seiner Bibliothek b-Positions.mqh, verwendet KimIV einen Aufruf seiner anderen Funktion ClosePosBySelect(), die die Verwendung von ee im Tester verbietet:
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
Für Geschichtstests verwenden Sie seine Bibliothek b-ForTest.mqh
Sie haben meinen Code missverstanden... Übersetzen ins Russische... Wenn NICHT Testmodus UND (EA darf NICHT handeln ODER der Expert Advisor wird gestoppt), dann Schleife abbrechen. Einfach ausgedrückt, sorgt diese Zeile dafür, dass die Schleife verlassen wird, wenn Sie die Schaltfläche "Expert Advisors" in der Symbolleiste drücken.
Guten Abend,
Leider gibt es auch eine Diskrepanz mit dem Array... Wenn die Auftragszählung mit einer Bedingung durchgeführt wird, wenn die Lose größer als 0 sind (Lts>0), werden die Lose einzeln geschlossen (wenn der Gewinn erreicht ist), aber der Gesamtgewinn sollte berücksichtigt werden:
Und bei der Bedingung in der Auftragszählung, wenn die Lose mehr als 1 sind (Lts>1), werden die Lose nicht geschlossen:
Bitte teilen Sie mit, wer den Fehler sehen kann.
Oder vielleicht, Igor, habe ich ein Missverständnis bei der Verwendung Ihrer Funktion?
BuyOrdProf=GetProfitOpenBuyPosInCurrency(OP_BUY); // Funktion aufrufen
Igor, bitte sagen Sie mir, wie ich Ihre Funktion PriceOpenLastPos in den Indikator einfügen kann.
Beim Kompilieren gibt der Editor einen Fehler bei der ersten Klammer und den nachfolgenden Variablen aus.
double PriceOpenLastPos( string sy="", int op=-1, int mn=-1) {
datetime t;
double r=0;
int k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy==") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderOpenTime()) {
t=OrderOpenTime();
r=OrderOpenPrice();
}
}
}
}
}
}
}
return(r);
}
}
'(' - Funktionsdefinition unerwartet D:\MT4\experts\indicators\Astrea.mq4 (627, 24)
'sy' - Variable nicht definiert D:\MT4\experts\indicators\Astrea.mq4 (632, 7)
usw.
Ich implementiere die Logik der Handelssignalbildung in einem Indikator und sende das generierte Signal über eine globale Variable an den Expert Advisor, um Aufträge zu öffnen/zu schließen.
Ich benötige den Eröffnungskurs eines Auftrags, um einige Entscheidungen zu treffen, also versuche ich, das zu tun. Mein Indikator ist ein dynamischer Indikator und kann nur im Demomodus oder im Visualisierungsmodus eines Testers getestet werden.
Dabei wird nicht der Gesamtgewinn berücksichtigt, sondern der Gewinn der einzelnen Aufträge.
BuyOrdProf=GetProfitOpenBuyPosInCurrency(OP_BUY); // Funktionsaufruf
Falsche Parameterübergabe an die Funktion. Das sollte so sein:
BuyOrdProf=GetProfitOpenBuyPosInCurrency("", OP_BUY);Falsche Parameterübergabe an die Funktion. Das sollte so sein:
Das Hinzufügen einer Bindung an das Symbol im Funktionsaufruf ist nicht hilfreich. Warum wird der Gewinn für jede Position separat gezählt (Bild oben)?