Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1420

 
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.

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:


public:
bool              OnSetClrButtonMA(void);

---------------

bool CControlsDialog::OnSetClrButtonMA(void)
  {
   if(CL>MA)
      m_button_MA.ColorBackground(colBtn_Pos);
   else
      m_button_MA.ColorBackground(colBtn_Neg);
     return(true);
  }

void OnTick{
................

	 OnSetClrButtonMA();

}

Gibt es ein Beispiel, wo dies im Code implementiert ist? Ich habe es nicht in der Bibliothek gefunden.

Документация по MQL5: Стандартная библиотека / Панели и диалоги / CButton / OnSetColorBackground
Документация по MQL5: Стандартная библиотека / Панели и диалоги / CButton / OnSetColorBackground
  • www.mql5.com
OnSetColorBackground - CButton - Панели и диалоги - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

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.

//+------------------------------------------------------------------+
//|                                                    Modify SL.mq5 |
//|                                                                  |
//+------------------------------------------------------------------+
#property description "Скрипт"
#property script_show_inputs
input  int Magic_Number = 0;
input double Price_of_New_Stop_Loss = 0.0;
//--------------------------------------------------------------------
MqlTick tick;
MqlTradeRequest request;
MqlTradeResult result;
MqlTradeCheckResult check;
MqlDateTime tm;
//--------------------------------------------------------------------
void OnStart()
{  
   double Position_SL;
   ulong  Position_Magic = 0;
   for(int i=0; i<PositionsTotal(); i++)
   {
      if(_Symbol == PositionGetSymbol(i))
      {
         Position_Magic = PositionGetInteger(POSITION_MAGIC);
         if(Position_Magic == Magic_Number)
         {
            ZeroMemory(request);
            ZeroMemory(result);
            request.position = PositionGetInteger(POSITION_TICKET);
            Position_SL = PositionGetDouble(POSITION_SL);

            if (Position_SL != Price_of_New_Stop_Loss)
            {
               request.action = TRADE_ACTION_SLTP;
               request.sl = NormalizeDouble(Price_of_New_Stop_Loss,_Digits);
               Print(TimeToString(TimeCurrent()), " Modify ", request.position,
                     " with Position_Magic ", IntegerToString(Position_Magic));
               Print("  SL ", DoubleToString(Position_SL,_Digits),
                     " -> ", DoubleToString(request.sl,_Digits));
               if(!OrderSend(request,result)) Print("error ",GetLastError());
            }
         }
      }  
   }
   //--- cycle until the script is not halted
   while(!IsStopped()) Comment("Сделано");
   Comment("");
}
// End OnStart()
//+------------------------------------------------------------------+
 
Transslator #:

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

         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.


https://www.mql5.com/ru/docs/constants/structures/mqltraderequest

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Структура торгового запроса - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
2022.08.31 13:15:39.943 2012.01.08 23:24:00   failed market sell 0.2 EURJPY [Market closed]
Können Sie mir sagen, wie ich überprüfen kann, ob der Markt nicht geschlossen ist?
 
Vladimir Deryagin #:

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:

//+------------------------------------------------------------------+
//|                                                 Modify SL TP.mq5 |
//|                                                                  |
//+------------------------------------------------------------------+
#property description "Скрипт"
#property script_show_inputs
input  int Magic_Number = 0;
input double Price_of_New_Take_Profit = 0.0;
input double Price_of_New_Stop_Loss = 0.0;
//--------------------------------------------------------------------
//--- объявление запроса и результата
//MqlTick tick;
MqlTradeRequest request;
MqlTradeResult result;
//MqlTradeCheckResult check;
//MqlDateTime tm;
//--------------------------------------------------------------------
void OnStart()
{  
//   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:


 
Transslator #:

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?
 
Sergey Gridnev #:
Wie hoch ist der Ask-Preis in diesem Moment?
Die Position ist zum Preis von 0,85098 eröffnet. Die gleiche Geschichte auf andere Paare, und in verschiedenen Abständen zu dem Anschlag.
 
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.