초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1464

 
Artyom Trishkin #:

모든 단말기의 공통 폴더에 쓰기. 한 명은 쓰고 다른 한 명은 읽고 차트를 작성합니다. 이것은 대략적인 일반화입니다.

분명하지만 파일이 수정에 사용되는 경우, 즉 읽기에 대한 쓰기 액세스가 닫히는 순간 vindex에서 CPU에 대한 부하가 크면 길어질 수 있으므로 어떻게 든 고려해야합니다.

Word360 또는 Google 일반 액세스 및 일반 편집에서 대기열 문제가 해결됩니다. 타이핑은 쓰기, 자동 저장 및 수동 저장이 아닙니다. 그리고 대기열이 있습니다.

따라서 예, 물론 Commons 폴더는 샌드 박스에 있지 않고 외부에 있습니다.

 
SuhanovDM94 인디케이터를 만들 것입니다. 아직 더 좋은 방법은 생각하지 못했습니다. 팁 주셔서 감사합니다, 여러분!)

참조: 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개의 날짜 목록을 입력하면 스크립트가 각 날짜에 대해 수직선을 그립니다.

나는 여기서 무언가를 시도하기 시작했지만 어떻게 든 매우 번거롭고 한 줄에 불과한 것으로 밝혀졌습니다.

구분 기호를 통해 문자열로 날짜를 입력합니다.

그런 다음 이 문자열을 배열로 분할합니다.

그런 다음 각 반복마다 다음을 호출하여 배열을 반복합니다.

VLineCreate
 

감사합니다. 저는 매우 피상적인 프로그래머라서요. 순서대로 물어보겠습니다.

"날짜를 구분 기호로 문자열에 넣어주세요."

" 문자열 TimeToString( ""

????

 
Alexey Belyakov 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);

아니면 Expert Advisor를 시작할 때 수동으로 입력하나요?

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개의 날짜를 어떻게 기록할 건가요?

스크립트 본문에 적을 건가요?

아니면 Expert Advisor를 시작할 때 수동으로 입력하시겠습니까?

확인했습니다. 두 번째 경우도 좋지만 각 날짜를 창에 수동으로 입력해야 하므로 시간이 많이 걸리기 때문에 적합하지 않습니다. 간단해야 합니다... "ctrl-c, ctrl-v".

첫 번째 경우에는 어떤 이유로 가장 최근의 캔들에 3 개의 선이 아닌 하나의 선만 그려집니다. 이유는 아직 명확하지 않지만 조사 중입니다.

사유: