Доступ к.net DLL из Java
Я новичок в java
и DLL-ы
Мне нужно получить доступ к методам DLL из java
, Так что будь осторожен со мной.
Я пытался использовать JNA для доступа к DLL, вот что я сделал.
import com.sun.jna.Library;
public class mapper {
public interface mtApi extends Library {
public boolean IsStopped();
}
public static void main(String []args){
mtApi lib = (mtApi) Native.loadLibrary("MtApi", mtApi.class);
boolean test = lib.IsStopped();
System.out.println(test);
}
}
Когда я запускаю код, я получаю следующую ошибку:
Exception in thread "main" java.lang.UnsatisfiedLinkError:
Error looking up function 'IsStopped':
The specified procedure could not be found.
Я понимаю, что эта ошибка говорит о том, что она не может найти функцию, но я не знаю, как ее исправить.
Я пытаюсь использовать этот API mt4api
и вот метод, я пытаюсь получить доступ MQL4
Может кто-нибудь сказать мне, что я делаю не так?
Я смотрел на другие альтернативы, как jni4net
, но я не могу заставить это работать.
Если кто-то может связать меня с учебником, который показывает, как это настроить, или знает, как это сделать, я был бы очень рад.
1 ответ
Торговая?
Охота на миллисекунды, чтобы сбрить?
Скорее перейдите в распределенную обработку... Определенно безопаснее, чем полагаться на API!
В то время как ваш ОП был направлен на то, как согнуть java
Чтобы вызвать.NET DLL-функции, позвольте мне набросать гораздо более безопасное решение.
Используя предикторы AI/ML-регрессии для торговли на FOREX, я охотился в том же лесу. Лучшее решение, найденное за последние около 12 лет, с опытом работы в несколько сотен человек * лет, было настроено следующим образом:
Host A
совершает сделки: работает с MetaTrader Terminal 4 и Script, и EA - система распределенной обработки взаимодействует с использованием ZeroMQ
система обмена сообщениями / сигнализации с малой задержкой (требуется несколько десятков микросекунд)
Host B
выполняет AI / ML обработку прогнозов для торгуемого инструмента (применяется около нескольких сотен микросекунд)
Cluster C
выполняет непрерывное повторное обучение предикторов AI / ML и выбор модели HyperParameterSPACE (действительно требуется много CPU-часов, непрерывный процесс самоадаптации модели, работающий 24/7)
Уровень сигнализации / обмена сообщениями с ZeroMQ
имеет порты и / или привязки, доступные и готовые для большинства основных и многих нишевых языков программирования, включая java
,
Скрытые опасности идти только против опубликованного API:
Хотя усилия по интеграции системы и тестированию огромны, спецификации API всегда опасны для ползучести спецификаций.
Тем не менее, добавьте бесчисленное количество человеко-месяцев, потраченных на отладку после тихого изменения спецификаций языка MT4, которое лишает вас предыдущих инструментов и библиотек. Зачем? Представь. Некоторое время назад, MQL4
перестал быть MQL4
и молча сместился в сторону MQL5
, под именем New- MQL4
, Среди других изменений в сборнике было много маленьких и больших гвоздей в гробу - string
удивительно перестал быть string
и был скрыт как внутренний struct
- кто бы мог догадаться, что вызовет все вызовы DLL.
Итак, остерегайтесь ползучести API.
Вредит ли решение распределенной обработки?
Нет.
С мудрым дизайном макета сообщения нет никаких неблагоприятных эффектов поведения Терминала 4 MetaTrader, и вся логика (включая стратегическое решение) помещена вне этой бегущей платформы.
Выполнимо. Быстро и умно. Также может использовать обработку удаленного GPU-кластера, если позволяет ваш бюджет.
Это работает даже в тестере стратегий?
Да, это так.
Если у кого-то хватит сил полагаться на встроенный тестер стратегий, модель распределенной обработки все еще работает там. Производительность зависит от предпочтительного стиля моделирования: тиковое моделирование в течение одного года с довольно сложными компонентами AI / ML заняло несколько дней на обычных настольных ПК-системах COTS (после многих лет исследований и разработок Quant мы вообще не использовать тестер стратегий для внутреннего использования, но просьба состояла в том, чтобы тестировать данные тиковых данных г / г, поэтому их можно прокомментировать здесь).