커뮤니티

종목 선정 문의

프로필 이미지
탄젠트80
2017-06-15 17:10:18
2294
글번호 224181
답변완료
안녕하세요 항상 주신 답변 잘 활용하고 있습니다. 미리 감사드립니다. 아래는 이용중인 스팟전략 중 일부로 종목 선정 부분입니다. 여기에 다음과 같은 조건을 추가하고 싶습니다 ㅇ 현재 : 9시 35초에 설정된 2.7에 가까운 콜풋 종목 선정 ㅇ 추가내용 : 9시 35초에 2.7에 가까은 콜풋, 2.1에 가까운 콜풋 종목을 각각 선정하여 2.7에 가까운 콜풋종목의 절대값의 차이가 0.8 이상이면 2.1에 가까운 콜풋종목으로 최종 거래종목을 선정 현재의 수식은 아래와 같습니다. ========================================================================== var Start = 0; var BC; var BP; var SC; var SP; var CPEntryPrice = 0; var PEntryPrice = 0; var CEntryPrice = 0; var CPLsum = 0; var PLsum = 0; var CLsum = 0; var EntryPercent = 0; var Entry1; var Entry2; var InHMS; var SCP1; var SCP2; var SCP3; var SCP4; var SPP1; var SPP2; var SPP3; var SPP4; var CPLsumin = 0; function Main_OnStart() { Start = 0; Main.MessageList("시작"); Entry1 = false; Entry2 = false; //타이머 셋팅(1번,5초) Main.SetTimer(1, 5000); } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //1번 타이머 동작 if (nEventID == 1 && HHMMSS >= 090035 && Entry1 == false) { //ATM위 행사가 갯수 var UNum = Option.uppersATM; //ATM아래 행사가 갯수 var LNum = Option.lowersATM; //각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언 var CallCode = new Array(UNum+LNum+1); //각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언 var CallPrice = new Array(UNum+LNum+1); //각 행사가의 풋종목의 종목코드를 저장할 변수를 배열변수로 선언 var PutCode = new Array(UNum+LNum+1); //각 행사가의 풋종목의 현재가를 저장할 변수를 배열변수로 선언 var PutPrice = new Array(UNum+LNum+1); //콜종목 찾기 //콜옵션중 2.7에 가장 가까운 종목 //콜옵션 모든 종목을 현재가-2.7을 해서 절대값을 취해 저장 for (var i = -LNum; i <= UNum; i++) { CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.7); 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] } } //풋종목 찾기 //풋옵션중 2.7에 가장 가까운 종목 //풋옵션 모든 종목을 현재가-2.7을 해서 절대값을 취해 저장 for (var i = -UNum; i <= LNum; i++) { PutPrice[i+UNum] = Math.abs(Option.GetCurrent(1, i)-2.7); 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 (CC < 99999999 && PP < 99999999) { Start = 1; SC = CallOrderCode; SP = PutOrderCode; CEntryPrice = Option.GetCurrentByCode(SC); PEntryPrice = Option.GetCurrentByCode(SP); CPEntryPrice = Math.round(CEntryPrice*100 + PEntryPrice*100)/100; Entry1 = true; Main.MessageList("콜종목:", SC, "풋종목:", SP, "기준양합:", CPEntryPrice); //청산신호발생했으므로 타이머 종료 Main.KillTimer(1); //타이머 셋팅(2번,5초) Main.SetTimer(2, 5000); } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2017-06-22 15:20:39

안녕하세요 예스스탁입니다. 아래 내용 참고하시기 바랍니다. var Start = 0; var BC; var BP; var SC; var SP; var CPEntryPrice = 0; var PEntryPrice = 0; var CEntryPrice = 0; var CPLsum = 0; var PLsum = 0; var CLsum = 0; var EntryPercent = 0; var Entry1; var Entry2; var InHMS; var SCP1; var SCP2; var SCP3; var SCP4; var SPP1; var SPP2; var SPP3; var SPP4; var CPLsumin = 0; function Main_OnStart() { Start = 0; Main.MessageList("시작"); Entry1 = false; Entry2 = false; //타이머 셋팅(1번,5초) Main.SetTimer(1, 5000); } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && HHMMSS >= 090035 && Entry1 == false) { var UNum = Option.uppersATM; var LNum = Option.lowersATM; var CallCode = new Array(UNum+LNum+1); var CallPrice = new Array(UNum+LNum+1); var CallPrice1 = new Array(UNum+LNum+1); var CallPrice2 = new Array(UNum+LNum+1); var PutCode = new Array(UNum+LNum+1); var PutPrice = new Array(UNum+LNum+1); var PutPrice1 = new Array(UNum+LNum+1); var PutPrice2 = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { CallPrice[i+LNum] = Option.GetCurrent(0, i); //콜별 현재가 CallPrice1[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.7); //콜별 2.7과 차이 CallPrice2[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.1); //콜별 2.1과 차이 CallCode[i+LNum] = Option.GetATMCallRecent(i); //종목코드 } for (var i = -UNum; i <= LNum; i++) { PutPrice[i+UNum] = Option.GetCurrent(1, i); //풋별 현재가 PutPrice1[i+UNum] = Math.abs(Option.GetCurrent(1, i)-2.7); //풋별 2.7과의 차이 PutPrice2[i+UNum] = Math.abs(Option.GetCurrent(1, i)-2.1); //풋별 2.1과의 차이 PutCode[i+UNum] = Option.GetATMPutRecent(i); //종목코드 } //2.7과 차이가 가장 작은 콜 종목 찾음 var CC1 = 99999999; var CCPrice1 = 0; var CallOrderCode1 = ""; for (var i = -LNum; i <= UNum; i++) { if (CallPrice1[i+LNum] < CC1) { CC1 = CallPrice1[i+LNum]; CCPrice1 = CallPrice[i+LNum]; CallOrderCode1 = CallCode[i+LNum] } } //2.7과 차이가 가장 작은 풋 종목 찾음 var PP1 = 99999999; var PPPrice1 = 0; var PutOrderCode1 = ""; for (var i = -UNum; i <= LNum; i++) { if (PutPrice1[i+UNum] < PP1) { PP1 = PutPrice1[i+UNum]; PPPrice1 = PutPrice[i+UNum]; PutOrderCode1 = PutCode[i+UNum]; } } //콜풋 모두 찾았으면 if (CC1 < 99999999 && PP1 < 99999999) { //우선 2.7에 가까운 종목을 SC와 SP로 저장 SC = CallOrderCode1; SP = PutOrderCode1; //콜풋 차이가 0.8이상이면 2.1에 가장 가까운 종목을 찾아 SC와 SP를 변경 if (Math.abs(CCPrice1-PPPrice1) >= 0.8 ) { var CC2 = 99999999; var CCPrice2 = 0; var CallOrderCode2 = ""; for (var i = -LNum; i <= UNum; i++) { if (CallPrice2[i+LNum] < CC2) { CC2 = CallPrice2[i+LNum]; CCPrice2 = CallPrice[i+LNum]; CallOrderCode2 = CallCode[i+LNum] } } var PP2 = 99999999; var PPPrice2 = 0; var PutOrderCode2 = ""; for (var i = -UNum; i <= LNum; i++) { if (PutPrice2[i+UNum] < PP2) { PP2 = PutPrice2[i+UNum]; PPPrice2 = PutPrice[i+UNum]; PutOrderCode2 = PutCode[i+UNum]; } } if (CC2 < 99999999 && PP2 < 99999999) { SC = CallOrderCode2; SP = PutOrderCode2; } } Start = 1; CEntryPrice = Option.GetCurrentByCode(SC); PEntryPrice = Option.GetCurrentByCode(SP); CPEntryPrice = Math.round(CEntryPrice*100 + PEntryPrice*100)/100; Entry1 = true; Main.MessageList("콜종목:", SC, "풋종목:", SP, "기준양합:", CPEntryPrice); //청산신호발생했으므로 타이머 종료 Main.KillTimer(1); //타이머 셋팅(2번,5초) Main.SetTimer(2, 5000); } } } 즐거운 하루되세요 > 탄젠트80 님이 쓴 글입니다. > 제목 : 종목 선정 문의 > 안녕하세요 항상 주신 답변 잘 활용하고 있습니다. 미리 감사드립니다. 아래는 이용중인 스팟전략 중 일부로 종목 선정 부분입니다. 여기에 다음과 같은 조건을 추가하고 싶습니다 ㅇ 현재 : 9시 35초에 설정된 2.7에 가까운 콜풋 종목 선정 ㅇ 추가내용 : 9시 35초에 2.7에 가까은 콜풋, 2.1에 가까운 콜풋 종목을 각각 선정하여 2.7에 가까운 콜풋종목의 절대값의 차이가 0.8 이상이면 2.1에 가까운 콜풋종목으로 최종 거래종목을 선정 현재의 수식은 아래와 같습니다. ========================================================================== var Start = 0; var BC; var BP; var SC; var SP; var CPEntryPrice = 0; var PEntryPrice = 0; var CEntryPrice = 0; var CPLsum = 0; var PLsum = 0; var CLsum = 0; var EntryPercent = 0; var Entry1; var Entry2; var InHMS; var SCP1; var SCP2; var SCP3; var SCP4; var SPP1; var SPP2; var SPP3; var SPP4; var CPLsumin = 0; function Main_OnStart() { Start = 0; Main.MessageList("시작"); Entry1 = false; Entry2 = false; //타이머 셋팅(1번,5초) Main.SetTimer(1, 5000); } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //1번 타이머 동작 if (nEventID == 1 && HHMMSS >= 090035 && Entry1 == false) { //ATM위 행사가 갯수 var UNum = Option.uppersATM; //ATM아래 행사가 갯수 var LNum = Option.lowersATM; //각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언 var CallCode = new Array(UNum+LNum+1); //각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언 var CallPrice = new Array(UNum+LNum+1); //각 행사가의 풋종목의 종목코드를 저장할 변수를 배열변수로 선언 var PutCode = new Array(UNum+LNum+1); //각 행사가의 풋종목의 현재가를 저장할 변수를 배열변수로 선언 var PutPrice = new Array(UNum+LNum+1); //콜종목 찾기 //콜옵션중 2.7에 가장 가까운 종목 //콜옵션 모든 종목을 현재가-2.7을 해서 절대값을 취해 저장 for (var i = -LNum; i <= UNum; i++) { CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.7); 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] } } //풋종목 찾기 //풋옵션중 2.7에 가장 가까운 종목 //풋옵션 모든 종목을 현재가-2.7을 해서 절대값을 취해 저장 for (var i = -UNum; i <= LNum; i++) { PutPrice[i+UNum] = Math.abs(Option.GetCurrent(1, i)-2.7); 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 (CC < 99999999 && PP < 99999999) { Start = 1; SC = CallOrderCode; SP = PutOrderCode; CEntryPrice = Option.GetCurrentByCode(SC); PEntryPrice = Option.GetCurrentByCode(SP); CPEntryPrice = Math.round(CEntryPrice*100 + PEntryPrice*100)/100; Entry1 = true; Main.MessageList("콜종목:", SC, "풋종목:", SP, "기준양합:", CPEntryPrice); //청산신호발생했으므로 타이머 종료 Main.KillTimer(1); //타이머 셋팅(2번,5초) Main.SetTimer(2, 5000); } }