커뮤니티

이전글 재질문

프로필 이미지
초록이
2016-03-18 10:18:53
59
글번호 96369
답변완료
그 문제가 아닌듯 싶읍니다. 아래 로직에서 if (CallPL+PutPL >= 0) --> if (CallPL+PutPL >= 0.1) 이렇게 수정해서 이미 쓰고 잇읍니다. 그런데, 맨아래로직(매수가 기준 10%)은 잘 작동되는데, 시초가 기준(10%) 로직만 에러가 납니다. --> 두 로직 모두 0.1로 수정하고 작동해서 나온 결과입니다. if (CallPL+PutPL >= 0) 로직이 백분율이 아니므로, 10 이 아니라 0.1 이 맞는것 같읍니다. 다시 검토 부탁합니다. ======================================================== 안녕하세요 예스스탁입니다. 0% 이상이면 청산되게 되어 있었습니다. 10% 이상으로 수정했습니다. function Main_OnStart() { Main.SetTimer(1,5000);//5초마다 타이머 동작 } function Main_OnTimer(nEventID) { if (nEventID == 1) { var num =Account1.GetTheNumberOfBalances(); var CallPL = 0; var PutPL = 0; //계좌잔고에서 매수포지션인 콜과 풋의 손익률 합산 for (var i = 0; i < num; i++) { //잔고리스트 순번으로 잔고를 셋팅 Account1.SetBalance(i); //콜이고 매수포지션이면 손익률 합산(시초가기준) if (Account1.Balance.code.substring(0,2) == "12" && Account1.Balance.position == 2) { CallPL = CallPL+(Account1.Balance.current - Option1.GetOpen(Account1.Balance.code))/Option1.GetOpen(Account1.Balance.code); } //풋이고 매수포지션이면 손익률 합산(시초가기준) if (Account1.Balance.code.substring(0,2) == "13" && Account1.Balance.position == 2) { PutPL = PutPL+(Account1.Balance.current - Option1.GetOpen(Account1.Balance.code))/Option1.GetOpen(Account1.Balance.code); } } //콜풋 매수포지션 손익률이 10% 이상이면 if (CallPL+PutPL >= 10) { //계좌 잔고의 콜/풋 매수포지션 모두 청산 for (var i = 0; i < num; i++) { //잔고리스트 순번으로 잔고를 셋팅 Account1.SetBalance(i); //콜이고 매수포지션이면 청산 if (Account1.Balance.code.substring(0,2) == "12" && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } //풋이고 매수포지션이면 청산 if (Account1.Balance.code.substring(0,2) == "13" && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } } } } } 즐거운 하루되세요 > 초록이 님이 쓴 글입니다. > 제목 : 이전글 문의 > 아래글을 예스스팟에 적용해보니 조건충족과 상관없이 자동설정하면 바로 청산됩니다. 맨 아래 처음 수식(매수가 기준 청산)은 제대로 작동되는데, 재문의 글의 답변로직(바로 아래 로직, 시초가 기준 청산)은 옵션객체(option1)를 추가했는데도 자동 걸자마자 바로 청산됩니다. -> 스트립트 객체에서 option1 추가하고, 속성에서 주가지수옵션 지정했읍니다. 원래, 조건(10% 총익시 청산)이 되서 청산되야 하는데, 조건과 상관없이 자동주문 걸면 바로 청산돼 버립니다. 무엇이 에러가 있읍니까? ----------------------------------------------------- 안녕하세요 예스스탁입니다. 옵션종목의 시초가가 필요하므로 스크립트 객체화면에 옵션객체를 추가하셔야 합니다. function Main_OnStart() { Main.SetTimer(1,5000);//5초마다 타이머 동작 } function Main_OnTimer(nEventID) { if (nEventID == 1) { var num =Account1.GetTheNumberOfBalances(); var CallPL = 0; var PutPL = 0; //계좌잔고에서 매수포지션인 콜과 풋의 손익률 합산 for (var i = 0; i < num; i++) { //잔고리스트 순번으로 잔고를 셋팅 Account1.SetBalance(i); //콜이고 매수포지션이면 손익률 합산(시초가기준) if (Account1.Balance.code.substring(0,2) == "12" && Account1.Balance.position == 2) { CallPL = CallPL+(Account1.Balance.current - Option1.GetOpen(Account1.Balance.code))/Option1.GetOpen(Account1.Balance.code); } //풋이고 매수포지션이면 손익률 합산(시초가기준) if (Account1.Balance.code.substring(0,2) == "13" && Account1.Balance.position == 2) { PutPL = PutPL+(Account1.Balance.current - Option1.GetOpen(Account1.Balance.code))/Option1.GetOpen(Account1.Balance.code); } } //콜풋 매수포지션 손익률이 10% 이상이면 if (CallPL+PutPL >= 0) { //계좌 잔고의 콜/풋 매수포지션 모두 청산 for (var i = 0; i < num; i++) { //잔고리스트 순번으로 잔고를 셋팅 Account1.SetBalance(i); //콜이고 매수포지션이면 청산 if (Account1.Balance.code.substring(0,2) == "12" && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } //풋이고 매수포지션이면 청산 if (Account1.Balance.code.substring(0,2) == "13" && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } } } } } 즐거운 하루되세요 > 초록이 님이 쓴 글입니다. > 제목 : 추가 문의... > 아래글 답변에서 한가지 추가 문의합니다. 만약, 매수 보유중인 콜/풋의 손익을 합산할때, 각각의 매수가가 아닌, 당일 시초가(각각의 시초가)를 기준으로 +10% 청산 하려면 어떻게 해야 합니까? ================================================================= 안녕하세요 예스스탁입니다. 문의하신 내용은 예스랭귀지로 구현하시기는 어렵습니다. 예스랭귀지는 차트에 적용되어 신호가 발생하는데 차트의 주종목에만 신호가 발생하고 주문이 가능하며 다른 차트의 신호상태나 손익은 알수가 없습니다. 해당 내용은 스팟에서 구현해 보셔야 합니다. 아래는 수식 가이드입니다. 아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다. 5초마다 잔고의 매수로 보유하고 있는 콜과 풋의 손익률을 합산해 10%이상이면 계좌의 매수포지션으로 보유중인 전체 콜과 풋을 모두 청산합니다. function Main_OnStart() { Main.SetTimer(1,5000);//5초마다 타이머 동작 } function Main_OnTimer(nEventID) { if (nEventID == 1) { var num =Account1.GetTheNumberOfBalances(); var CallPL = 0; var PutPL = 0; //계좌잔고에서 매수포지션인 콜과 풋의 손익률 합산 for (var i = 0; i < num; i++) { //잔고리스트 순번으로 잔고를 셋팅 Account1.SetBalance(i); //콜이고 매수포지션이면 손익률 합산 if (Account1.Balance.code.substring(0,2) == "12" && Account1.Balance.position == 2) { CallPL = CallPL+(Account1.Balance.current - Account1.Balance.avgUnitCost)/Account1.Balance.avgUnitCost; } //풋이고 매수포지션이면 손익률 합산 if (Account1.Balance.code.substring(0,2) == "13" && Account1.Balance.position == 2) { PutPL = PutPL+(Account1.Balance.current - Account1.Balance.avgUnitCost)/Account1.Balance.avgUnitCost; } } //콜풋 매수포지션 손익률이 10% 이상이면 if (CallPL+PutPL >= 0) { //계좌 잔고의 콜/풋 매수포지션 모두 청산 for (var i = 0; i < num; i++) { //잔고리스트 순번으로 잔고를 셋팅 Account1.SetBalance(i); //콜이고 매수포지션이면 청산 if (Account1.Balance.code.substring(0,2) == "12" && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } //풋이고 매수포지션이면 청산 if (Account1.Balance.code.substring(0,2) == "13" && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } } } } } 즐거운 하루되세요 > 초록이 님이 쓴 글입니다. > 제목 : 시스템 문의.. > 풋옵션과 콜옵션을 조합하여 하고 있읍니다. 합성법인 스트랭글, 스트래들 전략을 쓰고 있는데, 아래와 같이 문의합니다. 스트래들로 프리미엄이 비슷한 콜,풋옵션을 둘다 매수했을때, 양측의 손익을 합한 총 손익이 +10% 가 날때, 두 포지션 모두 청산하여 수익을 지키고 싶은데, 로직 가능합니까? 우리트레이더의 stoploss 기능은 한 포지션만 걸수 있어 콜, 풋 포지션을 따로 따로 걸어야 하기 때문에, 총 수익과 연동할수가 없읍니다. (예컨대 콜이 +10% 수익나서 청산되도, 그때, 풋이 -10% 나면 수익 제로입니다) 콜과 풋의 손익을 합산해서 총손익이 +10% 날때 콜,풋을 모두 청산하여 수익을 지키고 싶읍니다) 가능합니까? 예스스팟까지 하여 검토 부탁합니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2016-03-18 11:21:09

안녕하세요 예스스탁입니다. 해당식 적용해 보았지만 (0.1로 지정) 적용하자 마자 신호가 발생하지는 않습니다. 적용한후 최초 타이머에 신호가 나오는것은 해당 시점에 시초가 기준으로 수익률이 이미 지정한 % 이상일때만 발생합니다. 해당수식은 처음에 올리신 식에서 아래 부분의 평균단가를 CallPL = CallPL+(Account1.Balance.current - Account1.Balance.avgUnitCost)/Account1.Balance.avgUnitCost; PutPL = PutPL+(Account1.Balance.current - Account1.Balance.avgUnitCost)/Account1.Balance.avgUnitCost; 아래와 같이 해당 종목시초가로 대체한것 뿐이 없습니다. CallPL = CallPL+(Account1.Balance.current - Option1.GetOpen(Account1.Balance.code))/Option1.GetOpen(Account1.Balance.code); PutPL = PutPL+(Account1.Balance.current - Option1.GetOpen(Account1.Balance.code))/Option1.GetOpen(Account1.Balance.code); 수식에 각 종목이 시초가 대비 손익을 출력해서 디버깅창으로 확인해 보시기 바랍니다. function Main_OnStart() { Main.SetTimer(1,5000);//5초마다 타이머 동작 } function Main_OnTimer(nEventID) { if (nEventID == 1) { var num =Account1.GetTheNumberOfBalances(); var CallPL = 0; var PutPL = 0; //계좌잔고에서 매수포지션인 콜과 풋의 손익률 합산 for (var i = 0; i < num; i++) { //잔고리스트 순번으로 잔고를 셋팅 Account1.SetBalance(i); //콜이고 매수포지션이면 손익률 합산(시초가기준) if (Account1.Balance.code.substring(0,2) == "12" && Account1.Balance.position == 2) { CallPL = CallPL+(Account1.Balance.current - Option1.GetOpen(Account1.Balance.code))/Option1.GetOpen(Account1.Balance.code); Main.MessageList("C",Account1.Balance.code,(Account1.Balance.current - Option1.GetOpen(Account1.Balance.code))/Option1.GetOpen(Account1.Balance.code)); } //풋이고 매수포지션이면 손익률 합산(시초가기준) if (Account1.Balance.code.substring(0,2) == "13" && Account1.Balance.position == 2) { PutPL = PutPL+(Account1.Balance.current - Option1.GetOpen(Account1.Balance.code))/Option1.GetOpen(Account1.Balance.code); Main.MessageList("P",Account1.Balance.code,(Account1.Balance.current - Option1.GetOpen(Account1.Balance.code))/Option1.GetOpen(Account1.Balance.code)); } } Main.MessageList("C+P",CallPL+PutPL); //콜풋 매수포지션 손익률이 10% 이상이면 if (CallPL+PutPL >= 0.1) { //계좌 잔고의 콜/풋 매수포지션 모두 청산 for (var i = 0; i < num; i++) { //잔고리스트 순번으로 잔고를 셋팅 Account1.SetBalance(i); //콜이고 매수포지션이면 청산 if (Account1.Balance.code.substring(0,2) == "12" && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } //풋이고 매수포지션이면 청산 if (Account1.Balance.code.substring(0,2) == "13" && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } } } } } 해결이 안되시면 02-3453-1060으로 전화주시기 바랍니다. 즐거운 하루되세요 > 초록이 님이 쓴 글입니다. > 제목 : 이전글 재질문 > 그 문제가 아닌듯 싶읍니다. 아래 로직에서 if (CallPL+PutPL >= 0) --> if (CallPL+PutPL >= 0.1) 이렇게 수정해서 이미 쓰고 잇읍니다. 그런데, 맨아래로직(매수가 기준 10%)은 잘 작동되는데, 시초가 기준(10%) 로직만 에러가 납니다. --> 두 로직 모두 0.1로 수정하고 작동해서 나온 결과입니다. if (CallPL+PutPL >= 0) 로직이 백분율이 아니므로, 10 이 아니라 0.1 이 맞는것 같읍니다. 다시 검토 부탁합니다. ======================================================== 안녕하세요 예스스탁입니다. 0% 이상이면 청산되게 되어 있었습니다. 10% 이상으로 수정했습니다. function Main_OnStart() { Main.SetTimer(1,5000);//5초마다 타이머 동작 } function Main_OnTimer(nEventID) { if (nEventID == 1) { var num =Account1.GetTheNumberOfBalances(); var CallPL = 0; var PutPL = 0; //계좌잔고에서 매수포지션인 콜과 풋의 손익률 합산 for (var i = 0; i < num; i++) { //잔고리스트 순번으로 잔고를 셋팅 Account1.SetBalance(i); //콜이고 매수포지션이면 손익률 합산(시초가기준) if (Account1.Balance.code.substring(0,2) == "12" && Account1.Balance.position == 2) { CallPL = CallPL+(Account1.Balance.current - Option1.GetOpen(Account1.Balance.code))/Option1.GetOpen(Account1.Balance.code); } //풋이고 매수포지션이면 손익률 합산(시초가기준) if (Account1.Balance.code.substring(0,2) == "13" && Account1.Balance.position == 2) { PutPL = PutPL+(Account1.Balance.current - Option1.GetOpen(Account1.Balance.code))/Option1.GetOpen(Account1.Balance.code); } } //콜풋 매수포지션 손익률이 10% 이상이면 if (CallPL+PutPL >= 10) { //계좌 잔고의 콜/풋 매수포지션 모두 청산 for (var i = 0; i < num; i++) { //잔고리스트 순번으로 잔고를 셋팅 Account1.SetBalance(i); //콜이고 매수포지션이면 청산 if (Account1.Balance.code.substring(0,2) == "12" && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } //풋이고 매수포지션이면 청산 if (Account1.Balance.code.substring(0,2) == "13" && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } } } } } 즐거운 하루되세요 > 초록이 님이 쓴 글입니다. > 제목 : 이전글 문의 > 아래글을 예스스팟에 적용해보니 조건충족과 상관없이 자동설정하면 바로 청산됩니다. 맨 아래 처음 수식(매수가 기준 청산)은 제대로 작동되는데, 재문의 글의 답변로직(바로 아래 로직, 시초가 기준 청산)은 옵션객체(option1)를 추가했는데도 자동 걸자마자 바로 청산됩니다. -> 스트립트 객체에서 option1 추가하고, 속성에서 주가지수옵션 지정했읍니다. 원래, 조건(10% 총익시 청산)이 되서 청산되야 하는데, 조건과 상관없이 자동주문 걸면 바로 청산돼 버립니다. 무엇이 에러가 있읍니까? ----------------------------------------------------- 안녕하세요 예스스탁입니다. 옵션종목의 시초가가 필요하므로 스크립트 객체화면에 옵션객체를 추가하셔야 합니다. function Main_OnStart() { Main.SetTimer(1,5000);//5초마다 타이머 동작 } function Main_OnTimer(nEventID) { if (nEventID == 1) { var num =Account1.GetTheNumberOfBalances(); var CallPL = 0; var PutPL = 0; //계좌잔고에서 매수포지션인 콜과 풋의 손익률 합산 for (var i = 0; i < num; i++) { //잔고리스트 순번으로 잔고를 셋팅 Account1.SetBalance(i); //콜이고 매수포지션이면 손익률 합산(시초가기준) if (Account1.Balance.code.substring(0,2) == "12" && Account1.Balance.position == 2) { CallPL = CallPL+(Account1.Balance.current - Option1.GetOpen(Account1.Balance.code))/Option1.GetOpen(Account1.Balance.code); } //풋이고 매수포지션이면 손익률 합산(시초가기준) if (Account1.Balance.code.substring(0,2) == "13" && Account1.Balance.position == 2) { PutPL = PutPL+(Account1.Balance.current - Option1.GetOpen(Account1.Balance.code))/Option1.GetOpen(Account1.Balance.code); } } //콜풋 매수포지션 손익률이 10% 이상이면 if (CallPL+PutPL >= 0) { //계좌 잔고의 콜/풋 매수포지션 모두 청산 for (var i = 0; i < num; i++) { //잔고리스트 순번으로 잔고를 셋팅 Account1.SetBalance(i); //콜이고 매수포지션이면 청산 if (Account1.Balance.code.substring(0,2) == "12" && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } //풋이고 매수포지션이면 청산 if (Account1.Balance.code.substring(0,2) == "13" && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } } } } } 즐거운 하루되세요 > 초록이 님이 쓴 글입니다. > 제목 : 추가 문의... > 아래글 답변에서 한가지 추가 문의합니다. 만약, 매수 보유중인 콜/풋의 손익을 합산할때, 각각의 매수가가 아닌, 당일 시초가(각각의 시초가)를 기준으로 +10% 청산 하려면 어떻게 해야 합니까? ================================================================= 안녕하세요 예스스탁입니다. 문의하신 내용은 예스랭귀지로 구현하시기는 어렵습니다. 예스랭귀지는 차트에 적용되어 신호가 발생하는데 차트의 주종목에만 신호가 발생하고 주문이 가능하며 다른 차트의 신호상태나 손익은 알수가 없습니다. 해당 내용은 스팟에서 구현해 보셔야 합니다. 아래는 수식 가이드입니다. 아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다. 5초마다 잔고의 매수로 보유하고 있는 콜과 풋의 손익률을 합산해 10%이상이면 계좌의 매수포지션으로 보유중인 전체 콜과 풋을 모두 청산합니다. function Main_OnStart() { Main.SetTimer(1,5000);//5초마다 타이머 동작 } function Main_OnTimer(nEventID) { if (nEventID == 1) { var num =Account1.GetTheNumberOfBalances(); var CallPL = 0; var PutPL = 0; //계좌잔고에서 매수포지션인 콜과 풋의 손익률 합산 for (var i = 0; i < num; i++) { //잔고리스트 순번으로 잔고를 셋팅 Account1.SetBalance(i); //콜이고 매수포지션이면 손익률 합산 if (Account1.Balance.code.substring(0,2) == "12" && Account1.Balance.position == 2) { CallPL = CallPL+(Account1.Balance.current - Account1.Balance.avgUnitCost)/Account1.Balance.avgUnitCost; } //풋이고 매수포지션이면 손익률 합산 if (Account1.Balance.code.substring(0,2) == "13" && Account1.Balance.position == 2) { PutPL = PutPL+(Account1.Balance.current - Account1.Balance.avgUnitCost)/Account1.Balance.avgUnitCost; } } //콜풋 매수포지션 손익률이 10% 이상이면 if (CallPL+PutPL >= 0) { //계좌 잔고의 콜/풋 매수포지션 모두 청산 for (var i = 0; i < num; i++) { //잔고리스트 순번으로 잔고를 셋팅 Account1.SetBalance(i); //콜이고 매수포지션이면 청산 if (Account1.Balance.code.substring(0,2) == "12" && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } //풋이고 매수포지션이면 청산 if (Account1.Balance.code.substring(0,2) == "13" && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } } } } } 즐거운 하루되세요 > 초록이 님이 쓴 글입니다. > 제목 : 시스템 문의.. > 풋옵션과 콜옵션을 조합하여 하고 있읍니다. 합성법인 스트랭글, 스트래들 전략을 쓰고 있는데, 아래와 같이 문의합니다. 스트래들로 프리미엄이 비슷한 콜,풋옵션을 둘다 매수했을때, 양측의 손익을 합한 총 손익이 +10% 가 날때, 두 포지션 모두 청산하여 수익을 지키고 싶은데, 로직 가능합니까? 우리트레이더의 stoploss 기능은 한 포지션만 걸수 있어 콜, 풋 포지션을 따로 따로 걸어야 하기 때문에, 총 수익과 연동할수가 없읍니다. (예컨대 콜이 +10% 수익나서 청산되도, 그때, 풋이 -10% 나면 수익 제로입니다) 콜과 풋의 손익을 합산해서 총손익이 +10% 날때 콜,풋을 모두 청산하여 수익을 지키고 싶읍니다) 가능합니까? 예스스팟까지 하여 검토 부탁합니다.