Каким вы видите Metatrader X в 2030 году? - страница 6

 
fxsaber:

Запись в глобальные любых данных можно увидеть в соответствующем инклуде здесь.

ОК, не видел этого решения

сходу не разберешься, проверять нужно

 
fxsaber:

Запись в глобальные любых данных можно увидеть в соответствующем инклуде здесь.

Вы в курсе, что кроме тиков существует огромный мир других данных? Хочется странного - писать/читать данные экземпляра класса.

 
Igor Makanu:

ОК, не видел этого решения

сходу не разберешься, проверять нужно

Да запись и считывание сырых данных в/из ресурс. Хороший пример, спасибо!

Но вот слабо уважаемому мной fxsaber забацать такое же с классами? Можно даже с дефайнами, народ обещает не сойти с ума ))

 
Alexey Volchanskiy:

Неужто коксом, ой, бабушки


Не . Фьючерсами на пряники. 

 
Alexey Volchanskiy:

Вы в курсе, что кроме тиков существует огромный мир других данных?

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

Нужны ли глобальные переменные терминала типа string?

fxsaber, 2017.04.10 18:25

void OnStart()
{
  string Name = "Name";

// Записываем/считываем строки
  _GlobalVariableSet(Name, "Hello World!");
  Print(_GlobalVariableGet<string>(Name));

// Записываем/считываем простые структуры
  MqlTick Tick;
  SymbolInfoTick(_Symbol, Tick);

  _GlobalVariableSet(Name, Tick);
  Print(_GlobalVariableGet<MqlTick>(Name).time);

// Записываем/считываем массивы
  MqlTick Ticks[2];

  Ticks[0] = Tick;
  Ticks[1] = Tick;

  _GlobalVariableSet(Name, Ticks);

  MqlTick NewTicks[];

//  if (_GlobalVariableGet(Name, NewTicks)) // https://www.mql5.com/ru/forum/1111/page1868#comment_4853867
//    Print(NewTicks[1].time);

  _GlobalVariableDel(Name);
}


Хочется странного - писать/читать данные экземпляра класса.

Данные храню в структурах, как и разработчики. Это удобно и логично. Поэтому в сторону классов в данном вопросе не стал смотреть, несмотря даже на отсутствие указателей на структуры.

 
fxsaber:


Данные храню в структурах, как и разработчики. Это удобно и логично. Поэтому в сторону классов в данном вопросе не стал смотреть, несмотря даже на отсутствие указателей на структуры.

собрал вроде скрипт для проверки, но не разобрался как прочитать массив MqlTick

#property strict
#include <fxsaber\TypeToBytes.mqh>        //https://www.mql5.com/ru/code/16282
#define POSTFIX "___"

string GetName( const string Name, const int Num, const string PostFix = POSTFIX )
{
  return(Name + PostFix + (string)Num);
}

bool _GlobalVariableDel( const string Name )
{
  return(GlobalVariableDel(Name) && (GlobalVariablesDeleteAll(Name + POSTFIX) >= 0));
}

#define GLOBAL_VARIABLE_SET(A)                                                        \
template <typename T>                                                                 \
  datetime _GlobalVariableSet( const string Name, const T A )                         \
  {                                                                                   \
    _GlobalVariableDel(Name);                                                         \
                                                                                      \
    double Array[];                                                                   \
                                                                                      \
    const datetime Res = GlobalVariableSet(Name, _ArrayCopy(Array, _R(Value).Bytes)); \
    const int Size = ArraySize(Array);                                                \
                                                                                      \
    for (int i = 0; i < Size; i++)                                                    \
      GlobalVariableSet(GetName(Name, i), Array[i]);                                  \
                                                                                      \
    return(Res);                                                                      \
  }

GLOBAL_VARIABLE_SET(Value)
GLOBAL_VARIABLE_SET(&Value)
GLOBAL_VARIABLE_SET(&Value[])

#define GLOBAL_VARIABLE_GET(A)                                              \
  {                                                                         \
    double Array[];                                                         \
                                                                            \
    const int Amount = (int)Tmp;                                            \
    const int Size = ArrayResize(Array, Amount / sizeof(double) +           \
                                 ((Amount % sizeof(double) == 0) ? 0 : 1)); \
                                                                            \
    for (int i = 0; i < Size; i++)                                          \
      Array[i] = GlobalVariableGet(GetName(Name, i));                       \
                                                                            \
    uchar Bytes[];                                                          \
                                                                            \
    _ArrayCopy(Bytes, Array, 0, 0, Amount);                                 \
                                                                            \
    _W(A) = Bytes;                                                          \
  }

template <typename T>
const T _GlobalVariableGet( const string Name )
{
  T Res; // https://www.mql5.com/ru/forum/1111/page1869#comment_4854112

  double Tmp;

  if (GlobalVariableGet(Name, Tmp))
    GLOBAL_VARIABLE_GET(Res)

  return(Res);
}

template <typename T>
bool _GlobalVariableGet( const string Name, T &Value )
{
  double Tmp;
  const bool Res = GlobalVariableGet(Name, Tmp);

  if (Res)
    GLOBAL_VARIABLE_GET(Value)

  return(Res);
}


void OnStart()
  {
   string Name="Name";

// Записываем/считываем строки
   _GlobalVariableSet(Name,"Hello World!");
   Print(_GlobalVariableGet<string>(Name));

// Записываем/считываем простые структуры
   MqlTick Tick;
   SymbolInfoTick(_Symbol,Tick);

   _GlobalVariableSet(Name,Tick);
   Print("time --> ",_GlobalVariableGet<MqlTick>(Name).time);
   Print("bid --> ",_GlobalVariableGet<MqlTick>(Name).bid);

// Записываем/считываем массивы
   MqlTick Ticks[2];

   Ticks[0] = Tick;
   Ticks[1] = Tick;

   _GlobalVariableSet(Name,Ticks);
   
//    Print("time --> ",_GlobalVariableGet<MqlTick>(Name).time);
//    Print("bid --> ",_GlobalVariableGet<MqlTick>(Name).bid);
   
   _GlobalVariableDel(Name);
  }
//+------------------------------------------------------------------+


PS: предупреждения компилятора possible use of uninitialized variable 'Res' , убрать бы по возможности


 
Alexey Volchanskiy:

Лично я скучаю по многозадачности. Помню (10 строк ностальгии, молодежи пропускать), в 2000 г. я пасся на форуме программистов RSDN, тогда как раз вышел Pentium 4. А Intel вовсю трубила в роадмапах, что скоро на P4 преодолеет частоту в 15 ГГц! Да,я не шучу, это было на каждом шагу. Ну, я не знаю, то ли они и правда так думали, то ли это был вброс, но я не поверил, все же я железячник.

Я тогда сделал большую ветку про то, что скоро начнутся многоядерники, вот увидите, надо готовиться. Народ смеялся, типа сказки, как можно программировать параллельный код? Это фантастика.

И кто оказался прав? Интел провалилась со своими 15 Ггц, в десктопном варианте появился двухядерный Pentium D, а потом прорывной Duo.

А мы на MQL5 до сих пор живем в 199*-х годах. Не ни многопоточности, ни исключений... пошел с горя за арбузом...

Из описания МТ5 следует что он много многопоточен. В силу того что современный процессор в своей работе под пользователем это помойка исполняемых кодов, то остается есть арбузы, прагматичный смысл во всех поточностях отсутствует. Бизнес не заинтересован ни в эффективных кодах ни в рациональном использовании вычислительных мощностей: стало мало - докупи.

P.S. Может 1,5ГГц? Могу ошибиться, в те года определили физический  предел технологии в 5нм, а из него предполагаемые ГГц. Хотелось бы перейти с 200нм на 5нм, вот так вот за пару лет - конечно хотелось.

 

В 2030 метатрейдер  будет в запрете,

к власти придет тот человек, который запретит всё.

Тогда в мире  будет одна платежная система.

И один Правитель во всем мире .

Он начнет всем ставить чипы и поставить всех под контроль ГЛОНАСС, 5G.

Денег наличных не будет. Расчеты будут через вживленные в тело чипы. 

Торговлю через интернет дадут только привилегированным членам общества- таким которые посчитают этого Правителя -богом настоящим...


аминь.

 
Igor Makanu:

собрал вроде скрипт для проверки, но не разобрался как прочитать массив MqlTick

Добавьте эту перегрузку

template <typename T>
bool _GlobalVariableGet( const string Name, T &Value[] )
{
  double Tmp;
  const bool Res = GlobalVariableGet(Name, Tmp);

  if (Res)
  {
    double Array[];                                                         
                                                                            
    const int Amount = (int)Tmp;                                            
    const int Size = ArrayResize(Array, Amount / sizeof(double) +           
                                 ((Amount % sizeof(double) == 0) ? 0 : 1)); 
                                                                            
    for (int i = 0; i < Size; i++)                                          
      Array[i] = GlobalVariableGet(GetName(Name, i));                       
                                                                                                                                                        
    _ArrayCopy(Value, Array, 0, 0, Amount);
  }  

  return(Res);
}
Igor Makanu:

PS: предупреждения компилятора possible use of uninitialized variable 'Res' , убрать бы по возможности

Добавьте эту строку

  T Res;
  ZeroMemory(Res);
 
Unicornis:

Из описания МТ5 следует что он много многопоточен. В силу того что современный процессор в своей работе под пользователем это помойка исполняемых кодов, то остается есть арбузы, прагматичный смысл во всех поточностях отсутствует. Бизнес не заинтересован ни в эффективных кодах ни в рациональном использовании вычислительных мощностей: стало мало - докупи.

P.S. Может 1,5ГГц? Могу ошибиться, в те года определили физический  предел технологии в 5нм, а из него предполагаемые ГГц. Хотелось бы перейти с 200нм на 5нм, вот так вот за пару лет - конечно хотелось.

Я человек малограмотный и инструкций не читаю. Но знаю, что МТ5 многопоточен только в оптимизаторе ) Деже в тестере работает только в один поток.

Для распараллеливания можно использовать OpenCL, но эта технология сама по себе, просто поддерживается МТ5. 

А насчет 15 ГГц в роадмапе уверен, у меня память программиста, что увижу, никогда не забуду.  

Причина обращения: