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

 
Связь с 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(  "

????

 
Alexey Belyakov #:

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

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

Использовать  "  string  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."

В первом случае почему то не чертит 3 линии, а только одну, по самой последней свече.  Почему, пока непонятно, разбираюсь.

 
Alexey Belyakov #:

Проверил. Второй случай хорош, но он не подходит из - за необходимости вбивать каждую дату в окно вручную, затратно по времени. Тут бы простыми действиями..."ctrl-c, ctrl-v."

В первом случае почему то не чертит 3 линии, а только одну, по самой последней свече.  Почему, пока непонятно, разбираюсь.

Имя линии должно быть уникальным. Пропустил этот момент

 

   const string          name="VLine,VLine2,VLine3",      // имя линии

Имя линии сделал уникальными. В input тоже. Не помогает. 

Причина обращения: