커뮤니티
계좌조회 제한
2015-05-31 19:13:26
248
글번호 86600
문의1)
계좌조회는 15초당 60회로 제한된다고 매뉴얼에 나와있는데, for문으로 Account.Refresh();를 100회 정도 반복 실행시켜 봤는데, OnUp dateAccount() 이벤트는 딱 1번만 발생하더군요. 시간제한 오류는 발생하지 않구요
얼핏 생각하기엔 OnUp dateAccount 이벤트는 60회 발생하고 이후엔 시간제한 오류 발생할 줄 알았는데, 매뉴얼과는 좀 다르네요.
제가 타이머로 1초 간격으로 Account.Refresh();를 실행시켜봤는데 OnUp dateAccount() 이벤트는 3초에 1번 꼴로 발생하더군요.
계좌조회는 15초당 60회로 제한되던게 현재는 3초에 1회만 조회가능한 걸로 시스템이 바뀐 건가요?
그리고, Account.Refresh()가 3초당 1회로 제한되는건 각각의 전략단위로 적용되고, 예스스팟에서 여러 전략들이 동시에 실행시에 전략들 전체를 대상으로 해서 합산하는 방식으로 제한하는 건 아닌 것 같네요.
위에 내용들 중에 제가 잘못 이해했거나 제가 모르는 다른 사항들이 있는지 궁금합니다.
문의2)
그리고, GetLimitedTime()에 대해 매뉴얼 상에는 아래와 같이 나와 있던데,
Main.GetLimitedTime(nKind)
nKind - 0:조회제한시간, 1: 주문제한시간, 2:계좌정보조회 제한시간
GetLimitedTime() 는 ReqMarketData()가 횟수초과로 시간제한이 발생했을때만 사용할수있고, OrderBuy()나 Account.Refresh() 같은 함수가 횟수초과할 시에는 쓸모가 없는거 같군요.
GetLimitedTime()은 ReqMarketData()에 대해서만 –1 리턴시에 nKind를 항상 0 으로 고정해서 써야될 거 같은데, 혹시 OrderBuy()나 Account.Refresh() 같은 함수에 대해서 nKind를 1이나 2로 지정해서 사용할 수도 있나요?
예를들어, OrderBuy()는 15초당 90회 초과하면 시간제한 오류 발생과 동시에 전략들이 모두 정지되는데, nKind를 1로 입력하여 GetLimitedTime(1) 형태로 호출하여 정지된 전략을 재수행토록 하는 방법이 있나요?
Play() 처럼 멈췄던 이벤트를 재개시키는 메소드도 있는걸 보면 가능할 듯도 싶은데요
그리고, Account.Refresh() 는 반환값이 없는데, nKind를 2로 입력하여 GetLimitedTime(2) 형태로 어떻게 사용한다는 건지...그 의미를 잘 모르겠네요
요약하면, nKind를 어떤 경우에 1이나 2로 지정하여 사용하는지 잘 모르겠습니다.
답변 3
예스스탁 예스스탁 답변
2015-06-01 12:39:34
안녕하세요
예스스탁입니다.
1.
Account.Refresh();는 가원장과 실제원장을 동기화를 요청하는 함수입니다.
계좌정보조회 제한시간은 동기화를 요청하는 횟수의 제한입니다.
요청 후 원장의 응답속도에 대한 제한은 아닙니다.
해당함수가 실행되면 실제원장에서 값을 호출하는데
실제원장이 생각보다 속도가 빠르지 않습니다.
인터넷라인이나 원장이나 서버의 상태에 따라 조금은 다른데 약 3초정도 소요가 됩니다.
API에서 사용하기에는 실제원장의 속도가 느리므로 가원장을 만들어 쓰게 됩니다.
일정한 시간안에 너무 많이 원장에 조회를 요청하면
원장에 부하가 많이 걸리므로 설정되어 있는 제한이고 각 전략별로 제한됩니다.
2.
현재 주문은 15초당 90회를 넘어가면 주문사고로 판단해
예스스팟에 실행되고 있는 전체 전략이 멈추게 되어 있고
다시 구동하시려면 전략을 삭제하고 다시 적용해 주어야 합니다.
주문제한이 걸리면 남은 초를 리턴하고 제한시간이후에 어떤 액션을 취할수 있게하고자 설계는 되어 있지만
현재는 증권사등에서 주문사고등을 염려해 위와 같이 전체 전략을 멈추게 되어 있고
일정시간후에 자동으로 풀리는 부분이 아니므로
따로 GetLimitedTime(1)로 남은 초를 현재는 리턴하고 있지는 않습니다.
해당 부분은 주문건수가 많은 사용자가 있을수 있으므로 일정시간이후에
자동으로 풀릴수 있게 하고자 요청은 한 상태이지만 아직 정확한 나지는 않았습니다.
GetLimitedTime는 시간제한이 결렸을때
nKind로 어떤 종류의 제한인지 리턴해 주게 됩니다.
리턴값을 이용해 제한시간 이후의 실행할 부분을 처리하셔야 합니다.
함수안에 nKind에 사용자분이 직접 숫자를 지정하는 부분은 아닙니다.
해단 변수로 값이 리턴되는 것입니다.
즐거운 하루되세요
> 김태희 님이 쓴 글입니다.
> 제목 : 계좌조회 제한
> 문의1)
계좌조회는 15초당 60회로 제한된다고 매뉴얼에 나와있는데, for문으로 Account.Refresh();를 100회 정도 반복 실행시켜 봤는데, OnUp dateAccount() 이벤트는 딱 1번만 발생하더군요. 시간제한 오류는 발생하지 않구요
얼핏 생각하기엔 OnUp dateAccount 이벤트는 60회 발생하고 이후엔 시간제한 오류 발생할 줄 알았는데, 매뉴얼과는 좀 다르네요.
제가 타이머로 1초 간격으로 Account.Refresh();를 실행시켜봤는데 OnUp dateAccount() 이벤트는 3초에 1번 꼴로 발생하더군요.
계좌조회는 15초당 60회로 제한되던게 현재는 3초에 1회만 조회가능한 걸로 시스템이 바뀐 건가요?
그리고, Account.Refresh()가 3초당 1회로 제한되는건 각각의 전략단위로 적용되고, 예스스팟에서 여러 전략들이 동시에 실행시에 전략들 전체를 대상으로 해서 합산하는 방식으로 제한하는 건 아닌 것 같네요.
위에 내용들 중에 제가 잘못 이해했거나 제가 모르는 다른 사항들이 있는지 궁금합니다.
문의2)
그리고, GetLimitedTime()에 대해 매뉴얼 상에는 아래와 같이 나와 있던데,
Main.GetLimitedTime(nKind)
nKind - 0:조회제한시간, 1: 주문제한시간, 2:계좌정보조회 제한시간
GetLimitedTime() 는 ReqMarketData()가 횟수초과로 시간제한이 발생했을때만 사용할수있고, OrderBuy()나 Account.Refresh() 같은 함수가 횟수초과할 시에는 쓸모가 없는거 같군요.
GetLimitedTime()은 ReqMarketData()에 대해서만 –1 리턴시에 nKind를 항상 0 으로 고정해서 써야될 거 같은데, 혹시 OrderBuy()나 Account.Refresh() 같은 함수에 대해서 nKind를 1이나 2로 지정해서 사용할 수도 있나요?
예를들어, OrderBuy()는 15초당 90회 초과하면 시간제한 오류 발생과 동시에 전략들이 모두 정지되는데, nKind를 1로 입력하여 GetLimitedTime(1) 형태로 호출하여 정지된 전략을 재수행토록 하는 방법이 있나요?
Play() 처럼 멈췄던 이벤트를 재개시키는 메소드도 있는걸 보면 가능할 듯도 싶은데요
그리고, Account.Refresh() 는 반환값이 없는데, nKind를 2로 입력하여 GetLimitedTime(2) 형태로 어떻게 사용한다는 건지...그 의미를 잘 모르겠네요
요약하면, nKind를 어떤 경우에 1이나 2로 지정하여 사용하는지 잘 모르겠습니다.
김태희
2015-06-01 14:21:40
Account.Refresh()를 15초당 60회 초과해서 호출한 경우에 60회를 초과하여서 시간제한 오류가 발생했다는 사실을 사용자가 알수 있는 방법이 있나요?
ReqMarketData() 같은 경우는 15초당 60회를 초과하면 메소드가 –1을 리턴해주는 방식으로 시간제한 오류가 발생했다는 걸 알려주지만 Account.Refresh()는 반환값 자체가 없는데, 시간제한 오류가 발생했다는 걸 어떻게 알수 있나요?
참고로, GetLimitedTime()에 관해 답변주신 내용 보고 제가 잘못 알고 있나 싶어 다시 테스트 해봤는데...
for문으로 아래 코드를 70회 정도 반복 실행시켜 보면 a는 undefined 라고 찍히더군요.
시스템이 a 에 0 을 리턴해 주진 않더군요.
var a, b, err;
err = Main.ReqMarketData(jongmok_code, 0, 0);
b = Main.GetLimitedTime(a);
Main.MessageList(err, a, b);
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 계좌조회 제한
>
안녕하세요
예스스탁입니다.
1.
Account.Refresh();는 가원장과 실제원장을 동기화를 요청하는 함수입니다.
계좌정보조회 제한시간은 동기화를 요청하는 횟수의 제한입니다.
요청 후 원장의 응답속도에 대한 제한은 아닙니다.
해당함수가 실행되면 실제원장에서 값을 호출하는데
실제원장이 생각보다 속도가 빠르지 않습니다.
인터넷라인이나 원장이나 서버의 상태에 따라 조금은 다른데 약 3초정도 소요가 됩니다.
API에서 사용하기에는 실제원장의 속도가 느리므로 가원장을 만들어 쓰게 됩니다.
일정한 시간안에 너무 많이 원장에 조회를 요청하면
원장에 부하가 많이 걸리므로 설정되어 있는 제한이고 각 전략별로 제한됩니다.
2.
현재 주문은 15초당 90회를 넘어가면 주문사고로 판단해
예스스팟에 실행되고 있는 전체 전략이 멈추게 되어 있고
다시 구동하시려면 전략을 삭제하고 다시 적용해 주어야 합니다.
주문제한이 걸리면 남은 초를 리턴하고 제한시간이후에 어떤 액션을 취할수 있게하고자 설계는 되어 있지만
현재는 증권사등에서 주문사고등을 염려해 위와 같이 전체 전략을 멈추게 되어 있고
일정시간후에 자동으로 풀리는 부분이 아니므로
따로 GetLimitedTime(1)로 남은 초를 현재는 리턴하고 있지는 않습니다.
해당 부분은 주문건수가 많은 사용자가 있을수 있으므로 일정시간이후에
자동으로 풀릴수 있게 하고자 요청은 한 상태이지만 아직 정확한 나지는 않았습니다.
GetLimitedTime는 시간제한이 결렸을때
nKind로 어떤 종류의 제한인지 리턴해 주게 됩니다.
리턴값을 이용해 제한시간 이후의 실행할 부분을 처리하셔야 합니다.
함수안에 nKind에 사용자분이 직접 숫자를 지정하는 부분은 아닙니다.
해단 변수로 값이 리턴되는 것입니다.
즐거운 하루되세요
> 김태희 님이 쓴 글입니다.
> 제목 : 계좌조회 제한
> 문의1)
계좌조회는 15초당 60회로 제한된다고 매뉴얼에 나와있는데, for문으로 Account.Refresh();를 100회 정도 반복 실행시켜 봤는데, OnUp dateAccount() 이벤트는 딱 1번만 발생하더군요. 시간제한 오류는 발생하지 않구요
얼핏 생각하기엔 OnUp dateAccount 이벤트는 60회 발생하고 이후엔 시간제한 오류 발생할 줄 알았는데, 매뉴얼과는 좀 다르네요.
제가 타이머로 1초 간격으로 Account.Refresh();를 실행시켜봤는데 OnUp dateAccount() 이벤트는 3초에 1번 꼴로 발생하더군요.
계좌조회는 15초당 60회로 제한되던게 현재는 3초에 1회만 조회가능한 걸로 시스템이 바뀐 건가요?
그리고, Account.Refresh()가 3초당 1회로 제한되는건 각각의 전략단위로 적용되고, 예스스팟에서 여러 전략들이 동시에 실행시에 전략들 전체를 대상으로 해서 합산하는 방식으로 제한하는 건 아닌 것 같네요.
위에 내용들 중에 제가 잘못 이해했거나 제가 모르는 다른 사항들이 있는지 궁금합니다.
문의2)
그리고, GetLimitedTime()에 대해 매뉴얼 상에는 아래와 같이 나와 있던데,
Main.GetLimitedTime(nKind)
nKind - 0:조회제한시간, 1: 주문제한시간, 2:계좌정보조회 제한시간
GetLimitedTime() 는 ReqMarketData()가 횟수초과로 시간제한이 발생했을때만 사용할수있고, OrderBuy()나 Account.Refresh() 같은 함수가 횟수초과할 시에는 쓸모가 없는거 같군요.
GetLimitedTime()은 ReqMarketData()에 대해서만 –1 리턴시에 nKind를 항상 0 으로 고정해서 써야될 거 같은데, 혹시 OrderBuy()나 Account.Refresh() 같은 함수에 대해서 nKind를 1이나 2로 지정해서 사용할 수도 있나요?
예를들어, OrderBuy()는 15초당 90회 초과하면 시간제한 오류 발생과 동시에 전략들이 모두 정지되는데, nKind를 1로 입력하여 GetLimitedTime(1) 형태로 호출하여 정지된 전략을 재수행토록 하는 방법이 있나요?
Play() 처럼 멈췄던 이벤트를 재개시키는 메소드도 있는걸 보면 가능할 듯도 싶은데요
그리고, Account.Refresh() 는 반환값이 없는데, nKind를 2로 입력하여 GetLimitedTime(2) 형태로 어떻게 사용한다는 건지...그 의미를 잘 모르겠네요
요약하면, nKind를 어떤 경우에 1이나 2로 지정하여 사용하는지 잘 모르겠습니다.
예스스탁 예스스탁 답변
2015-06-03 15:55:24
안녕하세요
예스스탁입니다.
죄송합니다. 이전에 답변을 잘못 드렸습니다.
원장 동기화(refresh)의 경우 짧은 시간안에 너무 많은 동기화를 요구하는 경우들이 많아
원장에 부담등 문제가 되는 경우가 많아 이전에 언급하신 내용과 같이 3초에 1번만 수행하는 것으로 변경이 되었습니다.
Refresh가 실행되면 가원장에 원장과 동기화 요청을 하는데
동기화 요청후 3초안에 들어오는 또다른 동기화요청은 가원장 자체에서 무시를 하게 됩니다.
그러므로 최대 3초에 한번만 하실수 있습니다.
3초에 한번만 가원장에서 원장으로 요청이 가므로
제한시간에는 걸리지 않아 GetLimitedTime(2)는 값리턴이 없습니다.
즐거운 하루되세요
> 김태희 님이 쓴 글입니다.
> 제목 : Re : Re : 계좌조회 제한
> Account.Refresh()를 15초당 60회 초과해서 호출한 경우에 60회를 초과하여서 시간제한 오류가 발생했다는 사실을 사용자가 알수 있는 방법이 있나요?
ReqMarketData() 같은 경우는 15초당 60회를 초과하면 메소드가 –1을 리턴해주는 방식으로 시간제한 오류가 발생했다는 걸 알려주지만 Account.Refresh()는 반환값 자체가 없는데, 시간제한 오류가 발생했다는 걸 어떻게 알수 있나요?
참고로, GetLimitedTime()에 관해 답변주신 내용 보고 제가 잘못 알고 있나 싶어 다시 테스트 해봤는데...
for문으로 아래 코드를 70회 정도 반복 실행시켜 보면 a는 undefined 라고 찍히더군요.
시스템이 a 에 0 을 리턴해 주진 않더군요.
var a, b, err;
err = Main.ReqMarketData(jongmok_code, 0, 0);
b = Main.GetLimitedTime(a);
Main.MessageList(err, a, b);
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 계좌조회 제한
>
안녕하세요
예스스탁입니다.
1.
Account.Refresh();는 가원장과 실제원장을 동기화를 요청하는 함수입니다.
계좌정보조회 제한시간은 동기화를 요청하는 횟수의 제한입니다.
요청 후 원장의 응답속도에 대한 제한은 아닙니다.
해당함수가 실행되면 실제원장에서 값을 호출하는데
실제원장이 생각보다 속도가 빠르지 않습니다.
인터넷라인이나 원장이나 서버의 상태에 따라 조금은 다른데 약 3초정도 소요가 됩니다.
API에서 사용하기에는 실제원장의 속도가 느리므로 가원장을 만들어 쓰게 됩니다.
일정한 시간안에 너무 많이 원장에 조회를 요청하면
원장에 부하가 많이 걸리므로 설정되어 있는 제한이고 각 전략별로 제한됩니다.
2.
현재 주문은 15초당 90회를 넘어가면 주문사고로 판단해
예스스팟에 실행되고 있는 전체 전략이 멈추게 되어 있고
다시 구동하시려면 전략을 삭제하고 다시 적용해 주어야 합니다.
주문제한이 걸리면 남은 초를 리턴하고 제한시간이후에 어떤 액션을 취할수 있게하고자 설계는 되어 있지만
현재는 증권사등에서 주문사고등을 염려해 위와 같이 전체 전략을 멈추게 되어 있고
일정시간후에 자동으로 풀리는 부분이 아니므로
따로 GetLimitedTime(1)로 남은 초를 현재는 리턴하고 있지는 않습니다.
해당 부분은 주문건수가 많은 사용자가 있을수 있으므로 일정시간이후에
자동으로 풀릴수 있게 하고자 요청은 한 상태이지만 아직 정확한 나지는 않았습니다.
GetLimitedTime는 시간제한이 결렸을때
nKind로 어떤 종류의 제한인지 리턴해 주게 됩니다.
리턴값을 이용해 제한시간 이후의 실행할 부분을 처리하셔야 합니다.
함수안에 nKind에 사용자분이 직접 숫자를 지정하는 부분은 아닙니다.
해단 변수로 값이 리턴되는 것입니다.
즐거운 하루되세요
> 김태희 님이 쓴 글입니다.
> 제목 : 계좌조회 제한
> 문의1)
계좌조회는 15초당 60회로 제한된다고 매뉴얼에 나와있는데, for문으로 Account.Refresh();를 100회 정도 반복 실행시켜 봤는데, OnUp dateAccount() 이벤트는 딱 1번만 발생하더군요. 시간제한 오류는 발생하지 않구요
얼핏 생각하기엔 OnUp dateAccount 이벤트는 60회 발생하고 이후엔 시간제한 오류 발생할 줄 알았는데, 매뉴얼과는 좀 다르네요.
제가 타이머로 1초 간격으로 Account.Refresh();를 실행시켜봤는데 OnUp dateAccount() 이벤트는 3초에 1번 꼴로 발생하더군요.
계좌조회는 15초당 60회로 제한되던게 현재는 3초에 1회만 조회가능한 걸로 시스템이 바뀐 건가요?
그리고, Account.Refresh()가 3초당 1회로 제한되는건 각각의 전략단위로 적용되고, 예스스팟에서 여러 전략들이 동시에 실행시에 전략들 전체를 대상으로 해서 합산하는 방식으로 제한하는 건 아닌 것 같네요.
위에 내용들 중에 제가 잘못 이해했거나 제가 모르는 다른 사항들이 있는지 궁금합니다.
문의2)
그리고, GetLimitedTime()에 대해 매뉴얼 상에는 아래와 같이 나와 있던데,
Main.GetLimitedTime(nKind)
nKind - 0:조회제한시간, 1: 주문제한시간, 2:계좌정보조회 제한시간
GetLimitedTime() 는 ReqMarketData()가 횟수초과로 시간제한이 발생했을때만 사용할수있고, OrderBuy()나 Account.Refresh() 같은 함수가 횟수초과할 시에는 쓸모가 없는거 같군요.
GetLimitedTime()은 ReqMarketData()에 대해서만 –1 리턴시에 nKind를 항상 0 으로 고정해서 써야될 거 같은데, 혹시 OrderBuy()나 Account.Refresh() 같은 함수에 대해서 nKind를 1이나 2로 지정해서 사용할 수도 있나요?
예를들어, OrderBuy()는 15초당 90회 초과하면 시간제한 오류 발생과 동시에 전략들이 모두 정지되는데, nKind를 1로 입력하여 GetLimitedTime(1) 형태로 호출하여 정지된 전략을 재수행토록 하는 방법이 있나요?
Play() 처럼 멈췄던 이벤트를 재개시키는 메소드도 있는걸 보면 가능할 듯도 싶은데요
그리고, Account.Refresh() 는 반환값이 없는데, nKind를 2로 입력하여 GetLimitedTime(2) 형태로 어떻게 사용한다는 건지...그 의미를 잘 모르겠네요
요약하면, nKind를 어떤 경우에 1이나 2로 지정하여 사용하는지 잘 모르겠습니다.