기고글 토론 "시장 분석을 위한 데이터베이스의 실용적 활용"

 

새로운 기고글 시장 분석을 위한 데이터베이스의 실용적 활용 가 게재되었습니다:

데이터를 다루는 것이야말로 스탠드얼론이나 네트워크 앱을 가리지 않고, 오늘날 개발되는 소프트웨어들의 주 임무가 되었습니다. 이런 문제를 해결하기위해 특화된 소프트웨어가 탄생했습니다. 이들은 데이터베이스 매니지먼트 시스템(Database Management Systems, DBMS)이라고 불리며, 컴퓨터 저장 및 처리를 위해 구조화, 시스템화, 자료 정리가 가능합니다. 거래와 관련해서는 대부분의 분석가들이 업무에서 데이터베이스를 사용하지 않습니다. 그러나 이러한 솔루션을 쓰는 편이 편리한 작업도 있습니다. 이 문서에서는 클라이언트-서버 및 파일-서버 아키텍처 모두에서 데이터베이스에서 데이터를 저장하고 로드할 수 있는 인디케이터의 일례를 보여드리겠습니다.

제 생각에는 몹시 간결하네요. 인디케이터 내에서는 클래스의 함수 중 단 둘 만 호출됩니다: ProcessTick() and SaveData(). ProcessTick() 함수는 계산에 사용되며, 데이터를 저장하지 않긴하지만 tics로 버퍼를 재설정하려면 SaveData() 함수가 필요합니다.

컴파일 해보고, "voila" - 인디케이터가 값을 보여주기 시작합니다:

 

 1번 그림. 데이터베이스로의 링크가 없는 BuySellVolume 인디케이터의 GBPUSD M1 처리

완벽하네요! 틱은 제대로 카운트 되고 인디케이터는 계산이 굴러갑니다. 이 솔루션의 장점은 - 인디케이터 자체 (ex5) 만 필요하지 그 외엔 딱히 필요 없다는 점입니다. 하지만 만약 타임프레임, 기구를 바꾸거나 터미널을 닫으면 데이터는 비가역적으로 소실됩니다. 이를 피하기 위해 인디케이터에서 데이터를 저장하고 불러오는지 알아보겠습니다.

작성자: Alexander

 

이 기사는 매우 유용하며 저만의 데이터베이스를 만들기 위해 여러 번 참조할 것입니다.

아직은 조금 이르지만 일반적으로 다섯 번째 버전의 힘을 이미 느낄 수 있습니다.

 
알렉산더, 이 상황에서 저를 도와주세요...

예를 들어 어떤 배열을 데이터베이스에 저장해야 합니다. 스크립트를 작성했습니다.

다음과 같이 보입니다:

#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

#include <Object.mqh>
#include <Arrays\List.mqh>

// OleDb 구성 요소 연결
#include <Ado\Providers\OleDb.mqh>
#include <Ado\Data.mqh>

double PriceBuffer[];
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 기능|
//+------------------------------------------------------------------+
void OnStart()
  {
   long n1=100;
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   double nClose[];
   ArrayResize(nClose,n1);
   ArrayResize(t,n1);

   CSymbolInfo m_smbinf;
   m_smbinf.Name(Symbol());
   int dg=m_smbinf.Digits();

   int copied=CopyRates(Symbol(),0,0,n1,rates);
   for(int i=0;i<n1;i++)
     nClose[i]=rates[i].close;
     
// SaveDataToDb에 전달할 테이블을 형성합니다.
   CAdoTable *table=new CAdoTable();
   table.Columns().AddColumn("Price",ADOTYPE_DOUBLE);
   ArrayResize(PriceBuffer,n1);
// 버퍼의 데이터로 데이블을 채웁니다.
   for(int i=1; i<n1; i++)
     {
      CAdoRecord *row=table.CreateRecord();
      row.Values().GetValue(0).SetValue(PriceBuffer[i]);
      table.Records().Add(row);
     }
  }

하지만 컴파일 시 다음과 같은 오류가 발생합니다: "'Values' - 보호된 멤버 함수를 호출할 수 없습니다.".

이 오류는 줄과 관련이 있습니다:

row.Values().GetValue(0).SetValue(PriceBuffer[i]);

CBsvEngine::SaveData(void) 함수에서 다음과 같은 줄이 있습니다.

함수에서는 정상적으로 작동했습니다:

// 버퍼의 데이터로 데이블을 채웁니다.
      for(int i=1; i<TicksInBuffer; i++)
        {
         CAdoRecord *row=table.CreateRecord();
         row.Values().GetValue(0).SetValue(TickBuffer[i].time);
         row.Values().GetValue(1).SetValue(TickBuffer[i].bid);
         row.Values().GetValue(2).SetValue(VolumeBuffer[i]);
         table.Records().Add(row);
        }
 
MT5에서 ADO 없이 MySQL(libmySQL.dll을 통해) 및 SQLite(sqlite3.dll을 통해)로 작업할 수 있는 클래스가 있나요?
 
훌륭한 글입니다! 정말 제가 찾던 해결책이었습니다. 불행히도 저는이 기사의 러시아어 버전에서 Denkir가 언급 한 것과 동일한 문제가 있습니다.

오류가 발생하여 컴파일되지 않습니다 :
'Values'-보호 된 멤버 함수를 호출 할 수 없습니다.

CBsvEngine ::SaveData (void) 에서이 줄과 연관되어 있습니다.
row.Values().GetValue(0).SetValue(TickBuffer[i].time);
row.Values().GetValue(1).SetValue(TickBuffer[i].bid);
row.Values().GetValue(2).SetValue(VolumeBuffer[i]);
또한 DbDataAdapter.mqh 파일의 CDbDataAdapter::Fill(CAdoTable *table )에서 'Values()'에 대한 수많은 호출과 관련된 동일한 오류

나는 이것을 정말로 작동시키고 싶습니다. 정말 감사하겠습니다!
 
전략 테스터에서 실행할 수 있나요? 전략 테스터에서 adoSuite를 사용하면 항상 프로그램이 종료됩니다.
 
zephyrrr:

전략 테스터에서 실행할 수 있나요? 전략 테스터에서 아도스위트를 사용하면 항상 프로그램이 종료됩니다.
안타깝게도 586 빌드에는 32비트 DLL 함수 호출에 오류가 있습니다. 다음 빌드에서 수정될 예정입니다.
 
Automated-Trading:
안타깝게도 586 빌드에는 32비트 DLL 함수 호출에 오류가 있습니다. 이 문제는 다음 빌드에서 수정될 예정입니다.
안타깝게도 이 문제는 지난 업데이트 이후에도 해결되지 않았습니다. 해결책이나 권장 사항이 있나요? 얼마나 걸릴 수 있나요? 다음 빌드가 나올 때까지 기다리라고 했는데 문제가 해결되지 않은 채로 나왔습니다.
 
Alexander
  • 2010.04.20
  • www.mql5.com
交易者的个人资料