Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1462

 
Попробую так: создам символ с формулой типа USDRUB/USDRUB - получится график с ценой 1. Затем создам индикатор, который будет читать файл с котировками USDTRY из разделяемой памяти, затем вычислять спрэд и отрисовывать его на этот "единичный" график в виде обычной линии. Ничего лучше пока не придумал. Всем спасибо за советы!)
 
Valeriy Yastremskiy #:

в момент записи винда не даст прочитать, там очередь винды будет без ошибки, а если долго писать будет то возвратит ошибку. Симлинк не везде тоже дойдет, только до коммон папки, а в рабочие или тестера у меня не получилось.

И синтаксис ссылки тоже может заморочка быть, то слеш не тот, то их пару нужно)

Писать в общую папку всех терминалов. Один пишет - остальные читают и создают график. Это грубо обобщённо если.

 
Artyom Trishkin #:

Писать в общую папку всех терминалов. Один пишет - остальные читают и создают график. Это грубо обобщённо если.

это понятно, но в винде когда файл используется для изменения, т.е. в момент записи доступ к чтению закрыт, и если нагрузка на проц большая, то это может быть долго, это надо учитывать как то.

Когда в ворде360 или гугл общий доступ и общее редактирование там задача с очередью решена.  Набор текста это не запись, автосохранение и руками сохранить. И там очередь.

А так да, конечно коммон папки в песочнице нет, она за пределами.

 
SuhanovDM94 #:
Попробую так: создам символ с формулой типа USDRUB/USDRUB - получится график с ценой 1. Затем создам индикатор, который будет читать файл с котировками 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 в виде сервера, клиента, обмен данными между ними и замер производительности.
 
Artyom Trishkin #:
И ещё: https://www.mql5.com/ru/articles/503
Большое спасибо!
 

Добрый день!

Подскажите, пожалуйста, зачем нужно форвард-тестирование? 

Разве оно не эквивалентно простой оптимизации на полном интервале?
 

Добрый день программисты! Помогите пожалуйста со скриптом. Мне нужно чтобы чтобы скрипт по списку дат рисовал на графике множесво вертикальных линий. Тоесть к примеру: я ввожу в тело кода,  список из 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 дат к примеру, и скрипт просто рисует по каждой дате вертикальную линию. 

Я вот тут начал, что-то пытаться, но как-то очень громоздко получается, и это только одна линия.

Дату в string через разделитель.

Затем сплит этой строки в массив.

Потом пройтись в цикле по массиву на каждой итерации вызывая 

VLineCreate
 

Спасибо. Поскольку программист я весьма поверхностный. Начну спрашивать по порядку.

"Дату в string через разделитель."  

Использовать  "  string  TimeToString(  "

????