기고글 토론 "MQL5(MQL4)에서 MySQL 데이터베이스에 액세스하는 방법" - 페이지 19

 
작성자에게 감사드리며, 이 프로젝트를 로컬에서 수정하여 MySQL DB 코드 페이지 UTF8에서 영어가 아닌 단어 저장소를 사용할 수 있도록 했습니다.
 
Amy Liu:
작성자에게 감사드리며, 이 프로젝트를 로컬에서 수정하여 MySQL DB 코드 페이지 UTF8에서 영어가 아닌 단어 저장소를 사용할 수 있도록 했습니다.

안녕 에이미. 혼자서 할 시간이 없었어요. 괜찮으시다면 커뮤니티와 소스를 공유해 주시겠어요?

 

여러분 안녕하세요!

안타깝게도 저는 이 프로젝트를 지원하고 커뮤니티에서 시간을 보낼 시간이 없으니 질문에 답하지 못하고 침묵하는 저를 용서해 주세요.

하지만 여기에는 다른 사람들에게 도움을 줄 수 있는 경험 많은 분들이 계셔서 정말 좋습니다.

제 라이브러리를 사용하고, 기능을 확장하고, 자신만의 경험을 쌓아주신 모든 분들께 감사드립니다.

모두의 프로젝트에 행운을 빕니다!


안부 인사 드립니다,

Eugene

 
dragossh:

안녕하세요 , 유지니 루고보이입니다,

먼저 이 프로젝트에 시간을 내주셔서 감사합니다.

거래 계좌의 모든 미체결/종가 거래를 가능한 한 실시간으로 MySQL 테이블로 가져오고 업데이트하는 방법을 몇 주 동안 찾고 있었는데, 라이브러리를 사용하여 이 작업을 수행할 수 있는 방법이 있나요?

미리 감사드립니다.

Dragos

안녕하세요 Dragos!

예, 이 라이브러리를 사용하여 EA를 빌드하여 Mysql 데이터베이스에 데이터를 삽입하고 최신 상태로 유지할 수 있습니다 (실시간 업데이트에 가깝게).

주의할 점은 MT4/5에서 마감된 주문은 주문 내역 탭에 나열된 경우에만 프로그래밍 방식으로 사용할 수 있다는 것입니다. 따라서 최근 3일 내역에서 필터를 설정하면 해당 기간에 처리된 거래에만 액세스할 수 있습니다.

이 라이브러리에 의존하는 것이 아니라 MQL-MT4 인프라에 의존합니다.

감사합니다,

Eugene

 

'\MQL4\libraries\MQLMySQL.dll'에서 0x000003B0에 액세스 위반이 발생했습니다.

어디를 파헤쳐야 하는지 알려주실 수 있나요?

OS win 10, 마리아드 5.5.59
 

유진

아주 간단하게 작동하게 해줘서 다시 한 번 수고했어요.

궁금한 게 있는데, 혹시 본인이나 다른 사람이 전략 테스터에서 이 기능을 사용해 본 적이 있나요? 라이브 환경에서는 스크립트를 인디언으로 발전시켰고 모든 것이 괜찮았지만 백테스팅 환경에서는 통합하는 데 실패했습니다.


br George

 
Eugeniy Lugovoy:

안녕하세요, 에이미. 혼자서 할 시간이 없었어요. 괜찮으시다면 커뮤니티와 소스를 공유해 주실 수 있나요?

안녕하세요 유지니,

답변이 늦어서 죄송합니다. 제가 코드를 수정한 내용은 다음과 같습니다.멀티바이트 투 와이드 캐릭터를 사용하도록 cMySqlGetRowField 함수 하나를 수정했습니다. 원본 코드는 비교를 위해 주석 처리되어 있습니다.

// 필드 값의 문자열 표현을 반환합니다.
//는 MySqlCursorFetchRow() 뒤에 호출해야 합니다.
// pCursorID - 커서 식별자
// pField - SELECT 목록의 필드 수(0부터 시작) - 0,1,2 등입니다.
MT4_EXPFUNC wchar_t* __stdcall cMySqlGetRowField(int pCursorID, unsigned int pField)
{
        SCOPE_LOCK_MUTEX(g_mutex.get());
        ClearCursorErrors(pCursorID);
        if ((pCursorID >= 0) && (pCursorID < MAX_CURSORS) && (Cursors[pCursorID].Id!=-1))
        {
                if ((pField >= 0) && (pField < mysql_num_fields(Cursors[pCursorID].RecordSet)))
                {
                        // 预算-缓冲区中宽字节的长度
                        int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, Cursors[pCursorID].CurrentRow[pField], -1, nullptr, 0);
                        if (unicodeLen<=1024)
                        {
                                // 开始向缓冲区转换字节
                                MultiByteToWideChar(CP_UTF8, 0, Cursors[pCursorID].CurrentRow[pField], -1, Cursors[pCursorID].Value, unicodeLen);
                                return(Cursors[pCursorID].Value);
                        }
                        //sprintf_s(Cursors[pCursorID].Value, "%s", Cursors[pCursorID].CurrentRow[pField]);
                        //swprintf(Cursors[pCursorID].Value, 1024, L"%S", Cursors[pCursorID].CurrentRow[pField]);
                        //반환 (커서[pCursorID].값);
                }
                else
                {
                        Cursors[pCursorID].CursorErrorNumber = -4;
            swprintf(Cursors[pCursorID].CursorErrorDescription, 32, L"Wrong number of field.\x00");
                }
        }
        else
        {
                CursorErrorNumber = -5;
                swprintf(CursorErrorDescription, 32, L"Wrong CURSOR identifier.\x00");
        }
        return (WideNull);
}
 

안녕하세요 동료 여러분, 질문이 있습니다:

전문가 조언자가 한 터미널에서 작동 할 때는 문제가 없지만 다른 터미널에서 동일한 전문가 조언자를 실행하면 다음 오류가 계속 기록됩니다:

커서 #0 닫기 오류:-5: 잘못된 커서 식별자입니다.

무엇이 문제일까요?

 
Dmitry Melnichenko:

안녕하세요, 동료 여러분, 질문이 있습니다:

전문가 조언자가 한 터미널에서 작동 할 때는 문제가 없지만 다른 터미널에서 동일한 전문가 조언자를 실행하면이 오류가 계속 기록됩니다:

커서 # 0 닫기 오류 : -5 : 잘못된 커서 식별자.

무엇이 문제일까요?

다른 자격 증명으로 연결해 보세요. 즉, MySQL에 대한 다른 로그인/패스워드를 사용하세요. 즉, 데이터베이스에 대한 적절한 권한으로 다른 로그인을 생성합니다.

그리고 트랜잭션 모드에서 작업합니다.


 
Maxim Kuznetsov:

다른 자격 증명으로 연결해 보세요. 즉, MySQL에 대한 다른 로그인/패스를 사용합니다. 즉, 데이터베이스에 대한 적절한 권한으로 다른 로그인을 하세요.

그리고 트랜잭션 모드에서 작업합니다.


새 사용자를 만들고 그의 자격 증명으로 연결을 시도했지만 도움이되지 않았습니다!