Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1464

 
Artyom Trishkin #:

Tüm terminallerin ortak bir klasörüne yazın. Biri yazar - diğerleri okur ve bir grafik oluşturur. Bu kaba bir genellemedir.

açık, ancak vindex'te bir dosya değişiklik için kullanıldığında, yani yazma anında okumaya erişim kapatılır ve CPU üzerindeki yük büyükse, uzun olabilir, bir şekilde dikkate alınmalıdır.

Word360 veya google'da genel erişim ve genel düzenleme olduğunda, kuyrukla ilgili sorun çözülür. Yazma, otomatik kaydetme ve manuel kaydetme değildir. Ve bir kuyruk var.

Ve böylece, evet, elbette, Commons klasörü sanal alanda değil, dışarıda.

 
SuhanovDM94 gösterge oluşturacağım. Henüz daha iyi bir şey düşünmedim. İpuçları için herkese teşekkürler!)

Okuyun: 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 #:
Ve ayrıca: https://www.mql5.com/ru/articles/503
Çok teşekkür ederim!
 

İyi günler!

Lütfen bana ileri testin neden gerekli olduğunu söyleyebilir misiniz?

Tam bir aralıkta basit optimizasyona eşdeğer değil mi?
 

İyi günler programcılar! Lütfen bana bir komut dosyası konusunda yardımcı olun. Bir tarih listesi için grafikte çok sayıda dikey çizgi çizmek için komut dosyasına ihtiyacım var. Yani, örneğin: Kodun gövdesine, örneğin 100 tarihlik bir liste giriyorum ve komut dosyası her tarih için dikey bir çizgi çiziyor.

Burada bir şey denemeye başladım, ancak bir şekilde çok hantal olduğu ortaya çıktı ve bu sadece bir satır.

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

İyi günler programcılar! Lütfen bana bir komut dosyası konusunda yardımcı olun. Bir tarih listesi için grafikte çok sayıda dikey çizgi çizmek için komut dosyasına ihtiyacım var. Yani, örneğin: Kodun gövdesine, örneğin 100 tarihlik bir liste giriyorum ve komut dosyası her tarih için dikey bir çizgi çiziyor.

Burada bir şey denemeye başladım, ancak bir şekilde çok hantal olduğu ortaya çıktı ve sadece bir satır.

Ayırıcı aracılığıyla dizedeki tarih.

Sonra bu dizeyi bir diziye bölün.

Daha sonra her yinelemede dizi boyunca döngü yaparak

VLineCreate
 

Teşekkür ederim. Çok yüzeysel bir programcı olduğum için. Sırayla sormaya başlayacağım.

"Tarihi bir sınırlayıcı ile dizeye koy."

" string TimeToString("" kullan

????

 
Alexey Belyakov TimeToString( "" kullanın

????

Bir çizgi çizmek için herhangi bir şeyi dize dönüştürmenize gerek yoktur.

Sorunu tanımladınız, ancak tam olarak tanımlamadınız, bu yüzden insanlar bunu çözmek zorunda.

Yüz tarihi nasıl kaydedeceksiniz?

Bunları kodun gövdesine mi yazacaksınız?

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

Yoksa Uzman Danışmanı başlatırken bunları manuel olarak mı gireceksiniz?

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

Bir çizgi çizmek için herhangi bir şeyi dizeye dönüştürmenize gerek yoktur.

Görevi tarif ettiniz, ancak tam olarak tarif etmediniz, bu yüzden insanlar tahmin etmek zorunda.

Yüz randevuyu nasıl kaydedeceksin?

Bunları senaryonun gövdesine mi yazacaksınız?

yoksa Uzman Danışmanı başlatırken bunları manuel olarak mı gireceksiniz?

Kontrol ettim. İkinci durum iyi, ancak her tarihi pencereye manuel olarak girme ihtiyacı nedeniyle uygun değil, bu da zaman alıcı. Basit olmalı... "ctrl-c, ctrl-v".

İlk durumda, bazı nedenlerden dolayı en son mumda 3 çizgi değil, sadece bir çizgi çiziyor. Neden, henüz net değil, araştırıyorum.

Neden: