"Göstergeler Arası Veri Değişimi: Bu Kolaydır" makalesi için tartışma - sayfa 3

 

Vay canına! Görünüşe göre sorun bir kütüphane yazmadan çözülebilir - sadece içe aktarılan işlevi yeniden adlandırarak... Bugün çok geç, ama yarın - deneyelim ve deneyelim ...

Документация по MQL5: Основы языка / Препроцессор / Импорт функций (#import)
Документация по MQL5: Основы языка / Препроцессор / Импорт функций (#import)
  • www.mql5.com
Основы языка / Препроцессор / Импорт функций (#import) - Документация по MQL5
 

Evet. Çok erken davranmışım. Double dışındaki diziler için GetValue istediğimden oldukça farklı bir şey döndürüyor... Ne yazık ki, MSVC olmadan yapamıyorum... Eh, uzun zamandır elime dama almadım...

 

Masters!

 

MQL'in neden işaretçilere ihtiyacı olduğunu anlamıyorum? Eğer işaretçilerle bir şey yapmak istiyorsanız, bunu C++'da yapın.

İşaretçileri başka bir veri tipine ve başka bir tipteki dizilere geçirmede hiçbir sorun yoktur! Örneğin, işte bir bildirim: void setvar(int& var[]); bir tamsayı dizisine bir işaretçi geçirmek için (diğer türler için neyi değiştirmeniz gerektiğini tahmin edin?).

Dll-fonksiyonlarını çağırmanın ek yükleri ortadan kalkmamıştır (yapı 646), örneğin, boş bir mql-fonksiyonu boş bir dll-fonksiyonundan daha hızlı çalışır, ancak oraya en azından bir diziden seçme işlemi eklerseniz, s[i] gibi, o zaman c++ burada kazanacaktır, yine de çağrı sayısı en aza indirilmelidir.

En büyük performans sızıntısı global değişkenlerle çalışırken ortaya çıkar - bunlar ÇOK YAVAŞTIR!!!! Eğer bir dll yaptıysak, global değişkenleri orada saklamak çok daha kolaydır. Bir metatrader içindeki Uzman Danışmanların ve göstergelerin tüm kopyaları için, dll'in bir kopyası bağlanır, böylece tüm global değişkenleri metatrader'ın tüm pencereleri için global olur (bu gerçek, bir pencerenin kişisel verilerinin ya sınıfın bir örneğinde ya da pencere tanımlayıcısına göre erişimi olan bir dizide saklanmasını zorlar).

 
ponter adresi sadece int değil unsigned int olmalıdır
 
Imho, bir kerede C++ veya C#'a geçmek ve MT ticaret işlevselliğinin kullanımına geri dönmemek daha kolaydır. Ve göstergelere ihtiyacınız varsa, onları çizmelisiniz. Ve sorun ortadan kalkar.
 
Bu çok mükemmel! Kodu, fonksiyonların bir çiftten (benim durumumda) biraz daha kullanışlı bir şeyle - bir yapıyla - özellikle MqlRates ile çalışacak şekilde ayarladım.
Dosyalar:
cpp.zip  44 kb
exchng.mqh  2 kb
exchng.mq4  12 kb
 
Bu kodu, sadece double değil struct tipi elemana sahip dizileri değiştirebilecek şekilde nasıl değiştirebilirim?
 
JamesMQL:
Bu kodu, sadece double değil struct tipi elemana sahip dizileri değiştirebilecek şekilde nasıl değiştirebilirim?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: TradeTransactions

fxsaber, 2018.09.20 16:23

// Пример хранения/обмена данными через Ресурсы внутри Терминала
#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166

void OnStart()
{  
  const RESOURCEDATA<int> ResourceINT("::int"); // Ресурс для обмена int-ами. const - как доказательство, что ничего не пишется в объект класса
  
  int ArrayINT[] = {1, 2, 3};
  int Num = 5;
  
  ResourceINT = ArrayINT;  // Ресурс хранит массив.
  ResourceINT += Num;      // Добавили в ресурс еще значение.
  ResourceINT += ArrayINT; // Добавили массив.
  
  int ArrayINT2[];  
  ResourceINT.Get(ArrayINT2); // Считали данные из ресурса.
  ArrayPrint(ArrayINT2);      // Вывели: 1 2 3 5 1 2 3

  ResourceINT.Free();                // Удалили данные из ресурса
  Print(ResourceINT.Get(ArrayINT2)); // Убедились, что данных нет: 0

  const RESOURCEDATA<MqlTick> ResourceTicks("::Ticks"); // Ресурс для обмена тиками. const - как доказательство, что ничего не пишется в объект классса
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    for (int i = 0; i < 3; i++)
      ResourceTicks += Tick; // Добавили в ресурс тики

  MqlTick Ticks[];
  ResourceTicks.Get(Ticks); // Считали данные из ресурса.
  ArrayPrint(Ticks);        // Вывели.
  
  // Это полное имя ресурса для обращения из другой программы
  const string NameOut = StringSubstr(MQLInfoString(MQL_PROGRAM_PATH), StringLen(TerminalInfoString(TERMINAL_PATH)) + 5) + "::Ticks";  
  Print(NameOut); // Вывели полное имя ресурса.
  
  const RESOURCEDATA<MqlTick> Resource(NameOut); // Ресурс для доступа к данным (salt okunur) из другой программы
  
  MqlTick TicksOut[];
  Resource.Get(TicksOut); // Считали данные из ресурса.
  ArrayPrint(TicksOut);   // Вывели.
  
  Resource.Free();   // Не получится повлиять на данные read-only-ресурса.
  Print(_LastError); // ERR_INVALID_PARAMETER - Ошибочный параметр при вызове системной функции.
}
 
fxsaber:

Yardımınız için teşekkürler, ama

- Bu kodu anlamıyorum. Yapı bunun içinde nerede?

- MQL4 çözümüne ihtiyacım var