Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1464

 
Artyom Trishkin #:

Schreiben Sie in einen gemeinsamen Ordner aller Terminals. Eines schreibt - die anderen lesen und erstellen ein Diagramm. Dies ist eine grobe Verallgemeinerung.

es ist klar, aber in vindex, wenn eine Datei für die Änderung verwendet wird, d.h. im Moment des Schreibens ist der Zugriff auf das Lesen geschlossen, und wenn die Last auf der CPU groß ist, kann es lang sein, sollte es irgendwie berücksichtigt werden.

Wenn in word360 oder google allgemeiner Zugriff und allgemeine Bearbeitung dort das Problem mit der Warteschlange gelöst ist. Tippen ist nicht schreiben, autosave und manuell speichern. Und es gibt eine Warteschlange.

Und so, ja, natürlich, der Commons-Ordner ist nicht in der Sandbox, er ist außerhalb.

 
SuhanovDM94 einen Indikator erstellen, der eine Datei mit USDTRY-Kursen aus dem gemeinsamen Speicher liest, dann den Spread berechnet und ihn auf diesem "einzelnen" Chart als regelmäßige Linie zeichnet. Etwas Besseres ist mir noch nicht eingefallen. Vielen Dank für die Tipps :)

Lesen: 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 #:
Und außerdem: https://www.mql5.com/ru/articles/503
Herzlichen Dank!
 

Guten Tag!

Könnten Sie mir bitte sagen, warum eine Vorwärtsprüfung notwendig ist?

Ist das nicht gleichbedeutend mit einer einfachen Optimierung für ein ganzes Intervall?
 

Guten Tag Programmierer! Bitte helfen Sie mir mit einem Skript. Ich brauche das Skript, um eine Vielzahl von vertikalen Linien auf dem Diagramm für eine Liste von Daten zu zeichnen. Das heißt, zum Beispiel: Ich gebe in den Hauptteil des Codes eine Liste von z.B. 100 Daten ein, und das Skript zeichnet einfach eine vertikale Linie für jedes Datum.

Ich habe angefangen, hier etwas auszuprobieren, aber irgendwie erweist es sich als sehr umständlich, und es ist nur eine Linie.

#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 #:

Guten Tag Programmierer! Bitte helfen Sie mir mit einem Skript. Ich brauche das Skript, um eine Vielzahl von vertikalen Linien auf dem Diagramm für eine Liste von Daten zu zeichnen. Das heißt, zum Beispiel: Ich gebe in den Körper des Codes, eine Liste von 100 Daten zum Beispiel, und das Skript zeichnet nur eine vertikale Linie für jedes Datum.

Ich habe angefangen, hier etwas auszuprobieren, aber irgendwie erweist es sich als sehr umständlich, und es ist nur eine Linie.

Das Datum als String durch das Trennzeichen.

Dann diese Zeichenkette in ein Array aufteilen.

Dann eine Schleife durch das Array bei jeder Iteration durch Aufruf von

VLineCreate
 

Ich danke Ihnen. Da ich ein sehr oberflächlicher Programmierer bin. Ich werde der Reihe nach fragen.

"Setzen Sie das Datum in einen String mit einem Trennzeichen."

Verwenden Sie " string TimeToString( ""

????

 
Alexey Belyakov TimeToString( ""

????

Sie müssen nichts in eine Zeichenkette umwandeln, um eine Linie zu zeichnen.

Sie haben das Problem beschrieben, aber nicht vollständig, so dass man es selbst herausfinden muss.

Wie wollen Sie 100 Daten aufzeichnen?

Werden Sie sie in den Text des Skripts schreiben?

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

Oder werden Sie sie manuell eingeben, wenn Sie den Expert Advisor starten?

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 #:

Um eine Linie zu zeichnen, müssen Sie nichts in eine Zeichenkette umwandeln.

Sie haben die Aufgabe beschrieben, aber Sie haben sie nicht vollständig beschrieben, so dass die Leute raten müssen.

Wie wollen Sie 100 Daten erfassen?

Werden Sie sie in den Text des Drehbuchs schreiben?

oder geben Sie sie manuell ein, wenn Sie den Expert Advisor starten?

Ich habe es geprüft. Der zweite Fall ist gut, aber er ist nicht geeignet, da jedes Datum manuell in das Fenster eingegeben werden muss, was zeitaufwändig ist. Es sollte einfach sein... "ctrl-c, ctrl-v".

Im ersten Fall werden aus irgendeinem Grund nicht 3 Linien gezeichnet, sondern nur eine, und zwar bei der letzten Kerze. Warum, ist noch nicht klar, ich gehe der Sache nach.

Grund der Beschwerde: