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

 

Je suppose que si la barre actuelle a un indice avec sa propre heure, alors cette combinaison ne changera jamais.
Ou est-il possible qu'à la suite de la pagination de l'historique, cet index soit attribué à une barre historique, et que la barre actuelle obtienne un nouvel index, plus grand du nombre de barres paginées ?

En d'autres termes :
est-il correct de comprendre que la barre actuelle ne devient disponible (indice, prix et temps) qu'après un échange d'historique complet et que ses paramètres ne changent jamais par la suite ?

 

Veuillez me dire comment obtenir le nombre de lignes dans une table MySQL.

//--- Выставленные позиции
struct PositionFib
  {
   int               ID;            // Индификатор
   int               ur;            // Уровень
   int               per;           // Период
   int               type;          // Тип ордера
   double            price;         // Цена Открытия
   double            priceTP;       // Цена Профита
   double            priceSL;       // Цена Стопа
   double            lot;           // Лот
   datetime          time;          // Время
   string            key;           // Ключ
  } position_buff[];
//--- заблокируем базу данных перед выполнением транзакций
   DatabaseTransactionBegin(database);
   int request=DatabasePrepare(database, "SELECT COUNT(*) FROM POSITION");
   DatabaseReadBind(request, person)
   id=person.ID;
  

Renvoie une erreur

Obtenir le dernier ID

Essayez aussi ceci, mais vous ne pouvez pas obtenir le nombre de lignes.

 int request=DatabasePrepare(database, "SELECT COUNT(*) FROM POSITION");
   id= DatabaseRead(request);
 

Qu'est-ce qui ne va pas, pourquoi je n'arrive pas à obtenir une valeur de la requête ?

//--- открываем/создаем базу данных в общей папке терминалов
   int database=DatabaseOpen(filename+".sqlite", DATABASE_OPEN_READWRITE | DATABASE_OPEN_CREATE | DATABASE_OPEN_COMMON);
   if(database==INVALID_HANDLE)
     {
      Print("SaveStats: ", filename, " открываем/создаем базу данных в общей папке терминалов ", GetLastError());
      return;
     }

//--- заблокируем базу данных перед выполнением транзакций
   DatabaseTransactionBegin(database);
   int request=DatabasePrepare(database, "SELECT COUNT(*) FROM POSITION");
   int id= DatabaseRead(request);

Si je vérifie la requête par rapport à la base de données, elle renvoie ce qui suit



Droit

 int id= DatabaseRead(request);

Database est un bool , et id est int


Comment faire sortir le résultat de la requête ?


Ça a marché. J'ai créé une classe sql supplémentaire.

//--- заблокируем базу данных перед выполнением транзакций
   DatabaseTransactionBegin(database);
   int request=DatabasePrepare(database, "SELECT COUNT(*) FROM POSITION");
   DatabaseReadBind(request,sql);
 

Plusieurs secondes s'écoulent entre le déchargement de l'indicateur et l'appel à DeInit.

Pourquoi y a-t-il une pause et peut-on l'éviter ?

 
Un ordre s'ouvre à chaque tick. Comment faire pour qu'un seul ordre s'ouvre ?

J'utilise ce bloc, extrait de la documentation (à la fois tp et sl).

//+------------------------------------------------------------------+

void Open_order_BUY()

  {

    double bid = SymbolInfoDouble(Symbol(),SYMBOL_BID),

      ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);

    //--- объявление и инициализация запроса и результата

   MqlTradeRequest request={};

   MqlTradeResult  result={};

//--- параметры запроса

   request.action   =TRADE_ACTION_DEAL;                     // тип торговой операции

   request.symbol   =Symbol();                              // символ

   request.volume   =0.01;                                   // объем в 0.1 лот

   request.type     =ORDER_TYPE_BUY;                        // тип ордера

   request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // цена для открытия

   request.sl       =bid-SL*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // SL

   request.tp       =ask+TP*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // TP

   request.deviation=5;                                     // допустимое отклонение от цены

   request.magic    =EXPERT_MAGIC;                          // MagicNumber ордера

//--- отправка запроса

   if(!OrderSend(request,result))

       PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки

//--- информация об операции

   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

  }

  

//+------------------------------------------------------------------+ 

void Open_order_SELL()

  {

  

    double bid = SymbolInfoDouble(Symbol(),SYMBOL_BID),

      ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);

//--- объявление и инициализация запроса и результата

   MqlTradeRequest request={};

   MqlTradeResult  result={};

//--- параметры запроса

   request.action   =TRADE_ACTION_DEAL;                     // тип торговой операции

   request.symbol   =Symbol();                              // символ

   request.volume   =0.01;                                   // объем в 0.2 лот

   request.type     =ORDER_TYPE_SELL;                       // тип ордера

   request.price    =SymbolInfoDouble(Symbol(),SYMBOL_BID); // цена для открытия

   request.sl       =ask+SL*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // SL

   request.tp       =bid-TP*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // TP

   request.deviation=5;                                     // допустимое отклонение от цены

   request.magic    =EXPERT_MAGIC;                          // MagicNumber ордера

//--- отправка запроса

   if(!OrderSend(request,result))

      PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки

//--- информация об операции

   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

  }


 
Ivan Butko #:
Un ordre s'ouvre à chaque tick. Comment puis-je faire en sorte qu'un seul ordre soit ouvert ?

J'utilise ce bloc, extrait de la documentation (à la fois tp et sl).

//+------------------------------------------------------------------+

void Open_order_BUY()

  {

    double bid = SymbolInfoDouble(Symbol(),SYMBOL_BID),

      ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);

    //--- объявление и инициализация запроса и результата

   MqlTradeRequest request={};

   MqlTradeResult  result={};

//--- параметры запроса

   request.action   =TRADE_ACTION_DEAL;                     // тип торговой операции

   request.symbol   =Symbol();                              // символ

   request.volume   =0.01;                                   // объем в 0.1 лот

   request.type     =ORDER_TYPE_BUY;                        // тип ордера

   request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // цена для открытия

   request.sl       =bid-SL*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // SL

   request.tp       =ask+TP*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // TP

   request.deviation=5;                                     // допустимое отклонение от цены

   request.magic    =EXPERT_MAGIC;                          // MagicNumber ордера

//--- отправка запроса

   if(!OrderSend(request,result))

       PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки

//--- информация об операции

   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

  }

  

//+------------------------------------------------------------------+ 

void Open_order_SELL()

  {

  

    double bid = SymbolInfoDouble(Symbol(),SYMBOL_BID),

      ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);

//--- объявление и инициализация запроса и результата

   MqlTradeRequest request={};

   MqlTradeResult  result={};

//--- параметры запроса

   request.action   =TRADE_ACTION_DEAL;                     // тип торговой операции

   request.symbol   =Symbol();                              // символ

   request.volume   =0.01;                                   // объем в 0.2 лот

   request.type     =ORDER_TYPE_SELL;                       // тип ордера

   request.price    =SymbolInfoDouble(Symbol(),SYMBOL_BID); // цена для открытия

   request.sl       =ask+SL*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // SL

   request.tp       =bid-TP*SymbolInfoDouble(Symbol(),SYMBOL_POINT);                                   // TP

   request.deviation=5;                                     // допустимое отклонение от цены

   request.magic    =EXPERT_MAGIC;                          // MagicNumber ордера

//--- отправка запроса

   if(!OrderSend(request,result))

      PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки

//--- информация об операции

   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

  }


Résolu.

 

Comment puis-je prolonger la ligne vers la droite ? Plus loin que la barre actuelle.

Il existe des coordonnées de temps et de prix. Le prix est clair, mais comment définir le temps (j'ai essayé iTime(Symbol(), PERIOD_CURRENT, 0), mais son index est zéro).

 
Ivan Butko #:

Comment puis-je prolonger la ligne vers la droite ? Plus loin que la barre actuelle.

Il existe des coordonnées de temps et de prix. Je comprends le prix, mais comment définir le temps (j'ai essayé iTime(Symbol(), PERIOD_CURRENT, 0), mais son index est zéro)

iTime(Symbol(), PERIOD_CURRENT, 0) + PeriodSeconds()*5 // 5 баров
 

Bon après-midi.

Voici une question :

J'écris un indicateur qui dessine des zones avec le style de dessin DRAW_FILLING. Il y a plusieurs autres indicateurs, dont beaucoup de muwings, sur le graphique en plus de la zone dessinée. Lorsqu'une zone est dessinée, les lignes des autres indicateurs changent brusquement de couleur.

La question : peut-on dessiner les zones dans MT5 de telle manière que leur couleur ne se chevauche pas et ne modifie pas les couleurs des lignes des autres indicateurs ?

P.S. J'ai creusé toutes les propriétés des tampons indicateurs (méthodes comme PlotIndexSetInteger), il n'y a rien de similaire.

P.S2. Vous trouverez ci-joint une capture d'écran de MT5.

Dossiers :
u68ufb.PNG  49 kb
 
satorifx #:

Bon après-midi.

Voici une question :

J'écris un indicateur qui dessine des zones avec le style de dessin DRAW_FILLING. Il y a plusieurs autres indicateurs, dont beaucoup de muwings, sur le graphique en plus de la zone dessinée. Lorsqu'une zone est dessinée, les lignes des autres indicateurs changent brusquement de couleur.

La question : peut-on dessiner les zones dans MT5 de telle manière que leur couleur ne se chevauche pas et ne modifie pas les couleurs des lignes des autres indicateurs ?

P.S. J'ai creusé toutes les propriétés des tampons indicateurs (méthodes comme PlotIndexSetInteger), il n'y a rien de similaire.

P.S2. Voici une capture d'écran de MT5.

Tout dépend de la séquence de chevauchement, celui qui est le dernier est en haut.

Définir d'abord le tampon avecDRAW_FILLING