https://finance.naver.com/

네이버 증권 사이트에 들어가서 검색하는 곳의 소스를 잠깐 보면 다음과 같다.

 

이것을 이용할까? 고민해보았는데

 

웹 주소상의 종목코드를 이용한 접근이 더 편할것으로 보인다.  (https://finance.naver.com/item/main.nhn?code=011070)

 

이제 각 주식별로의 위치까지는 들어가는 것까진 할 수 있다.

 

더나아가면 https://m.stock.naver.com/item/main.nhn#/stocks/005930/notice

 

해당 것을 이용해서, 각 기업에 "공시" 탭까지 들어갈 수 있다.

 

그렇다면? 탭에 들어가서 "배당" 을 검색하여 나온 리스트를 가지고 "언제" 그리고 "얼마" 를 주는지 알아내고 싶어진다.

(가능할까?ㅠㅠ)

 

https://m.stock.naver.com/item/main.nhn#/stocks/005930/notice

의 소스를 검색해보니 이런식으로 구성되어 있는 것을 알 수 있다. 이중에서 일단 "배당"이라는 글자가 들어가는 것을 알아보자

 

 

사용하려고 하는 것은 Beautiful soup 과 request 라이브러리이다.

 

stock_result = requests.get("https://m.stock.naver.com/item/main.nhn#/stocks/005930/notice")

stok_list = BeautifulSoup(stock_result.text, "html.parser")

title_list = stok_list.find("div",{"class":"lst_wrp_contents"})

 

이렇게 해보면.. 

 

결과는?? "NONE"

 

막힌건가

 

그렇다면 다른 방법을 알아봐야지.. 

 

다트 전자공시의 API를 활용해볼까한다.. ㅠㅠ 

 

이거 안되면 "언제" 를 빼고 배당금만 가져오는 방법을 생각해봐야겠다. 

 

지난 https://songveloper.tistory.com/16 이때 돌려봤었고 나왔던 결과에 대해서

지난 9월(https://songveloper.tistory.com/22)에 해봤을 때의 등락률은 337 / 73 = 4.6% 였다.

 

과연 지난 8월 18일에 산 알고리즘을 통해 뽑은 데이터를 샀다면 지금의 등락률은 어느정도일까?

 

참고로 하면, 8월 18일(16일) 코스피는 1,927.17 원 , 9월 16일에는 2,062.22원이였고 지금은 2,246.13원이다. 코스피 지수에만 투자했어도 10%이상의 수익은 냈을텐데...

 

여튼 퀀트투자를 했다면 결과는 총 등락률 543 / 73 = 7.4% 이다.

 

알고리즘은 PER 10배 이하, 부채비율 50%이하, PBR 0.2 이상, ROA 5 이상 그리고 순이익증가율 > 0

여기서 PER 는 최근 분기 (영업이익 * 4) 를 (현재가격 * 총상장주식수) 로 나눈 것을 사용하였습니다.

그리고, 그것에 대해서 PER,PBR,PSR,PCR 의 합으로 정렬했었는데... 

 

생각보다 결과의 상위는 수익률이 매우 안좋고, 저 데이터의 하위만 놓고 보면 굉장히 좋은 수익률을 보인다.

 

아래에서 35개는 총 583 / 35 = 16%, 위에서 35개는 -37 / 35 = - 1.x%

 

아이러니한것이고, 어찌보면 좋은 가치의 주식을 고를 수는 있는데 이 PER,PBR,PSR,PCR 의 합의 순위가 결코 주가에 지대한 영향을 주지 않을 수 있다는 생각이든다.

 

종목코드

종목명

등락금액()

등락률(%)

현재가
(2020
1 26)

과거가격
(2019
8 18)

A900300

오가닉티코스메틱

-535

-32.32628399

1120

1655

A006650

대한유화

-3500

-3.13901345

108000

111500

A088130

동아엘텍

550

7.37265416

8010

7460

A054800

아이디스홀딩스

200

1.68776371

12050

11850

A029460

케이씨

5900

46.82539683

18500

12600

A023600

삼보판지

130

1.4541387

9070

8940

A003240

태광산업

-1000

-0.10111223

988000

989000

A009970

영원무역홀딩스

-6150

-12.05882353

44850

51000

A900280

골든센츄리

-433

-56.82414698

329

762

A013120

동원개발

-150

-3.61445783

4000

4150

A101330

모베이스

-910

-18.05555556

4130

5040

A016590

신대양제지

-1300

-1.86246418

68500

69800

A004490

세방전지

-2050

-5.49597855

35250

37300

A093050

LF

-4150

-20.04830918

16550

20700

A088910

동우팜투테이블

-110

-3.16091954

3370

3480

A016090

대현

30

1.24223602

2445

2415

A017890

한국알콜

850

10.78680203

8730

7880

A018310

삼목에스폼

-1240

-13.12169312

8210

9450

A092440

기신정기

150

4.02144772

3880

3730

A039010

현대통신

-400

-4.97512438

7640

8040

A900310

컬러레이

515

36.01398601

1945

1430

A049070

인탑스

-2950

-19.40789474

12250

15200

A010240

흥국

-245

-5.40838852

4285

4530

A007540

샘표

-2450

-5.79196217

39850

42300

A052330

코텍

150

1.17647059

12900

12750

A001130

대한제분

-40500

-22.5

139500

180000

A053610

프로텍

100

0.54945055

18300

18200

A002170

삼양통상

4700

7.97962649

63600

58900

A084110

휴온스글로벌

6000

22.55639098

32600

26600

A049430

코메론

430

5.52699229

8210

7780

A069510

에스텍

-700

-5.85774059

11250

11950

A020000

한섬

1350

4.53781513

31100

29750

A005930

삼성전자

16900

38.49658314

60800

43900

A000480

조선내화

-2300

-2.70588235

82700

85000

A072710

농심홀딩스

6200

8.55172414

78700

72500

A036190

금화피에스시

300

1.03448276

29300

29000

A005440

현대그린푸드

-100

-0.91743119

10800

10900

A004000

롯데정밀화학

-2400

-5.4732041

41450

43850

A109860

동일금속

400

3.46320346

11950

11550

A083550

케이엠

5240

81.74726989

11650

6410

A039340

한국경제TV

445

10.38506418

4730

4285

A004970

신라교역

-900

-7.25806452

11500

12400

A004590

한국가구

230

5.86734694

4150

3920

A102710

이엔에프테크놀로

8650

40.61032864

29950

21300

A028150

GS홈쇼핑

-12500

-8.0697224

142400

154900

A094840

슈프리마에이치큐

1060

18.89483066

6670

5610

A079940

가비아

840

10.52631579

8820

7980

A015710

코콤

-40

-0.61538462

6460

6500

A221980

케이디켐

1000

8.58369099

12650

11650

A067920

이글루시큐리티

90

2.11764706

4340

4250

A003780

진양산업

1075

33.437014

4290

3215

A001560

제일연마

840

13.27014218

7170

6330

A036810

에프에스티

2270

32.89855072

9170

6900

A002290

삼일기업공사

425

14.35810811

3385

2960

A241790

오션브릿지

1650

15.71428571

12150

10500

A189690

포시에스

290

4.62519936

6560

6270

A256940

케이피에스

5800

57.14285714

15950

10150

A122310

제노레이

9400

59.49367089

25200

15800

A105740

디케이락

700

7.77777778

9700

9000

A192440

슈피겐코리아

-4900

-8.43373494

53200

58100

A036830

솔브레인

31400

44.35028249

102200

70800

A228850

레이언스

2350

20.98214286

13550

11200

A203450

유니온커뮤니티

245

9.24528302

2895

2650

A243070

휴온스

7900

18.0778032

51600

43700

A120240

대정화금

1550

11.23188406

15350

13800

A033270

유나이티드제약

-600

-3.24324324

17900

18500

A018250

애경산업

2900

9.9827883

31950

29050

A036670

KCI

210

2.12335693

10100

9890

A284740

쿠쿠홈시스

-6050

-13.25301205

39600

45650

A033290

코웰패션

-630

-9.98415214

5680

6310

A086450

동국제약

26100

41.1023622

89600

63500

A064760

티씨케이

15300

31.54639175

63800

48500

A100700

세운메디칼

200

6.21118012

3420

3220

A119860

다나와

4500

21.89781022

25050

20550

지난 8월 18일에 올렸던 리스트에 대해서 얼마나 올랐는지 그리고 그것을 똑같은 금액으로 매수 했을 경우 얼마의 손익이 나는지를 알아보자.

 

비교데이터로는 코스피 지수와 코스닥 지수로 하겠다.

 

8월 18일(16일) 코스피는 1,927.17 원 , 현재는 2,062.22원 이다. 이를 계산하면 2,062.22 - 1,927.17 = 135.05

2,062.22 - 1,927.17 /  1,927.17  * 100  = 약 7% 이다.

 

8월 18일(16일) 코스닥은 591.57원 현재는 638.59원이다. 이를 계산하면  638.59 - 591.57 = 47.02

 638.59 - 591.57 / 591.57 *100 = 약 8% 이다.

 

18일의 결과에 대한 리스트는 다음과 같다.

 

[현재가 : 20190916 기준]

 

종목코드

종목명

등락금액

등락률

현재가

과거가격

0

A900300

오가닉티코스메틱

240

14.50151057

1895

1655

1

A006650

대한유화

20000

17.93721973

131500

111500

2

A088130

동아엘텍

420

5.63002681

7880

7460

3

A054800

아이디스홀딩스

650

5.48523207

12500

11850

4

A029460

케이씨

700

5.55555556

13300

12600

5

A023600

삼보판지

70

0.78299776

9010

8940

6

A003240

태광산업

177000

17.89686552

1166000

989000

7

A009970

영원무역홀딩스

-3000

-5.88235294

48000

51000

8

A900280

골든센츄리

-189

-24.80314961

573

762

9

A013120

동원개발

190

4.57831325

4340

4150

10

A101330

모베이스

-340

-6.74603175

4700

5040

11

A016590

신대양제지

100

0.14326648

69900

69800

12

A004490

세방전지

5100

13.67292225

42400

37300

13

A093050

LF

-450

-2.17391304

20250

20700

14

A088910

동우팜투테이블

300

8.62068966

3780

3480

15

A016090

대현

50

2.07039337

2465

2415

16

A017890

한국알콜

410

5.20304569

8290

7880

17

A018310

삼목에스폼

500

5.29100529

9950

9450

18

A092440

기신정기

-45

-1.20643432

3685

3730

19

A039010

현대통신

40

0.49751244

8080

8040

20

A900310

컬러레이

570

39.86013986

2000

1430

21

A049070

인탑스

-2100

-13.81578947

13100

15200

22

A010240

흥국

500

11.03752759

5030

4530

23

A007540

샘표

1550

3.6643026

43850

42300

24

A052330

코텍

250

1.96078431

13000

12750

25

A001130

대한제분

-12500

-6.94444444

167500

180000

26

A053610

프로텍

-850

-4.67032967

17350

18200

27

A002170

삼양통상

3700

6.28183362

62600

58900

28

A084110

휴온스글로벌

2700

10.15037594

29300

26600

29

A049430

코메론

210

2.69922879

7990

7780

30

A069510

에스텍

-250

-2.09205021

11700

11950

31

A020000

한섬

300

1.00840336

30050

29750

32

A005930

삼성전자

3200

7.28929385

47100

43900

33

A000480

조선내화

2700

3.17647059

87700

85000

34

A072710

농심홀딩스

16100

22.20689655

88600

72500

35

A036190

금화피에스시

950

3.27586207

29950

29000

36

A005440

현대그린푸드

1050

9.63302752

11950

10900

37

A004000

롯데정밀화학

3650

8.32383124

47500

43850

38

A109860

동일금속

0

0.

11550

11550

39

A083550

케이엠

510

7.95631825

6920

6410

40

A039340

한국경제TV

325

7.58459743

4610

4285

41

A004970

신라교역

250

2.01612903

12650

12400

42

A004590

한국가구

240

6.12244898

4160

3920

43

A102710

이엔에프테크놀로

-600

-2.81690141

20700

21300

44

A028150

GS홈쇼핑

4400

2.84054229

159300

154900

45

A094840

슈프리마에이치큐

20

0.35650624

5630

5610

46

A079940

가비아

20

0.25062657

8000

7980

47

A015710

코콤

330

5.07692308

6830

6500

48

A221980

케이디켐

450

3.86266094

12100

11650

49

A067920

이글루시큐리티

370

8.70588235

4620

4250

50

A003780

진양산업

135

4.19906687

3350

3215

51

A001560

제일연마

80

1.26382306

6410

6330

52

A036810

에프에스티

50

0.72463768

6950

6900

53

A002290

삼일기업공사

260

8.78378378

3220

2960

54

A241790

오션브릿지

-570

-5.42857143

9930

10500

55

A189690

포시에스

-110

-1.75438596

6160

6270

56

A256940

케이피에스

3750

36.94581281

13900

10150

57

A122310

제노레이

2050

12.97468354

17850

15800

58

A105740

디케이락

1850

20.55555556

10850

9000

59

A192440

슈피겐코리아

-1200

-2.06540448

56900

58100

60

A036830

솔브레인

-800

-1.1299435

70000

70800

61

A228850

레이언스

500

4.46428571

11700

11200

62

A203450

유니온커뮤니티

195

7.35849057

2845

2650

63

A243070

휴온스

450

1.02974828

44150

43700

64

A120240

대정화금

-50

-0.36231884

13750

13800

65

A033270

유나이티드제약

1500

8.10810811

20000

18500

66

A018250

애경산업

3350

11.53184165

32400

29050

67

A036670

KCI

-240

-2.42669363

9650

9890

68

A284740

쿠쿠홈시스

-6100

-13.36254107

39550

45650

69

A033290

코웰패션

-200

-3.16957211

6110

6310

70

A086450

동국제약

2700

4.2519685

66200

63500

71

A064760

티씨케이

7200

14.84536082

55700

48500

72

A100700

세운메디칼

370

11.49068323

3590

3220

73

A119860

다나와

1450

7.05596107

22000

20550

 

 

총 등락률은 337%이다. 여기에 73을 나누면 4.6% 지수 투자보다 안나오는 %이다.

 

처음에 나누지를 않아서 너무 놀라운 수치에 살짝 당황하였고, 퀀트를 믿지 못하여 이렇게 투자하지 못한 내 자신이 너무 화가났다. 

 

하지만 생각보다 코스피 코스닥이 오른 것보다 적게 올랐기때문에 분석할 필요가 있다.

 

더 공부해야겠다.

종목들의 정보들을 가져와서 이를 가지고 좋은 주식을 골라보려구한다.

책을 보고 뭔가 제일 표준적이라고 볼 수 있는

PER 10배 이하, 부채비율 50%이하, PBR 0.2 이상, ROA 5 이상 그리고 순이익증가율 > 0

여기서 PER 는 최근 분기 (영업이익 * 4) 를 (현재가격 * 총상장주식수) 로 나눈 것을 사용하였습니다.

그리고, 그것에 대해서 PER,PBR,PSR,PCR 의 합으로 정렬했다.

코드는 다음과 같다.

    def refindeStock(self, inputdata):
        data = []
        len2 = len(inputdata)
        for index in range(len2):
            tempdata = copy.deepcopy(inputdata[index])
            advantage = tempdata[12]
            advantage2 = tempdata[14]
            if advantage2 > 0 :
                per = tempdata[1]*tempdata[4] / (4 * advantage2)
                if advantage > 0 :
                    per2 = tempdata[1]*tempdata[4] / advantage

                    tempdata.append(per) ##19
                    debt = tempdata[7]
                    tempdata.append(debt)  ##20
                    if tempdata[11] > 0 :
                        pbr = tempdata[1] / tempdata[11]
                        tempdata.append(pbr)##21
                        roa = tempdata[9]
                        tempdata.append(roa)##22
                        sps = tempdata[19]
                        if sps > 0 :
                            psr = tempdata[1] /sps
                            tempdata.append(psr) ##23
                            cfps = tempdata[20]
                            if cfps > 0 :
                                pcr=tempdata[1] / cfps
                                tempdata.append(pcr)  ##24
                                if (per < 10) and (debt < 50)  and (pbr > 0.2) and(roa > 5) and(tempdata[10] > 0) :
                                    tempdata.append(0) #25
                                    tempdata.append(0) #26
                                    tempdata.append(0) #27
                                    tempdata.append(0) #28
                                    tempdata.append(0) #29
                                    data.append(tempdata)
        countData = len(data)
        data.sort(key=lambda x: x[21])
        for index in range(countData) :
            data[index][27] = index
            data[index][31] += index
        data.sort(key=lambda x: x[23])
        for index in range(countData) :
            data[index][28] = index
            data[index][31] += index
        data.sort(key=lambda x: x[25])
        for index in range(countData) :
            data[index][29] = index
            data[index][31] += index
        data.sort(key=lambda x: x[26])
        for index in range(countData) :
            data[index][30] = index
            data[index][31] += index

        data.sort(key=lambda x: x[31])

그리고 그것의 결과물은 다음과 같다.
(2019.08.18 기준)

 

종목코드

종목명

per

0

A900300

오가닉티코스메틱

2.4306211300309600

1

A006650

대한유화

3.1831397902355900

2

A088130

동아엘텍

2.5544114809236900

3

A054800

아이디스홀딩스

3.250130104961830

4

A029460

케이씨

3.322845248657480

5

A023600

삼보판지

3.299849342585830

6

A003240

태광산업

4.8616008830022100

7

A009970

영원무역홀딩스

3.3949852174422500

8

A900280

골든센츄리

2.6231313578062800

9

A013120

동원개발

2.3429758958991300

10

A101330

모베이스

5.271972909535450

11

A016590

신대양제지

2.989147540913920

12

A004490

세방전지

4.3265725459004400

13

A093050

LF

5.814517368582850

14

A088910

동우팜투테이블

5.122779731023480

15

A016090

대현

4.354306948289900

16

A017890

한국알콜

3.9767679342240500

17

A018310

삼목에스폼

7.10344651257926

18

A092440

기신정기

2.646933022261110

19

A039010

현대통신

3.758944058976580

20

A900310

컬러레이

3.165792062971470

21

A049070

인탑스

5.961871750433280

22

A010240

흥국

5.3819719321249500

23

A007540

샘표

5.5688674235488000

24

A052330

코텍

5.938263696172250

25

A001130

대한제분

9.772552043176560

26

A053610

프로텍

2.3883374689826300

27

A002170

삼양통상

5.182426091037070

28

A084110

휴온스글로벌

4.090512942833010

29

A049430

코메론

6.505863216266170

30

A069510

에스텍

7.085570652173910

31

A020000

한섬

5.397496243259970

32

A005930

삼성전자

0.010511052997441800

33

A000480

조선내화

9.519543061933030

34

A072710

농심홀딩스

6.171802037444930

35

A036190

금화피에스시

6.349438038242590

36

A005440

현대그린푸드

9.892792087467020

37

A004000

롯데정밀화학

7.505572804713

38

A109860

동일금속

5.93263868506017

39

A083550

케이엠

7.008549989219490

40

A039340

한국경제TV

5.862181774922670

41

A004970

신라교역

9.814008705975460

42

A004590

한국가구

7.724645296899630

43

A102710

이엔에프테크놀로

6.350115388483780

44

A028150

GS홈쇼핑

6.567418143994210

45

A094840

슈프리마에이치큐

7.4665763091001500

46

A079940

가비아

5.97823546158955

47

A015710

코콤

8.448120551601420

48

A221980

케이디켐

7.104809552599760

49

A067920

이글루시큐리티

5.398972475739370

50

A003780

진양산업

6.011939010356730

51

A001560

제일연마

9.515935057125680

52

A036810

에프에스티

7.0199777051488300

53

A002290

삼일기업공사

9.148554336989030

54

A241790

오션브릿지

7.072211881188120

55

A189690

포시에스

3.0269677550102800

56

A256940

케이피에스

7.908202840495270

57

A122310

제노레이

9.26712516658124

58

A105740

디케이락

8.446865970013630

59

A192440

슈피겐코리아

7.5679048340457600

60

A036830

솔브레인

7.151634851370180

61

A228850

레이언스

9.33202876657292

62

A203450

유니온커뮤니티

9.515501113013700

63

A243070

휴온스

8.149082134257720

64

A120240

대정화금

9.61395170722135

65

A033270

유나이티드제약

8.995423526941080

66

A018250

애경산업

8.33660292948327

67

A036670

KCI

7.113881797293850

68

A284740

쿠쿠홈시스

7.988084247098830

69

A033290

코웰패션

8.392458946270060

70

A086450

동국제약

9.731180201296020

71

A064760

티씨케이

8.547239161936970

72

A100700

세운메디칼

9.777870216306160

73

A119860

다나와

9.146500275735290

Creon API 에서 MarketEye 를 이용해서 종목 코드만 있으면 다음과 같은 정보들을 가져올 수 있다.

 

http://money2.creontrade.com/e5/mboard/ptype_basic/HTS_Plus_Helper/DW_Basic_Read_Page.aspx?boardseq=284&seq=131&page=1&searchString=marketeye&p=8841&v=8643&m=9505

 

크레온플러스 도움말 - 크레온

설명주식,지수,선물/옵션등의여러종목의필요항목들을한번에수신합니다.통신종류Request/Reply연속여부X관련 SB/PBStockCur, FutureCurOnly, OptionCurOnly관련CYBOS [7059] MarketEye모듈위치cpsysdib.dll Method object.SetInputValue(type,value) type에해당하는입력데이터를 value 값으로지정합니다 type: 입력데이터종류 0 - (long or long array) 필드

money2.creontrade.com

 

나는 일단 기본적인 지표인 PER,PSR,PBR 등을 이용하고자 하니, 이런것들이 포함된 것들을 가져올 예정이다.

그 코드는 다음과 같다.

 

<pre><code>

def subMarketEye(self, m_InfoList):
    numCodeRow =len( self.codeList)
    print(numCodeRow)
    obj = win32com.client.Dispatch("cpsysdib.MarketEye")

    data=[]
    for index in range(numCodeRow):
        obj.SetInputValue(0, m_InfoList)
        obj.SetInputValue(1, self.codeList[index])
        obj.BlockRequest()
        numField = obj.GetHeaderValue(0)
        numData = obj.GetHeaderValue(2)

        for idx_x in range(numData):
            tempdata=[]
            for idx_y in range(numField):
                tempdata.append(obj.GetDataValue(idx_y, idx_x))
            data.append(tempdata)

    return data

</code></pre>

 

매개변수인 m_InfoList를 활용하여, 원하는 값을 달리해서 불러 올 수 있으며, slice 한것을 넣기 위해서 일단 self.codeList[] 를 사용하였는데 생각해보면 함수화시키는 게 더 깔끔할 것으로 보인다.

 

다음 글에는 이 리스트를 이용하여 필요한 값들을 만들 것이다. 

그리고 그것들을 어떻게 조합하면 더 나은 투자를 할 수 있는지도 고민해볼생각이다.

 

지난 번에 전체 종목에 대해서 여러 정보를 가져오기를 시도하다가 '종목 개수는 200개를 초과할 수 없습니다.' 라는 오류와 함께 실패했다. 그래서 이번에는 받아온 전체 종목들을 나눠서 정보를 가져오려한다.

그렇게 해서 만든 코드는 매우 간단하며 다음과 같다.

이렇게 만든 리스트를 가지고 종목 검색에 성공하였다.


    def dataSlice(self):
        listRowCount = int(self.numTotalCount/200) + 1
        for i in range(listRowCount):
            line = []  # 안쪽 리스트로 사용할 빈 리스트 생성
            for j in range(200):
                numOfList = i*200 + j
                if self.numTotalCount <= numOfList :
                    break
                line.append(self.totalInfoList[numOfList])  # 안쪽 리스트에 0 추가
            self.codeList.append(line)

종목 전체를 가져와서 per 등의 지표로 순위를 메겨보려 했다.

종목을 전체 가져오는 건 성공..


  def getALLStockCode(self):
        # Creonapi 세팅
        obj = win32com.client.Dispatch("CpUtil.CpStockCode")
        numData = obj.GetCount()
        data = []
        for index in range(numData):
            tempData = []
            tempData.append(obj.GetData(0, index))
            data.append(tempData)
        return data
 

but..
문제가 생겨버렸다.

바로바로..

pywintypes.com_error: (-2147352567, '예외가 발생했습니다.', (0, None, 'Module:CpSysDib\nObj:MarketEye\nFun:SetInputValue\nType:1\nDescription:종목 개수는 200개를 초과할 수 없습니다.', None, 0, -2147024809), None)

코드는 이렇다.
200 으로 split 해서 가져와야되는건가


     def subMarketEye(self, m_InfoList, m_CodeList):

        obj = win32com.client.Dispatch("cpsysdib.MarketEye")
        obj.SetInputValue(0, m_InfoList) 
        obj.SetInputValue(1, m_CodeList) 
        obj.BlockRequest()

        numField=obj.GetHeaderValue(0) 
        print(m_CodeList.count())
        numData=obj.GetHeaderValue(2) 
        # nameField=obj.GetHeaderValue(1)
        # print('필드명:', nameField)
        data=[]
        for idx_x in range(numData):
            tempdata=[]
            for idx_y in range(numField):
                tempdata.append(obj.GetDataValue(idx_y, idx_x))
            data.append(tempdata)
        return data

 

맨날 공부한다고 생각만하고 있어서 그런지 상당히 더디게 프로젝트가 진행되고 있다.

처음에는 python 공부를 목적으로 하였지만.. 그것보단 내가 어떤 주식을 사야할지, 데이터 접근하여 값을 가져오는 용도로 이용하게 될 것같다.

Creon API로 connect 하는 예제 코드이다.

종목 번호를 기반으로 주가를 찍어주는 소스이다.

b_connected = self.obj_CpCybos.IsConnect
if b_connected == 0:
print("connect fail")
return None

이 부분이 앞으로의 프로젝트에 제일 많이 쓰일.. connect 를 체크하는 부분이다.

python 자체를 공부해보지 못해서 다소 소스 해석이 되지않지만 하다 보면 되지 않을까 생각된다.

예제 소스는 다음과 같다.


import time
import win32com.client
import pandas as pd

class Creon:
    def __init__(self):
        self.obj_CpCodeMgr = win32com.client.Dispatch('CpUtil.CpCodeMgr')
        self.obj_CpCybos = win32com.client.Dispatch('CpUtil.CpCybos')
        self.obj_StockChart = win32com.client.Dispatch('CpSysDib.StockChart')

    def creon_chart_search(self, code, date_from, date_to):
        b_connected = self.obj_CpCybos.IsConnect
        if b_connected == 0:
            print("connect fail")
            return None

        list_field_key = [0, 1, 2, 3, 4, 5, 8]
        list_field_name = ['date', 'time', 'open', 'high', 'low', 'close', 'volume']
        dict_chart = { name : [] for name in list_field_name}
        self.obj_StockChart.SetInputValue(0, 'A'+code)
        self.obj_StockChart.SetInputValue(1, ord('1'))
        self.obj_StockChart.SetInputValue(2, date_to)
        self.obj_StockChart.SetInputValue(3, date_from)
        self.obj_StockChart.SetInputValue(5, list_field_key)
        self.obj_StockChart.SetInputValue(6, ord('D'))
        self.obj_StockChart.BlockRequest()

        status = self.obj_StockChart.GetDibStatus()
        msg = self.obj_StockChart.GetDibMsg1()
        print("connected status : {} {}".format(status,msg))
        if status != 0:
            return None

        cnt = self.obj_StockChart.GetHeaderValue(3)
        for i in range(cnt):
            dict_item = (
                {name : self.obj_StockChart.GetDataValue(pos,i)
                for pos,name in zip(range(len(list_field_name)),list_field_name)}
            )
            for k,v in dict_item.items():
                dict_chart[k].append(v)

        print("char {} {}".format(cnt, dict_chart))
        return pd.DataFrame(dict_chart, columns=list_field_name)


if __name__ == '__main__':
    creon = Creon()
    print(creon.creon_chart_search('035420', 20150101, 20171201))

+ Recent posts