Данная статья знакомит с реализацией межпроцессного взаимодействия между терминалами MetaTrader 5 посредством именованных каналов (named pipes). Предложен класс CNamedPipes, реализующий возможность использования именованных каналов. Рассмотрен тиковый индикатор для тестирования связи между двумя клиентскими терминалами MetaTrader 5 и измерения общей пропускной способности системы. Представленный метод взаимодействия оказался пригодным для отправки котировок в реальном времени.
Перед многими разработчиками встает одинаковая проблема - как пробиться в песочницу торгового терминала без применения небезопасных DLL. Одним из простых и безопасных методов является использование стандартных именованных каналов (Named Pipes), которые работают как обычные файловые операции. Они позволяют организовать межпроцессорное клиент-серверное взаимодействие между программами. Посмотрите практические примеры на C++ и MQL5 в виде сервера, клиента, обмен данными между ними и замер производительности.
#property strict//--- описание#property description"Скрипт строит графический объект \"Вертикальная линия\"."#property description"Дата точки привязки задается в процентах от ширины"#property description"окна графика в барах."//--- покажем окно входных параметров при запуске скрипта#property script_show_inputs//--- входные параметры скриптаinputstring InpName="VLine"; // Имя линииinputint InpDate=25; // Дата линии в %inputcolor InpColor=clrRed; // Цвет линииinputENUM_LINE_STYLE InpStyle=STYLE_DASH; // Стиль линииinputint InpWidth=3; // Толщина линииinputbool InpBack=false; // Линия на заднем планеinputbool InpSelection=true; // Выделить для перемещенийinputbool InpHidden=true; // Скрыт в списке объектов//+------------------------------------------------------------------+//| Создает вертикальную линию |//+------------------------------------------------------------------+bool VLineCreate(constlong chart_ID=0, // ID графикаconststring name="VLine", // имя линииconstint sub_window=0, // номер подокнаdatetime time=0, // время линииconstcolor clr=clrRed, // цвет линииconstENUM_LINE_STYLE style=STYLE_SOLID, // стиль линииconstint width=1, // толщина линииconstbool back=false, // на заднем планеconstbool selection=true, // выделить для перемещенийconstbool 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 |//+------------------------------------------------------------------+voidOnStart()
{
datetime time=TimeCurrent();
//--- создадим вертикальную линию
VLineCreate(0,InpName,0,time,InpColor,InpStyle,InpWidth,InpBack,
InpSelection,InpHidden);
return;
}
写入所有终端的共同文件夹。一个终端写入,其他终端读取并创建图表。这只是一个粗略的概括。
这一点很清楚,但在 vindex 中,当文件用于修改时,即在写入时读取访问被关闭,如果 CPU 的负载很大,时间可能很长,就应该以某种方式加以考虑。
在 word360 或 google 的一般访问和一般编辑中,队列问题已经解决。 输入不是写入,自动保存和手动保存。而且还有一个队列。
因此,是的,当然,Commons 文件夹不在沙盒中,而是在沙盒外。
阅读:https://www.mql5.com/ru/articles/115
还有: https://www.mql5.com/ru/articles/503
下午好!
您能告诉我为什么需要前向测试吗?
下午好,程序员们!请帮助我编写一个脚本。我需要脚本在图表上为一系列日期绘制大量垂直线。例如:我在代码正文中输入一个包含 100 个日期的列表,然后脚本就会为每个日期绘制一条垂直线。
我开始在这里做一些尝试,但不知何故,结果非常麻烦,而且只有一条线。
下午好,程序员们!请帮助我编写一个脚本。我需要脚本在图表上为一系列日期绘制大量垂直线。例如:我在代码正文中输入一个包含 100 个日期的列表,然后脚本就会为每个日期绘制一条垂直线。
我开始在这里做一些尝试,但不知何故,结果非常麻烦,而且只有一条线。
通过分隔符在字符串中输入日期。
然后将字符串分割成数组。
然后通过调用
谢谢。因为我是一个非常肤浅的程序员。我就按顺序问吧
"把日期放在带分隔符的字符串中"。
使用 "string TimeToString( ""
????
????
你不需要把任何东西转换成字符串来画线。
你描述了问题,但描述得并不完整,所以人们必须自己去想办法。
你打算如何记录 100 个日期?
是写在脚本的正文中?
还是在启动智能交易系统时手动输入?
你不需要把任何东西转换成字符串来画线。
你已经描述了任务,但描述得并不完整,所以人们只能猜测。
你打算如何记录 100 个日期?
是写在剧本正文中吗?
还是在启动智能交易系统时手动输入?
我查过了。第二种情况很好,但并不合适,因为需要在窗口中手动输入每个日期,非常耗时。应该很简单...... "ctrl-c,ctrl-v"。
在第一种情况下,由于某种原因,它不会在最近的蜡烛上画三条线,而只画一条线。 原因尚不清楚,我正在研究。