Questions des débutants MQL5 MT5 MetaTrader 5 - page 1420

 
Rustam Ayupov trailing stop loss dans le terminal de trading MT5. Je trade manuellement, avec le réglage du trailing stop et lorsque j'ai fait connaissance avec le terminal de trading MetaQuotes, sur compte démo, mon système de trading, rodé depuis longtemps avec d'autres brokers, s'est mis à fermer des trades de manière indépendante.... dans un ordre aléatoire, sans aucune régularité. J'ai déjà passé en revue les paramètres, imaginant les sauts de cotation, lorsque le serveur de trading est paresseux. Attendre en embuscade, attendre une telle fermeture non programmée du trailing stoploss, ne fonctionne pas non plus, la bête était plus rusée que moi) Si quelqu'un parmi les traders plus expérimentés, cela est familier, éclairez s'il vous plaît ? Ou suggérer ce que cela pourrait être ? Il n'y a pas beaucoup de courtiers avec MT5, et le système lui-même n'est tout simplement pas comparable à MT4, je veux maîtriser le terminal de trading MT5 et ce courtier. MERCI .

3. interdire les DLL et supprimer tous les indicateurs et conseillers que vous ne comprenez pas.

2. dans l'armoire personnelle DC, se déconnecter de tous les groupes, signaux, consultants, et tout ce qui est similaire.

1. changer les mots de passe de vos comptes de trading

 

Quelle est la bonne façon d'utiliser OnSetColorBackground pour un objet CButton ? J'ai besoin de colorer le bouton à partir de OnTick en fonction des conditions. Aucun clic sur le bouton n'est attendu.

Je déclare et utilise la fonction "colouring" comme suit :


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();

}

Existe-t-il un exemple où cette fonction est implémentée dans le code ? Je ne l'ai pas trouvé dans la bibliothèque.

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

Bonjour !

Pouvez-vous me dire pourquoi le script de modification du stop loss ne fonctionne pas et donne l'erreur 4756 ?

En même temps, le même script pour changer le take profit fonctionne bien.

//+------------------------------------------------------------------+
//|                                                    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 #:

Bonjour !

Pouvez-vous me dire pourquoi le script de modification du stop loss ne fonctionne pas et donne l'erreur 4756 ?

En même temps, le même script pour changer le take profit fonctionne bien.

Il y a un bon exemple sur ce sujet dans le manuel

         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 позиции

Structure d'une demande de transaction

Modification SL & TP

Ordre de transaction pour la modification des niveaux de StopLoss et/ou TakeProfit. Il faut spécifier 4 champs :

  • action
  • symbole
  • sl
  • tp
  • position

Lors de la modification ou de la clôture d'une position dans le système de couverture, il faut veiller à spécifier son ticket (MqlTradeRequest::position). Dans le système de compensation, le ticket peut également être spécifié, mais la position est identifiée par le nom du symbole.


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]
Pouvez-vous me dire comment vérifier que le marché n'est pas fermé ?
 
Vladimir Deryagin #:

Le manuel contient un bon exemple à ce sujet

Lors de la modification ou de la clôture d'une position dans un système de couverture, il faut veiller à spécifier son ticket (MqlTradeRequest::position). Dans le système de compensation, le ticket peut également être spécifié, mais la position est identifiée par le nom du symbole.


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

Merci pour votre réponse !

J'ai retravaillé le script comme suit :

//+------------------------------------------------------------------+
//|                                                 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()
//+------------------------------------------------------------------+

Le take profit change bien. Mais lorsque l'on essaie de modifier le stop loss avec une valeur explicitement définie, l'erreur 4756 est générée, et dans le journal c'est :


 
Transslator #:

Le take profit change parfaitement. Mais lorsque l'on essaie de modifier le stop loss avec une valeur explicitement définie, l'erreur 4756 est générée, et dans le journal c'est :


Quel est le prix d'achat en ce moment ?
 
Sergey Gridnev #:
Quel est le prix demandé en ce moment ?
La position est ouverte au prix de 0.85098. La même histoire sur d'autres paires, et à différentes distances du stop.
 
Transslator #:
La position a été ouverte au prix de 0,85098. Il en va de même pour d'autres paires, et à différentes distances du stop.
Le prix auquel la position est ouverte n'a pas d'importance, c'est le prix au moment de la modification du stop qui est important. Pour une position de vente, il s'agit du cours vendeur.
 
Sergey Gridnev #:
Le prix auquel la position est ouverte n'a pas d'importance, c'est le prix au moment de la modification du stop qui compte. Pour une position de vente, il s'agit du cours vendeur.
C'est le forex, le prix actuel change constamment, mais il est évidemment très éloigné du stop placé.