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

 
Artyom Trishkin #:

Écrire dans un dossier commun à tous les terminaux. L'un écrit, les autres lisent et créent un graphique. Il s'agit d'une généralisation grossière.

C'est clair, mais dans vindex quand un fichier est utilisé pour la modification, c'est-à-dire au moment de l'écriture l'accès à la lecture est fermé, et si la charge sur le CPU est importante, elle peut être longue, cela devrait être pris en compte d'une manière ou d'une autre.

Dans word360 ou google general access et general editing, le problème de la file d'attente est résolu : taper n'est pas écrire, sauvegarder automatiquement et manuellement. Et il y a une file d'attente.

Et donc, oui, bien sûr, le dossier Commons n'est pas dans le bac à sable, il est à l'extérieur.

 
SuhanovDM94 créerai un indicateur qui lira un fichier avec les cotations USDTRY depuis la mémoire partagée, puis calculera le spread et le dessinera sur ce graphique "unique" sous la forme d'une ligne régulière. Je n'ai pas encore trouvé mieux. Merci à tous pour vos conseils)

Lire : https://www.mql5.com/ru/articles/115

Реализация взаимодействия между клиентскими терминалами MetaTrader 5 при помощи именованных каналов (Named Pipes)
Реализация взаимодействия между клиентскими терминалами MetaTrader 5 при помощи именованных каналов (Named Pipes)
  • www.mql5.com
Данная статья знакомит с реализацией межпроцессного взаимодействия между терминалами MetaTrader 5 посредством именованных каналов (named pipes). Предложен класс CNamedPipes, реализующий возможность использования именованных каналов. Рассмотрен тиковый индикатор для тестирования связи между двумя клиентскими терминалами MetaTrader 5 и измерения общей пропускной способности системы. Представленный метод взаимодействия оказался пригодным для отправки котировок в реальном времени.
 
Связь с MetaTrader 5 через именованные каналы без применения DLL
Связь с MetaTrader 5 через именованные каналы без применения DLL
  • www.mql5.com
Перед многими разработчиками встает одинаковая проблема - как пробиться в песочницу торгового терминала без применения небезопасных DLL. Одним из простых и безопасных методов является использование стандартных именованных каналов (Named Pipes), которые работают как обычные файловые операции. Они позволяют организовать межпроцессорное клиент-серверное взаимодействие между программами. Посмотрите практические примеры на C++ и MQL5 в виде сервера, клиента, обмен данными между ними и замер производительности.
 
Artyom Trishkin #:
Et aussi : https://www.mql5.com/ru/articles/503
Nous vous remercions de votre attention.
 

Bonjour !

Pourriez-vous m'expliquer pourquoi il est nécessaire d'effectuer des tests à l'avance ?

N'est-ce pas l'équivalent d'une simple optimisation sur un intervalle complet ?
 

Bonjour, chers programmeurs ! Merci de m'aider avec un script. J'ai besoin que le script dessine une multitude de lignes verticales sur le graphique pour une liste de dates. C'est-à-dire, par exemple : je saisis dans le corps du code, une liste de 100 dates par exemple, et le script dessine simplement une ligne verticale pour chaque date.

J'ai commencé à essayer quelque chose ici, mais d'une manière ou d'une autre, cela s'avère très lourd, et il ne s'agit que d'une seule ligne.

#property strict
//--- описание
#property description "Скрипт строит графический объект \"Вертикальная линия\"."
#property description "Дата точки привязки задается в процентах от ширины"
#property description "окна графика в барах."
//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
//--- входные параметры скрипта
input string          InpName="VLine";     // Имя линии
input int             InpDate=25;          // Дата линии в %
input color           InpColor=clrRed;     // Цвет линии
input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Стиль линии
input int             InpWidth=3;          // Толщина линии
input bool            InpBack=false;       // Линия на заднем плане
input bool            InpSelection=true;   // Выделить для перемещений
input bool            InpHidden=true;      // Скрыт в списке объектов
 
//+------------------------------------------------------------------+
//| Создает вертикальную линию                                       |
//+------------------------------------------------------------------+
bool VLineCreate(const long            chart_ID=0,        // ID графика
                 const string          name="VLine",      // имя линии
                 const int             sub_window=0,      // номер подокна
                 datetime              time=0,            // время линии
                 const color           clr=clrRed,        // цвет линии
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии
                 const int             width=1,           // толщина линии
                 const bool            back=false,        // на заднем плане
                 const bool            selection=true,    // выделить для перемещений
                 const bool            hidden=true)       // скрыт в списке объектов
           
  {
//--- если время линии не задано, то проводим ее через последний бар

      time=TimeCurrent();


 ObjectCreate(chart_ID,name,OBJ_VLINE,sub_window,time,0);
    
     
     
//--- установим цвет линии
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину линии
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим перемещения линии мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
 
   return(true);
  }
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
 

 
 datetime time=TimeCurrent();
      
//--- создадим вертикальную линию
VLineCreate(0,InpName,0,time,InpColor,InpStyle,InpWidth,InpBack,
      InpSelection,InpHidden);
      
return;
 }
 
Alexey Belyakov #:

Bonjour, chers programmeurs ! Merci de m'aider avec un script. J'ai besoin que le script dessine une multitude de lignes verticales sur le graphique pour une liste de dates. C'est-à-dire, par exemple : j'entre dans le corps du code, une liste de 100 dates par exemple, et le script dessine simplement une ligne verticale pour chaque date.

J'ai commencé à essayer quelque chose ici, mais d'une manière ou d'une autre, cela s'avère très lourd, et il ne s'agit que d'une seule ligne.

La date dans une chaîne de caractères à travers le séparateur.

Ensuite, on divise cette chaîne en un tableau.

Puis boucler le tableau à chaque itération en appelant

VLineCreate
 

Je vous remercie. Comme je suis un programmeur très superficiel, je vais commencer à poser des questions dans l'ordre. Je vais commencer par demander dans l'ordre.

"Mettre la date dans une chaîne de caractères avec un délimiteur".

Utiliser " string TimeToString( ""

? ???

 
Alexey Belyakov TimeToString( ""

? ???

Il n'est pas nécessaire de convertir quoi que ce soit en chaîne de caractères pour tracer une ligne.

Vous avez décrit le problème, mais vous ne l'avez pas décrit complètement, de sorte que les gens doivent le découvrir.

Comment allez-vous enregistrer 100 dates ?

Allez-vous les écrire dans le corps du script ?

datetime time1 = D'2021.11.15 00:00:00';
datetime time2 = D'2022.11.15 00:00:00';
datetime time3 = D'2023.11.15 00:00:00';
// в этом случае так делаем
VLineCreate(0, InpName, 0, time1, InpColor, InpStyle, InpWidth, InpBack, InpSelection, InpHidden);
VLineCreate(0, InpName, 0, time2, InpColor, InpStyle, InpWidth, InpBack, InpSelection, InpHidden);
VLineCreate(0, InpName, 0, time3, InpColor, InpStyle, InpWidth, InpBack, InpSelection, InpHidden);

Ou allez-vous les saisir manuellement lors du lancement de l'Expert Advisor ?

input datetime time1 = D'2021.11.15 00:00:00';
input datetime time2 = D'2022.11.15 00:00:00';
input datetime time3 = D'2023.11.15 00:00:00';
//в этом случае можно сделать так или без массива прописать функцию линии для каждой даты как написано выше
void OnStart(void)
  {
   datetime time[100];

   time[0] = time1;
   time[1] = time2;
   time[2] = time3;

   for(int i = 0; i < 3; i++)
      VLineCreate(0, "InpName" + (string)i, 0, time[i], InpColor, InpStyle, InpWidth, InpBack, InpSelection, InpHidden);
  }
 
Aleksandr Slavskii #:

Il n'est pas nécessaire de convertir quoi que ce soit en chaîne pour tracer une ligne.

Vous avez décrit la tâche, mais vous ne l'avez pas décrite complètement, de sorte que les gens doivent deviner.

Comment allez-vous enregistrer 100 dates ?

Allez-vous les écrire dans le corps du texte ?

ou allez-vous les saisir manuellement lors du lancement du conseiller expert ?

J'ai vérifié. Le deuxième cas est bon, mais il ne convient pas en raison de la nécessité de saisir manuellement chaque date dans la fenêtre, ce qui prend beaucoup de temps. Cela devrait être simple... "ctrl-c, ctrl-v".

Dans le premier cas, pour une raison quelconque, il ne dessine pas 3 lignes, mais une seule, sur la bougie la plus récente. La raison n'est pas encore claire, je suis en train de l'étudier.

Raison: