Rustam Ayupov Trailing-Stop-Verluste im MT5-Handelsterminal überrascht. Ich handele manuell, mit Trailing-Stop-Einstellung, und als ich mich mit dem MetaQuotes-Handelsterminal auf dem Demokonto vertraut machte, begann mein Handelssystem, das seit langem mit anderen Brokern ausgearbeitet wurde, unabhängig voneinander zu schließen .... alle in zufälliger Reihenfolge, ohne Regelmäßigkeit. Ich bin bereits die Parameter durchgegangen und habe mir die Kurssprünge vorgestellt, wenn der Handelsserver träge ist. Warten im Hinterhalt, warten auf eine solche ungeplante Schließung der Trailing-Stoploss, auch nicht funktioniert, das Tier war schlauer als ich) Wenn jemand von mehr erfahrenen Händlern, ist dies vertraut, erleuchten bitte? Oder einen Vorschlag, woran es liegen könnte? Es gibt nicht so viele Broker mit MT5, und das System selbst ist einfach nicht vergleichbar mit MT4, ich möchte das MT5-Handelsterminal und diesen Broker beherrschen. DANKE .
3. Verbieten Sie DLL und löschen Sie alle Indikatoren und Berater, die Sie nicht verstehen.
2. im persönlichen Kabinett DC, trennen Sie sich von allen Gruppen, Signalen, Beratern, und alles ähnliche.
Was ist der richtige Weg, um OnSetColorBackground für ein CButton-Objekt zu verwenden? Ich muss die Schaltfläche von OnTick abhängig von den Bedingungen einfärben. Es wird kein Klick auf die Schaltfläche erwartet.
Ich deklariere und verwende die Funktion "Färbung" wie folgt:
Können Sie mir sagen, warum das Skript zum Ändern des Stop Loss nicht funktioniert und den Fehler 4756 ausgibt?
Zur gleichen Zeit, das gleiche Skript für die Änderung Take Profit funktioniert gut.
Im Handbuch gibt es ein gutes Beispiel zu diesem Thema
request.action =TRADE_ACTION_SLTP; // тип торговой операции
request.position=position_ticket; // тикет позиции
request.symbol=position_symbol; // символ
request.sl =sl; // Stop Loss позиции
request.tp =tp; // Take Profit позиции
request.magic=EXPERT_MAGIC; // MagicNumber позиции
Struktur eines Handelsauftrags
SL- & TP-Änderung
Handelsauftrag zur Änderung von StopLoss- und/oder TakeProfit-Levels. Erfordert die Angabe von 4 Feldern:
Aktion
Symbol
sl
tp
Position
Wenn Sie eine Position im Hedging-System ändern oder schließen, müssen Sie unbedingt das Ticket (MqlTradeRequest::position) angeben. Im Netting-System kann das Ticket ebenfalls angegeben werden, aber die Position wird durch den Symbolnamen identifiziert.
Структура торгового запроса - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Das Handbuch enthält ein gutes Beispiel zu diesem Thema
Wenn Sie eine Position in einem Hedging-System ändern oder schließen, müssen Sie unbedingt das Ticket (MqlTradeRequest::position) angeben. Im Netting-System kann das Ticket ebenfalls angegeben werden, aber die Position wird durch den Symbolnamen identifiziert.
//+------------------------------------------------------------------+//| Modify SL TP.mq5 |//| |//+------------------------------------------------------------------+#property description"Скрипт"#property script_show_inputsinputint Magic_Number = 0;
inputdouble Price_of_New_Take_Profit = 0.0;
inputdouble Price_of_New_Stop_Loss = 0.0;
//--------------------------------------------------------------------//--- объявление запроса и результата//MqlTick tick;MqlTradeRequest request;
MqlTradeResult result;
//MqlTradeCheckResult check;//MqlDateTime tm;//--------------------------------------------------------------------voidOnStart()
{
// double Position_SL,Position_TP;// ulong Position_Magic = 0;//--- перебор всех открытых позицийfor(int i=0; i<PositionsTotal(); i++)
{
if(_Symbol == PositionGetSymbol(i))
{
//--- параметры ордераulong Position_Ticket = PositionGetTicket(i);// тикет позицииstring Position_Symbol = PositionGetString(POSITION_SYMBOL); // символ int Symbol_Digits = (int)SymbolInfoInteger(Position_Symbol,SYMBOL_DIGITS); // количество знаков после запятойulong Position_Magic = PositionGetInteger(POSITION_MAGIC); // MagicNumber позицииdouble Position_Volume = PositionGetDouble(POSITION_VOLUME); // объем позицииdouble Position_SL = PositionGetDouble(POSITION_SL); // Stop Loss позицииdouble Position_TP = PositionGetDouble(POSITION_TP); // Take Profit позицииENUM_POSITION_TYPE Position_Type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); // тип позици if(Position_Magic == Magic_Number)
{
if (Position_SL != Price_of_New_Stop_Loss || Position_TP != Price_of_New_Take_Profit)
{
//--- обнуление значений запроса и результатаZeroMemory(request);
ZeroMemory(result);
//--- установка параметров операции
request.action = TRADE_ACTION_SLTP; // тип торговой операции
request.position = Position_Ticket; // тикет позиции
request.symbol = Position_Symbol; // символ
request.sl = NormalizeDouble(Price_of_New_Stop_Loss,_Digits); // Stop Loss позиции
request.tp = NormalizeDouble(Price_of_New_Take_Profit,_Digits); // Take Profit позиции
request.magic = Position_Magic; // MagicNumber позиции//--- вывод информации о модификацииPrint(TimeToString(TimeCurrent()), " Modify ", request.position,
" with Position_Magic ", IntegerToString(Position_Magic));
Print(" SL ", DoubleToString(Position_SL,_Digits), " -> ", DoubleToString(request.sl,_Digits),
"; TP ", DoubleToString(Position_TP,_Digits), " -> ", request.tp);
//--- отправка запроса и вывод информации об ошибке, если отправить запрос не удалосьif(!OrderSend(request,result)) PrintFormat("OrderSend error %d",GetLastError());
//--- информация об операции PrintFormat("retcode=%u deal=%I64u order=%I64u", result.retcode, result.deal, result.order);
}
}
}
}
//--- Цикл, пока скрипт не будет прерванwhile(!IsStopped()) Comment("Сделано");
Comment("");
}
// End OnStart()//+------------------------------------------------------------------+
Take Profit ändert sich problemlos. Aber beim Versuch, den Stop-Loss mit einem explizit festgelegten Wert zu ändern, wird der Fehler 4756 generiert, und im Protokoll steht es:
Der Take Profit ändert sich perfekt. Aber wenn Sie versuchen, den Stop-Loss mit einem explizit festgelegten Wert zu ändern, wird der Fehler 4756 generiert, und im Protokoll steht es:
Transslator #: Die Position wurde bei einem Kurs von 0,85098 eröffnet. Das Gleiche gilt für andere Paare und für unterschiedliche Abstände zum Stopp.
Es spielt keine Rolle, zu welchem Kurs die Position eröffnet wurde, wichtig ist der Kurs zum Zeitpunkt der Stoppänderung. Bei einer Verkaufsposition ist dies der Ask-Kurs.
Sergey Gridnev #: Es spielt keine Rolle, zu welchem Kurs die Position eröffnet wird, entscheidend ist der Kurs zum Zeitpunkt der Stoppänderung. Bei einer Verkaufsposition ist dies der Briefkurs.
Im Forex-Handel ändert sich der aktuelle Kurs ständig, aber er ist offensichtlich weit von dem zu platzierenden Stop entfernt.
3. Verbieten Sie DLL und löschen Sie alle Indikatoren und Berater, die Sie nicht verstehen.
2. im persönlichen Kabinett DC, trennen Sie sich von allen Gruppen, Signalen, Beratern, und alles ähnliche.
1. Ändern Sie die Passwörter Ihrer Handelskonten
Was ist der richtige Weg, um OnSetColorBackground für ein CButton-Objekt zu verwenden? Ich muss die Schaltfläche von OnTick abhängig von den Bedingungen einfärben. Es wird kein Klick auf die Schaltfläche erwartet.
Ich deklariere und verwende die Funktion "Färbung" wie folgt:
Gibt es ein Beispiel, wo dies im Code implementiert ist? Ich habe es nicht in der Bibliothek gefunden.
Hallo!
Können Sie mir sagen, warum das Skript zum Ändern des Stop Loss nicht funktioniert und den Fehler 4756 ausgibt?
Zur gleichen Zeit, das gleiche Skript für die Änderung Take Profit funktioniert gut.
Hallo!
Können Sie mir sagen, warum das Skript zum Ändern des Stop Loss nicht funktioniert und den Fehler 4756 ausgibt?
Zur gleichen Zeit, das gleiche Skript für die Änderung Take Profit funktioniert gut.
Im Handbuch gibt es ein gutes Beispiel zu diesem Thema
Struktur eines Handelsauftrags
SL- & TP-Änderung
Handelsauftrag zur Änderung von StopLoss- und/oder TakeProfit-Levels. Erfordert die Angabe von 4 Feldern:
Wenn Sie eine Position im Hedging-System ändern oder schließen, müssen Sie unbedingt das Ticket (MqlTradeRequest::position) angeben. Im Netting-System kann das Ticket ebenfalls angegeben werden, aber die Position wird durch den Symbolnamen identifiziert.
https://www.mql5.com/ru/docs/constants/structures/mqltraderequest
Das Handbuch enthält ein gutes Beispiel zu diesem Thema
Wenn Sie eine Position in einem Hedging-System ändern oder schließen, müssen Sie unbedingt das Ticket (MqlTradeRequest::position) angeben. Im Netting-System kann das Ticket ebenfalls angegeben werden, aber die Position wird durch den Symbolnamen identifiziert.
https://www.mql5.com/ru/docs/constants/structures/mqltraderequest
Vielen Dank für die Antwort!
Habe das Skript wie folgt umgestaltet:
Take Profit ändert sich problemlos. Aber beim Versuch, den Stop-Loss mit einem explizit festgelegten Wert zu ändern, wird der Fehler 4756 generiert, und im Protokoll steht es:
Der Take Profit ändert sich perfekt. Aber wenn Sie versuchen, den Stop-Loss mit einem explizit festgelegten Wert zu ändern, wird der Fehler 4756 generiert, und im Protokoll steht es:
Wie hoch ist der Ask-Preis in diesem Moment?
Die Position wurde bei einem Kurs von 0,85098 eröffnet. Das Gleiche gilt für andere Paare und für unterschiedliche Abstände zum Stopp.
Es spielt keine Rolle, zu welchem Kurs die Position eröffnet wird, entscheidend ist der Kurs zum Zeitpunkt der Stoppänderung. Bei einer Verkaufsposition ist dies der Briefkurs.