복수의 매수/매도 호가에 걸쳐 총호가잔량을 계산하고 조회하는 object를 toolbox component를 사용하여 만들어 보도록 하겠습니다.
[Course Example #12]
1. #12_TotalBidAskSize란 이름의 새로운 indicator를 생성합니다.
2. code editor의 왼쪽 모서리에 있는 ToolBox탭을 클릭해서 code editor에 MarketDepthProvider Component를 드래그합니다.
code editor 창 아래 component tray에 기본명 MarketDeptyProvide1이 조회됩니다.
3. component의 이름을 MDP라는 단축명으로 변경시킵니다.
조회된 종목에 대한 marketdepth정보만 취급하기 위해 filter 카테고리의 종목을 symbol로 세팅합니다.
MaximumLevelCount는 input명 iMaximumLevelCount1로 세팅하면 EasyLanguage에 대칭되는 input 선언문이 추가됩니다.
4. Event 아이콘을 클릭한 후 Updated 이벤트를 더블클릭해서 event method를 생성합니다.
이제 EasyLanguage에 input 선언문과 event handler method가 조회될 것입니다.
input 파라미터를 '3'으로 변경합니다.
handler method안에는 PlotValues()를 호출하도록 코드를 추가합니다.
5. begin문 전에 세 개의 지역 변수를 가지고 있는 PlotValues method를 작성해 보도록 하겠습니다.
첫번째 변수는 총 매수매도 단계의 호가잔량을 합산할 때 사용할 loop counter로 사용될 것입니다.
남은 두 개의 지역 변수는 MarketDepthProvider component에서 구해진 매수매도 호가잔량을 누적시키는데 사용될 것입니다.
Method void PlotValues()
Var : int level, int AskDepthTot, int BidDepthTot;
begin
6. 이제 component object로부터 총 매수매도 호가잔량을 구해보도록 하겠습니다.
우선, 매수매도총호가잔량 변수를 0으로 세팅합니다.
input인 iMaximumLevelCount1에서 정한 단계까지 총계를 계산하기 위해 충분한 매수단계를 가지고 있는지 점검해 봅니다.
만일 그렇다면, loop가 유효한 내에서 매수단계별 잔량을 합산합니다.
매도단계에 대해서도 동일한 if와 for loop문을 적용시켜 보도록 하겠습니다.
AskDepthTot = 0;
BidDepthTot = 0;
If MDP.bidlevels.count >= iMaximumLevelCount1 then
For level = 0 to iMaximumLevelCount1 – 1 begin
BidDepthTot += MDP.bidlevels[level].totalsize;
End;
If MDP.asklevels.count >= iMaximumLevelCount1 then
For level = 0 to iMaximumLevelCount1 - 1 begin
AskDepthTot += MDP.asklevels[level].totalsize;
end;
7. 총계를 표시하고 매도보다 매수가 크다면 매수호가잔량의 배경색을 초록색으로 변경하고
매수보다 매도가 크다면 매도호가잔량의 배경색을 빨간색으로 변경하도록 하겠습니다.
Plot1(BidDepthTot,"Bid Size");
Plot2(AskDepthTot,"Ask Size");
If (BidDepthTot > AskDepthTot) then begin
setplotbgcolor(1,darkgreen);
setplotbgcolor(2,black);
end
Else begin
setplotbgcolor(2,darkred);
setplotbgcolor(1,black);
end;
end;
8. indicator를 검증합니다.
9. RadarScreen에서 indicator를 추가합니다.
1호가에서 3호가까지의 총호가잔량의 합산을 종목별로 조회할 수 있게 되었습니다.
[Course Example #12]
1. #12_TotalBidAskSize란 이름의 새로운 indicator를 생성합니다.
2. code editor의 왼쪽 모서리에 있는 ToolBox탭을 클릭해서 code editor에 MarketDepthProvider Component를 드래그합니다.
code editor 창 아래 component tray에 기본명 MarketDeptyProvide1이 조회됩니다.
3. component의 이름을 MDP라는 단축명으로 변경시킵니다.
조회된 종목에 대한 marketdepth정보만 취급하기 위해 filter 카테고리의 종목을 symbol로 세팅합니다.
MaximumLevelCount는 input명 iMaximumLevelCount1로 세팅하면 EasyLanguage에 대칭되는 input 선언문이 추가됩니다.
4. Event 아이콘을 클릭한 후 Updated 이벤트를 더블클릭해서 event method를 생성합니다.
이제 EasyLanguage에 input 선언문과 event handler method가 조회될 것입니다.
input 파라미터를 '3'으로 변경합니다.
handler method안에는 PlotValues()를 호출하도록 코드를 추가합니다.
5. begin문 전에 세 개의 지역 변수를 가지고 있는 PlotValues method를 작성해 보도록 하겠습니다.
첫번째 변수는 총 매수매도 단계의 호가잔량을 합산할 때 사용할 loop counter로 사용될 것입니다.
남은 두 개의 지역 변수는 MarketDepthProvider component에서 구해진 매수매도 호가잔량을 누적시키는데 사용될 것입니다.
Method void PlotValues()
Var : int level, int AskDepthTot, int BidDepthTot;
begin
6. 이제 component object로부터 총 매수매도 호가잔량을 구해보도록 하겠습니다.
우선, 매수매도총호가잔량 변수를 0으로 세팅합니다.
input인 iMaximumLevelCount1에서 정한 단계까지 총계를 계산하기 위해 충분한 매수단계를 가지고 있는지 점검해 봅니다.
만일 그렇다면, loop가 유효한 내에서 매수단계별 잔량을 합산합니다.
매도단계에 대해서도 동일한 if와 for loop문을 적용시켜 보도록 하겠습니다.
AskDepthTot = 0;
BidDepthTot = 0;
If MDP.bidlevels.count >= iMaximumLevelCount1 then
For level = 0 to iMaximumLevelCount1 – 1 begin
BidDepthTot += MDP.bidlevels[level].totalsize;
End;
If MDP.asklevels.count >= iMaximumLevelCount1 then
For level = 0 to iMaximumLevelCount1 - 1 begin
AskDepthTot += MDP.asklevels[level].totalsize;
end;
7. 총계를 표시하고 매도보다 매수가 크다면 매수호가잔량의 배경색을 초록색으로 변경하고
매수보다 매도가 크다면 매도호가잔량의 배경색을 빨간색으로 변경하도록 하겠습니다.
Plot1(BidDepthTot,"Bid Size");
Plot2(AskDepthTot,"Ask Size");
If (BidDepthTot > AskDepthTot) then begin
setplotbgcolor(1,darkgreen);
setplotbgcolor(2,black);
end
Else begin
setplotbgcolor(2,darkred);
setplotbgcolor(1,black);
end;
end;
8. indicator를 검증합니다.
9. RadarScreen에서 indicator를 추가합니다.
1호가에서 3호가까지의 총호가잔량의 합산을 종목별로 조회할 수 있게 되었습니다.