Discusión sobre el artículo "Intercambio de datos entre indicadores Es fácil" - página 3

 

¡Vaya! Parece que el problema se puede resolver sin escribir una librería - simplemente renombrando la función importada... Hoy es demasiado tarde, pero mañana - vamos a probar y probar...

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

Sí. Me he adelantado demasiado. GetValue para arrays que no sean double devuelve algo muy distinto de lo que me gustaría... Ay, no puedo prescindir de MSVC... Eh, hace mucho que no tomo las damas en mis manos...

 

¡Maestros!

 

No entiendo por qué MQL necesita punteros? Si quieres hacer algo con punteros, hazlo en C++.

¡No hay ningún problema en pasar punteros a otro tipo de datos y arrays de otro tipo! Por ejemplo, aquí tienes una declaración: void setvar(int& var[]); para pasar un puntero a un array de enteros (¿adivinas lo que tienes que cambiar para otros tipos?).

La sobrecarga de llamar a funciones dll no ha desaparecido (build 646), digamos que una función mql vacía funciona más rápido que una función dll vacía, pero si añades al menos una operación de selección de un array, como s[i], entonces c++ ganará aquí, sin embargo el número de llamadas debería minimizarse.

¡¡¡¡La mayor pérdida de rendimiento es cuando se trabaja con variables globales - son MUY LENTO!!!! Es mucho más fácil, si hemos hecho una dll, almacenar las variables globales allí. Para todas las copias de Asesores Expertos e indicadores dentro de un metatrader, se enlaza una copia de la dll, por lo que todas sus variables globales son globales para todas las ventanas del metatrader (esta verdad obliga a que los datos personales de una ventana se almacenen en una instancia de la clase o en un array con acceso por identificador de ventana).

 
la dirección del ponente debe ser unsigned int, no sólo int
 
Imho, es más fácil migrar a C ++ o C # de una vez y no volver a la utilización de la funcionalidad de comercio MT. Y si necesita indicadores, debe dibujarlos. Y el problema desaparece.
 
¡Esto es excelente! He ajustado el código para que las funciones de trabajo con algo un poco más útil que un doble (en mi caso) - una estructura - específicamente MqlRates.
Archivos adjuntos:
cpp.zip  44 kb
exchng.mqh  2 kb
exchng.mq4  12 kb
 
¿Cómo se puede modificar este código para que sea capaz de intercambiar matrices que tengan elementos de tipo struct y no sólo double?
 
JamesMQL:
Cómo se puede modificar este código para que pueda ser capaz de intercambiar matriz que tiene elemento de tipo struct no sólo doble?

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

Библиотеки: 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); // Ресурс для доступа к данным (sólo lectura) из другой программый
  
  MqlTick TicksOut[];
  Resource.Get(TicksOut); // Считали данные из ресурса.
  ArrayPrint(TicksOut);   // Вывели.
  
  Resource.Free();   // Не получится повлиять на данные read-only-ресурса.
  Print(_LastError); // ERR_INVALID_PARAMETER - Ошибочный параметр при вызове системной функции.
}
 
fxsaber:

Gracias por su ayuda, pero

- No entiendo este código. ¿Dónde está la estructura en ella?

- Necesito solución MQL4