Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1464

 
Artyom Trishkin #:

Escreva em uma pasta comum de todos os terminais. Um escreve, os outros leem e criam um gráfico. Essa é uma generalização grosseira.

É claro, mas no vindex, quando um arquivo é usado para modificação, ou seja, no momento da gravação, o acesso à leitura é fechado e, se a carga na CPU for grande, pode ser longa, isso deve ser levado em conta de alguma forma.

Quando no word360 ou no acesso geral do google e na edição geral, o problema com a fila é resolvido. Digitar não é escrever, salvar automaticamente e salvar manualmente. E há uma fila.

E assim, sim, é claro, a pasta Commons não está na área restrita, está fora.

 
SuhanovDM94 criarei um indicador que lerá um arquivo com cotações USDTRY da memória compartilhada, calculará o spread e o desenhará nesse gráfico "único" como uma linha regular. Ainda não pensei em nada melhor. Obrigado a todos pelas dicas).

Leia: 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 também: https://www.mql5.com/ru/articles/503
Muito obrigado!
 

Boa tarde!

Você poderia me dizer por que o teste avançado é necessário?

Ele não é equivalente à otimização simples em um intervalo completo?
 

Boa tarde, programadores! Por favor, me ajudem com um script. Preciso que o script desenhe uma infinidade de linhas verticais no gráfico para uma lista de datas. Ou seja, por exemplo: eu insiro no corpo do código uma lista de 100 datas, por exemplo, e o script desenha apenas uma linha vertical para cada data.

Comecei a tentar algo aqui, mas, de alguma forma, isso acaba sendo muito complicado, e é apenas uma linha.

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

Boa tarde, programadores! Por favor, me ajudem com um script. Preciso que o script desenhe uma infinidade de linhas verticais no gráfico para uma lista de datas. Ou seja, por exemplo: eu insiro no corpo do código uma lista de 100 datas, por exemplo, e o script desenha apenas uma linha vertical para cada data.

Comecei a tentar algo aqui, mas, de alguma forma, isso acaba sendo muito complicado, e é apenas uma linha.

A data na string por meio do separador.

Em seguida, divida essa string em uma matriz.

Em seguida, faça um loop pela matriz a cada iteração, chamando

VLineCreate
 

Obrigado. Como sou um programador muito superficial. Vou começar a perguntar na ordem.

"Coloque a data em uma cadeia de caracteres com um delimitador."

Use " string TimeToString( ""

????

 
Alexey Belyakov TimeToString( ""

????

Não é necessário converter nada em string para desenhar uma linha.

Você descreveu o problema, mas não o descreveu completamente, então as pessoas terão que descobrir.

Como você vai registrar 100 datas?

Você vai escrevê-las no corpo do 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 você as digitará manualmente ao iniciar o 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 #:

Não é necessário converter nada em string para desenhar uma linha.

Você descreveu a tarefa, mas não a descreveu completamente, então as pessoas têm que adivinhar.

Como você vai registrar 100 datas?

Você vai escrevê-las no corpo do script?

ou vai inseri-las manualmente ao iniciar o Expert Advisor?

Eu verifiquei. O segundo caso é bom, mas não é adequado devido à necessidade de inserir cada data na janela manualmente, o que consome muito tempo. Deveria ser simples... "ctrl-c, ctrl-v".

No primeiro caso, por algum motivo, ele não desenha três linhas, mas apenas uma, no candle mais recente. Ainda não está claro o motivo, mas estou investigando.

Razão: