답변완료
수식 애러 수정부탁합니다
첫번째,
질문 1143번의 추가질문입니다.
선물 매수 신호시 콜만 포지션, 매도 신호시 풋만 포지션 되야 하나
매도신호는 정상 작동하나 매수신호시 풋이 청산이 되지않습니다.
1. 아래 수식중 오타인지?
Main.MessageList("매수신호발생");
Start = 1;
CallCode1 = Option.GetATMCallRecent(0);
CallCode2 = Option.GetATMCallRecent(-1);
var CallPrice1 = Option.GetBidByCode(CallCode1,2);
var CallPrice2 = Option.GetAskByCode(CallCode2,2);
A1.OrderSell(CallCode1, Vol, CallPrice1, 0);
A1.OrderBuy(CallCode2, Vol, CallPrice2, 0);
//Start와 종목코드 저장
Main.SetUserValue("Start", Start);
Main.SetUserValue("CallCode1", CallCode1);
Main.SetUserValue("CallCode2", CallCode1); <-----이 부분
2. 변수 Vol을 code1은 Vol1, code2는 Vol2 로 두개로 변경 가능한지요?
3. 시스템을 두개 사용시 내부파일에 저장한 var V = Main.GetUserValue("Start"); 와 같이 같은 변수를 쓰게되면 덮어쓰게 되는지? 아니면 각각 시스템과 관련되어 저장되는지요?
var Start;
var CallCode1,CallCode2;
var PutCode1,PutCode2;
function Main_OnStart()
{
Main.MessageList("시작");
//내부파일에 Start로 저장된 값 호출해 V에 저장
var V = Main.GetUserValue("Start");
//0이면 Start는 0
if (V == 0)
Start = 0;
//1이면
if (V == 1)
{
//Start는 1
Start = 1;
//CallCode1에 내부파일 Code1에 저장된 값 호출해 저장
CallCode1 = Main.GetUserValue("Code1");
//CallCode2에 내부파일 Code2에 저장된 값 호출해 저장
CallCode2 = Main.GetUserValue("Code2");
}
if (V == -1)
{ Start = 0;
//Start는 -1
Start = 1;
//PutCode1에 내부파일 Code1에 저장된 값 호출해 저장
PutCode1 = Main.GetUserValue("Code1");
//PutCode2에 내부파일 Code2에 저장된 값 호출해 저장
PutCode2 = Main.GetUserValue("Code2");
}
Main.SetTimer(1, 5000);//5초간격 타이머 셋팅
}
function C1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1 )
{
Main.MessageList("매수신호발생");
Start = 1;
CallCode1 = Option.GetATMCallRecent(0);
CallCode2 = Option.GetATMCallRecent(-1);
var CallPrice1 = Option.GetBidByCode(CallCode1,2);
var CallPrice2 = Option.GetAskByCode(CallCode2,2);
A1.OrderSell(CallCode1, Vol, CallPrice1, 0);
A1.OrderBuy(CallCode2, Vol, CallPrice2, 0);
//Start와 종목코드 저장
Main.SetUserValue("Start", Start);
Main.SetUserValue("CallCode1", CallCode1);
Main.SetUserValue("CallCode2", CallCode1);
}
if (Start == 1 && Signal.signalKind == 2 )
{
Start = 0;
Main.MessageList("매수청산발생");
var BxPrice1 = Option.GetAskByCode(CallCode1, 2);
var BxPrice2 = Option.GetBidByCode(CallCode2, 2);
A1.OrderBuy(CallCode1, Vol, BxPrice1, 0);
A1.OrderSell(CallCode2, Vol, BxPrice2, 0);
//저장값 초기화
Main.SetUserValue("Start", 0);
Main.SetUserValue("Code1", " ");
Main.SetUserValue("Code2", " ");
}
if (Signal.signalKind == 3 )
{
Main.MessageList("매도신호발생");
Start = -1;
PutCode1 = Option.GetATMPutRecent(0);
PutCode2 = Option.GetATMPutRecent(1);
var PutPrice1 = Option.GetBidByCode(PutCode1,2);
var PutPrice2 = Option.GetAskByCode(PutCode2,2);
A1.OrderSell(PutCode1, Vol, PutPrice1 , 0);
A1.OrderBuy(PutCode2, Vol, PutPrice2, 0);
//Start와 종목코드 저장
Main.SetUserValue("Start", Start);
Main.SetUserValue("Code1", PutCode1);
Main.SetUserValue("Code2", PutCode2);
}
if (Start == 1 && Signal.signalKind == 4 )
{
Start = 0;
Main.MessageList("매도청산발생");
var SxPrice1 = Option.GetAskByCode(PutCode1, 2);
var SxPrice2 = Option.GetBidByCode(PutCode2, 2);
A1.OrderBuy(PutCode1, Vol, SxPrice1, 0);
A1.OrderSell(PutCode2, Vol, SxPrice2, 0);
//저장값 초기화
Main.SetUserValue("Start", 0);
Main.SetUserValue("Code1", " ");
Main.SetUserValue("Code2", " ");
}
}
----------------------------------------------------------------------------------------
두번째,
질문 1157번의 추가질문입니다.
콜매도, 풋매도 금액의 합으로 +500000원 익절, -500000원 손절 식을 부탁합니다.
2015-05-02
2018
글번호 223455
예스스팟에서 배열 사용법 문의
제가 예스스팟을 지금 공부 중인데, 배열 선언과 사용에 있어서 좀 특이한 점들이 있어서 문의드립니다.
제가 예스스팟에서의 배열 사용법을 알아보려고 아래와같이 시험 테스트를 해보았습니다.
function Main_OnStart()
{
var aaa;
aaa = new Array(3);
aaa[0] = 0;
aaa[1] = 1;
aaa[2] = 2;
aaa[-1] = -1;
aaa[-2] = -2;
aaa[-3] = 33.33
aaa['a'] = 'abcd';
aaa['b'] = "efgh";
Main.MessageList(aaa[0], aaa[1], aaa[2], aaa[-1], aaa[-2], aaa[-3], aaa['a'], aaa['b']);
}
디버깅 창에 표시된 내용 ===> 0 1 2 –1 –2 33.33 abcd efgh
문의1)
먼저, 배열 선언해 줄 때, aaa = new Array(3); 와 같이 배열 요소 개수를 3개만 지정해주었는데도, 실제로 사용시엔 3개 이상 지정해도 아무 문제없이 사용이 가능하더군요.
예스스팟에서 new를 이용해 배열선언시에 요소갯수 지정은 아무런 의미가 없어 보이는데요.
위 경우처럼 new Array(3); 으로 지정해주지 않고, 그냥 괄호 () 속을 공란으로 두고 new Array();처럼 코딩해도 프로그램은 오류없이 잘 돌아가더군요.
수식 코딩할 때 배열요소 개수 지정은 안해줘도 상관없는 건가요?
예스스팟에서 배열이 동작하는 정확한 개념과 원리..메카니즘을 알고 싶습니다.
문의2)
aaa[-1], aaa['a']처럼 배열 요소를 인덱싱할 때 음수나 문자를 넣어도 문제없이 잘 돌아가던데, 이렇게 써도 문제 없는 건가요?
문의3)
배열요소에 값을 할당할 때 정수,실수,문자열 등을 막 집어넣어도 데이터 타입 오류를 발생시키지 않고 잘 돌아가던데, 예스스팟에선 원래 이런 방식을 허용하나요?
문의4)
예스스팟은 자바스크립트 기반으로 작동한다고 매뉴얼엔 씌여 있던데, 원래 자바 스크립트에선 위에서 언급한 것과 같은 방식의 배열 사용은 허용하지 않는 걸로 알고 있는데, (물론, 파이썬 같은 랭귀지에선 허용이 되긴 합니다만) 좀 희안하네요.
근데, 모의투자로 접속해선 저렇게 프로그래밍해도 잘돌아가긴 하지만...실전에 들어가서 실계좌에 돈을 입금한 상황에서 저런 방식으로 배열을 사용했을 때 오류가 발생해서 주문이 잘못나가거나 할까봐 걱정이 돼서 문의드립니다.
배열 사용에서 문제가 생겨 수식이 오작동해서 주문이 잘못나가기라도 하면 큰 손실을 볼수 있으니 말입니다.
홈페이지에 올라와 있는 예스스팟 매뉴얼에선 저렇게 사용하면 안되는 걸로 나와 있던데, 실제론 저렇게 프로그래밍 해도 되니 정말 저렇게 써도 될까? 의구심도 생기고 불안하기도 하고 그렇네요.
예스스팟에서 배열이 작동하는 기본 원리와 개념에 대해서 알고 싶습니다.
문의5)
예스스팟 스튜디오에서 스크립트 객체화면에서 종목객체추가 버튼을 누르면 종목이 추가되는데요.
거기 보면 current 라는 프로퍼티가 있던데, 설명에는‘현재가‘라고 되어 있더군요.
이 current 프로퍼티가 옵션같은 경우에는 현재 체결가인가요? 아니면 현재 그 종목의 이론가인가요?
옵션의 극외가격이나 극내가격 같은 경우에는 하루에 1건도 체결이 안되는..정말 거래량이 아예 없는 종목들도 있는데요.
그런 경우에는 현재 체결된 내역이 있으면 그 체결가를 current 가 저장하고, 체결된 내역이 없으며 이론가를 저장하고..그런 방식으로 작동하나요?
종목의 이론가만 따로 저장하고 있는 프로퍼티나 이론가를 구할수 있는 메소드를 찾아봐도 없는 거 같던데요.
예스스팟에서 옵션 이론가는 어떻게 참조하나요?
요약하면, current 프로퍼티가 체결가를 보관하는지 이론가를 저장하는지 여부와 이론가를 알고 싶을 때 어떤 방법이 있는지 궁금합니다.
문의6)
예스스팟 매뉴얼을 읽다보니 시간제한 관련한 내용이 있던데 잘 이해가 안되서 문의드리는데요.
GetLimitedTime(nKind)
설 명 : 조회나 주문 등에 시간제한이 발생했을 때 남은 시간을 1/1000초 단위로 반환합니다.
반 환 값 : 정수
매개변수 : 제한시간종류 (0:조회제한시간, 1:주문제한시간, 2:계좌정보조회 제한시간)
※ 종목객체 요청: 15초당 최대 60회
※ 주문: 15초당 최대 90회
※ 계좌 조회: 15초당 최대 60회
언뜻 봐서 15초당 60회 이상 조회하면 시간 제한이 있어서 더 이상 조회를 못한다는 내용같은데요.
예를들어, 100개 종목들을 스크립트 객체화면에서 종목객체추가 버튼을 눌러 추가시킨 경우에 main 객체내에 있는 OnUpdat eMarket 이벤트를 이용해서 이벤트 함수를 구현하면 무조건 15초 간격으로 60개 종목을 계속 조회하게 된다는 뜻인가요? 장종료되거나 예스스팟 종료전까지는 쉬지 않고 무조건 계속 15초 간격으로 조회하나요? 이런 경우 나머지 40개 종목은 어떻게 되는지요?
만일 100개의 종목에 대해 조회 요청을 했다고 가정했을 때 15초 동안 60개 종목만 조회를 허락하고 나머지 40개 종목은 15초가 지난 뒤에 조회가 된다는 뜻인가요?
사실 컴퓨터가 60개 종목 조회하는데는 1초도 안걸릴텐데요. 일단 1초동안 60개 종목 조회를 했다고 가정하면 15초제한으로 인해 14초 동안은 조회를 못하고 있다가 14초가 지난 다음에야 나머지 40개 종목을 조회하게 된다는 의미인가요?
매뉴얼에는 시간제한 발생했을 때 어떻게 처리하는지에 대한 프로그램 코딩 예제는 없어서 잘 감이 안잡히는데, 실제로 프로그램으로 코딩해서 어떤 방식으로 처리하는지 좀 가르쳐 주세요. 매뉴얼엔 너무 간단히 언급되어있어 잘 이해가 안되네요.
문의7)
그리고, 제가 테스트 차원에서 스크립트 객체화면에서 계좌객체, 옵션 객체를 추가시키고 간단히 다음과 같이 코딩해 봤습니다.
그랬더니 OnUp dateMarket 이벤트가 전혀 발생하지를 않더군요.
function Main_OnUpd ateMarket(sItemCode, lUp dateID)
{
Main.MessageList('OnUp dateMarket내부');
}
그래서, 스크립트 객체화면에서 종목객체 추가 버튼을 눌러 다시 5월물 콜270 종목 1개를 추가시키고, 다시 테스트 해봤더니 그제서야 OnUpd ateMarket 이벤트가 발생하네요.
스크립트 객체화면에서 Option 데이터라고 되어 있는 버튼을 눌러서 추가시킨 경우에는 OnUp d ateMarket 이벤트가 작동을 안하고, 스크립트 객체화면에서 종목객체 추가 버튼을 눌러서 추가시킨 종목에 대해서만 OnUpd ateMarket 이벤트가 작동하는 건가요?
그리고, 예스스팟은 최근월물(5월물),차근월물(6월물)까지만 지원해 주는 걸로 알고 있는데, 7월물이나 8월물같은 원월물에 대해서도 스크립트 객체화면에서 종목객체 추가 버튼을 눌러서 추가시키는 방식으로 하면 이에 대해서도 OnUpda teMarket 이벤트가 정상적으로 발생하나요?
또한, OnUp dateMarket 이벤트는 시세변동뿐만 아니라 호가변동시에도 발생하는 걸로 알고 있는데, 매수1호가(혹은 매도1호가)부터 매수10호가(매도10호가)까지의 호가변동만 감지해서 이벤트를 발생시키나요? 아니면 1호가부터 5호가까지만 보나요? 그것도 아니면 10호가 밖에 있는 호가 변동까지 다 감시를 하는 건가요?
2015-04-28
2135
글번호 223442