"10분 안에 MQL5용 DLL 라이브러리를 작성하고 데이터를 교환하는 방법" 기사에 대한 토론 - 페이지 7

 

pisara :

... IMHO, TS 쓰기 언어의 개발은 무역의 특정 작업, 즉 정보 수집, 분석, 테스트, 무역 관리 및 다른 시스템과의 통합 - 이 모든 것이 가능하고 IMHO는 높은 수준의 현대 개발 도구에서 수행되어야 합니다. 선택한 표준 프레임워크를 일반적으로 허용되는 방법(OOP 등)과 통합하고 확장합니다. 작업은 C/C++ 또는 다른 것을 혼합하여 폐쇄적이고 자급자족하는 플랫폼을 작성하는 것이 아니라 우선 고품질 거래 플랫폼의 기본, 서비스, API 및 사용자 인터페이스를 작성하는 것입니다...

Moe IMHO는 IMHO와 완전히 일치합니다. 같은 생각을 가진 사람들을 찾는 것이 좋습니다. 나는 MT를 "악마는 디테일에 있다"라는 속담과 연관시키며 심각한 건축적 실수에 대한 의심이 있습니다. 그렇지 않으면 왜 그렇게 많은 "벽돌"이 있습니다 - "이봐, 시민! 당신은 거기에 가지 말고 여기로 가십시오! 그렇지 않으면 눈 머리에 떨어질 것입니다 - 완전히 죽을 것입니다!"

동시에 MT는 내가 처리해야 했던 제품 중 최악의 제품과는 거리가 멀다는 것을 인정해야 합니다.

 

Renat писал(а)  :

....MQL4.community 웹사이트에는 이미 Matcad - MetaTrader 4 링크에 대한 기사가 있습니다.


제가 놓친 것이 있거나 예약을 하신 것 같습니다. Matkad와 MT 4 간의 연결에 대한 기사를 어디에서도 찾지 못했습니다. 예, Matlab이 있습니다. 마트카드가 없습니다((

한때 프로그래머에게 MT4B <-> Matkad 통신을 주문했습니다. 유일하게 수용 가능한(지속 가능한)  파일 작업을 통한 통신이 있었습니다. MT4 - 파일에 따옴표 쓰기 - Matkad 읽기 - 처리 - 파일에 결과 업로드(구매/판매 통화) - MT4는 읽고 실행합니다. 그런데 가끔 알 수 없는 이유로 충돌이 일어나기도 하고... 3개월 이상을 보냈지만 해결하지 못했습니다.

한편으로 모든 것을 하나의 패키지로 하려는 당신의 열망은 훌륭하고 훌륭합니다. 이것이 시스템의 안정성과 신뢰성입니다.

그러나 반면에 고급 프로그래밍 언어(Matlab, Matkad)가 너무 많이 작성되어 수십억 년이 소요되었습니다. 그리고 이 전원을 MT5에 연결하면 정말 좋을 것입니다. 이 언어의 수준에 도달하려면 힘도 기회도 없습니다 ...

Z.Y. 이 두 언어가 모두 배열(행렬 대수학)과 함께 작동하도록 날카롭게 되어 있다는 사실에 주의를 기울이고 싶습니다.

 
Prival :

제가 놓친 것이 있거나 예약을 하신 것 같습니다. Matkad와 MT 4 간의 연결에 대한 기사를 어디에서도 찾지 못했습니다. 예, Matlab이 있습니다. 마트카드가 없습니다((

예, Matkad와 Matlab을 혼합했습니다. 죄송합니다.


한때 프로그래머에게 MT4B <-> Matkad 통신을 주문했습니다. 유일하게 수용 가능한(지속 가능한)   파일 작업을 통한 통신이 있었습니다. MT4 - 파일에 따옴표 쓰기 - Matkad 읽기 - 처리 - 파일에 결과 업로드(구매/판매 통화) - MT4는 읽고 실행합니다. 그런데 가끔 알 수 없는 이유로 충돌이 일어나기도 하고... 3개월 이상을 보냈지만 해결하지 못했습니다.

더 강력하고 효율적이며 안전한 언어인 MQL5와 연결해 보세요.

좋은 결과를 얻으려면 Matkad와 MT5의 통합에 대한 공개 작업을 시작할 수 있습니다. 따라서 실수를 신속하게 수정할 수 있고 작업 결과를 얻을 수 있습니다.

 
Renat писал(а) :
예, Matkad와 Matlab을 혼합했습니다. 죄송합니다.


더 강력하고 효율적이며 안전한 언어인 MQL5와 연결해 보세요.

좋은 결과를 얻으려면 Matkad와 MT5의 통합에 대한 공개 작업을 시작할 수 있습니다. 따라서 실수를 신속하게 수정할 수 있고 작업 결과를 얻을 수 있습니다.

많은 것이 가능하지만 우선 그러한 프로젝트에 관심을 가져야 하는 사람은 바로 귀하라고 생각합니다(청중이 어떻게 증가하고  외환 및 증권 거래소 + 표준 matlab에서 프로그램을 작성합니다. ).

그리고 공개, 공개 등 나는 오랫동안 일에 관심이 없었다. 나는 내 시간을 너무 소중하게 생각한다. 이런 갈퀴를 밟는 것도 지겹다.

 //+----------------------------------------------------------------------------+
//|  Описание : Установка объекта OBJ_VLINE вертикальная линия                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование                                                       |
//|    t1 - время                                                              |
//+----------------------------------------------------------------------------+
void SetVLine( string nm= "" , datetime t1= 0 , color cl= Red )
  {
  if (t1<= 0 ) return ; //t1=Time[0];
  if ( ObjectFind ( 0 ,nm)< 0 ) ObjectCreate ( 0 , nm, OBJ_VLINE , 0 , t1, 2 );
  else Print ( "Ошибка создания SetVLine " ,nm, " " , GetLastError (), " t1=" ,t1);
  
  ObjectSetInteger ( 0 , nm, OBJPROP_COLOR , cl);
  ObjectSetInteger ( 0 , nm, OBJPROP_STYLE , STYLE_DOT );
  ObjectSetInteger ( 0 , nm, OBJPROP_BACK , true);        // рисовать как фон
  ObjectSetInteger ( 0 , nm, OBJPROP_SELECTABLE , false); // запретить выделение объекта мышкой
  }

이 절차가 어떻게 여기에서 발행할 수 있습니까?

2010.05.06 02:28:14   Setka_Final_1 (EURUSD,M5)            SetVLine 생성 오류  VLine_838524   4202  t1= 2010.05.06 00:00:00

브래드는 밝혀졌다

ERR_OBJECT_NOT_FOUND

4202

그래픽 개체를 찾을 수 없음

개체를 찾을 수 없는 경우. 프로그램은 그것을 생성하기로 되어 있었다. 그러나 객체는 if (...) 왜 then 4202가 발행되는지입니다.

피곤해서 잘 시간인가 봅니다.

 

비공개 로 .

MatKad를 사용하여 다소 흥미로운 문제를 공식화하면(처음에는 그리 어렵지 않음) 이 문제의 솔루션에 참여하고 싶어할 전문가가 있을 것이라고 확신합니다.

 
Prival :

2010.05.06 02:28:14    Setka_Final_1 (EURUSD,M5)             SetVLine 생성 오류   VLine_838524    4202   t1= 2010년

개체를 찾을 수 없는 경우. 프로그램은 그것을 생성하기로 되어 있었다. 그러나 객체는 if (...) 왜 then 4202가 발행되는지입니다.

오류는 이전 함수 호출에서 발생합니다. ResetLastError() 사용
 


안녕하세요! DLL에서 함수로 문자열 전달에 대해 말하자면

흔적이 있습니다. 코드:

#include <WinUser32.mqh>

#가져오기 "mt4excel.dll"

bool ExcelOpen();//Excel을 열고 빈 페이지를 만듭니다.

bool ExcelSetTextCell(int X,int Y,char Value[]);//셀에 텍스트 쓰기

/*

다른 컷

*/

#수입

무효 OnTick()

{

Mql 요금[];

int copy=CopyRates("EURUSD", PERIOD_M1 ,0,1,rates);

ExcelSetTextCell(1,1,"도구");

ExcelSetTextCell(2,1,"USD");

ExcelSetValueCell(2,2,rates[0].close);

}

언급했듯이 Excel은 ExcelSetTextCell을 사용하여 전달된 첫 번째 문자만 표시합니다. 이 스레드를 읽은 후 이유를 이해했지만 필요한 것을 달성하는 방법을 잘 이해하지 못합니다. 요점은 DLL을 작성하지 않았다는 것입니다. DLL은 MT4를 통해 Excel로 작업하기 위한 함수 라이브러리입니다. 명백한 이유로 MT5는 첫 번째 문자만 있는 행에 대한 포인터를 던졌습니다. 문제는 DLL의 소스 코드를 편집할 수 없는 경우 MT5에서 필요한 것을 전달하도록 하려면 어떻게 해야 합니까? 결국, 내가 따라 잡는 한, 다음과 같은 것을 추가해야합니다.

_DLLAPI 무효 __stdcall 데모( char *stream, char *buf){ buf=stream;}

MT5 개발자의 의견에 감사드립니다.

고맙습니다!

 

ns_k, MQL5의 문자열이 유니코드임을 잊지 마십시오.

2개의 솔루션이 가능합니다.

1. 유니코드 문자열을 허용하도록 dll을 리메이크(마감)

2. 문자열을 배열로 직접 변환

 
stringo :

ns_k, MQL5의 문자열이 유니코드임을 잊지 마십시오.

2개의 솔루션이 가능합니다.

1. 유니코드 문자열을 허용하도록 dll을 리메이크(마감)

2. 문자열을 배열로 직접 변환

두 번째 솔루션은 저에게 효과적입니다. 말해봐, 그러면 아마 함수 선언을 변경해야 하지 않을까? 저것들. 대신에

bool ExcelSetTextCell(int X,int Y, string Value);//셀에 텍스트 쓰기

세 번째 매개변수가 배열이 될 선언을 작성해야 합니까? 그렇다면 어떻게 해야 하는지 이해가 되지 않습니다. 고맙습니다!

업데이트됨 : 나는 그것을 알아 냈습니다. 나는 조금 생각해야했습니다. 도와 주셔서 감사합니다!!

 

DLL 함수 선언

 bool ExcelSetTextCell( int X, int Y, uchar & Value[]);
DLL 함수 호출
 //--- объявляем массив символов
uchar value [];
//--- преобразуем юникод строку в однобайтный массив
StringToCharArray( "EURUSD" , value );
//--- передаем полученные данные массива по ссылке
ExcelSetTextCell( 2 , 1 , value );