Данная статья знакомит с реализацией межпроцессного взаимодействия между терминалами MetaTrader 5 посредством именованных каналов (named pipes). Предложен класс CNamedPipes, реализующий возможность использования именованных каналов. Рассмотрен тиковый индикатор для тестирования связи между двумя клиентскими терминалами MetaTrader 5 и измерения общей пропускной способности системы. Представленный метод взаимодействия оказался пригодным для отправки котировок в реальном времени.
Перед многими разработчиками встает одинаковая проблема - как пробиться в песочницу торгового терминала без применения небезопасных DLL. Одним из простых и безопасных методов является использование стандартных именованных каналов (Named Pipes), которые работают как обычные файловые операции. Они позволяют организовать межпроцессорное клиент-серверное взаимодействие между программами. Посмотрите практические примеры на C++ и MQL5 в виде сервера, клиента, обмен данными между ними и замер производительности.
안녕하세요, 프로그래머 여러분! 스크립트를 도와주세요. 날짜 목록에 대해 차트에 여러 개의 수직선을 그리는 스크립트가 필요합니다. 즉, 예를 들어 코드 본문에 100 개의 날짜 목록을 입력하면 스크립트가 각 날짜에 대해 수직선을 그립니다.
나는 여기서 무언가를 시도하기 시작했지만 어떻게 든 매우 번거롭고 한 줄에 불과한 것으로 밝혀졌습니다.
#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개의 날짜 목록을 입력하면 스크립트가 각 날짜에 대해 수직선을 그립니다.
나는 여기서 무언가를 시도하기 시작했지만 어떻게 든 매우 번거롭고 한 줄에 불과한 것으로 밝혀졌습니다.
구분 기호를 통해 문자열로 날짜를 입력합니다.
그런 다음 이 문자열을 배열로 분할합니다.
그런 다음 각 반복마다 다음을 호출하여 배열을 반복합니다.
감사합니다. 저는 매우 피상적인 프로그래머라서요. 순서대로 물어보겠습니다.
"날짜를 구분 기호로 문자열에 넣어주세요."
" 문자열 TimeToString( ""
????
????
선을 그리기 위해 문자열로 변환할 필요는 없습니다.
문제를 설명했지만 완전히 설명하지 않았으므로 사람들이 알아내야 합니다.
100개의 날짜를 어떻게 기록할 건가요?
스크립트 본문에 작성할 건가요?
아니면 Expert Advisor를 시작할 때 수동으로 입력하나요?
선을 그리기 위해 문자열로 변환할 필요가 없습니다.
작업을 설명했지만 완전히 설명하지 않았기 때문에 사람들이 추측해야 합니다.
100개의 날짜를 어떻게 기록할 건가요?
스크립트 본문에 적을 건가요?
아니면 Expert Advisor를 시작할 때 수동으로 입력하시겠습니까?
확인했습니다. 두 번째 경우도 좋지만 각 날짜를 창에 수동으로 입력해야 하므로 시간이 많이 걸리기 때문에 적합하지 않습니다. 간단해야 합니다... "ctrl-c, ctrl-v".
첫 번째 경우에는 어떤 이유로 가장 최근의 캔들에 3 개의 선이 아닌 하나의 선만 그려집니다. 이유는 아직 명확하지 않지만 조사 중입니다.