프로그램 동작시 환경 변수를 읽어와야하는 경우가 많습니다. 주로 프로그램 실행에 관련된 parameter들이나 이전 프로그램 종료 전에 기록한 값 등입니다.

 

환경변수를 읽어오는 다양한 방법이 있겠지만 가장 간단한 방법은 json 형태로 text 파일에 저장하고, 이를 읽어오는 방법입니다.

 

아래는 간단한 예제입니다. 

 

제가 사용하는 자동 매매 프로그램에서 필요한 변수들입니다. 사용할 minute 캔들, MA 값, MACD 계산시 어떤 값을 사용할지, 갭보정을 할지 말지 등등을 미리 아래와 같은 형태로 text 파일로 저장해둡니다.

{
   "min_candle": 1,
   "ma": 120,
   "macd_diff_cal": "close",
   "fixing_gap": 1

}

이렇게 만들어진 json 형태의 txt파일을 읽어오는 코드입니다.

def load_json_from_file(file_name) :
    try :
        with open(file_name,'r',encoding="cp949") as make_file: 
           data=json.load(make_file) 
        make_file.close()
    except  Exception as e : # 또는 except : 
        data = {}
        print(e, file_name)
    return data

 

사용방법은 간단합니다. 그냥 함수 콜을 하면 json 형태의 자료 구조를 돌려줍니다.

 

my_param = load_json_from_file('my_param.txt')

 

만약 프로그램  중 상태 값을 저장하는 경우라면 별도 txt 파일을 사용해서 프로그램 중간 중간 값을 저장하면 됩니다. 저장할 때는 아래와 같이 현재 사용 중인 변수를 그냥 저장하면 됩니다.

 

save_to_file_json('cur_status.txt', cur_status)

 

def save_to_file_json(file_name, data) :
    with open(file_name,'w',encoding="cp949") as make_file: 
       json.dump(data, make_file, ensure_ascii=False, indent="\t") 
    make_file.close()

 

아래 파일은 upbit에서 코인 자동 매매를 하면서 현재 주문 중인 상태를 프로그램 실행 중에 저장하는 json 파일 내용입니다.

 

{
	"values": {
		"latest_tr_price": 3.33,
		"latest_tr_side": "ask"
	},
	"uuids": {
		"7caf5f1c-9c62-49c5-9f4f-090dcd862e7e": {
			"status": 1,
			"side": "bid",
			"org_qty": 500,
			"done_qty": "0.0",
			"price": 3.28
		}
	}
}

 

upbit의 경우에는 매매가 되었다는 event가 발생하지 않아서 이렇게 이전 매매 내역을 가지고 있다가 현재 해당하는 uuid가 없으면 매매가 되었다고 판단합니다. 만약 동작 중 알 수 없는 이유로 종료되었다가 다시 기동하는 중간에 매매가 이루어질 수 있습니다. 이런 경우를 찾기 위하여 기동시 status  파일을 읽어서 해당 uuid가 거래 중 상태인지 확인합니다. 만약 해당 uuid가 없다면 매매가 된 것이므로, 이에 상응하는 대응을 합니다.

 

정리하자면  프로그램 초기에 기동될 때 필요한 parameter 값을 json 형태로 text 파일에 저장하였다가 읽을 수 있습니다. 프로그램 중간 중간 혹은 종료시 필요한 상태 정보를 json 형태도 저장하였다가 이후에 다시 기동될 때 읽을 수 있습니다.

 

해당 함수는 아래 github에서 다운받으실 수 있습니다.

https://github.com/multizone-quant/system-trading-crypto-multi/blob/main/my_util.py

반응형

설정

트랙백

댓글