Создание собственного расширения MetaTrader (dll) - страница 9

 

DLL не обновляется с новыми тиками

В продолжение моего предыдущего сообщения о DLL (#81), у меня появилась дополнительная проблема; когда DLL вызывается таким образом:

int start()

{

double Rates[][6];

int MaximumRecords = ArrayCopyRates( Rates, Symbol(), 0 );

for( int zz = MaximumRecords; zz >= 0; zz-- ) { OutPut[zz] = EMPTY; }

GetSMAArray( Rates, MaximumRecords, Periods, OutPut );

return(0);

}

это работает нормально в том смысле, что он строит график, как ожидалось, но, к сожалению, он не обновляется с новыми, входящими тиками - он просто строит график при своем первоначальном вызове. Какой дополнительный код я могу добавить, чтобы DLL обновлялась с входящими тиками? Почти все мои поиски привели к вариациям на тему использования

ExtCountedBars = IndicatorCounted();

чтобы заставить цикл while выполнять вычисления, но все они относятся к вычислениям, содержащимся в самом файле .mq4. Я хочу заставить DLL пересчитывать. Во-вторых, я бы хотел, чтобы этот пересчет происходил только при завершении бара, а не при наступлении всех и каждого тика.

 

Цикл For должен быть следующим

for(int zz=MaximumRecords-1;.................

10 Записи занимают позиции от 0 до 9 в массиве

 
Tzuman:
Цикл For должен быть следующим

for(int zz=MaximumRecords-1;.................).

10 Записи занимают позиции от 0 до 9 в массиве

Боюсь, это не помогло, DLL по-прежнему не обновляется с новыми тиками.

 

Видео с примером Мистигри недоступно

Привет всем,

Не мог бы кто-нибудь выложить видео с примерами Мистигри в интернет?

 
jocinet:
Привет всем, Не мог бы кто-нибудь сделать видео с образцом Мистигри доступным в интернете?

Мистигри снова стал доступен на:

Проекты | PsNouvion

 

Путь для разработчиков C#: MT4/5 -> C# DLL

Те C#-разработчики, которые хотели бы написать DLL на C# для Metatrader, а не на C++, теперь имеют путь к этому. Есть очень интересная статья под названием "Exposing C# code to MQL5 using unmanaged exports", которую я только что прочитал.

Прочитайте/пропустите статью и прочтите раздел 2.5 и далее.

Экспонирование кода C# в MQL5 с помощью неуправляемого экспорта - Статьи по MQL5

Прочитайте указания, затем скачайте Шаблон для C# "Библиотека неуправляемого экспорта" и поместите zip-файл в нужную директорию (следуя указаниям на этой странице):

Шаблон проекта C# для неуправляемого экспорта

Загрузите VS и выберите шаблон "Unmanaged Export Library". Следуйте примерам кода. Надеюсь, это кому-нибудь поможет!

 

критическая ошибка, но без сбоя, и вот как написать dll

Наконец-то смог написать свою dll, используя MistigriFX Sample Debug (MFX_SD для краткости) на Visual Studio 2008 Express.

Однако у меня возникла забавная проблема:

Нет никаких проблем при запуске трех MFX_SD на графике с разными периодами. Но когда я прикрепляю еще три ко второму графику с разными периодами, у меня появляется два сообщения об ошибке (вызов функции 'GetSMAArray' из dll 'Mistigri FX Sample 1.dll' critical error') и эксперт перестает работать.

То есть я вижу два графика, на одном графике все три MFX_SD работают хорошо каждый тик, на другом я вижу только один MFX_SD работает каждый тик, а два других нет.

Что вы можете посоветовать, ребята?

Во вложении то, как я написал dll в visual studio 2008. Я написал это в текстовом документе, так что вы можете прочитать его из вашей Visual Studio.

Если у вас возникнут ошибки, пожалуйста, прокляните себя за то, что последовали совету начинающего программиста вроде меня .

Заранее большое спасибо.

Файлы:
 

критическая ошибка решена

После нескольких попыток, я наконец-то решил проблему с сообщениями о "критической ошибке" (читайте мое предыдущее сообщение).

Это не связано с тем, как я создал .dll, но связано с пропуском логики в функции GetSMAArray в кодах MFX_SD.

Вот коды MFX_SD, в которых я выделил логику промаха.

for ( int i = 0; i < MaximumRecords; i++)

{

double Sum = 0.0;

for ( int k = 0; k < Period ; k++)

{

Sum += Rates[MaximumRecords-i-1-k].close;

}

Result[MaximumRecords-i-1] = Sum / Period ;

}

Например, предполагается, что у нас Period = 2, MaximumRecord = 75, а i = 74. Это приводит к ошибке при вычислении:

Sum += Rates[MaximumRecords-i-1-k].close;

потому что результат MaximumRecord - i - 1 - k равен -1. Единственное значение для Rates [-1] равно нулю, поэтому значение суммы тоже равно нулю. А так как мы рассчитываем SMA, то нам нужно разделить сумму на Period, который равен нулю, деленному на 2, И тут происходит "критическая ошибка" и эксперт останавливается.

Если вы не верите в это, прикрепите несколько MFX_SD к 1-минутному графику с разным периодом входа, но один из MFX_SD должен иметь период входа = 1. Посмотрите на окно MT Terminal и перейдите на вкладку эксперт. Вы увидите сообщение о критической ошибке, и эксперт перестанет работать. Однако если вы посмотрите на график, только MFX_SD с периодом = 1 продолжает работать.

Я думаю, что MistigriFX пытался показать в своем видео, как сделать dll и передать массивы в dll. Если он должен исправить логику SMA, это было бы видео, которое серьезно головной боли, чтобы смотреть. Поэтому он показал нам не правильный, но простой пример простой МА.

Счастливого создания dll.

 

Расширение MT4 - ваш курс

Здравствуйте, codersguru,

не могли бы вы дать мне ссылки на ваш курс,

или pdf руководство.

Мне нужна любая литература, чтобы узнать больше об этом.

Большое спасибо.

С наилучшими пожеланиями

Иван

 

...

В папке experts\samples\DLLSample в metatrader (каждый metatrader устанавливает его туда) есть пример (mql и C++ исходники, с проектом и def файлом), который является всем, что вам нужно знать о вызовах dll (все возможные типы параметров, поддерживаемые metatrader к dll и обратно "коммуникации" покрыты там) Остальное зависит от ваших знаний C/C++.

holesovsky:
Здравствуйте, codersguru,

не могли бы вы дать мне ссылки на ваш курс,

или руководство в формате pdf.

Мне нужна любая литература, чтобы узнать больше об этом.

Большое спасибо.

С наилучшими пожеланиями

Иван