커뮤니티

예스스팟 Q&A

답변완료

오류 확인 부탁드립니다.

안녕하세요. 이제 막 예스스팟을 시작한 초보입니다 선물 신호를 옵션 신호로 전환하는데 다음과 같은 에러가 떴습니다. EeferenceError:ACC6268 is not defined 무엇이 잘못된건지 잘 모르겠습니다 ㅜㅜ
프로필 이미지
린포체
2014-06-09
1263
글번호 223012
답변완료

질문드립니다.

예스스팟으로 옵션매수거래를 하고 있는데 두 가지 질문사항이 있습니다. 1. 만약 청산조건이 두 가지가 있는데... 이게 두가지가 동시에 충족되는 경우.. 계좌에 보유하고 있는 옵션을 청산하고 매도포지션까지 들어가게 되는 상황이 발생하는 거 같은데 ordersell명령을 할 때 신규매도는 금지하게 할수 있는 방법이 있을까요?(즉 매수한 옵션을 청산만 하고 신규매도는 못하도록) 2. "전일 종가 대비 당일 시가가 1%이상 갭상승 또는 갭하락하는 경우 해당 챠트의 첫번째 신호는 무시한다" 를 수식으로 전환가능할까요? 감사합니다.
프로필 이미지
지나리
2014-06-15
1293
글번호 223011
답변완료

문의 올립니다.

안녕하세요. 922 문의글에 올려 주신 답변 대단히 감사합니다. 그와 관련하여 부분적으로 보완 질의 드리고자 합니다. 상황: 1. 차트와 지표들을 눈으로 관찰하면서, 일정 조건에 손으로 시장가 주문을 클릭해서 진입하고, 2. 또 계속 지표들을 눈으로 관찰하면서 손으로 시장가 주문 클릭으로 청산하고 나오는 방식으로 매매하는데, 3. 혹시라도 손으로 청산을 제대로 못하는 경우를 대비해서 안전방책으로 넉넉한 스탑 거리를 두고 Spot을 이용한 자동 청산 예약주문을 해 둠. 4. 원하는 대로 손으로 제대로 시장가 주문 클릭으로 청산하고 나온 경우, 이제 필요 없어진, Spot으로 주문한 자동 청산 예약 미체결 주문은, Spot으로 자동 최소되게 함. (스팟 식으로 부탁드리고 싶은 부분은 위의 3번, 4번 내용입니다.)) 예를 들어서, 아래와 같은 상황을 위한 Spot식을 알려 주시면 대단히 감사하겠습니다. A. 손으로 시장가 주문 클릭해서 100포인트로 매수진입함. ((이 것은 스팟 소스 필요 없음)) B. 이렇게 손으로 진입된 잔고가 발생하면, Spot에서 자동으로 이를 감지해서, 그 밑에 좀 넉넉한 안전 장치로서, 20틱 아래인 99.80포인트((1틱 = 0.01포인트))에 sell stop 주문이 자동으로 나가도록 Spot을 작동시킴. C. 눈으로 다른 지표들 보면서 관찰하다가 진입가격의 5틱 아래인 99.95포인트에서 바로 손으로 시장가 주문 클릭해서 손절 청산 했다고 가정. ((이 C 부분은 스팟 소스 필요 없음)) 이제 Spot이 99.80포인트에 sell stop 주문한 것은 필요가 없어진 상황임. D. 그래서 이 99.80포인트에 sell stop되도록 한 미체결 주문이, Spot으로 취소되게 함. 즉, Spot으로 아래의 내용 가동시킴: 가. (손으로든, 또는 예스 랭귀지 시스템식으로든 간에) 매수진입된 롱포지션이 있는 경우, 스팟이 그 잔고를 감지해서, Spot으로, 초기스탑으로써, 그 매수평균단가의 20틱 아래에 셀 스탑 주문이 나가서 유지되게 하고, ((요체: 잔고가 생기면 스팟이 스탑 주문 내보냄)) ((여기에, 추가해서, 25틱 이익 발생 후 최고가 10틱 아래에 추적스탑하는 것을 추가해 주셔도 감사하겠습니다.)) 나. (손이나 시스템 식 자동거래로 매수진입된) 롱포지션이 (손거래나 시스템 식 자동거래로) 청산되어서, 사라지고 없어 지면 ((즉, 잔고가 있다가 없어 진 것이 확인된 후에)), 그와 동시에 즉시, (스팟으로 셀 스탑 주문이 된) 미체결 주문을 취소해 버림. ((요체: 잔고가 없어 지면 즉시 미체결 스탑주문 취소)) 이런 내용의 스팟식을 알려 주시면 대단히 감사하겠습니다. 그러면 알려 주신 내용을 바탕으로 해서, 매수나 매도 진입 후 여러 가격 변동 상황에 대한 (익절, 손절, 추적스탑 등의) 청산소스들을 제가 만들어 보도록 하겠습니다. 감사합니다.
프로필 이미지
즐겁게
2014-06-05
1327
글번호 223010

즐겁게 님에 의해서 삭제되었습니다.

프로필 이미지
즐겁게
2014-06-04
1
글번호 223009
답변완료

오버잔고가 있을시 확장챠트 구성

안녕하세요 콜옵션과 대항 풋옵션 255-255 풋옵션과 대항 콜옵션.. 으로 확장챠트 구성. 잔고가 없을때는 위의 구성으로 오버잔고가 있을시는 잔고의 구분에 따라 오버 옵션의 콜풋으로 주종목을 구성하고 싶습니다 감사합니다. var Start; var S1, S2; var OrderCode1; var OrderCode2; var P1; var AvgCost; var PLsum; var Nth = 0; var ItemCode = new Array(100);//갯수 var ItemObject = new Array(100);//갯수 var ItemHigh = new Array(100);//갯수 var ItemLow = new Array(100);//갯수 var Balnum; var UNum; var LNum; var CallCode; var CallPrice; var CallATM; var PutATM; var PutCode; var PutPrice; var CoCall; var CoPut; var CC; var PP; var vol1; var vol3; var vol4; var vol5; var vol2; var vol6; var vol7; var CaBuyID, CaSellID; var CBcond, CScond; var CaBuyNum, CaSellNum; var PuBuyID, PuSellID; var PBcond, PScond; var PuBuyNum, PuSellNum; var BFill,SFill; var CallStart; var PutStart; var ChartEx11 ;//= null; var ChartEx12 ;//= null; function Main_OnStart() { Start = 0; Main.MessageList("시 작:"); Nth = 0; Balnum = Account1.GetTheNumberOfBalances() Main.MessageList("잔고종목수",Balnum); if (Balnum > 0) { //계좌의 잔고리스트에서 첫번째 잔고 셋팅 Account1.SetBalanceIndex(Nth);//잔고는 순번이 0부터 시작 //셋팅된 잔고의 수량이 0이상이면 if (Account1.Balance.count > 0) { //1번째 종목객체 생성요청 Main.ReqMarketData(Account1.Balance.code, 20,0); //ItemCode의 [Nth]번째 방에 종목코드 저장 ItemCode[Nth] = Account1.Balance.code; Main.MessageList("종목요청",Account1.Balance.code); } if (Account1.Balance.categoryEx == 31 ) CallOrderCode = Account1.Balance.code; if (Account1.Balance.categoryEx == 32 ) PutOrderCode = Account1.Balance.code; } //코스피200선물에 가장 가까운 콜/풋 종목 선정 var var1 = MarketData1.open;//current;//expectedPrice var var2 = parseInt(var1/10)*10; var var3 = var1%10; var ATM = -1; if (var3 >= 8.75) ATM = var2+10; else if (var3 < 8.75 && var3 >= 6.25) ATM = var2+7.5; else if (var3 < 6.25 && var3 >= 3.75) ATM = var2+5.0; else if (var3 < 3.75 && var3 >= 1.25) ATM = var2+2.5; else ATM = var2+0.0; CallATM = Option.GetCodeByExercisePrice(0, ATM); PutATM = Option.GetCodeByExercisePrice(1, ATM); Main.MessageList("선물시가 :",MarketData1.open,"ATM",ATM,"콜ATM :",CallATM ,"풋ATM :",PutATM); //2.0에 가장 가까운 콜/풋 종목 UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); if (Balnum == 0 || Account1.Balance.categoryEx != 31) { for (var i = -LNum; i <= UNum; i++) { CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.0); CallCode[i+LNum] = Option.GetATMCallRecent(i); } CC = 99999999; CallOrderCode = -1; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum]; } if (CallOrderCode == CallCode[i+LNum]) { CallOrderCode1 = CallCode[i+LNum-1]; CallOrderCode2 = CallCode[i+LNum+1]; CallOrderCode3 = CallCode[i+LNum+2]; } } } if (Balnum == 0 || Account1.Balance.categoryEx != 32) { for (var ii = -UNum; ii <= LNum; ii++) { PutPrice[ii+UNum] = Math.abs(Option.GetCurrent(1, ii)-2.0); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } PP = 99999999; PutOrderCode = -1; for (var ii = -UNum; ii < LNum; ii++) { if (PutPrice[ii+UNum] <= PP) { PP = PutPrice[ii+UNum]; PutOrderCode = PutCode[ii+UNum]; } if (PutOrderCode == PutCode[ii+UNum]) { PutOrderCode1 = PutCode[ii+UNum-1]; PutOrderCode2 = PutCode[ii+UNum+1]; PutOrderCode3 = PutCode[ii+UNum+2]; PutOrderCode4 = PutCode[ii+UNum+3]; } } } //2.0과 가장 가까운 콜의 반대 옵션종목 CoPut = Option.GetCodeByExercisePrice(1,Option.GetExercisePrice(CallOrderCode)); CoCall = Option.GetCodeByExercisePrice(0,Option.GetExercisePrice(PutOrderCode)); Main.MessageList("2.0근접콜",CallOrderCode,"콜반대",CoPut,"2.0근접풋",PutOrderCode,"풋반대",CoCall); //확장 차트객체 요청 //주종목 시가기준 콜 var ChartSet4 = new ReqChartItem(CallOrderCode,3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); var ChartSet5 = new ReqChartItem(PutOrderCode,3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //시스템 설정 var TradeSet4 = new SystemTradeInfo(TRADE_FIXCAPITAL,1, 10000000,1, // 자산 0.07, 0.07,CALCMETHOD_PERCENT, // 진입/청산 수수료 0.01, 0.01,CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 50, //1000, // 최대진입수량 10); // 최대진입횟수 var SystemSet4 = new SystemInfo("Opover",YL_TYPE_NORMAL,null,TradeSet4,null); //지표 설정 I1 = new IndicatorInfo("중심", YL_TYPE_NORMAL,new Array(new YLInputVar(null,null))); var IndicatorSet4 = new Array(I1); //참조데이터 추가 //data2 2.0 근접콜 var R31 = new ReqChartItem(CallOrderCode, 3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //data3 2.0 근접콜 반대종목 var R32 = new ReqChartItem(CoPut, 3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //data4 3.0 근접풋 var R33 = new ReqChartItem(PutOrderCode, 3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //data4 3.0 근접풋 반대종목 var R34 = new ReqChartItem(CoCall, 3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); var ReferDataSet4 = new Array(R32); var ReferDataSet5 = new Array(R34); //지정한 설정으로 챠트 생성을 요청 Main.ReqChartEx(ChartSet4, SystemSet4, IndicatorSet4, ReferDataSet4); Main.ReqChartEx(ChartSet5, SystemSet4, IndicatorSet4, ReferDataSet5); } function Main_OnU*pdateAccount(sAccntNum, sItemCode, lU*pdateID) { //계좌에 변동이 생기면 if (sAccntNum == Account1.number && (lU*pdateID == 30001 )) { Account1.SetBalanceIndex(Nth);//잔고는 순번이 0부터 시작 //Nth번째 종목객체 생성요청 Main.ReqMarketData(Account1.Balance.code,20,0); //ItemCode의 [Nth]번째 방에 종목코드 저장 ItemCode[Nth] = Account1.Balance.code; Main.MessageList("종목요청",Account1.Balance.code); } } //요청한 종목객체 수신되면 function Main_OnRcvMarketData(MarketData) { Main.MessageList("종목객체수신",MarketData.code); //수신받은 종목객체의 종목코드와 직전에 요청한 종목과 같은지 확인 후에 if (MarketData.code == ItemCode[Nth]) { Main.MessageList(Nth,"번째","종목객체생성완료 : ",ItemCode[Nth]); ItemObject[Nth] = MarketData;//ItemObject의 [Nth]방에 수신받은 객체를 저장 ItemHigh[Nth] = 0; //ItemHigh의 [Nth]방의 값을 0으로 셋팅 (이후 최고값 계산해 저장할 변수) ItemLow[Nth] = 99999; //ItemHigh의 [Nth]방의 값을 0으로 셋팅 (이후 최저값 계산해 저장할 변수) Nth = Nth+1; //종목객체 수신완료되면 다음 종목 종목객체 요청 if (Balnum > 0) { //계좌의 잔고리스트에서 다음 순번 잔고 셋팅 Account1.SetBalanceIndex(Nth); //셋팅된 잔고의 수량이 0이상이면 if (Account1.Balance.count > 0) { //Nth번째 종목객체 생성요청 Main.ReqMarketData(Account1.Balance.code, 0,0); //ItemCode의 [Nth]번째 방에 종목코드 저장 ItemCode[Nth] = Account1.Balance.code; Main.MessageList("종목요청",Account1.Balance.code); } } } } //요청한 차트객체 생성이 완료되면 function Main_OnRcvChartEx(ChartEx) { if ( ChartEx.GetCode(1) == CallOrderCode) { ChartEx4 = ChartEx; OrderCode1 = Main.GetOrderCode(ChartEx4.GetCode(1));//ATM단위로 사용할때 Main.MessageList("Cx코드 :",ChartEx4.GetCode(1)); } if ( ChartEx.GetCode(1) == PutOrderCode) { ChartEx5 = ChartEx; OrderCode2 = Main.GetOrderCode(ChartEx5.GetCode(1));//ATM단위로 사용할때 Main.MessageList("Px코드 :",ChartEx5.GetCode(1)); } Start = 1; }
프로필 이미지
파문일기
2014-05-31
1277
글번호 223004

무명 님에 의해서 삭제되었습니다.

프로필 이미지
무명
2014-05-30
0
글번호 223003

무명 님에 의해서 삭제되었습니다.

프로필 이미지
무명
2014-05-31
28
글번호 223002

한걸음씩 님에 의해서 삭제되었습니다.

프로필 이미지
한걸음씩
2014-05-27
0
글번호 223001
답변완료

문의

더운데 수고하십니다. 스팟 수식 문의 드립니다. 우선 하나의 계좌에서 지수 선물과 콜옵션, 풋옵션을 거래하려 합니다. 다 컨셉은 똑 같지만 총 6개의 전략입니다. 당일 청산 전략이며, 선물은 전략당 계좌 잔고의 20% 금액으로 거래하고 (선물 매수/매도 2개의 전략) 옵션은 전략당 10% 금액으로 거래하려 합니다. (옵션 콜풋 각가 2개의 전략 총 4개의 전략) 계좌 잔고를 실시간으로 체크하면서 만약 10억원이라면, 1. 계좌 잔고 10억 중 2억원은 선물 매수 후 청산 전략에만 사용. (캐시 2억원으로 max로 살 수 있는 계약수) 2. 계좌 잔고 10억 중 2억원은 선물 매도 후 청산 전략에만 사용. 3. 계좌 잔고 10억 중 1억원은 콜옵션 1.5 이상 최근접가 매수 후 청산 전략에만 사용. (캐시 1억원으로 max로 살 수 있는 계약수) 4. 계좌 잔고 10억 중 1억원은 콜옵션 1.5 이하 최근접가 매수 후 청산 전략에만 사용. 5. 계좌 잔고 10억 중 1억원은 풋옵션 1.5 이상 최근접가 매수 후 청산 전략에만 사용. 6. 계좌 잔고 10억 중 1억원은 풋옵션 1.5 이하 최근접가 매수 후 청산 전략에만 사용. 이렇게 6개의 전략을 만들려고 하는데 실질적으로는 1, 3 전략만 짜주시면 나머지는 주석 달아주시면 조금 변경해서 사용할 수 있겠습니다. 전략 1) 선물 매수 후 청산 #아웃라인 거래시간은 오전 9시부터 오후 3시까지 (옵션만기일은 2시 45분까지) 호가가 변하는 이벤트를 이용해서 포지션을 실시간 체크하면서 거래합니다. #진입 해당 계약수 (예탁금의 20%로 살수 있는 최대 선물 계약수, 최소 1계약) 를 Bid(1) 즉, 최우선 매수호가에 주문을 내 놓고, 1계약이라도 체결이 되고 가격이 오르면 즉, Bid(1)이 오르면 청산 준비를 하고, 체결이 안되고 가격이 오르면 기존 주문을 취소 후 이미 오른 Bid(1)에 새로운 주문을 냅니다. 이 경우는 체결이 하나도 안된 경우이기 때문에 가격정정 주문을 이용해도 될 듯 합니다. 즉, 1계약이라도 체결 될 때까지 매수호가에 걸어놓으면서 시장을 따라 갑니다. 만약 1계약이라도 부분 체결되고 Bid(1) 가격이 체결 가격 대비 한 호가라도 올라버린 경우에는 기존 미체결 부분은 취소합니다. #청산 부분 체결이나 전체 체결 모두 체결가 대비 5호가 아래로 Bid(1)가 떨어지거나 체결가 대비 5호가 위로 Bid(1)이 오르면 청산모드 시작. 청산 모드 시작 후. Bid(1) 호가 잔량이 Ask(1)의 호가 잔량의 50%보다 적으면 Bid(1)에 주문 Bid(1) 호가 잔량이 Ask(1)의 호가 잔량의 50%보다 많으면 Ask(1)에 주문 일부나 전체 미체결된 (즉, 청산이 다 되지 않은) 상태로 가격이 하락하면 위의 Bid(1) / Ask(1) 호가 잔량 비율 원칙에 입각해서 모두 청산될 때까지 추적 청산. 전부 청산 되면 다시 진입 준비. #거래시간 종료시 만약 거래시간 종료시 해당 종목 포지션이 있을 경우 전체 청산 및 미체결 주문 취소. 전략 3) 콜옵션 매수 후 청산 #아웃라인 선물 거래와 동일하나 실시간으로 가격이 1.5 이상인 최근접가 옵션(1.5 이상의 가격대중 가장 저렴한 행사가)를 선택해서 거래하고, 청산 조건이 발동 될 때 5호가가 아닌 5%를 이용해서 수식 작성. 즉, 5%가 오르거나 5%가 내렸을 때 청산 조건 발동. 사정상 다양한 종목을 한 계좌에서 거래 하려고 합니다. (위에 언급한 선물 2개 옵션 4개) 옵션은 콜옵션 2개 행사가 풋옵션 2개 행사가입니다. 그리고 선물은 매수 후 청산 시스템과 매도 후 청산 시스템을 동시에 한 계좌에서 돌립니다. 선물과 옵션에 대해서 작성해주시는 수식이 하나의 계좌에서 각각의 종목 포지션을 참고하면서 잘 돌아갈 수 있게 수식 작성해주시면 감사하겠습니다.
프로필 이미지
한걸음씩
2014-05-27
981
글번호 223000

체결가능 님에 의해서 삭제되었습니다.

프로필 이미지
체결가능
2014-05-26
0
글번호 222996