커뮤니티

예스스팟 Q&A

답변완료

스캘핑에 관련하여

스캘퍼로서 예스스팟의 매력을 흠뻑 느끼고 있습니다. 오늘 오후장(11월 1일)처럼 너무 흔드는 장에서는 먹을 수 있을때 먹어두는 것이 스캘퍼의 덕목(? ㅎㅎㅎ)이라고 봅니다. 그래서, 다음과 같이 저의 진입기준에 청산 수식을 만들어 봤습니다. 진입은 잘 이루어 지는데 청산에서 영 버벅거리는군요. HELP ME, PLEASE.. 근데 왜 업데이트 가 U5p5d5a5t5e는 금지어라고 하며서 글 올리기를 못하게 하는거죠? 그럼 "업데이트"를 사용한 수식에 관한 질문은 어쩌죠? 우찌 해야할지?
프로필 이미지
마루아빠
2013-11-01
1185
글번호 222691
답변완료

전략명을 불러오는 객체는?

안녕하세요! 전략명을 불러와서 디버깅창에 표시하려면 어느 객체를 이용하여야 하나요? 만약 불러올수 없다면 만들어 주셨으면 합니다 여러 전략들을 동시에 돌릴때는 꼭 필요하리라 생각합니다 감사합니다 꾸벅!
프로필 이미지
brucehan
2013-11-01
1134
글번호 222689
답변완료

문의

아래식은 1~2 가격옵션중 1에 근접한 옵션 진입식인데요. 좀 수정해서 가격기준을 1~2중 단순히 1.5 에 가장 가까운 옵션매수진입으로 수정 부탁드립니다 그리고 이게 체결될때 시장가로 체결되는지요? 감사합니다 //************************************************* var Start; var UNum; var LNum; var CallCode; var CallPrice; var PutCode; var PutPrice; var CC; var PP; var CallOrderCode; var PutOrderCode; function Main_OnStart() { Start = 0; } function Chart1_OnRiseSignal(Signal) { 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); for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) <= 2.0 && Option.GetCurrent(0, i) >= 1.0) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = 9999999; CallCode[i+LNum] = 9999999; } } for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) <= 2.0 && Option.GetCurrent(1, ii) >= 1.0) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = 9999999; PutCode[ii+UNum] = 9999999; } } //buy신호 발생시 if (Signal.signalKind == 1) { Start = 1; CC = 9999999; CallOrderCode = 9999999; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] < CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum] } } if (CC < 9999999) { Account1.OrderBuy(CallOrderCode, 1, 0, 1); Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드:"+CallOrderCode+" /START:"+Start); } else { Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } // Exitlong신호 발생시 if (Start == 1 && Signal.signalKind == 2) { Start = 0; if (CC > 0) { Account1.OrderSell(CallOrderCode, 1, 0, 1); Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드:"+CallOrderCode+" /START:"+Start); } else { Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } //sell신호 발생시 if (Signal.signalKind == 3) { Start = -1; PP = 9999999; PutOrderCode = 9999999; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] < PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } if (PP < 9999999) { Account1.OrderBuy(PutOrderCode, 1, 0, 1); Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드:"+PutOrderCode+" /START:"+Start); } else { Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } //exitshort신호 발생시 if ( Start == -1 && Signal.signalKind == 4) { Start = 0; if (PP > 0) { Account1.OrderSell(PutOrderCode, 1, 0, 1); Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드:"+PutOrderCode+" /START:"+Start); } else { Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start); } } }
프로필 이미지
털보
2013-11-01
991
글번호 222687
답변완료

투자주체 일별매매추이 (4103)

안녕하세요? 투자주체 일별매매추이(4103)를 특정기간 동안 검색한 후 엑셀로 자료를 저장하고자 합니다. 어떻게 할 수 있나요?
프로필 이미지
peanut
2013-10-30
1027
글번호 222684
답변완료

예상체결함수 문의드립니다.

항상수고 많으십니다. 먼저 예상체결함수 업데이트 해주셔서 감사드립니다. 다음은 8시 57분 옵션예상체결가를 바탕으로 당일의 등가격을 찾아서 동시호가에 시장가 매도하는 식인데요 문제는 예상체결가가 형성이 되지 않는 경우 오류가 발생합니다. (예상체결가가 형성되지 않을 시 예상체결함수가 0을 리턴하는 듯합니다) 수식을 어떻게 손봐야 할지 부탁드립니다. 감사합니다 var Level ; var ABS = new Array(20); var ExpCall = new Array(20); var ExpPut = new Array(20); function Main_OnStart() { Main.MessageLog("------------------------------------------------------------------------------------------------------") Main.SetTimer(1, 5000); } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMDD = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && HHMMDD >= 085700 && C2.GetOpenContracts() < 0 ) { Main.KillTimer(1); for ( var a = -3 ; a <= 3 ; a++ ){ ExpCall[a] = Option.GetExpectedPrice( 0 , a ) ; ExpPut[a] = Option.GetExpectedPrice( 1 , a ) ; } for ( var a = -3 ; a <= 3 ; a++ ){ ABS[a] = Math.abs( ExpCall[a] - ExpPut[-a] ); Main.MessageList( "(",a,")" , ABS[a] ); } var minABS = Math.min(ABS[-3],ABS[-2],ABS[-1],ABS[0],ABS[1],ABS[2],ABS[3]); Main.MessageList( minABS, "최소가" ); var Cnt = 0 ; for ( var i = -3 ; i <= 3 ; i++ ){ if (ABS[i] == minABS && Cnt == 0 ) A1.OrderSell(Option.GetATMCallRecent(i),1,0,1); Cnt = Cnt + 1 ; } } }
프로필 이미지
재령
2013-10-28
1047
글번호 222679
답변완료

선물지수로 옵션종목찾아서 진입,청산 하고 있는데..

/*스크립트시작-----------------------------------------------------*/ var Vol; var UNum; var LNum; var CallCode; var CallPrice; var PutCode; var PutPrice; var CC; var PP; var CallOrderCode; var PutOrderCode; //선물지수 차트의 진입/청산 기준을 이용하여 //프리미엄 3.0 이하의 콜옵션과 풋옵션중에 3.0 에 가장 근접하는 콜/풋 종목을 찾고 //선물지수 차트의 기준에 따라 매매할려고 하는데, //3.0 이하에서 가장 3.0 에 근접하는 종목이 찾아져서 매매에 적용되는지? //또한 적용된 옵션의 진입/청산가격은 선물지수차트의 기준대로 실행되는지를 //검증하려고 다음과 같이 수식을 만들었습니다. //테스트를 해 본 결과 //3.0 이하의 종목중 3.0 에 가장 근접하는 작업은 잘 이루어 지는 듯 한데 //그 진입종목과 진입가격 또는 청산종목과 청산가격이 제대로 출력이 안 되는 듯 합니다. function Main_OnStart() { Main.MessageLog("시작"); } if ( 콜옵션 신규진입조건~~~) { //옵션 3.0 이하 종목 중 3.0 에 가장 가까운 콜/풋 종목을 찾음 UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); // 콜종목 찾기 for (var i = -LNum; i <= UNum; i++) { //값이 3.0 이하이면 if (Option.GetCurrent(0, i) <= 3.0) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else //값이 3.0 보다 크면 { CallPrice[i+LNum] = -1; CallCode[i+LNum] = -1; } } var CC = -1; var CallOrderCode = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum]; } } //콜매수(이때 디버깅창에서 진입옵션종목 과 그 진입가격을 확인하고자 //다음과 같이 "CallOrderCode" 와 Option.GetCurrentByCode(CallOderCode)를 //메세지리스트에 삽입하여 출력하는데 defined 나 NaN 이라는 에러메세지만 //뜹니다.) if (CC > -1) { Main.MessageList("CALL옵션 매수신호 발생"); Account1.OrderBuy(CallOrderCode, Vol, Option.GetCurrentByCode(CallOrderCode), 0); Main.MessageList("CALL옵션 신규매수 진입",CallOrderCode,Option.GetCurrentByCode(CallOrderCode),Vol); } } if (콜옵션 매수청산 조건~~~) //콜매수 청산 (이때 디버깅창에서 청산되는 옵션종목(진입했던)) 과 그 청산가격을 확인하고자 //다음과 같이 "CallOrderCode" 와 Option.GetCurrentByCode(CallOderCode)를 //메세지리스트에 삽입하여 출력하는데 defined 나 NaN 이라는 에러메세지만 //뜹니다.) { Main.MessageList("CALL옵션 매수청산신호 발생"); Account1.OrderSell(CallOrderCode, Vol, Option.GetCurrentByCode(CallOrderCode), 0); Main.MessageList("CALL옵션 매수청산 실행",CallOrderCode,Option.GetCurrentByCode(CallOrderCode),Vol); } }
프로필 이미지
마루아빠
2013-10-25
1169
글번호 222670

재령 님에 의해서 삭제되었습니다.

프로필 이미지
재령
2013-10-23
2
글번호 222667
답변완료

문의드립니다.

다음과 같이 선물챠트를 이용해서 옵션을 거래를 하고자 하는데요.. 예스스팟 수식 전환을 부탁드립니다. 답변 감사드립니다. ================================================================= 1. 진입 선물챠트A 그리고 선물챠트B 그리고 선물챠트C에서 매수신호가 발생하면 등가+2 당월물 콜옵션을 시장가로 600만원어치 매수한다. 2. 청산 (1) 선물챠트A 또는 선물챠트B에서 매도신호가 발생하면 현재 잔고상 보유 콜옵션을 전량 청산한다. (2) 진입시점(세개 챠트 동시 매수신호 발생 시) 선물가격 대비 0.5pt이상 상승을 한 후, 진입한 선물가격으로 다시 하락하면 잔고상 보유 콜옵션 전량 청산한다.(본절처리) (3) 진입시점(세개 챠트 동시 매수신호 발생 시) 선물가격 대비 0.9pt상승하면 진입시점에 매수한 콜옵션 수량의 30%를 청산한다. (4) 진입시점(세개 챠트 동시 매수신호 발생 시) 선물가격 대비 1.5pt상승하면 진입시점에 매수한 콜옵션 수량의 30%를 청산한다. (5) 선물챠트D에서 매수 익절신호가 발생하면 진입시점에 매수한 콜옵션 수량의 40%를 청산한다. 3. 거래시간 제한 당일 오후 12시 30분 이후부터 챠트에서 발생하는 신호는 진입하지 않는다.(당일 오후 12시 30분에 청산한다는 것이 아니라 새로운 진입을 금지하는 것임) 풋옵션 거래는 이와 반대로 하면 될 것 같은데요. 감사합니다.
프로필 이미지
극동해
2013-10-27
1126
글번호 222665
답변완료

수동주문 후 손절은 예스스팟으로...

안녕하세요... 수동으로 주문후 매수주문의 경우는 바로 전봉 저가에, 매도주문의 경우는 전봉 고가에 손절 주문(역지정가 주문) 나가게 하고 싶습니다. 즉, 매수 혹은 매도 주문은 손으로 수동으로 주문합니다. 예스스팟은 수동으로 체결된 주문에 대하여 즉시 체결된 봉의 전봉의 고가 또는 저가로 손절 주문(역지정가 주문)을 제출하는 코딩을 하고싶습니다. 예를들어 10분봉차트에서 9시 32분에 손으로 매수체결 시켰을 경우 예스스팟은 9시 30분 봉의 저가에 역지정가 주문을 내는 코딩입니다. 매도체결의 경우는 반대로요 표현이 제대로 되었는지 모르겠네요.. 부탁드립니다.
프로필 이미지
카라얀
2013-10-23
1122
글번호 222662
답변완료

문의 드립니다.

매번 도움을 받고 스팟을 잘 사용하고 있습니다. 감사합니다. 지금 사용하고 있는 수식은 아래와 같습니다. 몇 가지 수정을 좀 했으면 하는데 가능한지요. (수정하고 싶은 내용은) 선물 진입 신호시 옵션 매도로 진입을 하려고 하는데 증거금이 부족할 때 입니다. (방법1) 옵션 매도 대신 매수로 진입하는 방법 (방법2) 진입되어 있는 옵션 매도 포지션에서 외가 매수를 해서 증거금을 확보후 옵션 매도로 진입하는 방법입니다. 예) 진입되어 있는 포지션 - 풋 270 매도 1계약 진입하려고 하는 포지션 풋 267 매도 1계약 (하지만 증거금 부족) 증거금 확보를 위해 외가 풋 245 매수 진입 (0.04 ~ 0.07 정도의 외가) 증거금이 학보된 후 풋 267 매도 진입 위와 같이 수식 좀 부탁드립니다. var Start; var UNum; var LNum; var CallCode; var CallPrice; var PutCode; var PutPrice; var CC; var PP; var CallOrderCode; var PutOrderCode; function Main_OnStart() { Start = 0; } //차트에서 신호가 발생 function Chart1_OnRiseSignal(Signal) { //Buy신호이면 if (Signal.signalKind == 1) { Start = 1; //옵션 1.0 이하 종목 중 1에 가장 높은 가격을 가지는 콜/풋 종목을 찾음 UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); // 콜종목 찾기 for (var i = -LNum; i <= UNum; i++) { //값이 1.0 이하이면 if (Option.GetCurrent(0, i) <= Price) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else //값이 1.0 보다 크면 { CallPrice[i+LNum] = -1; CallCode[i+LNum] = -1; } } //풋종목 찾기 for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) <= Price ) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else //값이 1.0 보다 크면 { PutPrice[ii+UNum] = -1; PutCode[ii+UNum] = -1; } } CC = -1; CallOrderCode = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum]; } } PP = -1; PutOrderCode = -1; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] > PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } //콜매수 if (CC > -1) Account1.OrderBuy(CallOrderCode, CBqt, Option.GetAskByCode(CallOrderCode, 5),0); //풋매도 if (PP > -1) Account1.OrderSell(PutOrderCode, PSqt, Option.GetBidByCode(PutOrderCode, 5),0); } if (Signal.signalKind == 2 && Start == 1) { Account1.SetBalanceItem(CallOrderCode, 0); if(Account1.Balance.count >0 && Account1.Balance.position==2) Account1.OrderSell(CallOrderCode, Math.min(Account1.Balance.count, CBqt), Option.GetBidByCode(CallOrderCode, 5), 0); // Account1.OrderSell(CallOrderCode, CBqt, Option.GetBidByCode(CallOrderCode, 5), 0); Account1.SetBalanceItem(PutOrderCode, 0); if(Account1.Balance.count >0 && Account1.Balance.position==1) Account1.OrderBuy(PutOrderCode, Math.min(Account1.Balance.count, PSqt), Option.GetAskByCode(PutOrderCode, 5), 0); // Account1.OrderBuy(PutOrderCode, PSqt, Option.GetAskByCode(PutOrderCode, 5), 0); } //Sell신호이면 if (Signal.signalKind == 3) { Start = 1; //옵션 1.0 이상 종목 중 1에 가장 가까운 가격을 가지는 콜/풋 종목을 찾음 UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); //콜종목 찾기 for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) <= Price) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else//값이 1.0보다 크면 { CallPrice[i+LNum] = -1; CallCode[i+LNum] = -1; } } //풋종목 찾기 for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) <= Price ) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else// 값이 1.0보다 크면 { PutPrice[ii+UNum] = -1; PutCode[ii+UNum] = -1; } } CC = -1; CallOrderCode = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum] } } PP = -1; PutOrderCode = -1; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] > PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } //콜매도 if (CC > -1) Account1.OrderSell(CallOrderCode, CSqt, Option.GetBidByCode(CallOrderCode, 5),0); //풋매수 if (PP > -1) Account1.OrderBuy(PutOrderCode, PBqt, Option.GetAskByCode(PutOrderCode, 5),0); } //exitshort신호 발생하면 if (Signal.signalKind == 4 && Start == 1) { Account1.SetBalanceItem(CallOrderCode, 0); if(Account1.Balance.count >0 && Account1.Balance.position==1) Account1.OrderBuy(CallOrderCode, Math.min(Account1.Balance.count, CSqt), Option.GetAskByCode(CallOrderCode, 5), 0); // Account1.OrderBuy(CallOrderCode, CSqt, Option.GetAskByCode(CallOrderCode, 5), 0); Account1.SetBalanceItem(PutOrderCode, 0); if(Account1.Balance.count >0 && Account1.Balance.position==2) Account1.OrderSell(PutOrderCode, Math.min(Account1.Balance.count, PBqt), Option.GetBidByCode(PutOrderCode, 5), 0); // Account1.OrderSell(PutOrderCode, PBqt, Option.GetBidByCode(PutOrderCode, 5), 0); } }
프로필 이미지
루이001
2013-10-23
1136
글번호 222661