Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1191

 

Как подключиться к серверам Meta Quotes чтобы dll библиотека могла посылать ордера и обмениваться данными чтобы в реализации эксперта максимально участвовал язык с++ а не mql4?


Можно ли dll библиотекой рисовать объекты в МТ4, что можно поизучать по этому вопросу?

 
Mihail Matkovskij:

Но почему с iBars(symbol, timeframe) история оказывается неготова, а с iBars(Symbol(), Period()) вполне нормальная? И происходит это только при перезапуске терминала, а не всегда. И пременные-члены symbol, timeframe инициализируются корректно, в разделе инициализации (сам лично проверял).

Попробуйте потеснить мой пример: https://c.mql5.com/3/324/Test.mq5 

Последовательность действий:

1. Бросить скомпилированный файл на график. Получаемые при этом сообщения: 

2. Завершить работу терминала и снова запустить его. Сообщения в журнале будут следующие:

Решено.

Вместо данного кода

public:  
  Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe)); // Данный вызов iBars() даёт 0 при перезапуске терминала
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); // Этот же вызов iBars() работает нормально
  }

я прописал следующее

public:  
  Loader(): symbol(NULL), timeframe(PERIOD_CURRENT) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe));
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); 
  }

Теперь при перезапуске терминала ошибок нет. Но символ и таймфрейм нужно инициализировать только пустыми значениями. 

Прилагаю два варианта исходника, с багом и рабочий. Последовательность тестирования, напомню, была следующей: https://www.mql5.com/ru/forum/160683/page1189#comment_17047032

Файлы:
Bug.mq5  7 kb
Correct.mq5  6 kb
 
Seric29:

Как подключиться к серверам Meta Quotes чтобы dll библиотека могла посылать ордера и обмениваться данными чтобы в реализации эксперта максимально участвовал язык с++ а не mql4?

Никак. Протокол закрыт.

Можно ли dll библиотекой рисовать объекты в МТ4, что можно поизучать по этому вопросу?

Нельзя.

 
Seric29:

Ничего себе я проверю. Я знаю что можно инициализировать функциями переменные с элементами массивов не прокатывает но что оно автоматически меняется не знал, мне кажется в с++ тоже нет такого я проверю потом.

Я ошибся(

Если Вам надо пересчитывать лот перед торговыми операциями, то лучше определение лота разместить в начале OnTick

или (как я у себя поменял) OnTimer

 

Здравствуйте! Помогите вывести все значения, у меня получается выводить только последние. И второй вопрос, как вывести эти значения со сдвигом вправо(сдвиг задавать любой). Спасибо!

   for(int p = 0; p < 4; p++)
      for(int c = 0; c < 4; c++)
         for(int ps = 0; ps < 4; ps++)
            Comment(StringFormat("Выводим значения\nP = %G\nC = %G\nPS = %d", p, c, ps));
 

Где можно почитать про разделители в печати? то плюсом делят, то запятые, не понять, заморочка

Print(a, b + "abc") ;

 
Koldun Zloy:

Никак. Протокол закрыт.

Нельзя.

Что значит протокол закрыт. В mql4 есть функции открытия ордера, это по сути обычный код. То же самое и касаемо графических объектов. Я слышал что mql4 это коммерческий продукт и именно по этой причине нету ни исходного кода, ни кода встроенный функций (например Arrayresize/Range и др.). Мне например не удобно использовать mql4 для написания программы слишком мёртвый язык, очень сильно ограничен. А как насчёт языка Win API 32 на нём ничего нельзя сделать по моим вопросам? Наверное и для Win API 32 тоже всё закрыто.

 
Seric29:

Что значит протокол закрыт. В mql4 есть функции открытия ордера, это по сути обычный код. То же самое и касаемо графических объектов. Я слышал что mql4 это коммерческий продукт и именно по этой причине нету ни исходного кода, ни кода встроенный функций (например Arrayresize/Range и др.). Мне например не удобно использовать mql4 для написания программы слишком мёртвый язык, очень сильно ограничен. А как насчёт языка Win API 32 на нём ничего нельзя сделать по моим вопросам? Наверное и для Win API 32 тоже всё закрыто.

Лучше отдельный топик сделать, живее будет)

 
MakarFX:

Я ошибся(

Если Вам надо пересчитывать лот перед торговыми операциями, то лучше определение лота разместить в начале OnTick

или (как я у себя поменял) OnTimer

Так я о чём вы инициализировали переменную "Лот" выражением, не может быть такого чтобы туда это выражение автоматически подставлялось. Вы можете даже проверить возьмите обычный счётчик сделайте, значение счётчика присвойте при инициализации а потом меняйте счётчик а значение Лот не изменится если вы сами его не поменяете. В с++ такое работает.

int Pomidor=9;
int Pomidor1(int q=Pomidor){return q;}//при инициализации
Вызов
Print(Pomidor());// результат будет автоматически равен Pomidor и это будет регулярная смена значений 

А в mql4 такое не катит там только так

int Pomidor1(int q=67){return q;}

Результат 67.

 
Valeriy Yastremskiy:

Лучше отдельный топик сделать, живее будет)

Ну я тоже думал, тема актуальная но не факт конечно что стоит форум забивать, может это всё же не интересно многим. Мне то интересно я на с++ люблю код писать.

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