기고글 토론 "SQLite: MQL5로 SQL 데이터베이스의 처리" - 페이지 2

 

Renat Fatkhullin:

하나의 터미널에서 실행된 서로 다른 MQL5 Expert Advisor 내에서 동일한 데이터베이스를 공유할 수 있습니다(
).

하나의 터미널에서 동일한 데이터베이스로 두 명의 Expert Advisor의 작업을 테스트했습니다. 오류 없이 작동하며 두 Expert Advisor 모두 2초의 타이머에 따라 하나의 파일에 데이터를 씁니다.

파일은 첨부되어 있으며 전문가 어드바이저의 이름만 다릅니다.

2020.02.19 17:56:14.624 SecondExpertDataBase (GBPUSD,H1)        16:56:14: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:16.627 SecondExpertDataBase (GBPUSD,H1)        16:56:16: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:18.616 SecondExpertDataBase (GBPUSD,H1)        16:56:18: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:20.630 SecondExpertDataBase (GBPUSD,H1)        16:56:20: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:22.078 FirstExpertDataBase (USDCHF,H1)         16:56:21: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:22.629 SecondExpertDataBase (GBPUSD,H1)        16:56:22: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:24.071 FirstExpertDataBase (USDCHF,H1)         16:56:24: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:24.619 SecondExpertDataBase (GBPUSD,H1)        16:56:24: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:26.070 FirstExpertDataBase (USDCHF,H1)         16:56:26: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:26.619 SecondExpertDataBase (GBPUSD,H1)        16:56:26: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:28.079 FirstExpertDataBase (USDCHF,H1)         16:56:27: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:28.625 SecondExpertDataBase (GBPUSD,H1)        16:56:28: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:30.079 FirstExpertDataBase (USDCHF,H1)         16:56:30: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:30.617 SecondExpertDataBase (GBPUSD,H1)        16:56:30: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:32.069 FirstExpertDataBase (USDCHF,H1)         16:56:32: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:32.627 SecondExpertDataBase (GBPUSD,H1)        16:56:32: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:34.073 FirstExpertDataBase (USDCHF,H1)         16:56:33: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:34.627 SecondExpertDataBase (GBPUSD,H1)        16:56:34: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:36.616 SecondExpertDataBase (GBPUSD,H1)        16:56:36: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:38.079 FirstExpertDataBase (USDCHF,H1)         16:56:38: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:38.615 SecondExpertDataBase (GBPUSD,H1)        16:56:38: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:40.072 FirstExpertDataBase (USDCHF,H1)         16:56:40: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:40.618 SecondExpertDataBase (GBPUSD,H1)        16:56:40: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:42.630 SecondExpertDataBase (GBPUSD,H1)        16:56:42: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:44.617 SecondExpertDataBase (GBPUSD,H1)        16:56:44: added 1 record on GBPUSD to timer.sqlite


메타에디터에서 데이터베이스가 어떻게 보이는지는 다음과 같습니다.


 
Chiripaha:

µl5에 설명된 내용을 µl4에서도 사용할 수 있나요?

MQL4에서는 MQL용 래퍼를 통해 네이티브 Sqlite3_32.dll로 작업할 수 있습니다.

/*
 * MT4용 SQLite 인터페이스
 */

#import "sqlite3_wrapper.dll"
int sqlite_exec (string db_fname, string sql);
int sqlite_table_exists (string db_fname, string table);
int sqlite_query (string db_fname, string sql, int& cols[]);
int sqlite_next_row (int handle);
string sqlite_get_col (int handle, int col);
int sqlite_free_query (int handle);
#import

이 래퍼는 MQL용 래퍼이므로 SQLite3Wrapper.dll과 혼동하지 마세요.

그러나 여전히 온라인 상태인지 여부는 모르겠지만 이전에 사용했습니다.

업데이트: https: //github.com/Shmuma/sqlite3-mt4-wrapper
Shmuma/sqlite3-mt4-wrapper
Shmuma/sqlite3-mt4-wrapper
  • Shmuma
  • github.com
Database file is by default stored to . If you specify a full path as database filename, it's used. Terminal data path TERMINAL_DATA_PATH can be known by the following instruction. Open MT4 Open [File] menu Click "Open Data Folder" Sample Many sample scripts in under . Precautions Argument mess MT4 build 610 has a weird bug when dll function...
 
fxsaber:

누가 그것을 알아 냈는지, 그러한 작업의 구현을 보여주세요.

  1. 터미널이 두 개 있습니다.
  2. 터미널1에서 터미널2의 해당 사용자 지정 기호로 한 심볼의 실시간 따옴표를 전송해야 합니다.

또 다른 뉘앙스가 있습니다. 따옴표 (날짜가 증가하는)와 같이 흩어지지 않고 증가하는 가치와 함께 일관된 데이터를 데이터베이스에 저장하는 것은 매우 비용이 많이 드는 작업입니다. 트리의 균형이 맞지 않고 한 가지가 무한정 자라며 엔진이 트리의 균형을 정기적으로 재조정합니다(이것은 쓰레기 수집보다 더 나쁩니다). 아마도 이것은 인덱싱 된 테이블에만 적용될 수 있습니다. 아니면 내가 사용하지 않은 몇 년 동안 이미 해결되었을 수도 있습니다. 시도해 봐야겠습니다. 개발자들조차도 분석할지도 모르니 관심을 가져야 할 것입니다.

 

데이터베이스 가져오기()

간단한 스크립트

void OnStart()
  {
  string filename="DOMdb.db";
  int database=DatabaseOpen(filename, DATABASE_OPEN_READWRITE  );
  DatabaseImport(database,             // DatabaseOpen에서 받은 데이터베이스 핸들
                     "DOMtb",             // 데이터 삽입을 위한 테이블 이름
                     "AllDOM.csv",          // 데이터 가져오기 파일 이름
                       0,             // 플래그 조합
                      ";",         // 데이터 구분 기호 
                        0,         // 건너뛸 첫 줄 수 
                      "//"     // 주석을 정의하는 문자열
   );
   
  }

2020.02.20 15:09:27.171 MQL5 'DOMcopy.ex5'에 지원되지 않는 최신 버전이 있습니다. 클라이언트 터미널을 업데이트하세요.

버전 5 빌드 2323 최신 메타 편집기는 동일하며 디버깅이 작동하지 않습니다.

미완성된 부분이 있나요?

 

데이터베이스 가져오기 기능은 아직 일반에 공개되지 않았습니다.

출시될 때까지 기다려주세요.

 
주제에는 없지만: 개발자들이 아직 MS SQL Server에 대한 연결을 구현하지 않은 이유가 궁금합니다.
 
Rashid Umarov:

데이터베이스 가져오기 함수는 아직 일반에 공개되지 않았습니다.

출시될 때까지 기다려주세요.

버전 5 빌드 2326도 마찬가지이므로 안정적인 버전이 나올 때까지 기다려주세요.

 
IuriiPrugov:

버전 5 빌드 2326은 언제까지 안정 버전을 기다려야 하는 건가요?

트레이딩, 자동매매 시스템, 트레이딩 전략 테스트에 관한 포럼.

메타트레이더 5 빌드 2340 새 버전: 테스터에서 계좌 설정 관리 및 파이썬과의 통합 확대

MetaQuotes, 2020.02.20 14:55

2020년 2월 21일 금요일에 메타트레이더 5 플랫폼의 업데이트 버전이 출시됩니다. 업데이트에는 다음과 같은 변경 사항이 포함되어 있습니다:

  1. 메타에디터: SQLite 데이터베이스로 편리하게 작업할 수 있는 기능이 추가되었습니다.

    이전 플랫폼 업데이트에서 MQL5에서 직접 SQLite 데이터베이스로 작업할 수 있는 지원이 추가되었습니다. 이제 메타에디터 사용자 인터페이스(

    )를 통해 주요 기능을 사용할 수 있습니다.
    • 데이터베이스 생성 및 연결
    • 테이블 보기 및 빠른 데이터 쿼리
    • SQL 쿼리 작성 및 실행, 변경 사항 롤백

    작동 방식
    데이터베이스를 빠르게 만들려면 "MQL5 마법사"를 사용하세요. 여기에서 즉시 첫 번째 테이블을 만들고 해당 필드 목록을 정의할 수 있습니다.




    데이터베이스를 만들면 "내비게이터"의 새 섹션으로 이동합니다. 데이터에 대한 모든 작업은 이 섹션에서 수행됩니다.

    왼쪽 부분에는 데이터베이스 테이블이 표시됩니다. 처음 1,000개의 레코드를 빠르게 쿼리하려면 테이블 이름을 두 번 클릭합니다. 여기에서 다른 데이터베이스를 만들고 열고 테이블로 작업할 수도 있습니다.

    편집기의 주요 부분은 데이터로 테이블을 채우고, 검색 및 선택을 하고, SQL 쿼리를 입력하는 등 데이터베이스 작업을 하는 곳입니다(
    ).



    메타트레이더 5에서 데이터베이스 작업에 대한 자세한 내용은"SQLite: MQL5에서 SQL 데이터베이스 네이티브 작업" 문서를 참조하세요(

    ).
  2. 메타에디터: 다국어 프로젝트에 대한 지원을 계속 추가하고 있습니다. 이번 버전에서는 Python 스크립트 작업 기능을 확장했습니다(

    ).
    • 이제 "MQL5 마법사"를 통해 코드에 필요한 라이브러리에 대한 종속성을 즉시 포함하여 편리하게 만들 수 있습니다.
    • 이를 위한 특별한 아이콘이 탐색기에 추가되었으며 에디터의 구문 강조 표시도 추가되었습니다.
    • 메타에디터를 통해 스크립트를 실행할 때 Python 콘솔의 메시지(stdout, stderr)가 "오류" 섹션에 표시됩니다(
      ).




    편집기에서 스크립트를 실행하려면 "컴파일"(
    )을 클릭합니다.





    파이썬으로 작업하려면 메타에디터의 "설정/컴파일러" 섹션에서 파이썬 경로를 지정하는 것을 잊지 마세요. 메타트레이더 5 라이브러리로 작업하려면
    명령을 사용하여 설치하십시오.
    pip install MetaTrader 5
    문서에서 파이썬과의 통합에 대해 자세히 읽어보십시오(

    ).
  3. MQL5: 파이썬과의 통합을 완전히 새롭게 디자인했습니다. 많은 새로운 기능이 추가되고 명령 이름이 변경되었습니다.

    새 명령 이름
    기존 명령의 이름이 변경되었습니다:
    MT5Initialize       -> initialize
    MT5Shutdown         -> shutdown
    MT5TerminalInfo     -> terminal_info
    MT5Version          -> version
    MT5CopyRatesFrom    -> copy_rates_from
    MT5CopyRatesFromPos -> copy_rates_from_pos
    MT5CopyRatesRange   -> copy_rates_range
    MT5CopyTicksFrom    -> copy_ticks_from
    MT5CopyTicksRange   -> copy_tick_range

    새로운 명령
    지원되는 명령어 목록이 대폭 확장되었습니다.

    거래 및 거래 내역 작업, 금융상품 및 현재 계좌에 대한 정보 가져오기 기능이 추가되었습니다.
    • account_info() - 현재 계좌에 대한 정보를 가져옵니다. 계정정보정수, 계정정보이중계정정보 문자열과 유사합니다.
    • positions_total() - 개설된 포지션 수를 수신합니다. 포지션 합계와 유사합니다.
    • positions_get(기호, 티켓) - 기호 또는 티켓별로 개설된 포지션을 가져옵니다.
    • orders_total() - 주문 수를 가져옵니다. OrdersTotal의 유사 함수.
    • orders_get(심볼, 티켓) - 심볼 또는 티켓별로 미체결 주문을 가져옵니다.
    • history_orders_total(from, to) - 지정된 시간 간격 동안 기록에 있는 주문 수를 가져옵니다.
    • history_orders_get(from, to, position, ticket) - 티켓별로 또는 포지션별로 필터링하여 지정된 시간 간격의 기록에서 주문을 가져옵니다.
    • history_deals_total() - 기록에서 거래 수를 가져옵니다. HistoryDealsTotal의 유사 함수입니다.
    • history_deals_get(from, to, position, ticket) - 티켓별로 또는 위치별로 필터링하여 지정된 간격의 히스토리에서 거래를 가져옵니다.
    • 심볼_정보(심볼) - 금융상품에 대한 정보 가져오기. 심볼인포인티저, 심볼인포더블, 심볼인포스트링과 유사합니다.
    • 심볼_정보_틱(심볼) - 심볼별 마지막 틱을 가져옵니다. SymbolInfoTick의 아날로그.
    • symbol_select(symbol, enable) - "마켓 워치"에서 심볼을 활성화/비활성화합니다. 심볼선택의 아날로그.
    • order_check(request) - 주문에 대한 증거금 확인. 주문 확인의 아날로그.
    • order_send(요청) - 주문을 서버로 보내기. OrderSend의 아날로그.
    • order_calc_margin(action, symbol, volume, price) - 주문에 대한 마진 계산. OrderCalcMargin의 아날로그.
    • order_calc_profit(action, symbol, volume, price_open, price_close) - 수익 계산. OrderCalcProfit의 아날로그.
      .

    차트에서 Python 스크립트 실행
    이제 일반 MQL5 프로그램과 유사하게 플랫폼의 차트에서 Python 스크립트를 직접 실행할 수 있습니다. 스크립트는 "탐색기"에 특수 아이콘과 함께 표시됩니다.
    .



    스크립트 메시지는 "도구/전문가" 섹션에 표시됩니다. 스크립트가 메타트레이더 5 라이브러리를 사용하는 경우 상품, 계좌 및 거래에 대한 정보를 수신할 수 있습니다.

    파이썬 스크립트는 다른 MQL5 스크립트 및 전문가 조언자와 동일한 차트에서 병렬로 실행할 수 있습니다. 스크립트 실행이 반복되는 경우 스크립트를 중지하려면 차트에서 스크립트를 제거하면 됩니다.

    추가 보호
    타사 Python 라이브러리 사용 시 계정을 더욱 보호하기 위해 터미널 설정에 "외부 Python API를 통한 자동 거래 비활성화" 옵션이 추가되었습니다(
    ).




    이 옵션이 명시적으로 비활성화된 경우에만 파이썬 스크립트 거래가 허용됩니다.

    .
  4. MQL5: MQL5 프로그램 재실행 및 MQL5 프로그램에서 사용자 지정 지표를 다시 생성하는 속도가 크게 빨라졌습니다. 경우에 따라 속도가 수백 배 빨라졌습니다.
    .
  5. MQL5: 데이터베이스 작업을 위한 기능 추가:

    DatabaseImport
    파일에서 테이블로 데이터를 가져옵니다.
    .
    long  DatabaseImport(
       int           database,          // DatabaseOpen에서 받은 데이터베이스 핸들
       const string  table,             // 데이터 삽입을 위한 테이블 이름
       const string  filename,          // 데이터 가져오기 파일 이름
       uint          flags,             // 플래그 조합
       const string  separator,         // 데이터 구분 기호 
       ulong         skip_rows,         // 건너뛸 첫 줄 수 
       const string  skip_comments      // 주석을 정의하는 문자열
       );

    DatabaseExport
    테이블 또는 SQL 쿼리 실행 결과를 CSV 파일로 내보냅니다. 파일은 UTF-8 인코딩으로 생성됩니다.
    long  DatabaseExport( 
       int           database,           // DatabaseOpen에서 받은 데이터베이스 핸들 
       const string  table_or_sql,       // 테이블 이름 또는 SQL 쿼리 
       const string  filename,           // 데이터 내보내기를 위한 CSV 파일 이름 
       uint          flags,              // 플래그 조합 
       const string  separator           // CSV 파일의 데이터 구분 기호 
       );

    DatabasePrint
    테이블 또는 SQL 쿼리 실행 결과를 Expert Advisor 로그에 인쇄합니다.
    long  DatabasePrint(
       int           database,          // DatabaseOpen에서 받은 데이터베이스 핸들
       const string  table_or_sql,      // 테이블 또는 SQL 쿼리
       uint          flags              // 플래그 조합
       );

  6. MQL5: 파일 또는 폴더를 생성/열기 위한 시스템 대화 상자를 호출하는 FileSelectDialog 함수가 추가되었습니다.
    int  FileSelectDialog(
       string   caption,              // 창 제목
       string   initial_dir,          // 시작 폴더
       string   filter,               // 확장 필터
       uint     flags,                // 플래그 조합
       string&  filenames[],          // 파일 이름이 있는 배열
       string   default_filename      // 기본 파일 이름
       );
    이 새로운 함수를 통해 MQL5 프로그램과 편리한 사용자 상호 작용을 구현할 수 있습니다.

    .
  7. MQL5: 거래 수행에 대한 지불인 DEAL_FEE가 ENUM_DEAL_PROPERTY_DOUBLE 열거형에 추가되었습니다. 실제로 이는 브로커가 부과할 수 있는 별도의 수수료 유형입니다.

    .
  8. 테스터: 전략을 테스트할 때 거래 한도, 마진 설정, 수수료 등 트레이딩 계좌 설정을 직접 설정할 수 있는 기능이 추가되었습니다. 따라서 브로커의 다양한 거래 조건을 시뮬레이션 할 수있는 더 많은 가능성을 얻게됩니다.
    .




    일반 설정
    이 섹션에서는 계좌에 동시에 보유할 수 있는 최대 개설 주문 수와 포지션 수를 설정할 수 있습니다. 또한 여기에서 테스트 프로그램이 거래가 허용되지 않는 세션을 설정할 수 있습니다.


    마진
    여기에서 마진을 예약하는 방법과 테스트 중에 사용할 포지션 계좌 시스템을 완전히 제어할 수 있습니다:

    .
    • 위험 관리 - 위험 관리 모델: 장외 및 거래소 거래, 네팅 및 헤징. 이에 대한 자세한 정보는 도움말에서 확인할 수 있습니다(
      ).
    • "마진콜" 수준 - 계좌의 자금 수준이며, 이 수준에 도달하면 마진콜 상태로 전환됩니다.
    • "스톱 아웃" 레벨 - 계좌가 주문을 인출하고 거래 포지션을 청산해야 하는 자금 수준입니다. 두 레벨 모두 퍼센트와 금액으로 지정할 수 있습니다. 첫 번째 경우 레벨은 계좌의 "자금" 표시기의 값으로 정의됩니다. "백분율" 옵션을 선택하면 계좌의 "마진 레벨" 표시기의 값(자금/마진*100)으로 레벨이 정의됩니다.
    • 미실현 - 이 필드는 현재 미실현 손익을 여유 증거금에서 어떻게 계산할지 지정합니다(
      ).
      • 미실현 수익/손실 사용 안 함 - 계산 시 오픈 포지션을 고려하지 않습니다.
      • 미실현 손익 사용 - 계산에 오픈 포지션의 손실과 이익을 사용합니다.
      • 미실현 이익 사용 - 이익만 사용합니다.
      • 미실현 손실 사용 - 손실만 사용합니다.
    • 일일 고정 - 이 필드는 거래일 동안 트레이더가 고정시킨 손익을 자유계약가능 잔여금에 반영하는 방법을 지정합니다(
      ).
      • 일일 고정 손익 사용 - 거래일 동안 고정된 손익을 프리마진에 고려합니다.
      • 일일 고정 손실 사용 - 거래일 동안 고정된 손실만 프리마진에 고려합니다. 하루 동안 누적된 수익은 별도의 계좌 필드에 고정됩니다("잠김"). 거래일이 끝나면 누적된 수익이 해제(제로화)되어 계좌 잔고에 반영됩니다(여유 마진으로 계산).
    • 하루가 끝날 때 누적 수익 릴리스 - 이 옵션은 "일일 고정 손실 사용" 옵션이 활성화된 경우에만 사용할 수 있습니다. 이 옵션을 활성화하면 거래일이 끝나면 하루 동안 누적된 수익이 해제되어 잔고에 기록됩니다(따라서 여유 마진에 계상됩니다). 그렇지 않으면 그렇지 않습니다.




    수수료
    이 섹션에서는 모든 거래에 대해 수수료가 부과되는 방식을 완전히 제어할 수 있습니다.
    • 수수료는 단일 또는 다단계, 즉 거래량/매출액에 관계없이 동일한 금액으로 부과되거나 거래 규모에 따라 달라질 수 있습니다. 관련 정보는 사양에 표시되어 있습니다.
    • 수수료는 거래 체결 즉시 또는 거래일/월말에 부과될 수 있습니다.
    • 수수료는 거래 방향에 따라 진입, 청산 또는 두 가지 유형의 거래 모두에 대해 부과될 수 있습니다.
    • 수수료는 랏당 또는 거래당 부과될 수 있습니다.
    • 수수료는 금액, 퍼센트 또는 핍 등 다양한 금액으로 부과될 수 있습니다.



  9. 테스터: "마켓 스캔" 모드에서 "마켓 워치"의 모든 종목에 대해 여러 차례 테스트를 통과하면 작업이 최적화되고 속도가 크게 빨라집니다.
    .
  10. 테스터: 핍 단위로 수익을 계산할 때 이제 거래 또는 포지션의 크기가 고려됩니다. 이전에는 한 랏에 대해 거래량을 고려하지 않고 계산했습니다.
  11. 테스터: 최적화 결과 차트 관리가 개선되었습니다. 일반 최적화 차트를 확대할 때 이제 차트를 스크롤할 수 있습니다. 이제 차트의 한 지점을 두 번 클릭하면 합격률 표에서 해당 결과가 강조 표시됩니다.
    .
  12. 메타에디터: "탐색기"에 SQLite 데이터베이스 파일(*.db;*.sdb;*.sqlite;*.db3;*.s3db;*.sqlite3) 표시가 추가되었습니다.
  13. 메타에디터: 프로젝트 속성 저장 시 오류 수정.
    .
  14. 문서 업데이트.
    .

업데이트는 라이브업데이트 시스템을 통해 제공됩니다.


 

안정적인 버전 5 빌드 2340 DatabaseImport는 실행 시 동일한 DatabaseImport를 표시합니다.

2020.02.22 14:01:42.338 MQL5 'DOMcopy.ex5'에 지원되지 않는 최신 버전이 있음, 클라이언트 터미널을 업데이트하세요.

 

안녕하세요!

인디케이터에서 데이터베이스에 대한 연결을 만들려고 했지만 어떤 이유로 작동하지 않았습니다.

데이터베이스를 사용할 수 있는 프로그램이 어디에도 나와 있지 않은 이유는 무엇인가요?