커뮤니티
예스스팟 Q&A
답변완료
GetOrderCode() 미동작으로 주문 오류 발생했습니다!
안녕하세요.
코스닥150선물지수를 예스스팟으로 실매매중입니다.
저는 코스닥연결선물지수를 종목객체로 만들고
order_code=Main.GetOrderCode(종목객체.code);
의 코드로 주문용 코드를 받아서 매매 메쏘드에 활용합니다.
약 3회의 매매에서 잘 동작했던 저 코드가 7월 23일에는 이 코드가 동작하지 않아서 주문 메쏘드에 종목코드가 입력되지 않고 오류가 발생하며 주문이 나가지 않았습니다!
저 코드를 테스트해보면 Main.GetOrderCode()에서 리턴되는 값이 없어요!
무엇이 문제인지 확인 부탁드립니다.
사용하는 증권사는 하이투자증권입니다.
2019-07-24
3563
글번호 224933
답변완료
시스템트레이딩 시스템구매
안녕하세요 시스템시장에서 시스템을 구매하려고 하는데
시스템들어가면 왜 구매자가 "0"명으로 나오는건지해서요
정녕 단한명도 구매자가 없는건지
아니면 단순오류표기인건지해서
문의드립니다.
2019-07-23
3402
글번호 224932
wjddmsl 님에 의해서 삭제되었습니다.
2019-07-23
2
글번호 224931
답변완료
해외옵션 관련 에러수정
안녕하세요.
아래의 시스템으로 선물 신호를 받아 해외 선물 옵션을 거래하려하는데, 에러가 발생합니다.
에러를 수정해주시면 감사하겠습니다.
===============================================================================
/*스크립트시작-----------------------------------------------------*/
var Start;
var BuyC1_code;
var BuyC2_code;
var BuyP1_code;
var BuyP2_code;
var SellC1_code;
var SellC2_code;
var SellP1_code;
var SellP2_code;
function Main_OnStart()
{
Main.MessageLog("시작");
Start = 0;
}
function Chart1_OnRiseSignal(Signal)
{
Main.MessageLog("신호완성/"+Signal.signalKind);
//Buy 신호발생
if (Signal.signalKind == 1 )
{
Start = 1;
BuyC2_code = Option.GetATMCallRecent(2,0); //콜 ATM+2 종목코드
BuyP2_code = Option.GetATMPutRecent(2,0); //풋 ATM+2 종목코드
SellP1_code = Option.GetATMPutRecent(0,0); //풋 ATM 종목코드
var BuyC2_price = Option.GetCurrent(BuyC2_code);
var BuyP2_price = Option.GetCurrent(BuyP2_code);
var SellP1_price = Option.GetCurrent(SellP1_code);
var Vol = Signal.count; //신호수량
Account1.OrderBuy(BuyC2_code, Vol*2, BuyC2_price, 1);
Account1.OrderBuy(BuyP2_code, Vol*2, BuyP2_price, 1);
Account1.OrderSell(SellP1_code, Vol, SellP1_price, 1);
Main.MessageLog("상방합성선물매수");
}
//매수청산신호
if (Start == 1 && Signal.signalKind == 2 )
{
//전체 종목수
var num = Account1.GetTheNumberOfBalances();
//전체 종목 중 옵션만 청산
for(var i = 0 ; i < num ; i++)
{
//잔고셋팅
Account1.SetBalance(i);
//옵션함수로 해당 종목이 옵션인지 확인
if (Option.GetCurrent(Account1.Balance.code) > 0 && Account1.Balance.count > 0)
{
//종목코드
var cc = Account1.Balance.code;
//잔고수량
var vv = Account1.Balance.count;
//매도포지션이면
if (Account1.Balance.position == 1)
{
//청산
Account1.OrderBuy(cc, vv,0,1);
}
//매수포지션이면
if (Account1.Balance.position == 2)
{
//청산
Account1.OrderSell(cc, vv,0,1);
}
}
Main.MessageLog("상방합성선물매수청산");
}
}
//Sell 신호발생
if (Signal.signalKind == 3 )
{
Start = 1;
BuyC2_code = Option.GetATMCallRecent(2,0); //콜 ATM+2 종목코드
SellC1_code = Option.GetATMCallRecent(0,0); //콜 ATM 종목코드
BuyP2_code = Option.GetATMPutRecent(2,0); //풋 ATM+2 종목코드
var BuyC2_price = Option.GetCurrent(BuyC2_code);
var SellC1_price = Option.GetCurrent(SellC1_code);
var BuyP2_price = Option.GetCurrent(BuyP2_code);
var Vol = Signal.count; //신호수량
Account1.OrderBuy(BuyC2_code, Vol*2, BuyC2_price , 1);
Account1.OrderSell(SellC1_code, Vol, SellC1_price , 1);
Account1.OrderBuy(BuyP2_code, Vol*2, BuyP2_price, 1);
Main.MessageLog("하방합성선물매도");
}
//매도청산신호
if (Start == 1 && Signal.signalKind == 4 )
{
//전체 종목수
var num = Account1.GetTheNumberOfBalances();
//전체 종목 중 옵션만 청산
for(var i = 0 ; i < num ; i++)
{
//잔고셋팅
Account1.SetBalance(i);
//옵션함수로 해당 종목이 옵션인지 확인
if (Option.GetCurrent(Account1.Balance.code) > 0 && Account1.Balance.count > 0)
{
//종목코드
var cc = Account1.Balance.code;
//잔고수량
var vv = Account1.Balance.count;
//매도포지션이면
if (Account1.Balance.position == 1)
{
//청산
Account1.OrderBuy(cc, vv,0,1);
}
//매수포지션이면
if (Account1.Balance.position == 2)
{
//청산
Account1.OrderSell(cc, vv,0,1);
}
}
Main.MessageLog("하방합성선물매도청산");
}
}
}
2019-07-20
3323
글번호 224930
답변완료
타이머질문
안녕하세요.
종목검색에 타이머를 5초로 설정해뒀는데, 종목검색이 5초가 넘게걸리면 어떻게되나요?
종목검색이 끝난후 5초후 다시실행하나요?
2019-07-16
3348
글번호 224919
답변완료
재접속
해외선물에 새벽 6시 5분이면 재접속이 뜨는데 예스스팟으로
자동으로 로그인 시킬 수 있나요 ?
그리고 중간에 인터넷 접속이 끊어져도 재로그인 시킬수 있나요 ?
2019-07-13
3494
글번호 224918
퀀트드래곤 님에 의해서 삭제되었습니다.
2019-07-08
0
글번호 224917
답변완료
옵션 과거 가격 조회
스팟에서 옵션 과거의 가격을 조회하는 방법이, 차트나 확장차트 외에는 없나요?
옵션 객체에서 바로 알 수 있는 방법 등이 있는지요?
몇 년치의 과거 가격이 궁금한 것이 아니라,
전일이나 전전일 등 과거 5일 이내 정도의 일봉 정도라도 참고가 되었으면 좋겠습니다.
2019-07-03
3498
글번호 224911
답변완료
옵션의 역사적변동성과 내제변동성의 차이를 통한 매매를 하고싶습니다
옵션의 역사적변동성과 내제변동성의 차이를 통한 매매를 하고싶은데
내제변동성은 알려주는 함수가있는데
역사적변동성은 알려주는 함수가 없는거같아요.
option객체중 volatility를 사용하면 되는건가요?
콜 옵션 중에서 atm부터 가장 deep otm까지 돌면서 내제변동성이 역사적변동성보다
큰 종목중 가장 atm에 가까운 종목을 찾고싶은데 어떻게 코딩하면 되나요
for(var i =0; i<Option1.lowersATM, i++)
{
if(Option1.GetImpliedVolatility(0, i) > Option1.Volatility)
}
이와 비슷하게 나올거같긴한데 i가 0부터 시작하니까 atm 부터 끝의 호가까지 돌면서
서로 차례대로 비교하는게 맞나요? "> Option1.Volatility" 이 부분이 아마 틀릴거같고
Option1.GetImpliedVolatility(0, i) 이 부분에서 i를 써주면 atm부터 찾는건지 모르겠네요
답변부탁드릴게요. 감사합니다
2019-06-28
3486
글번호 224910
답변완료
해선 옵션 관련
아래 국선용 합성시스템을 해선의 옵션에도 적용하고 싶습니다.
NH선물의 YesGrobal을 사용하는데,
1. 설정에 "옵션민감도" 등의 선택란이 없어 옵션에 대한 정보를 못가져오는지 우선 GetRemainDays에 문제가 발생하고
2. GetAskByCode 등의 함수에도 문제가 발생하고 있습니다.
아래의 시스템을 해선에서도 사용할 수 있도록 수정 부탁드립니다.
======================================================================
/*스크립트시작-----------------------------------------------------*/
var Start;
var BuyC1_code;
var BuyC2_code;
var BuyP1_code;
var BuyP2_code;
var SellC1_code;
var SellC2_code;
var SellP1_code;
var SellP2_code;
function Main_OnStart()
{
Main.MessageLog("시작");
Start = 0;
//옵션 Day청산이면 타이머셋팅 5초간격
if (Option.GetRemainDays(0,0) == 1)
{
Main.SetTimer(1, 5000);
}
}
function Chart1_OnRiseSignal(Signal)
{
Main.MessageLog("신호완성/"+Signal.signalKind);
//Buy 신호발생
if (Signal.signalKind == 1 )
{
Start = 1;
BuyC2_code = Option.GetATMCallRecent(2,0); //콜 ATM+2 종목코드
var BuyC2_price = Option.GetAskByCode(BuyC2_code,2);
var Vol = Signal.count; //신호수량
Account1.OrderBuy(BuyC2_code, Vol*2, BuyC2_price, 0);
Main.MessageLog("상방합성선물매수");
}
//매수청산신호
if (Start == 1 && Signal.signalKind == 2 )
{
//전체 종목수
var num = Account1.GetTheNumberOfBalances();
//전체 종목 중 옵션만 청산
for(var i = 0 ; i < num ; i++)
{
//잔고셋팅
Account1.SetBalance(i);
//옵션함수로 해당 종목이 옵션인지 확인
if (Option.GetCurrent(Account1.Balance.code) > 0 && Account1.Balance.count > 0)
{
//종목코드
var cc = Account1.Balance.code;
//잔고수량
var vv = Account1.Balance.count;
//매도포지션이면
if (Account1.Balance.position == 1)
{
//청산
Account1.OrderBuy(cc, vv,Option.GetAsk(cc, 5),0);
}
//매수포지션이면
if (Account1.Balance.position == 2)
{
//청산
Account1.OrderSell(cc, vv,Option.GetBid(cc, 5),0);
}
}
Main.MessageLog("상방합성선물매수청산");
}
}
//Sell 신호발생
if (Signal.signalKind == 3 )
{
Start = 1;
BuyC2_code = Option.GetATMCallRecent(2,0); //콜 ATM+2 종목코드
var BuyC2_price = Option.GetAskByCode(BuyC2_code,2);
var Vol = Signal.count; //신호수량
Account1.OrderBuy(BuyC2_code, Vol*2, BuyC2_price , 0);
Main.MessageLog("하방합성선물매도");
}
//매도청산신호
if (Start == 1 && Signal.signalKind == 4 )
{
//전체 종목수
var num = Account1.GetTheNumberOfBalances();
//전체 종목 중 옵션만 청산
for(var i = 0 ; i < num ; i++)
{
//잔고셋팅
Account1.SetBalance(i);
//옵션함수로 해당 종목이 옵션인지 확인
if (Option.GetCurrent(Account1.Balance.code) > 0 && Account1.Balance.count > 0)
{
//종목코드
var cc = Account1.Balance.code;
//잔고수량
var vv = Account1.Balance.count;
//매도포지션이면
if (Account1.Balance.position == 1)
{
//청산
Account1.OrderBuy(cc, vv,Option.GetAsk(cc, 5),0);
}
//매수포지션이면
if (Account1.Balance.position == 2)
{
//청산
Account1.OrderSell(cc, vv,Option.GetBid(cc, 5),0);
}
}
Main.MessageLog("하방합성선물매도청산");
}
}
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//만기일 15시 이후이면
if (nEventID == 1 && HHMMSS >= 150000)
{
//타이머종료
Main.KillTimer(2);
//전체 종목수
var num = Account1.GetTheNumberOfBalances();
//전체 종목 중 옵션만 청산하고 차월물로 진입
for(var i = 0 ; i < num ; i++)
{
//잔고셋팅
Account1.SetBalance(i);
//옵션함수로 해당 종목이 옵션인지 확인
if (Option.GetCurrent(Account1.Balance.code) > 0 && Account1.Balance.count > 0)
{
//종목코드
var cc = Account1.Balance.code;
//잔고수량
var vv = Account1.Balance.count;
//매도포지션이면
if (Account1.Balance.position == 1)
{
//청산
Account1.OrderBuy(cc, vv,Option.GetAsk(cc, 5),0);
//차근월물 코드 찾기
var strike = Option.GetExercisePrice(cc);
//잔고종목이 콜이면
if (cc == Option.GetCodeByExercisePrice(0,strike))
var NextMonth = Option.GetCodeByExercisePrice(2, strike);
else //잔고종목이 풋이면
var NextMonth = Option.GetCodeByExercisePrice(3, strike);
//동일행사가의 차근월물 매도주문
Account1.OrderSell(NextMonth,vv,Option.GetBid(NextMonth,5),0);
}
//매수포지션이면
if (Account1.Balance.position == 2)
{
//청산
Account1.OrderSell(cc, vv,Option.GetBid(cc, 5),0);
//차근월물 코드 찾기
var strike = Option.GetExercisePrice(cc);
//잔고종목이 콜이면
if (cc == Option.GetCodeByExercisePrice(0,strike))
var NextMonth = Option.GetCodeByExercisePrice(2, strike);
else //잔고종목이 풋이면
var NextMonth = Option.GetCodeByExercisePrice(3, strike);
//동일행사가의 차근월물 매수주문
Account1.OrderBuy(NextMonth,vv,Option.GetAsk(NextMonth,5),0);
}
}
}
}
}
2019-06-27
3437
글번호 224908