자신만의 MetaTrader 확장 프로그램(dll) 생성 - 페이지 3

 

정말 C++ 질문... MT4용 외부 DLL

안녕하세요 여러분,

C++로 작성한 외부 DLL이 있습니다. 그러나 나는 여전히 C++에 익숙하지 않기 때문에 이것이 내가 이 문제를 겪고 있는 이유일 수 있다고 생각합니다. MQL에서 호출할 수 있는 C# DLL을 만드는 것을 제외하고 C#으로 작성한 또 다른 버전이 있습니다. 여기 누군가가 C++ 버전으로 나를 도울 수 있기를 바랍니다. 이야기는 다음과 같습니다.

저는 거래 전략 프로그래밍을 위한 다양한 라이브러리를 천천히 개발해 왔습니다. 내가 하려고 하는 것 중 하나는 로깅, 잠금(리소스에 대한 스레드로부터 안전한 액세스) 및 이벤트 알림과 같은 다양한 작업에 대해 일관된 서비스 세트를 개발하는 것입니다. 그래서 기본적으로 부트스트랩으로 MQL을 보다 현대적인 프로그래밍 패러다임으로 끌어올리려고 합니다. 어쨌든, 현재 저는 EA가 다양한 거래 이벤트 (배치됨, 채워짐, 마감됨)에 대한 알림을 수신할 수 있도록 하는 라이브러리에서 작업하고 있습니다. 이러한 이벤트는 이벤트 구독 EA 또는 다른 EA에서 수행한 거래의 결과일 수 있습니다. 이를 수행하기 위해 기본적으로 메시지 전달을 통해 EA 간의 통신을 용이하게 하는 외부 DLL을 사용하고 있습니다. 새로운 거래 이벤트를 찾는 게시 EA가 있으며 이벤트가 발생하면 구독 중인 EA의 대기열에 메시지를 넣습니다(각 구독자는 고유한 대기열을 가짐).

문제는 이것이... 한 번에 하나의 메시지만 전달되는 한 모든 것이 잘 작동한다는 것입니다. 분명히 그것은 전혀 용납되지 않습니다. 한 번에 둘 이상의 메시지가 전달되면 첫 번째 메시지가 손상된다는 사실을 알게 되었습니다(대신 "FILLED,1005167"과 같아야 하는데 메시지를 "1"로 계속 반환함). 두 번째 메시지는 괜찮지만 첫 번째 메시지는 그렇지 않습니다. 나는 아직 두 개 이상의 메시지를 테스트하지 않았지만 아마도 우리는 여전히 같은 것을 보게 될 것입니다.

누군가가 내가 잘못하고 있는 것에 대한 답을 알고 내 문제를 밝힐 수 있다면 좋겠습니다. 몇 가지 참고 사항: 1) 나는 결국 이 코드를 Apache 2.0에서 릴리스할 예정이므로 이 소스 파일도 Apache 2.0에서 배포 중입니다... 상당히 원활하게 작동할 때 커뮤니티에 이 코드를 릴리스할 예정입니다. 2) 여기서 '대기열'을 반복해서 말했지만 소스 코드를 보면 벡터 대신에 벡터를 사용하고 기본적으로 스택처럼 사용하는 것을 볼 수 있습니다. 원래 나는 대기열이 있었지만 내가 알지 못하는 STL 대기열에 뭔가 잘못된 일을 하고 있었던 우연한 기회에 그것을 벡터로 변경했습니다. 그런 행운이 없습니다. 실제 구현은 대기열이지만 현재로서는 대기열이나 벡터가 제대로 작동하지 않습니다.

어떤 통찰력이라도 미리 감사드립니다.

브랜든 윌하이트

파일:
 

내가 여기에 왔을 때부터, 나는 내 경험을 공유하고 싶다고 생각했습니다. 당신이 하고 싶은 일은 분명히 할 수 있고, 나는 그것을 여러 번 해왔습니다.

MT4에서 사용하기 위해 DLL을 처음 작성하기 시작했을 때 C++에서 작동하도록 할 수 없었습니다. 문제는 Visual Studio에서 내 프로젝트 설정이 항상 잘못되었다는 것입니다. 최근에 CodeGuru에서 실제로 컴파일하여 사용할 수 있는 예제를 찾았습니다. 이제 기본적으로 해당 프로젝트를 정리하고 템플릿으로 사용합니다.

그동안 저는 C# DLL을 작성하고 여기에서 이 훌륭한 도구를 사용했습니다. 기본적으로 IL을 가져와서 비관리 코드에서 호출할 수 있도록 변경합니다. 유일한 문제는 이 작업을 수행할 때 MT4가 메모리 누수를 나타내는 것 같습니다. 그것이 MT4 때문인지 IL 변경 때문인지 또는 무엇 때문인지 확실하게 결정하지는 못했지만 발생합니다.

다음으로 C++에서 래퍼를 작성하는 방법을 배우거나 C++를 계속 배우겠습니다. 바라건대 그것은 메모리 문제를 해결할 것입니다.

어쨌든 하고 싶은 일은 반드시 이룰 수 있습니다. 원격, 원시 소켓, http, WinForms와 같은 것을 포함하여 C#에서 MT4용으로 꽤 복잡한 DLL을 작성할 수 있었습니다. .NET으로 할 수 있는 거의 모든 작업을 MT4에서 이 방법으로 호출할 수 있습니다(이름을 지정하면 아마 완료했을 것입니다). 그리고 그것은 매우 신뢰할 수 있습니다. 유일한 문제는 상대적으로 느린 메모리 누수입니다.

Magick:
감사합니다 패트릭

FTP를 사용하는 것은 매우 흥미로운 아이디어입니다.

그러나 나는 MT와 상호 작용할 수 있기를 원합니다. 틱 및 양초 정보를 .net 앱으로 보내고 이 앱은 거래 시점에 대해 MT와 다시 통신합니다.

나는 이것이 도움이 될 것이라고 생각했습니다 - 단순화된 래퍼 및 인터페이스 생성기

그러나 저는 다소 초급 수준의 프로그래머이며 C++ 래퍼 중간 계층을 갖는 것과 관련된 것에 대해 완전히 감사하지 않습니다.

이것이 C++와 .net 사이를 연결하는 데 도움이 되는 유용한 도구가 될 수 있다고 생각한다면 귀하의 의견을 듣고 싶습니다.
 
bwilhite:
내가 여기에 왔을 때부터, 나는 내 경험을 공유하고 싶다고 생각했습니다. 당신이 하고 싶은 일은 분명히 할 수 있고, 나는 그것을 여러 번 해왔습니다.

MT4에서 사용하기 위해 DLL을 처음 작성하기 시작했을 때 C++에서 작동하도록 할 수 없었습니다. 문제는 Visual Studio에서 내 프로젝트 설정이 항상 잘못되었다는 것입니다. 최근에 CodeGuru에서 실제로 컴파일하여 사용할 수 있는 예제를 찾았습니다. 이제 기본적으로 해당 프로젝트를 정리하고 템플릿으로 사용합니다.

그동안 저는 C# DLL을 작성하고 여기에서 이 훌륭한 도구를 사용했습니다. 기본적으로 IL을 가져와서 비관리 코드에서 호출할 수 있도록 변경합니다. 유일한 문제는 이 작업을 수행할 때 MT4가 메모리 누수를 나타내는 것 같습니다. 그것이 MT4 때문인지 IL 변경 때문인지 또는 무엇 때문인지 확실하게 결정하지는 못했지만 발생합니다.

다음으로 C++에서 래퍼를 작성하는 방법을 배우거나 C++를 계속 배우겠습니다. 바라건대 그것은 메모리 문제를 해결할 것입니다.

어쨌든 하고 싶은 일은 반드시 이룰 수 있습니다. 원격, 원시 소켓, http, WinForms와 같은 것을 포함하여 C#에서 MT4용으로 꽤 복잡한 DLL을 작성할 수 있었습니다. .NET으로 할 수 있는 거의 모든 작업을 MT4에서 이 방법으로 호출할 수 있습니다(이름을 지정하면 아마 완료했을 것입니다). 그리고 그것은 매우 신뢰할 수 있습니다. 유일한 문제는 상대적으로 느린 메모리 누수입니다.

bwihite 당신은 생명의 은인입니다! 훌륭한 도구인 것 같습니다. 우연히 C#에서 MT와 통신하는 방법을 보여주는 ac# 프로젝트가 있습니까? 내가 하고 싶은 것은 내 .net 앱이 MT에 언제 거래해야 하는지 알려주는 것입니다. 또는 도움이 될 수 있는 링크를 추천할 수 있습니다. 도움을 주시면 대단히 감사하겠습니다.

 

많은 많은 감사합니다!

 

DLL

안녕 ,

DLL을 사용하여 Excel 스프레드시트 를 통해 주문을 보내고 받을 수 있습니까?

DLL의 이 부분을 어디에서 배울 수 있습니까?

안부 인사

라틴계

 
codersguru:
자신의 MetaTrader 확장(dll)을 만드는 데 관심이 있는 사람은 다음을 방문할 수 있습니다.

자신만의 MetaTrader 확장(dll) 만들기 - 1부

나만의 MetaTrader 확장 프로그램(dll) 만들기 - 2부

내가 쓰고 있는 다른 부분(또는 2개)이 있을 것입니다!

당신이 그들을 즐기시기 바랍니다!

과정을 Visual C++ 2008 Express Edition으로 업데이트하십시오.

 
bwilhite:
내가 여기에 왔을 때부터, 나는 내 경험을 공유하고 싶다고 생각했습니다. 당신이 하고 싶은 것은 분명히 할 수 있고, 나는 그것을 여러 번 해왔습니다.

MT4에서 사용하기 위해 DLL을 처음 작성하기 시작했을 때 C++에서 작동하도록 할 수 없었습니다. 문제는 Visual Studio에서 내 프로젝트 설정이 항상 잘못되었다는 것입니다. 최근에 CodeGuru에서 실제로 컴파일하고 사용할 수 있는 예제를 찾았습니다. 이제 기본적으로 해당 프로젝트를 정리하고 템플릿으로 사용합니다.

그동안 저는 C# DLL을 작성하고 여기에서 이 훌륭한 도구를 사용했습니다. 기본적으로 IL을 가져와서 비관리 코드에서 호출할 수 있도록 변경합니다. 유일한 문제는 이 작업을 수행할 때 MT4가 메모리 누수를 나타내는 것 같습니다. 그것이 MT4 때문인지 IL 변경 때문인지 또는 무엇 때문인지 확실하게 결정하지는 못했지만 발생합니다.

다음으로 C++에서 래퍼를 작성하는 방법을 배우거나 C++를 계속 배우겠습니다. 바라건대 그것은 메모리 문제를 해결할 것입니다.

어쨌든 하고 싶은 일은 반드시 이룰 수 있습니다. 원격, 원시 소켓, http, WinForms와 같은 것을 포함하여 C#에서 MT4용으로 꽤 복잡한 DLL을 작성할 수 있었습니다. .NET으로 할 수 있는 거의 모든 작업을 MT4에서 이 방법으로 호출할 수 있습니다(이름을 지정하면 아마 완료했을 것입니다). 그리고 그것은 매우 신뢰할 수 있습니다. 유일한 문제는 상대적으로 느린 메모리 누수입니다.

이 느린 누출 bwihite의 출처를 식별할 수 있었던 적이 있습니까? 그래도 의향이 있다면 이 분야에 도움을 주시면 감사하겠습니다. 현재 소켓을 통해 메시지를 보내고 받을 수 있는 간단한 mql dll을 찾고 있습니다. 저는 C#의 기본 사항에 익숙하므로 이를 활용할 수 있는 방법을 찾을 수 있다면 더욱 좋습니다.

감사해요.

 
Magick:
bwihite 당신은 생명의 은인입니다! 훌륭한 도구인 것 같습니다. 우연히 C#에서 MT와 통신하는 방법을 보여주는 ac# 프로젝트가 있습니까? 내가 하고 싶은 것은 내 .net 앱이 MT에 언제 거래해야 하는지 알려주는 것입니다. 또는 도움이 될 수 있는 링크를 추천할 수 있습니다. 도움을 주시면 대단히 감사하겠습니다.

이 Magick에 행운이 있었나요? 이것이 바로 제가 하고자 하는 일입니다. .net 앱이 MT에게 언제 무엇을 거래할지 알려주도록 합니다. 해결책을 찾으셨다면 알려주세요.

나는 또한 감사하고 bwihite에서 더 많은 것을 듣고 싶습니다. 공유할 수 있는 샘플 C# dll이 있습니까?

감사해요!

 

내 자신의 DLL에서 작업하고 있으며 127 오류가 발생했습니다.

.cpp 파일에는 다음이 포함됩니다.

MT4_EXPFUNC char* _stdcall DLLtest() {

return("testing!");

}

[/CODE]

header file contains:

#define MT4_EXPFUNC __declspec(dllexport)

MT4 file:

[CODE]

#import "mydll.dll"

string DLLtest();

물론 그것이 포함된 전부는 아니지만 적절한 정보입니다. 이제 내 이해를 바탕으로 MT4에서 함수 를 호출할 수 있는 모든 것이 있습니다.

어떤 이유에서인지 그것이 존재한다는 것을 "보는" 것이 아닙니다. 내 DLL에 .def 파일이 없다는 사실이라고 생각했지만 수동으로 만든 후에도 여전히 작동하지 않습니다. 또한 MT4_EXPFUNC 라인은 함수를 어떻게든 내보낼 수 있음을 의미하므로 .def가 필요하지 않습니다. 모든 것이 잘 컴파일되고 EA는 내가 함수를 호출하려고 할 때까지 제대로 실행되고(볼 수 없기 때문에) 중지됩니다.

제정신이 아니야. 정말 .def 문제인 줄 알았는데 생각하면 할수록 그게 아닌 것 같아요.

BTW Visual C++ 2008 Express를 사용하고 있습니다...

어떤 통찰력을 주셔서 감사합니다.

-제이슨

 

Visual C++ 2008 Express를 사용하여 동일한 127 오류가 발생했습니다. 아직 해결 방법이 없습니다. 찾으면 게시하겠습니다.