Особенности языка mql5, тонкости и приёмы работы - страница 296

 
amrali #:

Это можно сделать с помощью оператора stringify # внутри макроса...

Благодарю.

 
Макрос STR с перенаправлением можно использовать для отладки (печати) расширения макроса в журналы:


#define  STR(s) #s
#define  EXPAND_MACRO(m)  Print(STR(m))

// тестовый макрос
#define  PRINT(A) Print(#A, " = ", A)

void OnStart() {
   EXPAND_MACRO( PRINT(_LastError) );
   EXPAND_MACRO( SORT_BY(mass,AscByKey) );
}

Редактировать:
Макрос SORT_BY определен здесь
 
amrali #:
Макрос STR с отступлением можно использовать для отладки (печати) расширения макроса в журналы:
#define  PRINT(A) Print(#A, " = ", A)

Знаете ли вы, как с его помощью вывести в журнал любое количество различных переменных, не набирая PRINT для каждой переменной?

Например, есть переменные x1, x2, x3, x4, x5.

Я хочу быстро вывести их все с помощью PRINT, но я не хочу набирать этот текст:

Print(PRINT(x1),", ",PRINT(x2),", ",PRINT(x3),", ",PRINT(x4),", ",PRINT(x5));

вместо этого я хочу напечатать вот это, что даст мне тот же результат, что и вышеупомянутый Print:

prt(x1,x2,x3,x4,x5)

и я хотел бы, чтобы этот макрос работал с любым количеством переменных:

prt(x1,x2,x3,x4)
 
Я оставлю ответ для @fxsaber, который написал хороший макрос TO_STR
 
amrali #:
красивый макрос TO_STR

Где я могу увидеть этот макрос?

 
Andrei Iakovlev #:

Где я могу увидеть этот макрос?

#define  TOSTR(A) (#A + " = " + string(A) + " ")

// использование
Print (TOSTR(x1), TOSTR(x2), TOSTR(x3));
 
amrali #:

ааа, это оно, хорошо

Я пришел к решению, только когда создаю несколько макросов с разным количеством переменных:

#define  cs                      ", "	// запятая + пробел
#define  pr                      Print
#define  s(x)                    string(x)
#define  P(x)                    #x + " = " + s(x)
#define P2(x1,x2)               P(x1),cs,P(x2)
#define P3(x1,x2,x3)            P(x1),cs,P(x2),cs,P(x3)
#define P4(x1,x2,x3,x4)         P(x1),cs,P(x2),cs,P(x3),cs,P(x4)
#define P5(x1,x2,x3,x4,x5)      P(x1),cs,P(x2),cs,P(x3),cs,P(x4),cs,P(x5)
#define  PR(x)                   pr(P(x));
#define  PR2(x1,x2)              pr(P2(x1,x2));
#define  PR3(x1,x2,x3)           pr(P3(x1,x2,x3));
#define  PR4(x1,x2,x3,x4)        pr(P4(x1,x2,x3,x4));
#define  PR5(x1,x2,x3,x4,x5)     pr(P5(x1,x2,x3,x4,x5));

Так что если я хочу быстро напечатать 5 переменных, я это делаю:

PR5(x1,x2,x3,x4,x5)

Если я хочу вывести 9 переменных, я объединяю:

pr(P4(x1,x2,x3,x4),cs,P5(x5,x6,x7,x8,x9));

Так что я не знаю, как создать универсальный макрос для печати любого количества переменных с P(x) макрос способ, так что это было бы как PR5, например.

 
Если есть пример кода как делать api запрос, например к бинанс, то поделитесь, пожалста.
 
Andrei Sokolov #:
Если есть пример кода как делать api запрос, например к бинанс, то поделитесь, пожалста.

Модератор как то писал, что только в маркете можно найти что-то работающее с байбит. (https://www.mql5.com/en/forum/440740)

Вы можете и сами сделать, это делается через WebSocket. Если кто-то выложит пример(например я) - вся интрига прекратится. В общем - это не сложно, используется вебреквест.

https://www.mql5.com/ru/articles/8196

Второй вариант - взять код на питоне под байбит, и слегка его модифицировать(с таким и DeepSeek и ChatGPT справятся) что бы он направлял весь поток полученный с байбит на сокет локального ПК. Откуда считать это в советнике совсем не сложно если использовать примеры из статей. ИМХО

WebSocket для MetaTrader 5
WebSocket для MetaTrader 5
  • www.mql5.com
До появления сетевых функций в обновленном MQL5 API, приложения MetaTrader были ограничены в возможности подключаться и взаимодействовать с сервисами на основе протокола WebSocket. Сейчас ситуация изменилась. В этой статье мы рассмотрим реализацию библиотеки WebSocket на чистом MQL5. Будут представлены краткое описание протокола WebSocket и пошаговое руководство по использованию полученной библиотеки.
 

удивительно, что этот макрос работает

#define  del(x)  /*x*/