初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1464

 
Artyom Trishkin #:

写入所有终端的共同文件夹。一个终端写入,其他终端读取并创建图表。这只是一个粗略的概括。

这一点很清楚,但在 vindex 中,当文件用于修改时,即在写入时读取访问被关闭,如果 CPU 的负载很大,时间可能很长,就应该以某种方式加以考虑。

在 word360 或 google 的一般访问和一般编辑中,队列问题已经解决。 输入不是写入,自动保存和手动保存。而且还有一个队列。

因此,是的,当然,Commons 文件夹不在沙盒中,而是在沙盒外。

 
SuhanovDM94 创建一个指标,从共享内存中读取一个包含 USDTRY 报价的文件,然后计算点差,并在这个 "单一 "图表上将其绘制为一条规则的线。我还没想出更好的办法。谢谢大家的建议!)

阅读: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 в виде сервера, клиента, обмен данными между ними и замер производительности.
 
非常感谢
 

下午好!

您能告诉我为什么需要前向测试吗?

这不就相当于在一个完整的区间内进行简单的优化吗?
 

下午好,程序员们!请帮助我编写一个脚本。我需要脚本在图表上为一系列日期绘制大量垂直线。例如:我在代码正文中输入一个包含 100 个日期的列表,然后脚本就会为每个日期绘制一条垂直线。

我开始在这里做一些尝试,但不知何故,结果非常麻烦,而且只有一条线。

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

下午好,程序员们!请帮助我编写一个脚本。我需要脚本在图表上为一系列日期绘制大量垂直线。例如:我在代码正文中输入一个包含 100 个日期的列表,然后脚本就会为每个日期绘制一条垂直线。

我开始在这里做一些尝试,但不知何故,结果非常麻烦,而且只有一条线。

通过分隔符在字符串中输入日期。

然后将字符串分割成数组。

然后通过调用

VLineCreate
 

谢谢。因为我是一个非常肤浅的程序员。我就按顺序问吧

"把日期放在带分隔符的字符串中"。

使用 "string TimeToString( ""

????

 
Alexey Belyakov TimeToString( ""

????

你不需要把任何东西转换成字符串来画线。

你描述了问题,但描述得并不完整,所以人们必须自己去想办法。

你打算如何记录 100 个日期?

是写在脚本的正文中?

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

还是在启动智能交易系统时手动输入?

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

你不需要把任何东西转换成字符串来画线。

你已经描述了任务,但描述得并不完整,所以人们只能猜测。

你打算如何记录 100 个日期?

是写在剧本正文中吗?

还是在启动智能交易系统时手动输入?

我查过了。第二种情况很好,但并不合适,因为需要在窗口中手动输入每个日期,非常耗时。应该很简单...... "ctrl-c,ctrl-v"。

在第一种情况下,由于某种原因,它不会在最近的蜡烛上画三条线,而只画一条线。 原因尚不清楚,我正在研究。

原因: