※ 모든 예제는 여기 에서 진행됩니다.

※ Coffee Script 언어 설명은 여기서 확인할 수 있습니다.

※ Framer 의 클래스, 객체, 변수, 함수에 대한 설명은 여기서 확인할 수 있습니다.


0. 도입 - 객체지향 vs 절차지향


 다소 틀린 점이 많더라도 이해해주세요!

 언어에는 크게 두가지 종류가 있다고 생각합니다. 

 객체 지향 언어와 절차 지향 언어이죠!

 우리가 배울 Coffee Script언어는 객체 지향 언어에 속하는데요, 

 예를 들어서 두가지 언어의 차이점을 알아볼께요

객체 지향

객체 지향 언어를 사용하는 프로그래머들 끼리 밥을 먹고 있었습니다. 그런데 친구 한명이 늦게 도착했습니다. 그래서 한명이

아주머니 여기 1인분이요

라고 외쳤습니다.


절차지향

절차 지향 언어를 사용하는 프로그래머들 끼리 밥을 먹고 있었습니다. 그런데 친구 한명이 늦게 도착했습니다. 그래서 한명이

아주머니 여기 숟가락하구요 젓가락하구요 컵하구요 물도좀 따라주시구요 고기도 더 가져다 주세요

라고 외쳤습니다.


1. 본문


 무슨 차이가 나는지 느껴지시나요? 대충 느낌만 가져가시면 됩니다.

 이처럼 객체 지향 프로그래머는 "1인분" 이라는 단어 안에 숟가락, 젓가락, 컵, 물, 고기, 물따라는 행위, 고기를 가져다 주는 행위, 세팅하는 행위... 등등 다양한 개념들을 포함시켰습니다. 

 여기서 객체 지향의 주요 개념들을 뽑아낼 수 있습니다.

- 1인분 ==> 클래스

- 숟가락     ==> 변수

- 젓가락     ==> 변수

- 컵           ==> 변수

- 고기        ==> 변수

- 세팅해주는 행위     ==> 함수

 위의 개념도를 보면 각각의 변수(숟가락, 젓가락...)와 함수(행위...)를 클래스(1인분)가 포함하고 있다는 것을 확인할 수 있습니다. 

 즉, Coffee Script를 사용하는 우리는 어떤 일을 하려고 할 때 1인분(클래스)를 호출하면, 1인분안에 있는 것들을 사용할 수 있다는 것입니다.


2. 적용 - CoffeeScript 적용


 그렇다면 Coffee Script에서는 어떻게 동작하는 지 알아볼까요?

 여기에 들어가서 왼쪽 입력창에 new Layer라고 입력을 해보세요.

 그러면 오른쪽 창에 네모 박스가 생긴것을 볼 수 있습니다.

 그럼 Layer가 Class라면 내부에는 많은 변수와 함수들이 있겠지요? 그것들을 한번 사용해보겠습니다.

위의 그림에서 Layer라는 클래스안에 있는 x, y, width, hegith, html 이라는 변수의 값을 수정함으로써, 오른쪽 박스를 변형시킨 것을 볼 수 있습니다.

 이처럼, 같은 클래스라도 안에 있는 변수를 어떻게 다르게 하느냐에 따라서 모양, 속성 들이 달라지게 됩니다.

 그리고, layer = new Layer처럼 Layer에 이름을 지어 줌으로써 나중에 불러와 쓸 수 있습니다. 이를 "객체" 라고 합니다. 

(프로그래밍에서 "=" 등호는 같다라는 뜻이 아니라, "넣는다 혹은 대입한다" 라는 뜻을 가집니다.) 


 그럼 이번에는 함수를 실행시켜볼까요?



3. 결론


 이번에는 객체지향 프로그래밍의 가장 중요한 클래스, 객체, 변수, 함수를 배웠습니다. 다음 시간에는 조건문에 대해서 배워보도록 하겠습니다.

밑줄 친 부분을 같은 버전대로 통일 시켜 줍니다. 위의 경우에는 23으로 통일 시켜 주었습니다.

안녕하세요! 요즘 자바스크립트가 필요한 것을 준비하고 있어서 Aptana Studio를 설치해보려고 합니다.

설치는 http://www.aptana.com/ 에서 진행하면 되는데요, 저는 설치 중간에 에러가 나타났습니다.

Failed to correctly acquire installer node js windows.msi file CRC error 라는 오류 메세지가 나타나면, 

node-v0.10.13-x86.msi

이걸 설치해주세요! 제 개발환경은 윈도우10 64비트 입니다. 잘되더라구요 ㅎㅎ 

모두 잘 깔아보시기 바랍니다~

 캔들에서 심리를 읽어낼 수 있다는 것은 대단한 매집이 진행되는 것인지 아니면 이탈이 준비되고 있는 것인지를 구분하게 해줄 것이며, 누군가의 인생을 바꾸었던 중요한 어느 날처럼 큰 의미를 가진 캔들들ㅇ르 찾아내고 공격하는 안목을 가지게 될 것입니다.


**************************************************************************

1. 똑같은 캔들이지만 차트의 위치에 따라 다른 성격을 지닌다

2. 장대 음봉이라고 다 같은 장대 음봉이 아니다

3. 무럭무럭 자라는 양봉이 있다

4. 작은 캔들이라고 무시하지 마라

**************************************************************************

1. 똑같은 캔들이지만 차트의 위치에 따라 다른 성격을 지닌다

 똑같이 생긴 캔들이지만, 위치나 매물대 이동평균선 그리고 세력의 의도 등에 따라 각기 다르게 적용이 됩니다.

 지나간 캔들을 그럴듯하게 분석하는게 아니라, 캔들을 올바르게 파악하고 대응하는 방법들을 소개할 것이다.

 이것이 매집이 준비되는 것인지? 이탈이 준비되는 것인지? 안목을 갖추어야 한다. 그렇게 된다면, 마음 편히 매수에 가담할 수 있으며, 약간의 손실도 버틸 수 있는 기준을 가질 수 있고 저점 추가 매수의 기회로도 삼을 수 있으며, 매수를 하고 난 다음 여행이나 낚시 등의 여가를 즐길수 있게 될 것이다.


2. 장대 음봉이라고 다 같은 장대 음봉이 아니다

 조용히 흐르던 종목에 거래량이 급격히 느는 현상을 '수급이 붙었다' 라고 표현한다. 수급이 붙었다는 말은 누군가의 강력한 개입이 시작되었다는 뜻이며 흔히 세력이라고 일컫는다. 이러한 거래량 번화는 누군가의 개입으로 의심하는 중요한 차트 분석 방법입니다.

 "고가권에서 대량 거래를 동반한 장대 음봉이 떨어졌을 경우 다 팔고 토껴라" 라는 격언을 정리하면, 바닥권에서 매집을 하고 어느정도 물량이 확보되면 주도 세력이 주가를 상승시킵니다. 그러면 주가가 수익권으로 쭉 올라가겠죠?, 주가가 올라가게 되면 주가와 이동평균선 사이에 간격이 생기게 되는데 이것을 "주가와 이격도가 커졌다" 라고 표현합니다.  이는 캔들의 종가와 이평선들이 많이 벌어진 것을 가르킵니다. 벌어진 만큼 누군가는 수익이 나겠죠? 

 주가 이격도나 이동평균선 이격도를 통틀어서 이격도가 벌어지면 주가는 고가권으로 치솟아 있을 테고 그 고가권에서 대량 거래가 나온다면 그 의미는 바닥에서 매집된 물량을 고가권까지 뽑은 다음 누군가가 수익을 보고 많은 물량을 팔았다라고도 볼 수 있습니다. 이 때 주도 세력은 수익을 챙기고 이탈했을 수도 있다라는 의미가 되겠죠.

 이처럼 간단한 격언이라도 이해를 제대로 하여 어떤 차트에서 어떻게 적용시킬지 연구해야 합니다. 많은 매매와 복기를 통해서 확인해 나가는 과정이 필요하고 그것이 모이게 되면 여러분은 수익을 꾸준히 내는 상위 5%안에 들게 될 것입니다.

 "차트를 일부분만 보는 것은 죽음이다"

 매매를 지도하다 보면 일봉 30개나 50개 또는 100개 많으면 200개 이렇게 보시는 분들이 계시는데 이는 우물안에서 우물 밖 세상을 논하는 것과 같습니다.

 예를 들어 세력은 1년을 매집 기간으로 보고 있는데 여러분이 일봉 50개만 보고 있다면 그것은 석달 치도 되지 않습니다. 그러니 1년 동안 매집하겠다라고 달려든 세력 형님들의 마음을 읽어낼 수가 없지요. 세력 형님들이 매집이 잘 안되니까 개인 투자자들에게 수익 좀 주고 비싸게 라도 매집하려고 상한가 한두방을 연출하더라도 그것은 매집이 하고 싶은 것이지 본격적인 상승 랠리로 들어가려고 하는 것이 아닙니다.

 세력의 마음을 읽어내야만 단타, 스윙, 장기로 대응할지 판단할 것이고 목표가를 어디로 설정할지 판단할 수 있습니다. 이것이 차트 분석의 시작입니다.

 차트에서 캔들의 심리나 속성을 파악하기 위해 가장 중요한 것은 현재 주가가 어느 위치인지를 파악하여야합니다. 현 주가의 위치가 모두가 수익이 난 위치인지 모두가 손실이 난 위치인지 또는 모두가 본전인 위치인지에 따라서 투자에 참여하고 있는 투자자들의 심리 상태는 전혀 다를 테니 말입니다.

 차트의 유형은 어떠하며 현 주가의 위치는 어디인가?

현재 주가의 캔들에 고점과 저점의 가로선을 긋는 것

 7배 거래랑을 터트렸ㄷ면 그것은 분명 일반 투자자들이 만들어낸 거래량이나 캔들이 아닙니다. 고가권에서 아주 큰 변동 폭으로 몇차례 이상 요동을 치면 많ㅇ느 대기 매수세가 유입된 것으로 판단하고 세력이 물량을 일부 처분했을 가능성에 점수를 주며 추가 상승보다는 하락에 점수를 주는 것

 매물대란 많은 거래량이 일어난 위치를 말합니다.

 개인 토자자가 호재를 접하는 태도는 주가가 이제 오르겠구나 라고 생각을 하는 것이고, 반대로 세력의 태도는 아~ 이제 물량 좀 팔 수 있겠구나~ 라고 생각을 하게 되는것 입니다. 호재뉴스는 기관이나 세력 형님들이 덩치 물량을 한꺼번에 던질 수 있는 아주 좋은 방법 중의 하나 입니다.


무럭무럭 자라는 양봉이 있다

 이번에 살펴볼 내용은 매도할 수 밖에 없는 심리로 몰아세운 다음 양봉으로 일반 투자자의 물량을 뺏어가는 방법입니다. 

 캔들이 10%이상의 강한 변동성을 보이며 거래량이 갑자기 늘기 시작한다면 누군가 물량을 내다팔았거나 물량을 매집하였거나 등의 목적을 가지고 있습니다. 그렇기 때문에 캔들의 위아래 폭이 커지면서 거래량이 늘어나게 되며 그것은 주가가 상방향이나 하방향으로 가기 위한 마지막 준비 운동을 하고 있는 것입니다.

 세력이 매집을 시작했다고 해서 주가가 급등하는 것이 아니라 필욯한 물량만큼 가져야만 주가를 부양시킬수있습니다. 통제 되지 않는 주에 대한, 그리고 매수세도 보장되지 않고, 다른 세력이 매도할 수 있다는 위험성때문입니다. 이렇듯 박스권으로 횡보를 하게 되면, 이제 매집이 진행되고 있구나라고 해석을 하며 그 박스권의 거래량이 늘어나기 시작하면 매집이 어느정도 끝난 상황에 가까워 지거나 매집 구간의 단가에서 나올 물량은 다 나온 것으로 이해를 합니다.

 반대로, 그 박스권에서 횡보를 오래하다가 갑자기 거래가 늘어나기 시작하고 주가가 요동을 치면 그것이 하락의 시작인 경우도 있습니다. 주가가 10만원에서 1만원까지 가는 상황을 보고 있을 경우, 5만원에서 하락하는걸 저지하면서 바닥잡는 듯이 요동치다가 5만원에서 물량을 다 던지고 1만원으로 직행할 수도 있습니다. 

 따라서 주가가 횡보하다가 거래량이 늘어나게 되면 상승 아니면 하락으로 가기위한 마지막 움직임으로 보시면 됩니다. 이때 방향성이 어느 쪽인지 확인을 하고 대응하시면 됩니다.

 필자는 보조지표가 아니라 세력의 심리를 읽어야 된다고 생각합니다. 

 차트 분석에서 이미 결론을 내놓고 대응하지 말자,

 떡잎 캔들을 알아내자


작은 캔들이라고 무시하지 마라

매물대의 정중앙이라는 것은 일반 투자자들이 물려있는 구간이다.

강한 매물대 = 팔아먹기엔 어려운 위치임을 의미한다

거래량이 줄어들며 = 너도나도 물린 자리라서 손절 물량이나 저점 매수한 물량만 받아도 어느정도 거래량은 나오는 자리다. 너도나도 물린 자리에서 거래량 줄어들며 팔아먹긴 어렵다

캔들이 작아지고 있다 = 팔아치울 때는 캔들이 요동치는데 캔들이 작아지는 것은 팔아먹는 것이 아니라 오히려 매집일 수 있다.

막 손절이나 수익실현에 도달했을 떄 작은 음봉이 등장한다면, 이는 매집하는 것이라고 볼 수 있다. 이 때 들어간다면, 좋은 성과를 얻을 것이다.

----------------------------------------------------------------------------------------------------------------------------------------------------------------<출처>

- 바보스탁 산호님의 주식 바로보기 <정성훈 지음>

 

일봉받아오기

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 되도 않는 데이터베이스 공부해보겠다고 설치다가 올리는 시간이 늦어졌네요... 분명 자체 HTS를 만들기 위해서는 DB를 구축하긴 해야할텐데, 어떻게 어디서부터 해야할지 모르겠어요 ㅜㅜ 혹시 아시는 분은 댓글로 남겨주세요 ㅎㅎ

  오늘은 일봉을 불러오는 법을 알아볼텐데요, 사실 전시간에 했던 주식 기본정보랑 방법은 거의 비슷해요. KOAstudio에서 나온 샘플처럼 하면 불러와집니다. 자 시작해볼까요!


  이번엔 탭을 추가했습니다. 탭 추가하는 방법은 전 시간에 나와있죠? 따라해보세요 ㅎㅎ


  첫번쨰 탭의 내부 모습입니다. 종목코드와, 기준일자를 받아와서 버튼을 누르면, 900일치의 일봉을 받아올꺼에요 


 우선, 첫번째 탭안에 있는 버튼에 위와 같은 코드를 작성해줍니다. GetDigItemText 함수는 EDIT_Control 에 넣은 사용자의 변수를 CString 자료형에 넣어주는 역할을 해줍니다. 그 이후의 함수들은 KOAStudioSA 에 있는 안내를 따라서 내용을 채워준거에요. 아래 참고 그림 추가해드립니다. 아, 그리고 CommRqData할때 중간에 0이 아니라 2인 이유는, 연속으로 주식 정보를 받기 위해서입니다. 일봉은 한번 불러올때 0~899까지 총 900일치 정보가 한번에 들어오는데, 만약 여기서 '2'로 설정하고 다시 불러온다면, 900~1799까지의 정보가 불러와지게 됩니다. 즉, 연속적으로 다음 데이터가 불러와진다는 것이지요! 하지만, 0이라면 다시 0~899정보가 불러와지겠죠?


  그다음에는 수신 이벤트가 발생하였을때, 처리해주는 코드를 작성해야겠지요? 예전에 주식기본정보를 요청했었던 그곳에 가서 위의 박스를 덧붙여 줍시다. 단, 여기서 out == 주식일봉차트조회 일때 발생하도록 조건문을 씌어주셔야되용~! 그리고, 안에 i를 0부터 899까지 증가시키는 이유는 우리가 불러오는 정보가 한번에 900일치이기 때문입니다. 더 적게 돌려도 상관은 없어요 ㅎㅎ


  이렇게 해서 위와 같은 프로그램이 만들어졌습니다. 삼성전자의 주식 정보가 일자별로 쭉 나오는걸 확인해볼 수 있네요.


이번에 생각나는건데, 거래량과 주식정보를 이용해서 단타를 할수있지 않을까요? 이번에 한번 시도해봐야겠어요. 그럼 모두들 화이팅 하세요!

----------------------------------------------------------------------------------------------------------------------------------------------------------------<요약>

- GetDigItemText 함수 사용법

- 연속적으로 일봉을 받아오는 법



MFC Tab 만들기

----------------------------------------------------------------------------------------------------------------------------------

MFC프로그램을 하다보면,

Tabcontrol을 만들어야 하는 경우가 생길 것이다.

그 탭컨트롤을 만드는 과정을 알아보자.

모든 프로그램은 Dialog based로 하는 것을 기준으로 한다.

 

우선 dialog based 프로젝트를 만든다.

다이어로그 베이스 프로젝트는 앞의 포스트에서 미리 설명을 하였다.

test라는 프로젝트 이름으로 만들었다.

만든 뒤에, TODO:…. 된 부분을 지우고,

그림에서 보듯 Toolbox에서 Tab Control을 드래그 해서 아래와 같이 화면에 붙여 넣어준다.

만약 Toolbox가 보이지 않는다면,

메뉴바의 view에서 toolbox를 찾을 수 있다.

 

 

이렇게 만들어진 Tab에 이름을 정해주자.

그림에서 보듯이 Add Variable을 클릭한다. (변수 추가)

새로 창이 뜨는데,

Access는 public, Variable type은 CTabCtrl인지를 확인하고,

Variable name에는 m_Tab이라고 적자. (대/소문자 구분을 하기 때문에 확실하게 적어야 된다.)

이제 Finish를 눌러주면 지금 만든 탭의 이름은 m_Tab가 된다.

 

이제는 프로그램 내용을 수정할 차례이다.

위의 그림처럼 CtestDlg.cpp 파일에서 OnInitDialog를 찾는다.

이 안의 내용을 수정할 것인데,

 

 

 

Code Snippet
  1. BOOL CtestDlg::OnInitDialog()
  2. {
  3.     CDialog::OnInitDialog();
  4.  
  5.     // Add "About..." menu item to system menu.
  6.  
  7.     // IDM_ABOUTBOX must be in the system command range.
  8.     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  9.     ASSERT(IDM_ABOUTBOX < 0xF000);
  10.  
  11.     CMenu* pSysMenu = GetSystemMenu(FALSE);
  12.     if (pSysMenu != NULL)
  13.     {
  14.         BOOL bNameValid;
  15.         CString strAboutMenu;
  16.         bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
  17.         ASSERT(bNameValid);
  18.         if (!strAboutMenu.IsEmpty())
  19.         {
  20.             pSysMenu->AppendMenu(MF_SEPARATOR);
  21.             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  22.         }
  23.     }
  24.  
  25.     // Set the icon for this dialog.  The framework does this automatically
  26.     //  when the application's main window is not a dialog
  27.     SetIcon(m_hIcon, TRUE);            // Set big icon
  28.     SetIcon(m_hIcon, FALSE);        // Set small icon
  29.  
  30.     // TODO: Add extra initialization here
  31.  
  32.     CString    strOne = _T("First");
  33.     CString    strTwo = _T("Second");
  34.     CString    strThree = _T("Third");
  35.     m_Tab.InsertItem(1, strOne);
  36.     m_Tab.InsertItem(2, strTwo);
  37.     m_Tab.InsertItem(3, strThree);
  38.  
  39.     return TRUE;  // return TRUE  unless you set the focus to a control
  40. }

그 안의 내용에서 위와 같이 추가를 한다.

추가 된 내용은 32번째 줄에서 37번째 줄인데,

32 - 34번째 줄은 탭컨트롤에서 탭의 제목으로 들어갈 내용 들이다.

35 - 37번재 줄은 몇 번째 탭에 어떤 이름이 들어갈 지에 대한 내용으로,

35번째 줄을 보면 (1, strOne)으로 되어있는데, 1번째 탭에 strOne에 들어있는 내용을 넣는 다는 말이다.

여기서 strOne에는 First라는 내용이 들어 있기 때문에

1번째 탭은 First라는 이름으로 들어간다.

여기까지 수정을 하고, 빌드를 해보자.

예상한 대로 1번째 탭의 이름은 First이고 나머지도 예상 대로 됬다.

이제 각각의 탭에 내용을 넣어줄 차례이다.

 

 

 

지금부터 하는 과정은 뒤에서 그만이라는 말이 나올때까지의 부분을 3번 반복해준다.

(탭이 3개일 경우에 3번으로 탭의 수에 맞춰서 해주면 된다.)

위의 그림처럼 Resource View를 클릭을 해서 Resource view를 열어주자.

Resource View의 화면이다.

여기서 오른쪽 버튼을 눌러서, 다이어로그를 추가해주자.

그러면 Dialog1이라는 다이어로그가 추가가 된 것을 볼 수있다.

이 다이어로그는 아까의 탭안에 들어갈 내용들을 넣어줄 다이어로그이다.

따라서 우리가 한 것처럼 탭이 3개가 있으면 3개의 다이어로그를 만들어 주어야 한다.

위의 그림처럼 IDD_Dialog1을 클릭한 뒤

메뉴의 view에서 Properties Window를 클릭해서 프로퍼티 창을 열어준다.

이러한 창을 볼 수 있는데, 여기서 ID를 자신이 원하는 ID로 바꾸어준다.

이 ID는 지금 새로 만드는 다이어로그의 이름으로서 나중에 탭컨트롤에서 쓸 것이다.

기본으로는 IDD_Dialog1으로 되어있을 것이다.

이 화면은 ID를 이미 바꾸어 놓은 것이다.

이 ID는 자신이 원하는 것도 괜찮지만, 우선은 똑같이 IDD_First로 해준다.

그런 뒤에 화면의 다이어로그를 클릭해준다.

그러면 프로퍼티 창이 바뀌는 것을 볼 수 있는데,

여기서 Border를 None으로,

Style을 Child로 바꾸어준다.

그러면 이 다이어로그가 바뀌는 것을 볼 수 있다.

border를 none으로 바꿈으로서 경계가 다 없어졌고,

style을 child로 바꿈으로서 다이어로그 안에 들어갈 수 있게 되었다.

 

이제 이 다이어로그의 구분을 해주기 위해,

static text를 추가해주자.

역시 tabcontrol처럼 드래그하면 된다.

막 드래그 한 상태이면 위의 그림처럼 선택이 되어있을 것이다.

이 상태에서 프로퍼티 윈도우를 보면 내용을 수정할 수 있다.

여기서 Caption을 수정해주면된다.

First라고 수정을 해주면,

바뀐 것을 알 수 있다.

이제 이 다이어로그에 이름을 붙여줄 차례이다.

다이어로그에서 오른쪽 버튼을 눌러서 Add Class를 눌러주고,

뜨는 창에서

그림과 같이 Class name을 정해준다.

여기선 CFirst로 정해주었다.

그리고 Base class 가 CDialog인지를 확인하고 finish를 눌러준다.

위에서부터 지금까지의 과정(새로운 다이어로그를 만들고 이름을 붙여주는 과정)을

3번 반복한다.

물론 각각의 이름을 다르게 해주어야 한다.

여기선 두번째, 세번째 다이어로그의 이름을 CSecond, CThird라고 해주었다.

여기까지의 과정이 완료가 되었다면 이제부터가 시작이다.

 

testDlg.h파일을 열어서 다음과 같이 수정한다.

Code Snippet
  1.  
  2. // testDlg.h : header file
  3. //
  4.  
  5. #pragma once
  6. #include "afxcmn.h"
  7. #include "First.h"
  8. #include "Second.h"
  9. #include "Third.h"
  10.  
  11.  
  12. // CtestDlg dialog
  13. class CtestDlg : public CDialog
  14. {
  15. // Construction
  16. public:
  17.     CtestDlg(CWnd* pParent = NULL);    // standard constructor
  18.  
  19. // Dialog Data
  20.     enum { IDD = IDD_TEST_DIALOG };
  21.     CFirst        m_First;
  22.     CSecond        m_Second;
  23.     CThird        m_Third;
  24.     CWnd*        m_pwndShow;
  25.  
  26.     protected:
  27.     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  28.  
  29.  
  30. // Implementation
  31. protected:
  32.     HICON m_hIcon;
  33.  
  34.     // Generated message map functions
  35.     virtual BOOL OnInitDialog();
  36.     afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
  37.     afx_msg void OnPaint();
  38.     afx_msg HCURSOR OnQueryDragIcon();
  39.     DECLARE_MESSAGE_MAP()
  40. public:
  41.     CTabCtrl m_Tab;
  42. };

위의 내용을 보면

7, 8, 9번째 줄에 방금 만든 헤더파일을 추가 시켜줬음을 알 수 있다.

또한, 21, 22, 23, 24번째 줄에도 내용이 추가 되었다.

각각의 다이어로그의 이름에 맞춰서 그 다이어로그를 제어할 수 있는 부분을 추가해주었다.

이제 다시 testDlg.cpp파일을 열어서

CtestDlg를 찾아서 아래와 같이 수정을 해준다.

5번째 줄만 수정을 해주었다.

Code Snippet
  1. CtestDlg::CtestDlg(CWnd* pParent /*=NULL*/)
  2.     : CDialog(CtestDlg::IDD, pParent)
  3. {
  4.     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  5.     m_pwndShow = NULL;
  6. }

같은 파일(testDlg.cpp)에서

OnInitDialog에

Code Snippet
  1. // TODO: Add extra initialization here
  2.  
  3. CString    strOne = _T("First");
  4. CString    strTwo = _T("Second");
  5. CString    strThree = _T("Third");
  6. m_Tab.InsertItem(1, strOne);
  7. m_Tab.InsertItem(2, strTwo);
  8. m_Tab.InsertItem(3, strThree);
  9.  
  10. CRect Rect;
  11. m_Tab.GetClientRect(&Rect);
  12.  
  13. m_First.Create(IDD_First, &m_Tab);
  14. m_First.SetWindowPos(NULL, 5, 25,
  15.     Rect.Width() - 12, Rect.Height() - 33,
  16.     SWP_SHOWWINDOW | SWP_NOZORDER);
  17. m_pwndShow = &m_First;
  18.  
  19. m_Second.Create(IDD_Second, &m_Tab);
  20. m_Second.SetWindowPos(NULL, 5, 25,
  21.     Rect.Width() -12, Rect.Height() - 33,
  22.     SWP_NOZORDER);
  23.  
  24. m_Third.Create(IDD_Third, &m_Tab);
  25. m_Third.SetWindowPos(NULL, 5, 25,
  26.     Rect.Width() - 12, Rect.Height() - 33,
  27.     SWP_NOZORDER);
  28.  
  29. return TRUE;  // return TRUE  unless you set the focus to a control

아까 탭을 만들때 추가시켜준 부분 아래에 다음과 같이 추가를 해준다.

중요한 것은 16번째 줄의 내용은 한번만 추가해주는 것이다.

탭컨트롤을 만드는 것은 책에서 보고 따라한 것인데

아무생각없이 3번 복사했더니, 탭컨트롤이 똑바로 초기화가 안되어서

실행을 했을 때, 탭안의 내용이 바로 실행이 되어야 하는데,

다른 탭을 일일이 눌러주지 않으면 처음탭의 내용이 보이기만하고 실행이 안되는 경우가 생긴다.

 

다시 Resource view로 돌아와서,

그림에서 보이는 화면을 클릭해주고, (탭안을 클릭해야됨)

프로퍼티 창을 보면(위에 설명 해놨음)

이 화면에서 오른쪽의 번개마크를 누르면 아래와 같이 화면이 바뀌게 된다.

이 화면에서, 밑에서 두번째에 있는

TCN_SELCHANGE를 누르면 창이 뜨는데,

OnTcnSelchangeTab을 추가할 수 있게 된다.

추가를 하면 testDlg.cpp파일로 돌아오게 되는데,

Code Snippet
  1. void CtestDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
  2. {
  3.     // TODO: Add your control notification handler code here
  4.     *pResult = 0;
  5. }

이런 것이 생긴 것을 볼 수 있다.

 

Code Snippet
  1. void CtestDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
  2. {
  3.     // TODO: Add your control notification handler code here
  4.     if(m_pwndShow != NULL)
  5.     {
  6.         m_pwndShow->ShowWindow(SW_HIDE);
  7.         m_pwndShow = NULL;
  8.     }
  9.  
  10.     int nIndex = m_Tab.GetCurSel();
  11.     switch(nIndex)
  12.     {
  13.     case 0:
  14.         m_First.ShowWindow(SW_SHOW);
  15.         m_pwndShow = &m_First;
  16.         break;
  17.     case 1:
  18.         m_Second.ShowWindow(SW_SHOW);
  19.         m_pwndShow = &m_Second;
  20.         break;
  21.     case 2:
  22.         m_Third.ShowWindow(SW_SHOW);
  23.         m_pwndShow = &m_Third;
  24.         break;
  25.     }
  26.     *pResult = 0;
  27. }

위와 같이 수정을 해주면 탭컨트롤 추가가 끝이다.

이로서 완성이 되었다.

실행을 해보면,

위와 같이 잘 된 것을 볼 수 있다.^^


--------------------------------------------------------------------------------------------------------------------------------------------

<출처>

http://jaiyun.tistory.com/5 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

자! 오늘부터 주식공부도 시작하려고합니다. HTS를 만들어노면 모해요 쓸줄을 모르는데 ㅋㅋ 그쵸? 그래서 오늘부터 주식 스터디할겁니다.

본 포스팅은 <바보스탁 산호님의 주식 바로보기>의 정리 및 독후감 형식으로 진행됩니다.


****************************************************

챕터 1. 캔들은 화장발이다. 속으면 안된다.

1. 캔들의 새로운 해석

2. 캔들의 시종가에 이런 비밀이 있다.

3. 상한가 위꼬리에 대한 고찰

4. 하한가 아래꼬리와 캔들 속 숨은 키포인트

5. 캔들아~ 분봉 종가선 차트의 내조를 받아라

****************************************************

- 캔들은 시가, 종가, 저가, 고가로 구성되어져 있습니다.

- 상한가가 오전에 치는게 좋을까요? 오후에 치는게 좋을까요?, 답은 오후입니다. 비교적 매수세가 강한 오전 중에 세력이 물량을 던져버리게 되면, 주가를 상승시킬 주체가 없어지기 때문에 주가는 힘없이 밀리게 됩니다. 이렇게 주가가 하락하게 되면 매물대에서 매수 가담했던 투자자나 저점 매수했던 투자자들 역시 수익실현이나 손절 등으로 매도세에 가담하게 되어 주가가 더 하락하기 때문에 오전이 상투가 되는 것입니다.


1. 캔들의 새로운 해석


2. 캔들의 시종가에 이런 비밀이 있다.

- 캔들의 시가는 자잘한 변수에 의해서 조금은 왜곡될 수 있습니다. 무조건 플러스가 중요한게 아니라 흐름이 중요합니다.

- 캔들에서 시가라는 의미는 하루 중에 가장 많은 체결이 일어난 곳일 수 있고, 매수 심리나 매도 심리가 어느 한쪽으로 쏠린 상황일 수도 있는 곳입니다.

- 시가 지지 여부는 아침 시작할 때의 심리가 그대로 이어져 있는가? 라는 질문만 파악해도 충분하다.

- 상한가의 종가 자리는 많은 거래량을 수반한 자리이다.

- 상한가의 자리를 지켜내기 위해서는 상한가에서 매도하는 물량을 받아내야 하는데 세력 중의 누군가가 그 물량을 다 받았기 때문에 상한가의 종가는 대량 거래가 일어날 수 밖에 없는 자리이다.

- 상한가의 종가를 지키고 익일 아침에 매수 흐름이 있을 때 물량을 다 팔아버린다.


3. 상한가 위꼬리에 대한 고찰

- 4개의 포인트로만 만들어지는 캔들로는 세부적인 흐름을 파악할 수 없다. 거래량에 따라서 단타로 갈지, 스윙으로갈지 결정해야한다.

- 매매를 할때에는 불분명한 느낌으로 해서는 안된다. 그 종목이 관심 종목인 명백한 이유가 있어야 하고 어느 자리에서 왜 매수할 것인지에 대한 기준을 가져야만 한다. 그렇기 때문에 매매 후에 복기를 해야하고 원인을 파악하여 발전이 있어야 한다.

- 오른쪽의 그림은 주식 가격 상승의 강한 복선이다.(둘다 상한가 위꼬리)

- 이처럼 캔들의 의미를 파악하는 것은 세력의 마음을 읽어내는 강력한 스킬이다.

- 캔들에 마우스를 올려보아야 한다. (거래가 터진 상한가의 위꼬리인지 아니면 일반적인 고점의 위꼬리인지 살피라는 의미)


4. 하한가의 아래꼬리와 캔들 속 숨은 키포인트

- 캔들 속 하한가의 아래꼬리나 하한가성 아래꼬리는 많은 투자자들을 손절시켰나? 하는 심리적 포인트를 가지고 있다.

- 매집 구간에서 많은 흔들기와 하한가의 공포를 조장하는데, 이때 투자자들은 손절하거나 수익시 매도하게 되는데 나중에는 보고 싶지도 않은 종목이 되게 된다. 세력은 이런 심리를 이용하여 물량을 성공적으로 매집하게 된다.

- 즉, 훌륭한 매집이라는 것은 일반 투자자가 떨어져 나갈 수 밖에 없는 구간이 있어야한다. (일반 투자자가 떨어져 나간 구간이 있는지 살펴보는게 중요하다.) 아래는 그 구간을 찾아내는 스킬이다.

- 음봉의 공포 : 음봉의 심리 상태는 대부분 매도 심리가 깔려있기 때문에, 그 음봉을 이용한 매수를 의심해야 한다.

- 라운드 피겨(주가가 5천원 1만원, 1만5천원 단위로 끊어져서 부딪히는 현상) : 이때 저항선을 돌파할때는 단번에 돌파하기 보다는 그곳의 매물대를 몇 차례 돌파를 시도하다가 돌파하게 된다. 

- 이러한 원리는 라운드 피겨 뿐만 아니라 많은 분들이 매도하고자 했던 저항대(이동편균선이나 기타 보조 지표들)도 역시 같은 원리이다. 그 이유는 저항대 역시도 많은 매물이 나오는 자리기 때문에 많은 체결이 일어난 자리가 될 것이기 때문이다. 저항이 지지로 바뀐다는 말의 근거값이 이와 같은 종가선 차트의 원리와 같은 것이다.

- 라운드 피겨는 매수 매도가 몰리는 구간이다.

- 이처럼 어떤 의미에서든지 많은 거래가 일어나는 곳은 캔들 속에 보이지 않는 가이드 라인이 되어 보이지 않는 지표가 있다. 이동평균선, 저항선, 매물대, 상한가의 종가, 긴 위꼬리 등이 모두 포함된다.

- 이를 확인하기 위해 캔들의 색상을 비우자


5. 캔들아~ 분봉 종가선 차트의 내조를 받아라

- 종가선 차트는 다른 표현으로 틱라인 차트라고 불리기도 한다.

- 분봉 차트와 차이점이라면 움직임을 봉으로 표현한 것이 아니라 선으로 표현한 것이다. 점들을 이어놓았기 때문에 좀더 기민하고 예리하게 움직임을 관찰할 수 있다.

- 틱라인 차트

- 주문 체결 1건을 하나의 점으로 나타내면 1틱

- 주문체결 3건을 하나의 점으로 나타내면 3틱 (시간과 무관)

- 분봉 종가선 차트

- 0.5분을 하나의 틱으로 나타내도 됨. (시간적 연속성)

- 시간은 좋은 캔들을 구별하기 위한 필수 요소이다.

- 상승하면서 물량을 받기 위해서는 충분한 시간도 고려되어야 한다.

- 좋은 양봉은 추가 상승할 여력이 있는 캔들이어야 한다.

- 그 양봉은 고점에서 세력이 많은 물량을 매도해서는 안될 것이며, 내일 비싸게 팔기 위해서 종가만 수직각으로 상승시켜 마감한 캔들이어서도 안될 것이다.

- 충분한 매집이 있는 양봉이어야 오래간다.

- 좋은 양봉은 물량을 뺏고 싶어서 안달 난 캔들이 좋은 양봉이다.

- 물량을 뻇고 싶은 곳에서 물량을 뺏는 것이 중요하다.

- 음봉의 종가선 차트는 어떨까?

- 세력이 물량을 처분할 때 물량을 떄리기만하면 누가 받아줄까?

- 고가권에서는 급락과 급등을 반복하면서 주가가 크게 요동을 치면 그것은 팔고 있을 가능성이 높습니다. 이것은 물량을 팔아 치울 때 어쩔 수 없이 나타나는 현상입니다.

- 보유 중인 투자자를 매도할 수 밖에 없는 상황으로 유도를 하여야 하며 대기 매수세가 이 종목에 진입하기 싫은 상황을 만들어서 매도하는 사람들의 물량을 모두 걷어들이고 매수세 유입을 막아 매집으로 활용했다면 그것은 좋은 음봉입니다.

----------------------------------------------------------------------------------------------------------------------------------------------------------------

<나의 적용>


----------------------------------------------------------------------------------------------------------------------------------------------------------------

<참고서적>

- 바보스탁 산호님의 주식 바로보기 <정성훈 지음>

버전처리 오류 해결하기

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 이번엔, 버전 처리 오류를 해결하는 방법을 알아 볼거에요. 그 과정은 가이드 북에 잘 나와 있는데요, 제가 느낌점을 좀더 추가해볼꼐요.


 위와 같이 버전처리 창이 뜰 경우, 처리 과정은 다음과 같습니다.

1. 현재 진행중인 프로젝트를 완전 종료해버린다.  (비주얼스튜디오)

2. KOA스튜디오를 킨다.

3. 로그인한다.

4. 위와 같은 버전처리 창이 뜨면, KOA 스튜디오를 종료하고, 확인을 누른다.

5. 성공적으로 해결 ㅎㅎ


모두들 성공하는 주식투자 하시기 바랄꼐요~


 주식 기본 정보 가져오기

----------------------------------------------------------------------------------------------------------------------------------------------------------

 주식 기본 정보 가져오는건 지난주에 다 해뒀는데 이번 주에 개인적으로 생각할 일들이 있어서 포스팅을 못했네요 ㅜㅜ

 그래두 앞으로는 짬을 내서 계속 올려야겠어요!! 우리 함께 화이팅 해용 ㅎㅎㅎ


 오늘은 주식 기본 정보를 가져오는걸 해볼꺼에요. HTS를 할때 해당 주식의 시가총액이라든가, 현재가, 시가, 종가 등등 기본적인 데이터를 가져오는걸 할 수 있다면 이제 어느정도 감을 잡았다는 거겠죠?? 주식 기본 정보를 가져오는 것도 생각보다 어렵지 않아요. 다만, 이벤트 처리 개념을 이해하셔야 합니다! 시작해봅시다~

 주식 기본 정보를 가져오기 위해서는 위와 같이 서버로부터 정보를 받아야 합니다. 그 흐름은 위와 같은데요, 이를 순서에 따라 정리해보면, 

     1. 원하는 걸 상자에 담습니다.

     2. 서버에 해달라고 보냅니다.

     3. 서버는 확인하고 처리해드렸다고 합니다.

     4. 상자를 받아서 풀어봅니다.

 이와 같이 되는데요, 이를 함수로 나타내면, 

     1. SetInputValue : 내가 얻고 싶은 아이템을 넣습니다. ex) 종목코드, 계좌번호 등등...

     2. CommRqData : 아이템의 어떤 정보를 얻고 싶은지를 설정해서 보냅니다.

     3. OnReceiveTrData : 서버가 처리했다는 이벤트를 감지합니다.

     4. GetCommData : 이벤트를 감지한 다음, 원하는 정보를 꺼냅니다.

여기서 3번 이벤트 부분은 기존 함수와는 다른 방법으로 설정하게 되는데요 밑의 과정을 따라해볼까요?

-----------------------------------------------------------<참고 함수>-----------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


 우선, 프로그래밍을 하기 이전에, 전에 보았던 KOA Studio를 켜서 확인해볼께 있어요. <TRcode>, <함수>, <화면목록>, <동작방식>, 인데요. 서버한테 요청할 때 필요한 것들이에요. CommRqData(sRQName, sTrCode, nPrevNext, sScreenNo) 함수 인자에 각각

  sRQName = TrCode 옆에 있는 말

  sTrCode = 어떤 TrCode 인지?

  nPrevNext = 보통 0 으로 설정 (0:조회, 2: 연속)

  sScreenNo = 화면번호 (==> 영웅문의 화면 번호를 이야기함, 위의 그림에서 탭을 변경하여 확인가능.)

이런 식으로 들어갑니다. 각각의 인자들을 어디서 얻을 수 있는지 알아두세요!!


 아, 그리고 인터페이스를 조금 바꿧는데요, 이젠 다 하실수 있죠? 그런데 제가 지난번에 까먹고 말씀 못드렸는데, List_box에서 속성 - Sort 부분을 False로 바꿔주세요. True면 자동으로 오름차순으로 정리해준답니다. 그러면 안되잖아요 ㅎㅎ


 이제 이벤트 처리를 해줄꺼에요. 맨 처음 도형에서 보았을 떄 처럼, 우리가 서버에게 요청을 했을 떄 서버가 요청을 했는지 알 수 있으려면 위와 같이 이벤트처리를 해줘야 합니다. openAPI 부분에서 마우스 우클릭을 하면, 이벤트 처리기 추가... 가 나오는데요, 이걸 누르고 위와 같이 OnReceiveTrData를 선택해주고  추가 및 편집 버튼을 눌러주세요. 그러면, 자동적으로 이벤트 처리에 필요한 코드들을 추가해줍니다. 이는 stock_ver_0.1Dlg.cpp와 헤더 파일에서 볼 수 있어요.


 위의 버튼을 누를 때 서버에게 요청을 하려고 하는데요, 일단 우리는 알려고하는 단계니, 미리 정보를 넣어 놓고 보내는 연습을 해볼꼐요. 인자는 위의 코드와 처음 부분의 함수 설명을 보세용, 저는 삼성전자의 정보를 요청했습니다.


  이 부분은 주식 기본 정보를 요청한 후 이에 대한 이벤트가 발생했을 때 들어가지는 함수 부분입니다. 우리는 이 부분에서 정보를 확인할 거에요. 정보 확인은 우선, 내가 원했던 이벤트가 맞는지? 확인을 한 후, 얻고 싶은 정보에 대한 인덱스를 입력해줍니다. 그러면, 자동으로 파싱되어서 정보가 return 되어 집니다. 그런데, 여기서 받아 지는 정보 앞 뒤로 쓸데없는 공백이 함께 파싱이 되요. 그래서 CString 함수에 넣어서 Trim()을 해서 앞 뒤의 공백을 제거해주는 겁니다. 그 뒤 위처럼 출력하거나, 다른 곳에서 사용하시면 됩니당.


짠! 결과 화면입니다. 깔꼬롬하게 나오는 걸 확인할 수 있어요. 저거 1주만이라두 가지고 싶네요 ㅎㅎ...

여러분 앞으로도 계속 올릴 예정이니 서로 으쌰으쌰해요~ 화이팅!

ERwin 다운/사용법

------------------------------------------------------------------------------------------------------------------------------------------------------

 오늘 데이터 구조에 대해서 체계적으로 짜야된다고 아는 형님께서 귀띔해주셔서 ERwin 에 대해서 알아보았습니다. 그런데 이게 왜 필요한건지... 솔직히 아직 감이 안잡히는 것 같아요. 제 데이터 구조가 작아서 그런거 같은데, 아마 데이터 종류가 더 많아지고 크기도 커지면 그때서야 비로소 의미가 있을 것 같아요.

 실습해본거랑 사용법, 설치 사이트 올립니당. (설치사이트는 영어인데, 전 Trial 버전으로 깔았어요.)

* HTS의 데이터 구조


* 사용법

erwin_사용법-lachesys7.doc


* 다운 사이트 주소 (<-- 클릭)

+ Recent posts