![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот нашел у себя в архиве написанный во времена оны индикатор полностью на MQL. Выкладываю исходник и свежетранслированный. Подробнее о DCT-преобразовании
Спасибо что откликнулись на мою просьбу.
Вообще суть просьбы была в другом.
Я сам не программист, но на работе мне написали DLL, вписав Ваши коды в пример из поставки МТ - sample_DLL. Я попробовал написать индикатор и у меня получается, что DLL доступна программе, а вот функция не вызывается GetDiffrDCTS(), о чем пишется в лог файл.
Я никогда еще не писал индикаторы с использованием DLL, и поэтому попросил Вас привести пример данного индикатора на mql именно с использованием DLL. Потом уже было место к размышлению и самостоятельному творчеству.
Поскольку с DLL пока не вышло я переписал коды (те что Вы давали на форуме на С++) на mql.
Все нормально работает, посижу сравню с Вашими, поскольку заметил один очень важный момент (может это моя ошибка), индикатор перерисовывается во времени....(тот что я написал)
Если это действительно так, то использовать его в реальной торговли конечно нельзя.
Поэтому вопросов, если не сложно будет ответить, два.
Все же, если есть пример индикаторов с использованием DLL, то скиньте для обучения, можно фрагменты кодов на С++ от того что используется. (gsb51@mail.ru)
И все же, перерисовывается ли DCT во времени или это моя ошибка при написании индикатора.
С уважением
Сергей
(русский текст в комментариях см. тот форум)
Кроме того, к проекту должен быть присоединен файл DCTSmoothing.def - обычный текстовый файл, содержащий следующий текст:
LIBRARY <имя_проекта>
EXPORTS <список_имен_экспортируемых_функций>
т.е. в нашем случае:
Дальше все вместе компилируется в DCTSmoothing.dll. Посмотрите еще пример ExpertSample.dll и руководство по Вашему С-компилятору. Разбирайтесь. Удачи!
Еще пару вопросов. Для чего вставлять в заголовок #include "DCTSmoothing.h".
И что за параметр int dct_on поскольку в предыдущей редакции его не было, а коментарий в данной версии не читается.
С уважением
Сергей
Александр спасибо огромное, теперь есть над чем поработать и поучиться работать с DLL.
Еще пару вопросов. Для чего вставлять в заголовок #include "DCTSmoothing.h".
И что за параметр int dct_on поскольку в предыдущей редакции его не было, а коментарий в данной версии не читается.
С уважением
Сергей
По поводу параметра dct_on - вот комментарии на русском языке (после очередного эксперимента очередной раз в компиляторе С++ слетела кириллица, сейчас восстанавливаю):
Код функции интерполяционного сглаживания по 5 точкам GetSmooth5() приводил выше, а раньше и на том (основном?) форуме. Значение dct_on = 1 на самом деле означает "и DCT-сглаживание, и интерполяционное", dct_on = 0 - "только интерполяционное". Словом, дерзайте, пробуйте, изучайте, и все у Вас получится!
Все уже давно проверено лично.
Про тип стринг - их внутренний тип данных они конечно не очень написали, чем некоторых товарищей запутали. Есть ведь много типов стринг, которые не их внутренний тип данных.
если ни чего за последние 10 лет не изменилось, то есть 2 типа стрингов.
1) zero-terminated. состоит из строки и добавленного в конце символа 00h
2) "паскалевский", ( не знаю как правильно назвать.) состоит из байта длины самым первым символом, затем идёт сама строка.
очевидно, вместе с юникодом теперь используются не байт под символ, а слово...
исторически сложилось, что все строки передаются в функции указателями, так как у старых процов был короткий стек.
сомневаюсь, что кому-то надо менять эту систему, переписывая компиляторы....
очевидно, вместе с юникодом теперь используются не байт под символ, а слово...
За последние годы кое-что все-таки изменилось. Юникод, это отдельная песня. UCS16, 32, кодировка UTF-8 (16, 32) - число байт на символ не постоянно, а, грубо говоря, зависит от языка.
Не получается импортировать DLL. (((
В MS Visual C++ написал DLL:
//MyDll.h
#define MY_EXPORT extern "C" __declspec ( dllexport )
MY_EXPORT int CALLBACK Return1();
//MyDll.cpp
MY_EXPORT int CALLBACK Return1() { return 1; }
//MyDll.def
LIBRARY "MyDll"
EXPORTS Return1 @1
После компиляции получил MyDll.dll и MyDll.lib
Также написал микро прогу на C++ использующую DLL. В настройках проекта указал MyDll.lib. Она нормально работает с DLL.
Далее попробовал импорт DLL из MT4, положив в директорию experts\libraries файл MyDll.dll. В документации ничего про *.lib я не нашел поэтому его не клал.
//ImportDll.mqh (в директории experts\include)
#import "MyDll.dll"
int Return1();
//ImportDll.mq4 (в директории experts\indicators)
#include <ImportDll.mqh>
int init()
{
Print("Return1="+Return1());
return (0);
}
При запуске ImportDll.ex4 пришет: dll calls are not allowed; 'MyDll.dll' - 'Return1'
ПОМОГИТЕ .... я уже мосх сломал ((((((((((((((((((((((((( Мой ICQ: 573794562, e-mail: AKalashnikov84@mail.ru.
Nado razreshit import DLL (kak pokazano na risunke vnizu):
[X] Allow DLL import
импорт DLL разрешен... не помогает (((