Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1433

 
С новым годом! Какая windows лучше для MT5 10 или 11? Сижу на лаптопе AMD 5900Х
 

Всем здравствуйте и с наступившим новым годом! Подскажите: как я могу реализовать, что бы мой скрипт использовал индикатор из маркета?

Конкретнее:
есть индикатор "Automatic Trendline" в маркете. Я хочу на его основе сделать робота, который в момент пересечения цены данных линий по индикатору (ну и при заданных доп.условиях) открывал бы или закрывал ту или иную позицию.

 
Rad89 #:

Всем здравствуйте и с наступившим новым годом! Подскажите: как я могу реализовать, что бы мой скрипт использовал индикатор из маркета?

Конкретнее:
есть индикатор "Automatic Trendline" в маркете. Я хочу на его основе сделать робота, который в момент пересечения цены данных линий по индикатору (ну и при заданных доп.условиях) открывал бы или закрывал ту или иную позицию.

Для себя нет проблем. Для маркета или CodeBase нельзя использовать чужие поделки из маркета…

 
Alexey Viktorov #:

Для себя нет проблем. Для маркета или CodeBase нельзя использовать чужие поделки из маркета…

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

 

Здравствуйте, @Rad89

Вам нужны функции iCustom() и CopyBuffer().

Вот пример добавления индикатора, скачанного с Маркета, в советник

// Глобальная переменная для хендла индикатора
int tlHandle;

int OnInit() {
   // Создаем хендл индикатора
   tlHandle = iCustom(Symbol(), PERIOD_CURRENT, "Market\\Automatic Trendlines", false, 5, 15, clrRed, clrBlue, 2, "My Support", "My Resistance");
   
   // Можем добавить индикатор на график, если хотим. 
   // Для использования в расчетах это необязательно
   ChartIndicatorAdd(ChartID(), 0, tlHandle);

   // Вызовем один раз OnTick(), чтобы на выходных у нас что-то в логе отобразилось
   OnTick(); 
   
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason) {}

void OnTick() {
   // Объявляем массивы для буферов индикатора
   double tlBuffer0[], tlBuffer1[]; // ,tlBuffer1, ...
   
   int res;
   
   // Копируем нужное количество значений из индикаторных буферов в массивы
   res = CopyBuffer(tlHandle, 0, 0, 100, tlBuffer0);
   res = CopyBuffer(tlHandle, 1, 0, 100, tlBuffer1);
   
   // У разных индикаторов различное количество индикаторных буферов, 
   // числа из которых используются для построения линий, значков, цветовых меток на графике
   // Сколько их у данного индикатора и как используются их числа исследуйте самостоятельно
   
   // res = CopyBuffer(tlHandle, 2, 0, 100, tlBuffer2);
   
   // Пользуемся полученными значениями
   ArrayPrint(tlBuffer0);
   ArrayPrint(tlBuffer1);
}
Документация по MQL5: Технические индикаторы / iCustom
Документация по MQL5: Технические индикаторы / iCustom
  • www.mql5.com
iCustom - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Здравствуйте. Есть Enum.
enum ENUM_NAME
  {
   ENUM_1,
   ENUM_jsdf
   ....
   ENUM_FEF;   
  };
  Как выделить память под массив E_NAME[], чтобы хватило на  все возможные значения ENUM_NAME(без повторений) ?
ENUM_NAME     E_NAME[];

И проинициализировать E_NAME[]  всеми возможными значениями ?

 

Здравствуйте, @pivomoe

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

// Объявляем перечисление
enum ENUM_NAME {
   ENAME_1,
   ENAME_JSDF,
   ENAME_ERT,
   ENAME_QWERTY,
   ENAME_FEF
};

// Обявляем константу, хранящую количество элементов перечисления
#define ENUM_NAME_SIZE 5

// Массив для хранения элементов перечисления
ENUM_NAME     E_NAME[ENUM_NAME_SIZE];

int OnInit() {
   // Заполняем массив значениями, преобразуя к типу ENUM_NAME
   for(int i = 0; i < ENUM_NAME_SIZE; i++) {
      E_NAME[i] = (ENUM_NAME) i;
   }

   // Пользуемся массивом
   ArrayPrint(E_NAME);
   
   for(int i = 0; i < ENUM_NAME_SIZE; i++) {
      Print(EnumToString(E_NAME[i]));
   }
   
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason) {}

В этом случае вам понадобится при добавлении элементов в перечисление изменять еще и константу, хранящую количество элементов.

И еще, префикс ENUM_ лучше использовать только для названия самого перечисления, а для его элементов использовать какой-то другой префикс. Такое соглашение используется во всех стандартных перечислениях MQL.

 
Yuriy Bykov #:

Здравствуйте, @pivomoe

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

В этом случае вам понадобится при добавлении элементов в перечисление изменять еще и константу, хранящую количество элементов.

И еще, префикс ENUM_ лучше использовать только для названия самого перечисления, а для его элементов использовать какой-то другой префикс. Такое соглашение используется во всех стандартных перечислениях MQL.

   Спасибо за помощью. Уже столько лет пользуюсь ENUM, что даже в голову не пришло почитать справку.

 
jeremy10p100 # :
Здравствуйте и спасибо за ваш ответ. Я смог сделать скрипт, который соответствует моим ожиданиям, но, к сожалению, есть две ошибки, которые я не могу понять или исправить. Не могли бы вы знать, к кому обратиться за помощью? Это всего лишь две строки кода, которые регистрируются как ошибки после компиляции...

Вы можете создать вакансию фрилансера и выбирать из разработчиков, которые претендуют на вашу работу

https://www.mql5.com/fr/job

Applications de trading pour MetaTrader 5 à commander
Applications de trading pour MetaTrader 5 à commander
  • 2023.01.08
  • www.mql5.com
Le plus grand service de freelance avec des développeurs d'applications MQL5
 
#include <JAson.mqh>
CJAVal jv;

jv["type"] = "BTCUSD";
jv["title"] = "test";

int result;
char res_data[],post[];
ArrayResize(post,StringToCharArray(jv.Serialize(),post,0,WHOLE_ARRAY)-1);
string headers="Content-Type: application/json\r\nAccept: text/plain";
result=WebRequest("POST",url,headers,3000,post,res_data,res_headers);

Пытаюсь отправить json через WebRequest, сервер возвращает:  "\u0022BTCUSD\u0022 is not a valid bundle type for denormalization."

Т.е. ему не нравится кодировка кавычек  \u0022.
Перепробовал везде указывать все варианты кодировок и в headers и в 
StringToCharArray, ничего не помогает.

Из питона все улетает без проблем:
response = requests.post(url, data=json.dumps(data), headers=headers)
т.е. с сервером все ok

Как решить проблему?

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