본문 바로가기

시스템 트레이딩/예스트레이더

[시스템트레이딩] 예스트레이더로 DB 조회, 입력, 삭제하기

반응형

이전글 : [시스템 트레이딩] 예스트레이더와 파이썬 간 DB를 통한 연동 테스트

 

[시스템 트레이딩] 예스트레이더와 파이썬 간 DB를 통한 연동 테스트

개요 예스트레이더의 경우 예스스팟을 사용하면 진입신호를 잡아서 매수하는 것은 문제가 없으나, 청산할 때 복잡한 조건을 사용하기가 어렵다. 단일 종목으로 트레이딩하는 경우 예스랭귀지��

bizanalytics.tistory.com

 

이전 글에 이어서, 예스트레이더와 예스스팟을 통해서 DB에 데이터를 읽고 쓰는 방법을 통해 포트폴리오를 관리하는 방법을 소개해 보려고 한다.

 

이번 글에서는 DB 테이블에 매수 종목을 추가하고, 조회, 삭제하는 정도만 다뤄보겠다.

 

1. DB 객체 연결 및 데이터 조회

 

DB의 테이블에서 데이터를 읽어오기 위해서는 Select 함수를 사용해야 한다.

 

var cond = false;
var cond = DB1.Select("* FROM [portfolio]", "portfolio");
if (cond==true) {
	DB1.MoveFirst();
};

 

DB1은 데이터베이스 객체명이며, 사용자가 정한 객체명을 사용하면된다. 그리고 [portfolio]는 테이블 명을 입력한다.

Select 함수는 정상적으로 데이터를 읽어오면 true, 그렇지 않으면 false를 반환한다. 위의 코드에서는 데이터를 정상적으로 읽어온 경우 데이터의 가장 처음으로 이동하게 된다.

 

2. 데이터를 처음부터 읽어오기

 

데이터를 읽어오기 위해서는 MoveNext 함수로 Row를 이동하면서 GetFieldValue로 각 컬럼의 데이터를 읽어온다. 그리고 데이터의 마지막 행에 도달할 때까지 이를 반복한다.

 

while (true){
	if (DB1.IsEOF() == false) {
		Main.MessageLog(DB1.GetFieldValue(0));
		DB1.MoveNext();
	 } else {
	  	 break;
	 }
}

 

예를 들어 portfolio라는 테이블에 아래와 같은 데이터가 저장되어 있다고 하면, 1행부터 8행까지 이동하면서 첫번째 컬럼인 code의 내용을 출력하게 된다. 

 

 

위의 코드를 모두 정리하면 아래와 같다.

 

var cond = false;
var cond = DB1.Select("* FROM [portfolio]", "portfolio");
if (cond==true) {
    DB1.MoveFirst();
    while (true){
        if (DB1.IsEOF() == false) {
            Main.MessageLog(DB1.GetFieldValue(0));
            DB1.MoveNext();
         } else {
             break;
         }
    }
}

 

3. 새로운 데이터 입력하기

 

테이블에 새로운 데이터를 하는 방법은 매우 간단하다. Insert함수를 사용하면 되고 string 형식으로 작성해서 좀 불편할 수 있지만 테이블의 컬럼 순으로 값을 전달하면 된다.

 

DB1.Insert("[portfolio2] Values('009020', '2020-07-24', 10000, 'BUY')");	

 

여기서 유의할 점은 테이블의 데이터 형식에 맞춰서 문자열은 따옴표(')로 묶어주고, integer값은 그냥 숫자만 넣어줘야 한다.

 

4. 데이터 삭제하기

 

데이터 삭제는 Delete 함수를 사용하면 된다. 예스스팟의 쿼리문이 일반적인 sql 쿼리문과 달라서 처음에는 많이 헷갈릴 수 있는데 적응하면 그냥 쉽게 사용이 가능하다.

 

DB1.Delete("[portfolio] WHERE code='009020'");

 

 

쓰고 나니 별 내용이 없는 듯하다. 사실 이걸 예스트레이더와 예스스팟 없이 날코딩으로 구현하려고 한다면 코드가 더 늘어날 수 밖에 없는데, 예스스팟 덕분에 매우 간단하게 코딩이 가능한 듯 하다.

 

다음 글에서는 DB와 종목 검색을 통한 매수, 매도에 대해서 글을 써보도록 하겠다.

반응형