Hier muss die Normalisierung in einer anderen Reihenfolge angewendet werden.
1. Da die Werte vom Typ SymbolInfoDouble(Currency,SYMBOL_BID) vom Server kommen, werden sie bereits als normalisiert betrachtet. Und es ist nicht nötig, sie ein zweites Mal zu normalisieren. Das heißt, Sie können sie einfach schreiben:
2. aber nach jeder arithmetischen Operation ist die Normalisierung verschwunden, wenn Sie also eine normalisierte Zahl benötigen, sollten Sie sie so schreiben:
DR 0 Core 1 10:21:49 2012.10.01 01:12:43 start_sel=5.000000000010552e-005 DE 0 Core 1 10:21:49 2012.10.01 01 01:12:43 start_sel=7.0000000145e-005
Natürlich interessiert nur das sel - woher kommen solche Zahlen?
7,00000000000145e-005 ist nur eine Möglichkeit, den Wert einer reellen Zahl zu schreiben. Ich glaube, man nennt es "wissenschaftlich". Für weitere Einzelheiten siehe."MQL5 Referenzhandbuch / Grundlagen der Sprache / Datentypen / Reelle Typen (double, float)".
Yedelkin: 7,00000000000145e-005 ist nur eine der Möglichkeiten, den Wert einer reellen Zahl zu schreiben. Ich glaube, man nennt es "wissenschaftlich". Für weitere Einzelheiten siehe."MQL5 Referenzhandbuch / Grundlagen der Sprache / Datentypen / Reelle Typen (double, float)".
Yedelkin,
Danke, dass Sie das Problem angegangen sind.
Die Funktionen zum Öffnen der Position wurden von Nikolay Kositsin geschrieben.
Bitte geben Sie an, wie und wo im EA der zum Fenster Nr. 2 gehörende MA anzugeben ist. Ich habe zum Beispiel einen MA zu MFI hinzugefügt und möchte diesen MA in meinem EA registrieren. Ich weiß nicht, wo und wie ich es machen soll.
mario065: Hier ist der Code. Die Funktionen zur Eröffnung der Stelle wurden von Nikolay Kositsin geschrieben. Nikolai Kositsin.
1. Ich würde Folgendes sagen: Verwenden Sie den Code eines anderen mit großer Sorgfalt. Denn der Code von jemand anderem bedeutet auch die Fehler von jemand anderem.
2. Hier(https://www.mql5.com/ru/forum/6343/page64#comment_357008) habe ich vorgeschlagen, dass Sie versuchen sollten, Variablen vor ihrer Verwendung korrekt auf Null zu setzen. Aber Ihr Code hat diesen Vorschlag noch nicht umgesetzt. Außerdem enthält Ihr Code Konstrukte des folgenden Typs:
//+------------------------------------------------------------------+//| Modify position. |//+------------------------------------------------------------------+bool ModifyPosition(conststring symbol,double StopLoss,double Takeprofit)
{
//---- обявяване на структурата и резултата на търговското исканеMqlTradeRequest request;
MqlTradeResult result;
//---- структурна инициализация на търговското искане MqlTradeRequest за модифициране на позиция
request.action = ...
request.symbol = ...
request.sl = ...
request.tp = ...
...
//---- модифицираме позицията и проверяваме резултата от търговското исканеif(!OrderSend(request,result) || result.deal==0)
{
...
}
ZeroMemory(request);
ZeroMemory(result);
return(true);
}
In diesem Konstrukt werden die Anfrage- und Ergebnisvariablen nicht vor, sondern nach ihrer Verwendung auf Null gesetzt. Wenn diese lokalen Variablen auf Null gesetzt werden, funktioniert die Funktion nicht mehr, d. h. die Nullsetzung selbst ist sinnlos. Mit anderen Worten: Eine solche Konstruktion ist ein gutes Beispiel dafür, dass die Variablen MqlTradeRequest und MqlTradeResultnicht auf Null gesetzt werden sollten. Wenn Sie also eifrig sind, versuchen Sie bitte, die Variablen korrekt zu löschen. Wenn etwas nicht funktioniert, beschreiben Sie bitte genau, was "nicht funktioniert".
3. Die Standardbibliothek verfügt über eine Handelsklasse"MQL5 Reference / Standard Library / Trade Classes / CTrade". Versuchen Sie herauszufinden, wie Sie es in der Praxis anwenden können. In der Anfangsphase des Eintauchens in die Sprache kann dieser Unterricht völlig ausreichend sein. Diese Klasse hat zum Beispiel die folgende Methode:"MQL5 Referenz / Standardbibliothek / Handelsklassen / 2CTrade/ PositionModify". Es wird wie folgt umgesetzt:
//+------------------------------------------------------------------+//| Modify specified opened position |//+------------------------------------------------------------------+bool CTrade::PositionModify(conststring symbol,constdouble sl,constdouble tp)
{
//--- check stoppedif(IsStopped(__FUNCTION__)) return(false);
//--- clean
ClearStructures();
//--- setting request
m_request.action=TRADE_ACTION_SLTP;
m_request.symbol=symbol;
m_request.magic =m_magic;
m_request.sl =sl;
m_request.tp =tp;
//--- action and return the resultreturn(OrderSend(m_request,m_result));
}
Die Zeile 'ClearStructures();' löscht die Variable m_request , bevor sie verwendet wird.
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.
Gumko:
Er steht jetzt schon seit zwei Tagen.
Hallo zusammen.
Modifikation und Probleme.
Externe Funktion:
bool ModifyPosition(const string symbol,double StopLoss,double Takeprofit){
//---- verbindliche Struktur und Handelsergebnisse
MqlTradeRequest-Anfrage;
MqlTradeResult Ergebnis;
//---- Strukturinitialisierung der Geschäftssuche MqlTradeRequest für Positionsänderung
request.action = TRADE_ACTION_SLTP;
request.symbol = symbol;
request.sl = StopLoss;
request.tp = Takeprofit;
string word = "";
StringConcatenate(Wort,
"<< ============ Modifyposition(): Ändern Sie die Position ",
Symbol," ============ >>>");
Print(word);
//---- Position ändern und die Ergebnisse der Handelssuche überprüfen
if(!OrderSend(request,result)|| result.deal==0)
{
Print("Änderungsfehler =", GetLastError();
return(false);
}
return(true);
}
Aber so funktioniert es nicht.
Was ist zu tun?
Vielen Dank :)
Versuchen Sie es auf diese Weise:
Versuchen Sie es auf diese Weise:
Yedelkin,
Danke, es hat nicht funktioniert.
Ich habe überprüft, ob der Beginn des Funktionsaufrufs korrekt gezählt wird.
Ich habe es folgendermaßen gemacht:
double Bid = NormalizeDouble(SymbolInfoDouble(Währung,SYMBOL_BID),_Digits);
double Ask = NormalizeDouble(SymbolInfoDouble(Währung,SYMBOL_ASK),_Digits);
double Open = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),_Digits);
double SL = NormalizeDouble(PositionGetDouble(POSITION_SL),_Digits);
if(Offen > 0){
start_buy = Ask - Open; Print("start_buy=",start_buy);
start_sel = Open - Bid;Print("start_sel=",start_sel);
}
Überraschung im Logbuch:
MR 0 Core 1 10:21:49 2012.10.01 10:12:42 deal #2 sell 0.10 EURUSD at 1.28146 done (based on order #2)
GH 0 Core 1 10:21:49 2012.10.01 01 01:12:42 deal performed [#2 sell 0.10 EURUSD at 1.28146]
NI 0 Core 1 10:21:49 2012.10.01 01 01:12:42 Auftrag ausgeführt sell 0.10 at 1.28146 [#2 sell 0.10 EURUSD at 1.28146 (0.00000)
OF 0 Kern 1 10:21:49 2012.10.01 01 01:12:43 start_buy=0.0001299999999999635
DR 0 Core 1 10:21:49 2012.10.01 01:12:43 start_sel=5.000000000010552e-005
LE 0 Core 1 10:21:49 2012.10.01 01 01:12:43 start_buy=0.0001099999999998325
DE 0 Kern 1 10:21:49 2012.10.01 01:12:43 start_sel=7.00000000000145e-005
Natürlich habe ich mich gerade gefragt, woher die Zahlen kommen?
Ich denke, ich habe die Funktion wie gezeigt richtig geschrieben:
SL- und TP-Änderung
Handelsauftrag zur Änderung von StopLoss- und/oder TakeProfit-Niveaus. Benötigt 4 Felder:
Was genau ist also "fehlgeschlagen"?
Fügen Sie den Code korrektein (Strg+Alt+M):
Hier muss die Normalisierung in einer anderen Reihenfolge angewendet werden.
1. Da die Werte vom Typ SymbolInfoDouble(Currency,SYMBOL_BID) vom Server kommen, werden sie bereits als normalisiert betrachtet. Und es ist nicht nötig, sie ein zweites Mal zu normalisieren. Das heißt, Sie können sie einfach schreiben:
2. aber nach jeder arithmetischen Operation ist die Normalisierung verschwunden, wenn Sie also eine normalisierte Zahl benötigen, sollten Sie sie so schreiben:
Über den Rest denke ich noch nach.
DR 0 Core 1 10:21:49 2012.10.01 01:12:43 start_sel=5.000000000010552e-005
DE 0 Core 1 10:21:49 2012.10.01 01 01:12:43 start_sel=7.0000000145e-005
Natürlich interessiert nur das sel - woher kommen solche Zahlen?
7,00000000000145e-005 ist nur eine der Möglichkeiten, den Wert einer reellen Zahl zu schreiben. Ich glaube, man nennt es "wissenschaftlich". Für weitere Einzelheiten siehe."MQL5 Referenzhandbuch / Grundlagen der Sprache / Datentypen / Reelle Typen (double, float)".
Yedelkin,
Danke, dass Sie das Problem angegangen sind.
Die Funktionen zum Öffnen der Position wurden von Nikolay Kositsin geschrieben.
Ich habe zum Beispiel einen MA zu MFI hinzugefügt und möchte diesen MA in meinem EA registrieren. Ich weiß nicht, wo und wie ich es machen soll.
Vielen Dank für Ihre Antwort)
1. Ich würde Folgendes sagen: Verwenden Sie den Code eines anderen mit großer Sorgfalt. Denn der Code von jemand anderem bedeutet auch die Fehler von jemand anderem.
2. Hier(https://www.mql5.com/ru/forum/6343/page64#comment_357008) habe ich vorgeschlagen, dass Sie versuchen sollten, Variablen vor ihrer Verwendung korrekt auf Null zu setzen. Aber Ihr Code hat diesen Vorschlag noch nicht umgesetzt. Außerdem enthält Ihr Code Konstrukte des folgenden Typs:
In diesem Konstrukt werden die Anfrage- und Ergebnisvariablen nicht vor, sondern nach ihrer Verwendung auf Null gesetzt. Wenn diese lokalen Variablen auf Null gesetzt werden, funktioniert die Funktion nicht mehr, d. h. die Nullsetzung selbst ist sinnlos. Mit anderen Worten: Eine solche Konstruktion ist ein gutes Beispiel dafür, dass die Variablen MqlTradeRequest und MqlTradeResult nicht auf Null gesetzt werden sollten. Wenn Sie also eifrig sind, versuchen Sie bitte, die Variablen korrekt zu löschen. Wenn etwas nicht funktioniert, beschreiben Sie bitte genau, was "nicht funktioniert".
3. Die Standardbibliothek verfügt über eine Handelsklasse"MQL5 Reference / Standard Library / Trade Classes / CTrade". Versuchen Sie herauszufinden, wie Sie es in der Praxis anwenden können. In der Anfangsphase des Eintauchens in die Sprache kann dieser Unterricht völlig ausreichend sein. Diese Klasse hat zum Beispiel die folgende Methode:"MQL5 Referenz / Standardbibliothek / Handelsklassen / 2CTrade/ PositionModify". Es wird wie folgt umgesetzt:
Die Zeile 'ClearStructures();' löscht die Variable m_request , bevor sie verwendet wird.