키움증권 REST API 주식주문하기 > PHP
PHP

키움증권 REST API 주식주문하기

조회 4,051회 댓글 0건
  • 현재 페이지 주소 복사
  • 페이스북으로 공유
  • X 로  공유
  • 트위터로  공유
  • 네이버 블로그로 공유
  • 네이버 카페 공유하기
  • 네이버 라인 공유하기
  • 네이버 밴드 공유하기
  • 링크드인으로 공유하기
  • 핀터레스트에 공유하기

제가 이걸 사용하게 된것은 어떤것을 하나 배웠는데 HTS에서 언제 일어날지도 모르는(그 가격에 언제 올지도 모르는) 발생할지 모르는데 계속 보고 있을 수 없기에 계속 가격을 체크해서 원하는 가격이 오면 자동매수 했을때 수익이 발생할지 체크하기 위해서 만들었습니다.


테스트 할때 매수금액과 관계 없이 주식수로 1주만 하세요.

1백만원이 넘는것은 어떡하나.... 그정도 돈은 있잖아요 1주 하시면 됩니다.


이번이 키움증권 REST API 관련해서 마지막 글입니다.

이전에 올려드린 것으로 PHP와 키움 HTS 사용하실줄 아시는 분이면 얼마든지 응용해서 자신에 맞는 프로그램을 만들 수 있습니다.



 


아래는 실제 제가 사용하는 형태 입니다.


    include(__DIR__ . '/common/MysqliDatabase.class.php');
    include(__DIR__ . '/kiwoom/rest_api/fnc_common.php');

    $mysqliCon   = new MysqliDatabase($aMysqlDatabaseConfig);
    $mysqliCon->getCon()->report_mode = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT;

    # 키움 토큰 발급
    $aAuth2Token = fn_au10001($aConfigKiwoomRestApi);
    $accessToken = $aAuth2Token['token'];
    // echo $accessToken . PHP_EOL;
    // sleep(1);


    # 주식매수 주문
    if ( strlen($accessToken) > 32 )
    {
        $stock_code = '007980';
        $현재가     = 1928;
        $주식수     = 1;
        $api_id     = 'kt10000'; // 주식매수 주문
        $endpoint   = '/api/dostk/ordr';
       
        $aParams = [
            'dmst_stex_tp' => 'SOR',               // KRX,NXT,SOR
            'stk_cd'       => $stock_code,
            'ord_qty'      => $주식수,             // 주문수량
            'ord_uv'       => $현재가,             // 주문단가
            'trde_tp'      => '0',                 // 0:보통, 3:시장가
        ];

        $aResponse  = fn_stock_data($endpoint, $accessToken, $aParams, 'N', '', $api_id);
        print_r($aResponse);
        exit;
        /*
        Code: 200
        Header: {
            "next-key": "",
            "cont-yn": "N",
            "api-id": "kt10000"
        }
        Body: {
            "ord_no": "0539055",
            "dmst_stex_tp": "KRX",
            "return_code": 0,
            "return_msg": "KRX 매수주문이 완료되었습니다."
        }
        */
    }

 


이전에 올린 fn_stock_data 함수의 파라미터가 다를텐데 endpoint가 다른 경우가 있어 외부에서 보내주는것을 추가 했을 뿐입니다.

그리고 이전에는 테스트용으로 리턴값이 없었지만 추가된것 정도이며 프로그램 작업 하실 생각을 계신 분이라면 무척 쉽게 수정해 사용 가능합니다.


▲ 환경

중요 사항을 빼먹었네요 PHP 환경은 7.4 입니다. 그 이하버전에선 테스트 안해봐서 어떨지 모릅니다.

특이한 기능이 없어 사용가능하지 않을까 싶은데 테스트 해볼 필요도 없고 현재 8버전이 주류인데 필요하면 새버전 설치 해서 사용하세요.

그리고 별도 패키지를 사용하지 않았기 때문에 쾌적한 속도로 사용 가능합니다.


마지막으로 제가 만들어 사용하는것은 윈도우 cmd 또는 리눅스의 shell 환경에서 사용하기 위해서 만들어진것입니다.

(물론 웹브라우저를 통한 웹서버에 의한 실행도 가능하겠지만 복잡하게 그럴 필요가 없잖아요.)


윈도우 실행: php 프로그램명.php

리눅스 실행: /usr/local/bin/php74  PHP파일명.php


다들 아시다 시비 java 같은것 예전에 배울때 윈도우 path 설정 하잖아요. 그래서 윈도우 실행은 저렇고

리눅스도 그렇게 해도 되는데 여러버전 설치 해서 사용하기 때문에 저 같은 경우는 위치럼 실행할 php 프로그램의 위치를 지정해서 실행 합니다.


이렇게 하여 매일 아침 리눅스 cron 스케줄 이용해서

  1) 조건검색에 종목을 DB에 넣고 

  2) -> 이 종목의 일별 종가를 가져와 이평값을 구하고 

  3) -> 장시작하면 가져온 종목 실시간 시세 조회로 체결된 가격 체크해서 조건에 맞으면 매수주문


그리고 당연히 데이터베이스 사용해서 히스토리 남기고 가져온것 모두 저장해서 잘못 된것 없는지 할 수 있도록 저장하는것들이 좀 됩니다.



● 이전에 올린글 참고

  - 키움증권 REST API 실시간시세조회 및 조건검색 

  - 키움증권 REST API 시세조회 > 시분요청 

  - 키움증권 REST API 접근토큰 발급 > PHP


  • 현재 페이지 주소 복사
  • 페이스북으로 공유
  • X 로  공유
  • 트위터로  공유
  • 네이버 블로그로 공유
  • 네이버 카페 공유하기
  • 네이버 라인 공유하기
  • 네이버 밴드 공유하기
  • 링크드인으로 공유하기
  • 핀터레스트에 공유하기
전체 240건 1 페이지
  • profile_image 요즘 API 방식으로 만드는것이 유행? 인듯 싶어 인원이 적은 규모에선 저건 아닌데 싶어 내 생각이 틀린것인가 확인차 인공두뇌와 상의를 좀 해봤는데 자신이 맞다고 생각하는쪽으로 진행을 하는것이 맞다고 봅니다.질문의 예를 하나 들자면 추상화 시키고 상속도 있는 상태에서 오류가 있는데 원인을 찾기 위해서 부모 찾아 헤메는 사람이 있던데 이게 맞는거냐?내가 봤을땐 안해도 되는것을 왜? 해서 시간을 버리는지. 복잡한것이 단순한것보다 문제가능성이 높은가 낮은가확장성의 경우 프로그램을 쓰는 이유가 확장성인데...URL 보면 가끔 이런 형태로 보이는 경우가 있지요. 왜? /V1/, /V2/ 이렇게 버전별로 만들어 졌을까요?…
  • profile_image K(킬로)면 1000이 맞는데 뭔소리냐 하는 분들이 있으실텐데. 컴퓨터의 기본은 2진수를 사용하고 그렇기 때문에 모든 것들이 2의 승수로 갑니다.그래서 메모리도 4G짜리 사면 실제는 4096으로 나오고 어플리케이션 레벨에서도 이렇게 사용 되게 됩니다.시험볼때도 많이 나왔던 문제중 하나 인데. 이것이 바뀌어서 이제 1KB 하면 1024가 아니라는 겁니다.그럼 기존의 방식으로 하려면 1KiB 이렇게 표기를 해야 1024Byte가 됩니다.전 이게 잘못 된줄 알았어요.물어 보니 저장장치, 네트워크쪽에선 예전 부터 SI 방식을 사용했다고 합니다.혼동 되는것이 저장장치도 어플리케이션 레벨에선 2의 승수로 계산해서 사용하는…
  • profile_image AL3에서는 패키지가 제공되지 아니하기 때문에 PHP 7.4 버전이 필요하다면 php-fpm을 소스를 받아 컴파일 하는 방법을 사용해야 됩니다.5시간은 걸린것 같은데 아래 사용하시면 시간을 대폭 줄일 수 있으니 필요하신분 참고하시면 되고 문제가 있었던 부분은 openssl 입니다. PHP 7.4에서 사용해야 되는 openSSL 버전과 현재 서버에 설치되어 있는 OpenSSL 버전이 차이가 있어서 컴파일 과정에서 오류가 발생 하는데 이 문제인지 확인 하는 방법은 끝에 적어 놓은것 처럼 openssl만 빼고 컴파일해보세요. 잘 된다면 정확히 openssl 버전의 문제 입니다. ## 소스 컴파일에 필요한 패…
  • profile_image PHP 설치 되어 있지 아니하여 윈도우PC에 최신버전으로 설치버전은 설치 할 때마다 다르기 때문에 본인이 사용하려는버전을 선택 하면 됩니다.     > 현대적인? 방법으로 설치함.       예전에 압축해 놓은것 풀고 path 설정하고 했던 그런 방법을 쓰지 않고 간단하게 설치가 되었다.      winget install PHP.PHP.8.5    > 아래 명령으로 설치된 위치를 찾음      where php    > php.ini-production…
  • profile_image OP캐쉬 사용하면 괜찮아 보다는 저 같은 경우는 사용하지 않아도 괜찮아를 더 좋아 합니다.▷ 솔리드 캐시(SOLID CACHE)란?솔리드 캐시는 간단히 말해 "비싼 RAM(REDIS) 대신 저렴하고 넉넉한 디스크(DB)에 캐시를 저장하는 전략"으로 원래 루비 온 레일즈(RUBY ON RAILS) 커뮤니티에서 제안된 방식이지만 본질은 어떤 언어에서든 적용 가능한 실용적인 캐싱 철학임.▷ 핵심 철학: "ssd는 생각보다 훨씬 빠르다"과거에는 디스크가 너무 느려서 무조건 데이터를 ram(REDIS MEMCACHED)에 올려야 했지만 지금은 nvme ssd 같은 초고속 저장 장치가 보편화되었습니다. 굳이 복잡하게 별도의 메모리…
  • profile_image MyISAM은 SELECT가 빠르고 InnoDB는 느리다그런 경우도 있고 아닌 경우도 있기 때문에 어떤 용도로 사용하느냐에 따라서 다를 수 있습니다.그리고 처음 데이터 넣은 다음 select만 90% 이상이고 테이블 사용이 업데이트나 인서트는 적은 경우인지 불특정 다수에게 서비스 하기 때문에 불특정한 row를 가져와서 보여줘야 하는것인지에 다를 수 있는 것입니다. 가장 큰 차이: 데이터와 인덱스 구조→ MyISAM  - 데이터 파일(.MYD) 과 인덱스 파일(.MYI) 이 분리됨  - 인덱스 → 데이터 파일을 다시 읽는 구조  - 동작흐름: PK 인덱스 탐색 (.MYI) -> 데이터 위치…
  • profile_image 데이터베이스를 사용하다 보면 이미 존재하는 데이터인지 확인한 후 INSERT 또는 UPDATE를 해야 하는 상황을 자주 만나게 됩니다.이때 매우 유용한 문법이 바로 INSERT ... ON DUPLICATE KEY UPDATE입니다.즉, 쿼리 한번으로 해결 된다는 의미 인데 아무곳에서나 사용 가능한것은 아니고 키 중복이 발생하는 부분에서만 사용 하는 것입니다.그렇기 때문에 unique의 특성을 모르시는 분은 사용 하면 안되겠지요.  장점- 쿼리 수 감소: SELECT → INSERT/UPDATE 두 번 쿼리 날릴 필요 없음- 동시성 문제 감소: SELECT 후 INSERT 방식보다 Race Condition 발…

상업적 이용 금지. 컨텐츠는 개인 용도로만 사용이 가능 합니다.