Данная статья знакомит с реализацией межпроцессного взаимодействия между терминалами 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;
}
すべての端末の共通フォルダに書き込む。1台が書き込み、他が読み込み、チャートを作成する。これは大まかな一般化である。
それは明らかであるが、ファイルを修正するために使用されているときにインデックス、すなわち書き込みの瞬間に読み取りへのアクセスが閉じられ、CPUへの負荷が大きい場合、それは長いことができ、それは何とか考慮する必要があります。
word360やgoogleの一般的なアクセスや一般的な編集では、キューとの問題はそこに解決されます。 タイプは、書き込み、自動保存、手動で保存されていません。そして、キューがあります。
そして、そう、もちろん、Commonsフォルダはサンドボックスの中ではなく、外にある。
https:// www.mql5.com/ru/articles/115
https:// www.mql5.com/ru/articles/503
こんにちは!
なぜフォワードテストが必要なのか教えてください。
こんにちは、プログラマーの皆さん!スクリプトについて教えてください。ある日付のリストに対して、チャート上に多数の縦線を引くスクリプトが必要です。つまり、例えば、私が100の日付のリストをコード本文に入力し、スクリプトが各日付に縦線を引くだけです。
しかし、なぜか非常に面倒であることが判明した。
こんにちは、プログラマーの皆さん!スクリプトについて教えてください。ある日付のリストに対して、チャート上に多数の縦線を引くスクリプトが必要です。つまり、例えば、100の日付のリストをコードの本文に入力すると、スクリプトはそれぞれの日付に縦線を引くだけです。
私はここで何かを試み始めたが、どういうわけかそれは非常に面倒であることが判明し、それはわずか1行である。
セパレーターを通して日付を文字列にする。
そしてこの文字列を配列に分割する。
そして、各反復で配列をループする。
ありがとう。私はとても表面的なプログラマーなので。順番に質問していきます。
"日付を区切り文字で文字列にする"
使用する "文字列 TimeToString( "")
????
????
You don't need to convert anything to string to draw a line.
あなたは問題を説明したが、それを完全に説明していないので、人々はそれを理解しなければならない。
How are you going to record 100 dates?
ー スクリプトのー 本文に。
ーそれともームアドバイザー起動時にームアドバイザー起動時に。
線を引くために何かを文字列に変換する必要はない。
あなたはタスクを説明したが、それを完全に説明していないので、人々は推測しなければならない。
どうやって100の日付を記録するつもりですか?
台本の本文に書くのですか?
それともExpert Advisorの起動時に手動で入力するのですか?
確認しました。2番目のケースは良いのですが、ウィンドウに日付を一つ一つ手入力する必要があり、手間がかかるので適していません。単純に「ctrl-c, ctrl-v」でよいのです。
最初のケースでは、なぜか3本の線が引かれず、直近のローソク足に1本だけ引かれる。 なぜかはまだ不明だが、調査中である。