MetaTrader 4용 API 함수 라이브러리가 개발되었습니다. - 페이지 5

 
그건 그렇고, 지금 민이 제공하는 것은 이전보다 더 살 수있는 것처럼 보입니다.
더러운 IMHO :)

고맙습니다! 상업적 제안을 기다리고 있습니다. 행운을 빕니다!
 
API라고 하기는 어렵습니다. 도서관 + 고문. 매우 느리게 작동합니다.
 
...
 
라이브러리 개발자에게 질문: 라이브러리를 사용할 때 견적을 받는 속도가 임시 파일을 통해 작업할 때보다 훨씬 느린 이유는 무엇입니까? 공유 메모리를 사용하면 어떤 이점이 있습니까?

견적을 받는 비율은 무엇을 의미합니까? 이게 틱이 나온다면 MT4에서도 따옴표로 직접 작업 하기 어렵다고 이미 썼습니다.
라이브러리는 원래 진드기를 잡기 위한 것이 아닙니다. 이는 심각한 시장 활동의 경우 틱을 따라잡을 수 없기 때문에 시스템이 단순히 정지할 수 있기 때문입니다. 따라서 라이브러리에는 눈사태 진드기에 대한 소프트웨어 보호 기능이 내장되어 있습니다.
공유 메모리 사용의 장점은 이러한 시스템의 높은 신뢰성과 하드 디스크의 막힘이 없다는 것입니다. 또한 여러 프로그램이 라이브러리에 액세스할 수 있으며 이를 위해 임시 파일의 정확한 위치를 "알" 필요가 없습니다. 행운을 빕니다!
 
심각한 시장 활동으로 인해 틱을 따라잡을 수 없기 때문에 시스템이 정지될 수 있습니다. 따라서 라이브러리에는 눈사태 진드기에 대한 소프트웨어 보호 기능이 내장되어 있습니다.


여기서 작가는 너무 똑똑한 것 같습니다 :)
내가 이해하는 한, EA가 start() 함수 안에 있으면(그리고 거기에서 API 클라이언트로 틱에 대한 정보를 보낸다면) EA가 start()를 종료할 때까지 MT는 새 틱을 제공하지 않습니다. 따라서 "진드기의 눈사태"가 여기에서 어떻게 형성될 수 있는지 명확하지 않습니까?

EA가 루프되고 RefreshRates를 통해 틱을 수신하는 경우 클라이언트 API를 먼저 종료한 다음 RefreshRates를 호출해야 합니다. 따라서 매달릴 곳도 없습니다.

공유 메모리 사용의 장점은 이러한 시스템의 높은 신뢰성에 있습니다.

물론 확실하게 들리지만 이것이 프로세스 간 교환의 유일한 방법은 아닙니다.
그래서 주제는 "... 그렇다면 공유 메모리를 사용하는 이점은 무엇입니까?"입니다. 미개봉 :)

IMHO, MMF는 프로세스 간에 많은 양의 데이터를 펌핑해야 하는 한 가지 경우에만 좋습니다. 펌핑 속도는 ~ 150Mb/sec입니다. (몇 달 전에 테스트에 따르면 이것이 가장 빠른 방법이기 때문에 MMF에서만 이러한 메커니즘을 만들어야 했습니다.)

이 작업에서( OrderSend 에 대한 매개변수 전달 등) - 대포에서 참새를 쏘는 것과 같으므로 창을 만들고 wm_copydata와 함께 SendMessage를 사용하는 것이 더 쉽습니다.
 
물론 확실하게 들리지만 이것이 프로세스 간 교환의 유일한 방법은 아닙니다.
그래서 주제는 "... 그렇다면 공유 메모리를 사용하는 이점은 무엇입니까?"입니다. 미개봉 :)

사용된 알고리즘이 최고라고 주장하는 것은 아니라고 생각합니다. 그러한 문제가 적어도 12가지 방법으로 해결될 수 있다는 것이 프로그래밍의 아름다움입니다. 임시 파일 옵션도 완전히 작동했습니다. 내 임무는 MT3 API에 대해 안정적이고 실행 가능하며 완전한 기능을 갖춘 대체품을 개발하는 것이었습니다. 오늘날 도서관은 약 6개월 동안 실용적인 거래 프로그램으로 작업해 왔습니다. 그리고 여기서 주요 문제는 최대 속도를 달성하는 것이 아니라 많은 수의 비상 사태에 대한 신뢰성과 올바른 대응에있었습니다. 따라서 귀하의 의견에 감사드립니다. 매우 적절하지만 이것은 "완전히 다른 이야기"입니다. 행운을 빕니다!
 
안녕하세요, 현재 가장 큰 문제는 연결입니다.

Mforex2.lib 가져오기 라이브러리를 프로젝트에 포함합니다(Delpi의 경우 - 라이브러리의 기능만 설명).
주 프로그램에서 Mforex.h 헤더 파일을 지정합니다(예: #include "Mforex.h" – Builder C++에만 해당).

Omega는 기성 프로그램이기 때문에 이 2가지 점은 나에게 수수께끼입니다. 다른 모든 파일을 설명한 대로 배치하고 MT4 시작 기능을 등록했으며 시작 시 정확한 경로를 지정해야 한다는 메시지가 나타났지만 저도 경로를 정확하게 등록했습니다. 나는 더 모른다.
 
Mforex2.lib 가져오기 라이브러리를 프로젝트에 포함합니다(Delpi의 경우 - 라이브러리의 기능만 설명).
주 프로그램에서 Mforex.h 헤더 파일을 지정합니다(예: #include "Mforex.h" – Builder C++에만 해당).
Omega는 기성 프로그램이기 때문에 이 2가지 점은 나에게 수수께끼입니다. 다른 모든 파일을 설명한 대로 배치하고 MT4 시작 기능을 등록했으며 시작 시 정확한 경로를 지정해야 한다는 메시지가 나타났지만 저도 경로를 정확하게 등록했습니다. 나는 더 모른다.

Omega는 외부 DLL 라이브러리에서 함수를 가져올 수 있는 기능을 제공합니다. 따라서 Mforex2.dll을 외부 라이브러리로 지정해야 합니다. 동시에 이 파일은 Omega 프로그램의 "시야 영역"에 있어야 합니다. 호출 절차에서 설명서에 표시된 대로 DLL 라이브러리에서 가져온 함수의 이름을 지정합니다. 또한 Omega는 Mforex.h 파일의 정의를 "모른다"는 점에 유의하십시오. 즉, 예를 들어 포지션 개시 기능을 호출할 때 OP_SELL이 아닌 Sell - 1 등의 작업 코드를 지정해야 합니다. 자세한 내용은 Omega가 외부 라이브러리와 작동하는 방식을 설명하는 DevKit 문서를 참조하십시오.
행운을 빕니다!
 

Omega는 외부 DLL 라이브러리에서 함수를 가져올 수 있는 기능을 제공합니다. 따라서 Mforex2.dll을 외부 라이브러리로 지정해야 합니다. 동시에 이 파일은 Omega 프로그램의 "시야 영역"에 있어야 합니다. 호출 절차에서 설명서에 표시된 대로 DLL 라이브러리에서 가져온 함수의 이름을 지정합니다. 또한 Omega는 Mforex.h 파일의 정의를 "모른다"는 점에 유의하십시오. 즉, 예를 들어 포지션 개시 기능을 호출할 때 OP_SELL이 아닌 Sell - 1 등의 작업 코드를 지정해야 합니다. 자세한 내용은 Omega가 외부 라이브러리와 작동하는 방식을 설명하는 DevKit 문서를 참조하십시오.
행운을 빕니다!


그래서 나는 Omega에 다음과 같이 썼다.

DefineDLLfunc:"Mforex2.dll", int, "시작"; {DLL 호출}
_gbp = 시작(); {터미널 시작 기능}

그런데 여기서 '시작()' 대신 다른 것을 처방해야 한다고 하는데, 제가 제대로 이해한 건가요?
 

그래서 나는 Omega에 다음과 같이 썼다.

DefineDLLfunc:"Mforex2.dll", int, "시작"; {DLL 호출}
_gbp = 시작(); {터미널 시작 기능}

그런데 여기서 '시작()' 대신 다른 것을 처방해야 한다고 하는데, 제가 제대로 이해한 건가요?

나는 스스로 대답합니다. "Start()" 대신에 등록할 필요가 없습니다. 맞습니다. Omega는 문제 없이 MT4를 시작합니다.

하지만 포지션을 여는 함수에서는 좀 더 복잡합니다. 즉, 함수를 등록했음을 의미합니다.

입력: Symbol(NumericSimple), Order(NumericSimple), Lot(NumericSimple),
가격(NumericSimple), sl(NumericSimple), tp(NumericSimple);


DefineDLLfunc: "Mforex2.dll", int, "NewPos", char, int, int, double, double, double;

_NewPos = NewPos(기호, 주문, 로트, 가격, sl, tp);

논리적으로 모든 것이 제조업체의 설명과 일치하지만 실제로는 문제가 있습니다. 모든 것이 숫자로 표시됩니다...