커뮤니티

예스스팟 Q&A

답변완료

수식문의 드립니다.

아래 식을 변경하여 계좌잔고의 옵션의 손실금이 10%이상 나면 손절청산, 계좌잔고의 옵션이익금이 20%이상이 되면 수량의 절반 이익청산될수 있도록 부탁드립니다. 안녕하세요 예스스탁입니다. 아래 내용 참고하시기 바랍니다. 잔고는 5초단위로 감시합니다. 스크립트 객체화면에 계좌객체 추가하시고 객체명은 Account1로 하시고 계좌번호 지정해 주시면 됩니다. 1. function Main_OnStart() { Main.SetTimer(1, 5000);//5초단위 } //5초간격으로 잔고 감시해 손실이 50만원 이상이면 모든 옵션종목 시장가로 청산 function Main_OnTimer(nEventID) { //계좌의 잔고수 var num = Account1.GetTheNumberOfBalances(); var PL = 0; //잔고를 하나씩 불러와 손익을 계산하고 합산해서 옵션 총 평가손익을 계산 for(var i = 0; i < num; i++) { //잔고셋팅 Account1.SetBalanceIndex(i); //옵션종목이면 if (Account1.Balance.code.substring(0,1) == "2" || Account1.Balance.code.substring(0,1) == "3") { //매도포지션이면 if (Account1.Balance.position == 1) { PL = PL+(Account1.Balance.avgUnitCost-Account1.Balance.current)*Account1.Balance.count*500000; } //매수포지션이면 if (Account1.Balance.position == 2) { PL = PL+(Account1.Balance.current-Account1.Balance.avgUnitCost)*Account1.Balance.count*500000; } } } Main.MessageList("손익",PL); //손익이 -50만원 이상이면 if (PL <= -500000) { //잔고를 하나씩 불러와 옵션종목이면 시장가로 청산 for(var i = 0; i < num; i++) { //잔고셋팅 Account1.SetBalanceIndex(i); //옵션종목이면 if (Account1.Balance.code.substring(0,1) == "2" || Account1.Balance.code.substring(0,1) == "3") { //매도포지션이면 시장가청산 if (Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } //매수포지션이면 시장가청산 if (Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1) } } } } } 2. var Exit1,Exit2; function Main_OnStart() { Main.SetTimer(1, 5000);//5초단위 Exit1 = false; Exit2 = false; } //5초간격으로 잔고 감시해 +100만원 이상이면 모든 옵션종목 시장가로 수량의 절반 청산 function Main_OnTimer(nEventID) { if (nEventID == 1 && Exit1 == false) { //계좌의 잔고수 var num = Account1.GetTheNumberOfBalances(); var PL = 0; //잔고를 하나씩 불러와 손익을 계산하고 합산해서 옵션 총 평가손익을 계산 for(var i = 0; i < num; i++) { //잔고셋팅 Account1.SetBalanceIndex(i); //옵션종목이면 if (Account1.Balance.code.substring(0,1) == "2" || Account1.Balance.code.substring(0,1) == "3") { //매도포지션이면 if (Account1.Balance.position == 1) { PL = PL+(Account1.Balance.avgUnitCost-Account1.Balance.current)*Account1.Balance.count*500000; } //매수포지션이면 if (Account1.Balance.position == 2) { PL = PL+(Account1.Balance.current-Account1.Balance.avgUnitCost)*Account1.Balance.count*500000; } } } Main.MessageList("손익",PL); //손익이 +100만원 이상이면 if (PL >= 1000000) { Exit1 = true;//Exit1을 true로 만들어 한번만 동작하게 함 //잔고를 하나씩 불러와 옵션종목이면 수량의 절반을 시장가로 청산(수량이 1계약이면 1계약 청산) for(var i = 0; i < num; i++) { //잔고셋팅 Account1.SetBalanceIndex(i); //옵션종목이면 if (Account1.Balance.code.substring(0,1) == "2" || Account1.Balance.code.substring(0,1) == "3") { //매도포지션이면 시장가청산 if (Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code,Math.max(Math.floor(Account1.Balance.count*0.5),1),0,1); } //매수포지션이면 시장가청산 if (Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code,Math.max(Math.floor(Account1.Balance.count*0.5),1),0,1) } } } } } if (nEventID == 1 && Exit2 == false) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (HHMMSS >= 143000) { Exit2 = true;//Exit2를 true로 만들어 한번만 동작하게 함 for(var i = 0; i < num; i++) { //잔고셋팅 Account1.SetBalanceIndex(i); //옵션종목 남은수량 전량 청산 if (Account1.Balance.code.substring(0,1) == "2" || Account1.Balance.code.substring(0,1) == "3") { //매도포지션이면 시장가청산 if (Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } //매수포지션이면 시장가청산 if (Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1) } } } } } } 즐거운 하루되세요 > 바다리 님이 쓴 글입니다. > 제목 : 청산식 문의요... > 예스스팟으로... 수동으로 매수하던 전일 오버나잇한 계약수가 있던지 상관없이... 1. 현재 계좌에 보유한 옵션 평가 손실 총액이 50만원 이상이 되면 보유한 주식을 모두 손절처리(시장가) 할수 있는지요... 즉, 매수식은 없고, 다만 현계좌를 파악해서 청산식만 가동되도록 할수 있는지 수식예제좀 부탁합니다. 2. 반대로 현계좌에 보유중인 옵션 평가액 총액이 100만원이면 보유수량의 절반을 청산하고, 나머지는 14시 30분에 전량 시장가로 매도청산하는 수식도 부탁드립니다.
프로필 이미지
무명
2015-04-08
1829
글번호 223411
답변완료

수식 부탁드립니다.

안녕하세요. 선물 일봉챠트상 신호를 기준으로 선물을 매매하는데요. 아래와 같은 명령을 수식으로 부탁드립니다. 감사드립니다. 1. 1번 차트에서 미완성 매수신호(미완성 신호가 1시간 이상 지속될 경우)가 발생하는 경우 =>잔고를 확인하여 매도한 물량이 있다면 전부 청산한다. =>매도물량 청산 후 선물 3개를 시장가로 신규매수한다 (*)미완성신호라함은 미완성 신호가 발생후 1시간 이상 지속되는 경우를 말함 2. (1번차트상 미완성 매수신호 발생 or 1번챠트상 매수상태) & 2번차트상 매도상태인 경우 =>선물 1개를 시장가로 매수하되, 최대 3개까지만 매수한다. (**)매도상태라 함은 일봉차트상 몇일 전에 이미 매도신호가 발생한 후 계속 매도진행 중인 상태를 말함 3. (개인 콜옵션 순매수금액 - 개인 풋옵션 순매수금액) > 5억원인 경우 =>1억원씩 더 차이날 때만다 선물 1개씩 시장가로 매도한다. 매번 감사드립니다.
프로필 이미지
지나리
2015-04-09
1953
글번호 223407
답변완료

수식부탁합니다

안녕하세요 아래 수식을 다음과 같이 변경하려고 합니다. 선물 매수 신호시; 콜옵션 ATM 매도, ATM-1 매수 / 풋옵션 ATM 매도, ATM+1 매수 청산 선물 매도 신호시; 풋옵션 ATM 매도, ATM+1 매수 / 콜옵션 ATM 매도, ATM-1 매수 청산 선진입한 콜, 풋의 잔고 청산하고 콜,풋 양쪽 포지션 없이 어느쪽이든 1개만 유지 진입 후 잔액대비 5% 손실 청산(로스컷) var Start; var BuyCallCode; var BuyPutCode; var SellCallCode; var SellPutCode; function Main_OnStart() { Main.MessageLog("시작"); Start = 0; } function C1_OnRiseSignal(Signal) { Main.MessageLog("신호완성/"+Signal.signalKind); if (Signal.signalKind == 1 ) { Start = 1; BuyCallCode = Option.GetATMCallRecent(0); BuyPutCode = Option.GetATMPutRecent(0); var BuyCallPrice = Option.GetAskByCode(BuyCallCode,2); var BuyPutPrice = Option.GetBidByCode(BuyPutCode,2); A1.OrderBuy(BuyCallCode, Vol, BuyCallPrice, 0); A1.OrderSell(BuyPutCode, Vol, BuyPutPrice, 0); Main.MessageLog("합성선물매수"); } if (Start == 1 && Signal.signalKind == 2 ) { var BxCallPrice = Option.GetBidByCode(BuyCallCode, 2); var BxPutPrice = Option.GetAskByCode(BuyPutCode, 2); A1.OrderSell(BuyCallCode, Vol, BxCallPrice, 0); A1.OrderBuy(BuyPutCode, Vol, BxPutPrice, 0); Main.MessageLog("합성선물매수청산"); } if (Signal.signalKind == 3 ) { Start = 1; SellCallCode = Option.GetATMCallRecent(0); SellPutCode = Option.GetATMPutRecent(0); var SellCallPrice = Option.GetBidByCode(SellCallCode,2); var SellPutPrice = Option.GetAskByCode(SellPutCode,2); A1.OrderSell(SellCallCode, Vol, SellCallPrice , 0); A1.OrderBuy(SellPutCode, Vol, SellPutPrice, 0); Main.MessageLog("합성선물매도"); } if (Start == 1 && Signal.signalKind == 4 ) { var SxCallPrice = Option.GetAskByCode(SellCallCode, 2); var SxPutPrice = Option.GetBidByCode(SellPutCode, 2); A1.OrderBuy(SellCallCode, Vol, SxCallPrice, 0); A1.OrderSell(SellPutCode, Vol, SxPutPrice, 0); Main.MessageLog("합성선물매도청산"); } }
프로필 이미지
팡팡
2015-04-08
1904
글번호 223404

왼손잡이 님에 의해서 삭제되었습니다.

프로필 이미지
왼손잡이
2015-04-06
0
글번호 223403
답변완료

문의드립니다.

답변 감사드립니다. 해당 프로그램을 실행하니 refeneceError : Opiton is not defined 라는 에러가 나오는데요... 옵션 객체를 추가해줘야 하는건지요? 그럼 답변 부탁드리겠습니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : Re : Re : 문의드립니다. > 안녕하세요 예스스스탁입니다. 계좌종류별로 인덱스가 모두 다릅니다. 위탁계좌는 30번이 코스닥증거금현금 저축계좌는 30분이 금일재매매대상금액 선물옵션계좌는 30번이 주문가능현금 입니다. 계좌별로 인덱스에 따른 리턴값이 모두 다릅니다. Account1 계좌객체에 계좌번호를 지정할때 선물옵션계좌로 지정하시면 됩니다. 예스스팟 도움말에서 해당 함수 설명 참고하시기 바랍니다. 즐거운 하루되세요 > 왼손잡이 님이 쓴 글입니다. > 제목 : Re : Re : 문의드립니다. > 자세한 답변 감사드립니다 .^^ 몇가지 궁금한 사항이 있는데요. 1. var OrderAbleAmoney = Account1.GetBalanceETCinfo(30)*0.1 라고 표현해 주셨는데 30이란 코드가 코스닥 증거금 현금이라고 되어 있는데 옵션주문시 위 사항이 맞는지요? 그럼 확인 부탁드리겠습니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 문의드립니다. > 안녕하세요 예스스탁입니다. 예스스팟 답변은 가이드라인정도입니다. 아래내용 참고하셔서 수정보완해 사용하시기 바랍니다. 스크립트객체화면 설정 계좌객체 추가 --> 속성에서 객체명은 Account1, 계좌번호지정 차트객체 추가 --> 속성에서 객체명은 Chart1, 차트 아이디 지정후 차트에 동일아이디 부여 옵션객체 추가 --> 속성에서 따로 지정하실 부분은 없습니다. 각객체 설정은 예스스팟 도움말 참고하시기 바랍니다. var CallOrderCode,PutOrderCode,T; function Main_OnStart() { T = 0; } function Chart1_OnRiseSignal(Signal) { if (T <= 0 && Signal.signalKind == 1) { Main.MessageList("--------------------------------------------"); Main.MessageList("Buy신호 발생"); var UNum = Option.uppersATM; var LNum = Option.lowersATM; var CallCode = new Array(UNum+LNum+1); var CallPrice = new Array(UNum+LNum+1); //콜옵션중 2.0에 가장 가까운 종목 //콜옵션 모든 종목을 현재가-2.0을 해서 절대값을 취해 저장 for (var i = -LNum; i <= UNum; i++) { CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.0); CallCode[i+LNum] = Option.GetATMCallRecent(i); } //저장된 절대값중 가장 작은 종목의 값과 종목코드 계산 var CC = 99999999; CallOrderCode = ""; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum] } } //종목을 찾았으면 if (CC < 99999999) { //주문가능현금의 10% var OrderAbleAmoney = Account1.GetBalanceETCinfo(30)*0.1; //주문가격 var OrderPrice = Option.GetAsk(CallOrderCode, 3); //주문가능현금/(주문가격*50만원) var Qty = Math.floor(OrderAbleAmoney/(OrderPrice*500000)); //1계약 이상 CallOrderCode종목 매수주문 if (Qty >= 1) { Account1.OrderBuy(CallOrderCode, Qty, OrderPrice, 0); T = 1; Main.SetTimer(1, 10000);//1번타이머 10초 } } } if (T == 1 && Signal.signalKind == 2) { Account1.SetBalanceItem(CallOrderCode, 0); //CallOrderCode 잔고가 있으면 매수3호가로 전량 매도 if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count , Option.GetBid(CallOrderCode, 3), 0); T = 0; } } if (T >= 0 && Signal.signalKind == 3) { Main.MessageList("--------------------------------------------"); Main.MessageList("Sell신호 발생"); var UNum = Option.uppersATM; var LNum = Option.lowersATM; var PutCode = new Array(UNum+LNum+1); var PutPrice = new Array(UNum+LNum+1); //풋옵션중 2.0에 가장 가까운 종목 //풋옵션 모든 종목을 현재가-2.0을 해서 절대값을 취해 저장 for (var i = -UNum; i <= LNum; i++) { PutPrice[i+UNum] = Math.abs(Option.GetCurrent(1, i)-2.0); PutCode[i+UNum] = Option.GetATMPutRecent(i); } //저장된 절대값중 가장 작은 종목의 값과 종목코드 계산 var PP = 99999999; PutOrderCode = ""; for (var i = -UNum; i <= LNum; i++) { if (PutPrice[i+UNum] < PP) { PP = PutPrice[i+UNum]; PutOrderCode = PutCode[i+UNum]; } } //종목을 찾았으면 if (PP < 99999999) { //주문가능현금의 10% var OrderAbleAmoney = Account1.GetBalanceETCinfo(30)*0.1; //주문가격 var OrderPrice = Option.GetAsk(PutOrderCode, 3); //주문가능현금/(주문가격*50만원) var Qty = Math.floor(OrderAbleAmoney/(OrderPrice*500000)); //1계약 이상 매수주문 if (Qty >= 1) { Account1.OrderBuy(PutOrderCode, Qty, OrderPrice, 0); T = -1; Main.SetTimer(2, 10000);//2번타이머 10초 } } } if (T == -1 && Signal.signalKind == 4) { Account1.SetBalanceItem(PutOrderCode, 0); //PutOrderCode 잔고가 있으면 매수3호가로 전량 매도 if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count , Option.GetBid(PutOrderCode, 3), 0); T = 0; } } } function Main_OnTimer(nEventID) { //1번 타이머 동작 T가 1일이면(Buy신호 이후) if (nEventID == 1 && T == 1) { //CallOrderCode 종목 잔고 셋팅해서 Account1.SetBalanceItem(CallOrderCode, 0); //잔고의 현재가가 평단가의 20% 이상이면 추가매수 if (Account1.Balance.current >= Account1.Balance.avgUnitCost*1.20) { //1번 타이머종료 Main.KillTimer(1); //주문가능현금의 10% var OrderAbleAmoney = Account1.GetBalanceETCinfo(30)*0.1; //주문가격 var OrderPrice = Option.GetAsk(CallOrderCode, 3); //주문가능현금/(주문가격*50만원) var Qty = Math.floor(OrderAbleAmoney/(OrderPrice*500000)); //1계약 이상 CallOrderCode종목 매수주문 if (Qty >= 1) { Account1.OrderBuy(CallOrderCode, Qty, OrderPrice, 0); } } } //2번 타이머 동작하고 T가 -1이면(Sell신호 이후) if (nEventID == 2 && T == -1) { //PutOrderCode 종목 잔고 셋팅해서 Account1.SetBalanceItem(PutOrderCode, 0); //잔고의 현재가가 평단가의 20% 이상이면 추가매수 if (Account1.Balance.current >= Account1.Balance.avgUnitCost*1.20) { //2번 타이머종료 Main.KillTimer(2); //주문가능현금의 10% var OrderAbleAmoney = Account1.GetBalanceETCinfo(30)*0.1; //주문가격 var OrderPrice = Option.GetAsk(PutOrderCode, 3); //주문가능현금/(주문가격*50만원) var Qty = Math.floor(OrderAbleAmoney/(OrderPrice*500000)); //1계약 이상 매수주문 if (Qty >= 1) { Account1.OrderBuy(PutOrderCode, Qty, OrderPrice, 0); } } } } 즐거운 하루되세요 > 왼손잡이 님이 쓴 글입니다. > 제목 : 문의드립니다. > 수고하십니다. 연결선물에 시스템을 적용하고 있는데요. 1. 선물에서 시스템 매수 시그날시. -> 콜옵션 2.0 근처가격 매수 -> 전체 자금의 10% -> 진입이후 수익률 20%도달시 전체자금의 10% 추가매수 2. 선물에서 매도 시그날시 -> 풋옵션 2.0 근처가격 매수 -> 전체 자금의 10% -> 진입이후 수익률 20%도달시 전체자금의 10% 추가매수 3. 청산시그날시 모두 청산 을 하고 싶습니다. 초보라 잘 부탁드립니다.
프로필 이미지
왼손잡이
2015-04-06
1875
글번호 223402
답변완료

시세조회 건수제한.........

안녕하세요~~ 현물로 예스스팟 공부중인데 갑작스런 장벽을 만났습니다. 시세조회 건수제한 오류(15초당 60건만 가능합니다. 13초 남았습니다.) 위의 문구가 나오면서 스팟이 더이상 진행이 되지않습니다. 혹시나 13초후 다음으로 연결해서 진행될걸로 기대했으나 실망으로 끝을 맺었습니다. 현재 코스피, 코스닥, 그외종목합이 2000정도 되는데 건수제한수가 너무 불합리하다고 봅니다. 예전에도 어떤분이 질문한게 있었는데 그당시 검토해 보겠다는 답변이 있었습니다. 그로부터 훨씬 지난 지금도 그대로입니다. 해결책은 없는건가요? 위문구처럼 13초후 이어서 조회를 계속한다든지 딜레이함수로 15초에 정확히 60건을 처리하게 한다든지,,,,,,, 고민을 해결해 주십시요~~~~ 항상 수고해주셔서 감사합니다.
프로필 이미지
곰발바닥
2015-04-03
1893
글번호 223401
답변완료

예스스팟 야간 선물(CME) 차트시간 출력에러!!

1. 예스스팟 야간 선물(CME) 차트시간 출력에러는 업데이트 되었나요?.. 2. 틱차트 시뮬레이션에서 시스템적용하면 시스템적용이 안됩니다.^^ 확인후 답글 부탁드립니다.
프로필 이미지
피셔
2015-04-02
1823
글번호 223395
답변완료

피라미딩 진입, 피라미딩 청산식 문의요

피라미딩 매수, 매도 문의 드립니다 1. 옵션이 9시 10분이후 시가보다 1만원이상 오른 상태면 2계약 매수 2. 1차매수후 매수가격에서 1만원씩 오를때마다 계속 1계약씩 매수하여 총 8계약 추가매수(총10계약 피라미딩) 3. 2계약 보유중일때는 평균 진입가격 -0.9 손절, 4. 3계약 이상 보유중일때 평균 진입가격 -0.5 손절 5. 진입가에서 10만원이상 올랐다가 하락시 진입가+9만원에서 1계약 익절 6. 진입가에서 9만원이상 올랐다가 하락시 진입가+8만원에서 1계약 매도 6.7진입가에서 5만원이상 올랐다가 5일선이 120일선을 데드크로스하면 현재보유계약의 절반 매도
프로필 이미지
바다리
2015-03-31
1818
글번호 223392
답변완료

당일청산식 문의

시스템이든, 수동매수든, 포지션이든 상관없이 ... 현 보유수량 잔고를 확인하여 14:30분이 되면 무조건 전량 강제청산토록하는(혹시 미체결 주문이 있으면 그 주문을 취소후 시장가로 전량 청산) 수식 부탁드립니다. ^^
프로필 이미지
바다리
2015-03-31
1747
글번호 223387
답변완료

여러개 예스스팟 가동시 처리순서는 ?

안녕하세요. 제가 예스스팟을 여러개 동시에 자동적용하고 있습니다. 궁금한 점은 예스스팟을 여러개 동시에 운용시 신호가 발생한다면 처리는 병렬로 동시에 돌아가나요 ? 아니면 설정해둔 순서대로 한개씩 위에서 부터 처리되어서 내려오나요 ? 즉, 순서가 있다면 맨위에 중요계좌는 맨위에 올려두는 것이 로직 돌아가는 순서는 더 빠른가요 ? 아니면 병렬처리로 어느 위치에 두어도 동시에 같이 돌아가나요 ?
프로필 이미지
anyhelp
2015-03-30
1805
글번호 223386