컴퓨터활용/유닉스

일괄 거래 재거래

멜번초이 2017. 6. 8. 18:09

프로프레임에서 제공하는 pfmtcl 명령을 이용하여 거래를 재현할 수 있다. 하나이던 여러개 이던 거래 전문을 별도의 파일로 저장한 후에 다음 쉘을 이용하여 거래를 재현할 수 있다. 
아래 쉘 프로그램은 text 로 저장된 거래 전문 파일을 한 line 씩 읽으면서 pfmtcl 거래를 하는 예제이다. 이 때 pfmtcl 은 거래 전문을 읽어서 IPPR로 거래를 날릴 수 있는 기능이 제공되어야 한다. (여기서는 pfmtcl -s  명령이라고 가정한다, 사이트 마다 옵션이 다름)  사용옵션은 pfmtcl 명령을 실행하면 사용법을 보여주기도 한다. 또는 매뉴얼을 참고한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
[test_all.sh]
 
#!/usr/bin/ksh
==================================================================================================
# @file             test_all.sh 
# @brief            일괄거래테스트 실행 
#
# @dep-program
# @dep-infile
# @dep-outfile
#
# @usage
#
# @history
#  버    전 : 성  명  :  일  자    :  근거  자료    :          변       경        내       용
#  --------   ------     --------     -----------     ---------------------------------------------
#   V1.00   : 최성환  : YYYYMMDD  : 프로젝트       : 신규 작성 
#
==================================================================================================
**************************************** env definition ******************************************
------------------------------------------------------------------------------------------------ #
#  실행 환경 정의 : 디렉토리 및 TEAM / SUBTEAM 정의
------------------------------------------------------------------------------------------------ #
date=`date +%Y/%m/%d`
st_date=`date +%H:%M:%S`
HOSTNAME=`hostname`
USER=`whoami`
 
************************************* execute (sql/program) *************************************
----------------------------------------------------------------------------------------------- #
#  프로그램 실행
----------------------------------------------------------------------------------------------- #
 
if [ $# -eq 0 ];then
   echo "Usage : `basename $0` ilog.dat"
   exit;
fi
 
CNT=0
while IFS= read -r line;do
 
  DATETIME=`date +%Y%m%d%H%M%S`
  GLOB_ID=`echo "$line" | cut -9-40`
 
  # echo  "${GLOB_ID}"
  ./pfmtcl -"$line" >$GLOB_ID.log 2>&1
  # cat $GLOB_ID.log
  if [ -"$GLOB_ID.log" ];then
     ERR_C=`grep ERR_C "$GLOB_ID.log"  | grep ERR_C | tail -1 | cut -75-`
     rm -"$GLOB_ID.log" > /dev/null 2>&1
  else 
     ERR_C="NO"
  fi
 
  DATETIME2=`date +%Y%m%d%H%M%S`
  ((CNT=CNT+1))
  ((TTIME=DATETIME2-DATETIME))
 
  echo "${DATETIME}:${GLOB_ID} > ${ERR_C} $CNT $TTIME"
done < $1
cs

실행방법은 다음과 같다.

1
 test_all.sh  b.dat 
cs

여기서 b.dat 에는 거래 전문 여러개가 들어있다. 보다 대량 거래 재현을 위하여 수만건의 거래를 모아서 순차적으로 날려보기도 한다.  위의 쉘에서는 거래를 날린 후 나오는  output 에서 ERR_C 문자가 들어있는 라인을 찾아서 응답코드를 잘라내서 보여준다.  이 결과를 파일로 별도로 모으고 싶다면 " > 파일명" 기능을 이용하면 된다.

실행결과에서 에러코드가 리턴된 경우 에러코드를 보여주고 정상리턴된 경우는 에러코드란이 비어 있다. 에러코드 뒤에는 전문의 일련번호와 수행시간을 표시해 주고 있다.

1
2
3
4
5
20170608154153:20170103030220100360000900549900 > [        ] 1 1
20170608154153:20170105030220100000001347098700 > [        ] 2 1
20170608154153:20170102030220100360000833421300 > [        ] 3 1
20170608154153:20170101ngtestap4534312250200201 > [APP00055] 4 1
20170608154153:20170107000602694821080000060201 > [        ] 5 1
cs