안녕하세요?!
이전 글에 이어서 가격조회 로직 (2)를 진행하겠습니다.
장 진행
투자하기로 설정한 종목들에 대해서 나의 현재 티어를 조회합니다.
SQL Server의 Stored Procedure 기술을 사용하기 때문에 조금 어려우실 수 있겠지만,
우선은 구현된 "SP_GET_CURRENT_TIER" 프로시저를 통해 해당 종목의 현재 티어 정보를 가져온다고 생각해주세요.
ALTER PROCEDURE [dbo].[SP_GET_CURRENT_TIER] (
@p_code varchar(10),
@p_gubun char(1)
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
if @p_gubun = 'g'
begin
select
a.code, (select sum(total_amount) from config_g where code = a.code) as total_amount,
(select count(*) from tier_table_g where code = a.code and block_amount != 0) as total_tier,
(select block_amount from tier_table_g where code = a.code and tier = isnull(b.tier,0)+1) as block_amount, --다음 tier의 구매가능 금액
c.down_rt, c.up_rt,
b.tier,
b.curr_amount, b.curr_qt,
b.curr_amount * ((100 - c.down_rt)/100) as buy_amount, b.buy_qt,
b.curr_amount * ((100 + c.up_rt)/100)as sell_amount, b.sell_qt,
isnull(d.jackpot_amount,0) as jackpot_amount
from config_g a
left outer join tier_table_g c on a.code = c.code
left outer join tier_g b on a.code = b.code and b.yn_use = 'Y' and b.tier = c.tier
left outer join jackpot_g d on a.code = d.code
where a.code = @p_code
and isnull(c.tier,0) = (
select isnull(max(tier),1)
from tier_g
where code = @p_code
and yn_use = 'Y'
)
end
else
begin
select
a.code, (select sum(total_amount) from config_k where code = a.code) as total_amount,
(select count(*) from tier_table_k where code = a.code and block_amount != 0) as total_tier,
(select block_amount from tier_table_k where code = a.code and tier = isnull(b.tier,0)+1) as block_amount, --다음 tier의 구매가능 금액
c.down_rt, c.up_rt,
b.tier,
b.curr_amount, b.curr_qt,
b.curr_amount * ((100 - c.down_rt)/100) as buy_amount, b.buy_qt,
b.curr_amount * ((100 + c.up_rt)/100)as sell_amount, b.sell_qt,
isnull(d.jackpot_amount,0) as jackpot_amount
from config_k a
left outer join tier_table_k c on a.code = c.code
left outer join tier_k b on a.code = b.code and b.yn_use = 'Y' and b.tier = c.tier
left outer join jackpot_g d on a.code = d.code
where a.code = @p_code
and isnull(c.tier,0) = (
select isnull(max(tier),1)
from tier_k
where code = @p_code
and yn_use = 'Y'
)
end
END
이 프로시저를 통해 가져온 값은 아래와 같고 이 값들을 활용하는 방법을 조금 설명드려야 합니다.

가장 앞의 code를 찾을 때는 숫자로 0으로 찾습니다.
이런식으로 숫자를 붙이면 가장 마지막인 jackpot_amount는 13번이 됩니다.
로직에서는 해당 컬럼명을 이용하지 않고 숫자를 썼기때문에 이 표를 보시고 로직을 해석하셔야 합니다. 😂
현재가조회
종목코드를 clipboard에 저장하고 이를 미니주문(2102)창에 붙여넣으면서 주가를 조회합니다.

조회하기 전에 주황색 표시한 자동을 체크해줍니다.
주황색 표시한 종목란을 선택하고 Ctrl +v 해서 종목코드를 붙여넣어 조회합니다.
그리고 녹색 표시한 가격을 읽어서 해당 종목의 실시간 현재가를 가져옵니다.
상세 로직에는 오작동 방지를 위해 내가 조회한 코드가 잘 조회되어 있는지 체킹하는 로직과
창이 이미 열려있는지 체크하는 등의 로직이 있습니다만 이 부분은 소스에서 직접 확인해보시면 좋겠습니다. 😊
마찬가지로 실시간 주가를 가져올 수 있는 방법은 여러가지가 있을 수 있습니다.
이 방법 외에 더 좋은 방법을 알게 되신다면 공유 해주실 수 있을까요?! 🙏
주가를 잘 가져왔다면 이 값을 DB의 price_g에 입력해줍니다.
"프리-애프터장"인 경우에는 이미 매매 주문이 걸려있는지 확인합니다.
매매 주문이 걸려있으면 해당 주문이 우선이므로 아무 동작을 하지 않고 넘어갑니다.
매매 판단 메인 로직

(1) (1티어 즉시) 매수
위의 6번인 tier에 값이 없으면 아직 매수한 티어가 없다는 뜻이므로 바로 1티어를 매수하는 로직을 수행합니다.
매수는 3번의 block_amount만큼만 사면 되는데 개인적으로 jackpot 이라 이름붙인 로직을 집어넣었습니다.
매수 할 때 3번의 block_amount에다가 13번의 jackpot_amount를 더해서 매수하는 것입니다.
jackpot_amount는 매도 시 수익금에서 수수료 및 양도소득세를 제외한 순수익금을 누적 적립해 놓았다가
매수 시점에 사용 가능하다면 추가로 활용하는 로직입니다.
아무래도 그리드 매매법은 총투자금액을 티어로 쪼개다보니 각각의 티어의 투자금은 작아지는데,
조금이라도 빨리 수익금을 재투자 해보기 위해 고민한 내용입니다.
그러나 지속적인 하락장에서는 그냥 그런 로직이 되버렸습니다. 😂
(2) 매도
조회한 현재가가 11번의 sell_amount 보다 크다면 매도를 진행합니다. 심플합니다. ㅋㅋ
(3) (1티어가 아닌) 매수
이 부분은 로직이 조금 복잡하게 느껴지실 수 있는데 잘 한 번 풀어보겠습니다.
int.Parse(arr[2]) > int.Parse(arr[6])
&& float.Parse(arr[9]) > float.Parse(현재가)
&& float.Parse(arr[3]) != 0
첫 번째 줄은 2번이 6번보다 클 때 동작시키겠다는 의미입니다.
2번이 6번보다 크다는 뜻은 total_tier가 현재 tier보다 크다는 의미이고, 다른 말로는 매수 여력이 있다는 의미입니다.
FNGU를 총 30티어로 설정했으니 현재 tier가 30보다 작을 때는 아직 하위 티어는 사용 전이라는 의미입니다.
불행하게도 현재 조회된 데이터는 현재 tier가 30이므로 매수 여력이 없는 계좌입니다. 😂
두 번째 줄은 첫 번째 줄에서 여력이 있어야 하고, 9번이 현재가 보다 클 때 동작시키겠다는 의미입니다.
9번인 buy_amount는 내가 사려고 마음먹은 가격이므로 이 가격이 현재가보다 크면 사겠다는 의미입니다.
$10.5에 사려고 했는데 현재가가 $10.2면 $10.2에 사는게 이익인 셈입니다. (유리체결?!!)
세 번째 줄은 첫 번째 줄에서 여력이 있어야 하고, 두 번째 줄에서 사려는 가격이 현재가보다 커야하며
3번이 0이 아니면 매수하겠다는 의미입니다.
3번은 block_amount 이므로 해당 티어의 매수할 총 투자금액입니다.
이렇게 3개의 조건을 모두 통과하는 경우 조회한 현재가에 매수하는게 좋겠다고 판단합니다.
(4) not 매수/매도
아무것도 안합니다. 😊
오늘도 고생 많으셨습니다.

'기능과 기술' 카테고리의 다른 글
특정 시간에 조회 쿼리 수행하고 결과를 공유하는 프로그램 (0) | 2022.09.29 |
---|---|
가격조회 로직 상세설명 (3) - 마지막 (0) | 2022.07.05 |
가격조회 로직 (1) (1) | 2022.06.28 |
메이플 자동 로그인 및 실행도 파이썬으로~ (1) | 2022.06.26 |
메이플 자동 로그인 및 실행 (RPA로 만들고 활용하기) (0) | 2022.06.25 |