Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1464

 
Artyom Trishkin #:

Scrivere in una cartella comune a tutti i terminali. Uno scrive, gli altri leggono e creano un grafico. Si tratta di una generalizzazione approssimativa.

è chiaro, ma in vindex quando un file viene utilizzato per la modifica, cioè al momento della scrittura l'accesso alla lettura è chiuso, e se il carico sulla CPU è grande, può essere lungo, dovrebbe essere preso in considerazione in qualche modo.

Quando in word360 o google l'accesso generale e la modifica generale lì il problema con la coda è risolto. Digitare non è la scrittura, autosave e salvare manualmente. E c'è una coda.

E così, sì, certo, la cartella Commons non è nella sandbox, è fuori.

 
SuhanovDM94 creerò un indicatore che leggerà un file con le quotazioni di USDTRY dalla memoria condivisa, quindi calcolerà lo spread e lo disegnerà su questo "singolo" grafico come una linea regolare. Non ho ancora pensato a nulla di meglio. Grazie a tutti per i suggerimenti).

Leggi: 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 #:
E anche: https://www.mql5.com/ru/articles/503
Grazie mille!
 

Buon pomeriggio!

Potreste dirmi perché è necessario un test di avanzamento?

Non è equivalente alla semplice ottimizzazione su un intervallo completo?
 

Buon pomeriggio programmatori! Vi prego di aiutarmi con uno script. Ho bisogno che lo script disegni una moltitudine di linee verticali sul grafico per un elenco di date. Cioè, per esempio: inserisco nel corpo del codice un elenco di 100 date, per esempio, e lo script disegna solo una linea verticale per ogni data.

Ho iniziato a provare qualcosa qui, ma in qualche modo risulta essere molto macchinoso, e si tratta di una sola linea.

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

Buon pomeriggio programmatori! Vi prego di aiutarmi con uno script. Ho bisogno che lo script disegni una moltitudine di linee verticali sul grafico per un elenco di date. Cioè, per esempio: inserisco nel corpo del codice un elenco di 100 date, per esempio, e lo script disegna solo una linea verticale per ogni data.

Ho iniziato a provare qualcosa qui, ma in qualche modo risulta essere molto macchinoso, e si tratta di una sola linea.

La data in stringa attraverso il separatore.

Poi dividere questa stringa in un array.

Quindi eseguire un ciclo attraverso l'array a ogni iterazione chiamando

VLineCreate
 

Grazie. Dato che sono un programmatore molto superficiale. Inizio a chiedere in ordine sparso.

"Mettere la data in una stringa con un delimitatore".

Utilizzare " stringa TimeToString( ""

????

 
Alexey Belyakov TimeToString( ""

????

Non è necessario convertire qualcosa in stringa per disegnare una linea.

Avete descritto il problema, ma non l'avete descritto completamente, quindi gli altri devono capirlo.

Come si fa a registrare 100 date?

Le scriverete nel corpo dello 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);

Oppure le inserirai manualmente all'avvio dell'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 #:

Non è necessario convertire qualcosa in stringa per disegnare una linea.

Avete descritto il compito, ma non l'avete descritto completamente, quindi le persone devono tirare a indovinare.

Come farete a registrare 100 date?

Li scriverete nel corpo della sceneggiatura?

o le inserirai manualmente all'avvio dell'Expert Advisor?

Ho controllato. Il secondo caso è buono, ma non è adatto a causa della necessità di inserire manualmente ogni data nella finestra, il che richiede molto tempo. Dovrebbe essere semplice: "ctrl-c, ctrl-v".

Nel primo caso, per qualche motivo non vengono disegnate 3 linee, ma solo una, sulla candela più recente. Il motivo non è ancora chiaro, lo sto esaminando.

Motivazione: