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

 
Artyom Trishkin:

А гадать не нужно. Нужно думать и понимать что, и для чего делается. Когда нужно что-то писать, а когда не обязательно.

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

 
Roman:

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

Ещё раз - кодом здесь - что не понятно?

ЗЫ. Если про это:

Print((string)(uint)PeriodSeconds(PERIOD_MN1)*1000)

... то я не проверял - просто перепечатал в сообщение.

Сделайте функциональным приведение к строке:

Print(string((uint)PeriodSeconds(PERIOD_MN1)*1000));
 

Друзья!

Мучаюсь над проблемой подключения DLL к MQL. Описываю свою проблему:

1. Для начала пытался написать библиотеку .dll на языке C#. Столкнулся с тем, что MQL4 "не кушает" такие библиотеки в виду того, что все методы внутри dll закрыты, если писать на C#. Начал активно искать решение проблемы. Нашел несколько вариантов в сети, на подобии подключения библиотеки "DLL Export", скачанной с NuGet. Попробовал разными способами, не выходит. Да и на самом деле не хотелось бы иметь "хрупкое" решение данного вопроса по принципу "сегодня работает, а завтра - нет". Пробовал так, и на самом деле много как иначе:

using System.Runtime.InteropServices;
using RGiesecke.DllExport;

[DllExport("Good", CallingConvention.Cdecl)] // + заменял на просто [DllExport] - не помогает
public static string Good() {

   return "GHBBBGGDDDD !!!!! РУССКИЙ! :) " + 5.ToString();
}


2. Понял, что скорее всего придется писать стабильно-работающую библиотеку на C++. Подключил ее с 1го раза, тестовые запросы прошли без проблем. А вот когда я начал пытаться вернуть методом (из DLL) текстовое сообщение (в MQL), столкнулся с новой проблемой - ответ в MQL получаю в виде "?????‡?-" . Пытался декодить сообщение, но не получилось! Пытался вернуть значение через параметр функции - тоже символы "??". Перелопатил много чего, и до сих пор не нашел решения. Вот на таком варианте я остановился, но он как раз возвращает вопросительные знаки:

extern "C" __declspec(dllexport) char* __stdcall ToString(char* &str)
{
        str = " - 889 - dsa - просто!";
        return "--- Привет! ---";
}


Получаю ответ в виде:

Декодинг не помогает...


Что нужно по сути:

1) есть ли реальное решение этой задачи через C#? Нужно стабильное красивое решение! Полумеры, даже если они сейчас подойдут, но могут отвалиться с новым билдом - это не вариант.

2) Если решения на C# нет, то идем через C++... Как нормально пересылать сообщения в обе стороны без потери качества? (MQL - DLL - MQL). Нужен вариант одинаково работающий как на MT4 так и на MT5. 

 
Artyom Trishkin:

Ещё раз - кодом здесь - что не понятно?

Не понятно почему от H1 и выше возвращаются константы которые не соответствуют периоду, как до H1

Print("PERIOD_M1=",PERIOD_M1);
Print("PERIOD_M5=",PERIOD_M5);
Print("PERIOD_M30=",PERIOD_M30);
Print("PERIOD_H1=",PERIOD_H1);
2020.04.10 03:47:03.627 VP (EPM20,H4)   PERIOD_M1=1
2020.04.10 03:47:03.627 VP (EPM20,H4)   PERIOD_M5=5
2020.04.10 03:47:03.627 VP (EPM20,H4)   PERIOD_M30=30
2020.04.10 03:47:03.627 VP (EPM20,H4)   PERIOD_H1=16385
2020.04.10 03:47:03.627 VP (EPM20,H4)   PERIOD_H4=16388

То же самое возвращает переменная _Period.

 
Roman:

Не понятно почему от H1 и выше возвращаются константы которые не соответствуют периоду, как до H1

То же самое возвращает переменная _Period.

 
Artyom Trishkin:

Артём не психуй ))
Почему до M30 выводятся именно значения ТФ
1
5
30

А на H1 начинается 16385
Ну это же не логично, сперва возращать соответствие минутам, а потом чёрти что.
И это не соответствует описанию из справки для _Period,  как возвращаемое значение таймфрейма.

 
Roman:

Артём не психуй ))
Почему до M30 выводятся именно значения ТФ
1
5
30

А на H1 начинается 16385
Ну это же не логично, сперва возращать соответствие минутам, а потом чёрти что.
И это не соответствует описанию из справки для _Period,  как возвращаемое значение таймфрейма.

Значение таймфрейма. Не количество минут. Не количество секунд, Не количество гусей у бабы Нюры, а значение таймфрейма.

Документация по MQL5: Проверка состояния / Period
Документация по MQL5: Проверка состояния / Period
  • www.mql5.com
Проверка состояния / Period - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin:

Значение таймфрейма. Не количество минут. Не количество секунд, Не количество гусей у бабы Нюры, а значение таймфрейма.

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

M1    = 1
M5    = 5
M30  = 30
H1    = 60
H4    = 240
D1    = 1440

Иначе теряется смысл возвращаемых значений от балды.
По этому на мой взгляд, это баг.

 
Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?
Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?
  • www.mql5.com
Так уж сложилось, что сейчас мало кто из разработчиков помнит, как написать простую DLL библиотеку и в чем особенности связывания разнородных систем. Я постараюсь за 10 минут на примерах показать весь процесс создания простых DLL библиотек и раскрою некоторые технические детали нашей реализации связывания. Демонстрация будет на примере Visual...
 
Artyom Trishkin:

Я удивляюсь как у тебя хватает терпежу всё это повторять на протяжении такого времени, да ещё и под утро... Хотя у тебя уже утро после очередной бессонной ночи.)))

Хоть на сутки отправил-бы его в карантин для внимательного прочтения документации. Жесть... Уже который по счёту такой асс в разновидностях С языков такую ахинею несёт. И который уже раз всё это объясняется...

Только представьте, что это выясняли в Сервисдеск. Там наверное таких уравновешенных нет, потому и закрыли.

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