개요
별도의 dll 이나 추가 설정 없이 MQL5 코드에서 즉시 SQLite 데이터베이스 관련 처리 가능.
MQL5 에서 SQLite DB 활용 코드 예
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
CCy_AP909_TA_DB_Sqlite_1.mqh | |
2024.10.26 | |
CyEA909 에서 활용되는 SQLite DB CyEA909.sqlite 핸들링. | |
- 종목별로 다른 정보(예 : 커미션)이면서 mql5 에서 함수 제공안되는 것들 처리위함. | |
*/ | |
enum CyENUM_COMMISSION_MODE | |
{ | |
emCMSN_Mode_Zero = 0 // 커미션 없음. | |
,emCMSN_Mode_InDeal = 1 // 포지션 오픈시에만 수수료 부과 | |
,emCMSN_Mode_InOutDeal = 2 // 포지션 오픈 , 청산시 각각 수수료 부과. | |
}; | |
enum CyENUM_COMMISSION_VALUETYPE | |
{ | |
emCMSN_ValueType_NotDefined =0 // emCMSN_Mode_Zero 인 경우. | |
, emCMSN_ValueType_Percent_Per_TurnOverUSD =1// USD 거래대금의 퍼센트. | |
, emCMSN_ValueType_USD_Per_VolLot =2// 주문수량 1랏당 USD | |
}; | |
class CCy_AP909_TA_DB | |
{ | |
private: | |
string DB_file_name; | |
public: | |
CCy_AP909_TA_DB(string db_file_name); | |
~CCy_AP909_TA_DB(); | |
private: | |
void Create_DB(); | |
public: | |
void Write_Single_Commission(string symbol_meta, CyENUM_COMMISSION_MODE em_commission_mode, CyENUM_COMMISSION_VALUETYPE em_commission_valuetype, string commission_value); | |
void Read_Single_Commission(string symbol_meta, CyENUM_COMMISSION_MODE & em_commission_mode, CyENUM_COMMISSION_VALUETYPE & em_commission_valuetype, string & commission_value); | |
}; | |
CCy_AP909_TA_DB::CCy_AP909_TA_DB(string db_file_name) | |
: DB_file_name(db_file_name) | |
{ | |
Create_DB(); | |
} | |
CCy_AP909_TA_DB::~CCy_AP909_TA_DB() | |
{ | |
} | |
void CCy_AP909_TA_DB::Create_DB() | |
{ | |
// DB 오픈, 없다면 새로 생성. | |
int db = DatabaseOpen(DB_file_name, DATABASE_OPEN_READWRITE | DATABASE_OPEN_CREATE); | |
if(db == INVALID_HANDLE) { | |
Print("Database connection failed. Error: ", GetLastError()); | |
return; | |
} | |
// T_Single 테이블 생성 SQL 쿼리. 없다면 새로 생성. | |
string createTableQuery = | |
"CREATE TABLE IF NOT EXISTS T_Single (" | |
"SymbolMeta TEXT PRIMARY KEY, " | |
"Commission_Mode TEXT, " // In Deal, In/Out Deal. Zero commission. | |
"Commission_ValueType TEXT, " // | |
"Commission_Value TEXT);"; | |
// 테이블 생성 쿼리 실행 | |
if(DatabaseExecute(db, createTableQuery)) { | |
Print("Table T_Single created successfully."); | |
} else { | |
Print("Failed to create table T_Single. Error: ", GetLastError()); | |
} | |
// 데이터베이스 연결 종료 | |
DatabaseClose(db); | |
} | |
void CCy_AP909_TA_DB::Write_Single_Commission(string symbol_meta, CyENUM_COMMISSION_MODE em_commission_mode, CyENUM_COMMISSION_VALUETYPE em_commission_valuetype, string commission_value) | |
{ | |
// DB 열기 | |
int db = DatabaseOpen(DB_file_name, DATABASE_OPEN_READWRITE); | |
if(db == INVALID_HANDLE) { | |
Print("Failed to open database for writing. Error: ", GetLastError()); | |
return; | |
} | |
// SQL 쿼리 작성 (있으면 UPDATE, 없으면 INSERT) | |
string query = "INSERT OR REPLACE INTO T_Single (SymbolMeta, Commission_Mode, Commission_ValueType, Commission_Value) " | |
"VALUES ('" + symbol_meta + "', " + IntegerToString((int)em_commission_mode) + ", " + IntegerToString((int)em_commission_valuetype) + ", '" + commission_value + "');"; | |
// SQL 쿼리 실행 | |
if(DatabaseExecute(db, query)) { | |
Print("Commission data written successfully for symbol: ", symbol_meta); | |
} else { | |
Print("Failed to write commission data. Error: ", GetLastError()); | |
} | |
// DB 연결 닫기 | |
DatabaseClose(db); | |
} | |
void CCy_AP909_TA_DB::Read_Single_Commission(string symbol_meta, CyENUM_COMMISSION_MODE &em_commission_mode, CyENUM_COMMISSION_VALUETYPE &em_commission_valuetype, string &commission_value) | |
{ | |
// DB 열기 | |
int db = DatabaseOpen(DB_file_name, DATABASE_OPEN_READONLY); | |
if(db == INVALID_HANDLE) { | |
Print("Failed to open database for reading. Error: ", GetLastError()); | |
return; | |
} | |
// SQL 쿼리 작성 | |
string query = "SELECT Commission_Mode, Commission_ValueType, Commission_Value FROM T_Single WHERE SymbolMeta = '" + symbol_meta + "';"; | |
int result = DatabasePrepare(db, query); | |
if(result == INVALID_HANDLE) { | |
Print("Failed to prepare query for reading commission data. Error: ", GetLastError()); | |
DatabaseClose(db); | |
return; | |
} | |
// 쿼리 실행 및 결과 읽기 | |
if(DatabaseRead(result)) { | |
string cmsn_mode; | |
string cmsn_value_type; | |
DatabaseColumnText(result, 1, cmsn_mode); | |
em_commission_mode = (CyENUM_COMMISSION_MODE)StringToInteger(cmsn_mode); | |
DatabaseColumnText(result, 2, cmsn_value_type); | |
em_commission_valuetype = (CyENUM_COMMISSION_VALUETYPE)StringToInteger(cmsn_value_type); | |
DatabaseColumnText(result, 3, commission_value); | |
Print("Commission data read successfully for symbol: ", symbol_meta); | |
} else { | |
Print("No commission data found for symbol: ", symbol_meta); | |
} | |
// 쿼리 핸들 및 DB 연결 닫기 | |
DatabaseFinalize(result); | |
DatabaseClose(db); | |
} |
위 코드로 만들어진 DB 파일을 DB Browser 로 열어본다.

상위정리
메타트레이더 5. 체계정리. 활용법/지식
MetaTrader 5 메타트레이더 5 , 메타에디터, MQL5 활용정보 체계정리. 본 글에서 주요 정리대상 정보 1. 메타트레이더 5 사용법.2. MQL5 언어 기반 "직접 코딩"하여 메타프레이더5에서 자동매매 달성
igotit.tistory.com
연관
SQLite. 개요. 다운로드. implicit linking 위한 dll, h, lib 파일 확보.
SQLite 개요. 무료 로컬 RDBMS(관계형 데이터베이스 관리시스템)특징. 1. 로컬전용. 서버기능없음.2. 무설치, DB관련 단 1개의 파일.- 응용프로그램에서 도입편리.- SQLite 포함된 응용프로그램 배포편
igotit.tistory.com
첫 등록 : 2024.10.26
최종 수정 :
단축 주소 : https://igotit.tistory.com/5874
'트레이딩 > 메타트레이더 코딩' 카테고리의 다른 글
MT5 . 종목별 주문가능 최소수량 (1) | 2025.03.06 |
---|---|
OnInit, OnDeinit . EA에서 1회만 실행 위한 코드 구조 (0) | 2025.03.04 |
MT5 . 주문 체결 에러 . No Prices . TRADE_RETCODE_PRICE_OFF (=10021) (3) | 2024.10.10 |
bybit MT5 통신 속도 확인 . AWS 일본 , 싱가포르 (1) | 2024.10.09 |
MQL5. 외부 프로그램으로 실시간 데이터 송신 . SendMessage, PostMessage, WM_COPYDATA (0) | 2024.09.06 |
댓글