Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
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.