커뮤니티

예스스팟 Q&A

답변완료

수식에서 참조할 첫번째 종목데이터가 없습니다

이 문구가 뜨는데 어떻게 해결해야 하나요? 또한 시스템에서, 다른 주기 봉차트를 참조로 걸어두려고 하는데, 하는 방법을 잘 모르겠습니다.. 감사합니다
프로필 이미지
이대규
2017-03-14
2418
글번호 224138

파워풀맨 님에 의해서 삭제되었습니다.

프로필 이미지
파워풀맨
2017-03-12
0
글번호 224137
답변완료

옵션매매 문의드립니다.

항상 도움 주셔서 감사히 공부하고 있습니다. 선물신호로 옵션매수후 청산하고 있는데. 한계약일 경우에는 문제가 전혀 없는데 피라미딩으로 하나의 차트에서 2계약 이상 매수할 때, 행사가가 다른 옵션 매수후 청산할 경우에는 마지막 행사가로만 청산이 되어 계좌에 매도계약이 남게 되어 질문드립니다. 예를 들면 P 272.5 1계약 매수후 P270.0 1계약 추가 매수후 청산이 될 때 P270.0 2계약 매도 신호가 나옵니다. 결국 완전청산이 되지않고 P 272.5 1계약 매수 , P272.0 1계약 매도 상태가 됩니다. 완전한 청산을 위해서 스팟식을 어떻게 바꾸면 좋을 지 조언 부탁 드립니다. var ChartName = "pyramiding"; var d = new Date(); var OpPrice = 1.00; //진입가격대, OpPrice에 가장 근접한 값 주문 var LowPrice = 0.40; //최소가격대 이상일때로 제한하는 변수 var HighPrice = 9.90; //최대가격대 이하일때로 제한하는 변수 var OrderGap = 0.30; //주문시 체결가격 설정(현재가 + OrderGap) var ForPrice; // 옵션값후보 var Delta; var MaxCall; // 콜을 여기에 저장 var MaxCallcode; // 콜의 코드를 여기에 저장 var MaxPut; var MaxPutcode; function Main_OnStart() { Delta = 100; for(var i = -5; i <= 5; i++) { ForPrice = Option.GetCurrent(0,i); // GetCurrent 0 은 콜 , 1은 풋 if ( Math.abs(ForPrice - OpPrice) <= Delta && LowPrice < ForPrice && ForPrice < HighPrice ) { Delta = Math.abs(ForPrice - OpPrice); MaxCallcode = Option.GetATMCallRecent(i); MaxCall = Option.GetCurrentByCode(MaxCallcode); } } Delta = 100; for(var i = -10; i <= 10; i++) { ForPrice = Option.GetCurrent(1,i); // GetCurrent 0 은 콜 , 1은 풋 if ( Math.abs(ForPrice - OpPrice) <= Delta && LowPrice < ForPrice && ForPrice < HighPrice ) { Delta = Math.abs(ForPrice - OpPrice); MaxPutcode = Option.GetATMPutRecent(i); MaxPut = Option.GetCurrentByCode(MaxPutcode); } } Main.MessageLog("<< "+ChartName+" >> 콜 : "+MaxCall+" ("+MaxCallcode+") , 풋 : "+MaxPut+" ("+MaxPutcode+") ----- 구동시각 "+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds()+" , 잔존일 "+Option.GetRemainDays(0,0)+"일"); } //////////////////////////////////////////////////////// 신호 뜰때 매매 /////////////////////////////////////////// function Chart1_OnRiseSignal(Signal) { var EntryVol = Signal.count; // 선물신호 수량 d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if ( HHMMSS >= 90001 ) { ////////////////////////////////////////////// if (Signal.signalKind == 1) // Call 매수 { Delta = 100; for(var i = -5; i <= 5; i++) { ForPrice = Option.GetCurrent(0,i); // GetCurrent 0 은 콜 , 1은 풋 if ( Math.abs(ForPrice - OpPrice) <= Delta && LowPrice < ForPrice && ForPrice < HighPrice ) { Delta = Math.abs(ForPrice - OpPrice); MaxCallcode = Option.GetATMCallRecent(i); MaxCall = Option.GetCurrentByCode(MaxCallcode); } } OrderPrice = parseInt((MaxCall+OrderGap)*100)/100; //부동소수점 오류방지 ACC.OrderBuy(MaxCallcode, EntryVol, OrderPrice, 0); //괄호 의미는 (코드, 수량, 가격, 지정가) Main.MessageLog("("+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds()+" ☞ "+ChartName+" 콜 매수진입) 종목명:"+MaxCallcode+", 수량:"+EntryVol+", 현재가:"+MaxCall+", 주문가:"+OrderPrice +" CCC"); } ////////////////////////////////////////////// if (Signal.signalKind == 2) // Call 청산 { ExitPrice = Option.GetCurrentByCode(MaxCallcode); OrderPrice = parseInt((ExitPrice - OrderGap)*100)/100; //부동소수점 오류방지 ACC.OrderSell(MaxCallcode, EntryVol, OrderPrice, 0); Main.MessageLog("("+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds()+" ☞ "+ChartName+" 콜 청산주문) 종목명:"+MaxCallcode+", 수량:"+EntryVol+", 현재가:"+ExitPrice+", 주문가:"+OrderPrice+ " c"); } ///////////////////////////////////////////// if (Signal.signalKind == 3) // Put 매수 { Delta = 100; for(var i = -10; i <= 10; i++) { ForPrice = Option.GetCurrent(1,i); // GetCurrent 0 은 콜 , 1은 풋 if ( Math.abs(ForPrice - OpPrice) <= Delta && LowPrice < ForPrice && ForPrice < HighPrice ) { Delta = Math.abs(ForPrice - OpPrice); MaxPutcode = Option.GetATMPutRecent(i); MaxPut = Option.GetCurrentByCode(MaxPutcode); } } OrderPrice = parseInt((MaxPut+OrderGap)*100)/100; //부동소수점 오류방지 ACC.OrderBuy(MaxPutcode, EntryVol, OrderPrice , 0); Main.MessageLog("("+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds()+" ☞ "+ChartName+" 풋 매수진입) 종목명:"+MaxPutcode+", 수량:"+EntryVol+", 현재가:"+MaxPut+", 주문가:"+OrderPrice +" PPP"); } ///////////////////////////////////////////// if (Signal.signalKind == 4) // Put 청산 { ExitPrice = Option.GetCurrentByCode(MaxPutcode); OrderPrice = parseInt((ExitPrice - OrderGap)*100)/100; //부동소수점 오류방지 ACC.OrderSell(MaxPutcode, EntryVol, OrderPrice, 0); Main.MessageLog("("+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds()+" ☞ "+ChartName+" 풋 청산주문) 종목명:"+MaxPutcode+", 수량:"+ EntryVol+", 현재가:"+ExitPrice+", 주문가:"+OrderPrice+" p" ); } } }
프로필 이미지
피니트
2017-03-03
2515
글번호 224136

한바다 님에 의해서 삭제되었습니다.

프로필 이미지
한바다
2017-03-03
0
글번호 224135
답변완료

일일손실제한 다음 식을 사용해도 되나요?

항상 감사드립니다. 여러개의 스팟식을 사용해서 포트폴리오 매매를 하고 있습니다. 아래 조건으로 스팟식을 만들고자 합니다. 금일 매매중에 총 100만원 손실 보고 있을시 모든 포지션 청산하고 + 금일은 추가 매매금지 var i1; var X; var dayloss = 1000000; //스팟 시작시 function Main_OnStart() { //i1에 예수금/예탁총액 저장 i1 = ACC.GetBalanceETCinfo(0); X = 0; Main.SetTimer(1, 5000);//5초 타이머 셋팅 } function Main_OnTimer(nEventID) { // 현재 정산금이 스팟시작시값보다 ""dayloss"" 이상 감소했으면 if (nEventID == 1 && ACC.GetBalanceETCinfo(100) <= i1-dayloss) { //타이머 중지 Main.KillTimer(1); var Bnum = ACC.GetTheNumberOfBalances(); for(var i = 0; i < Bnum; i++) { ACC.SetBalance(i); //콜이나 풋이면 if (ACC.Balance.code.substring(0,1) == "2" || ACC.Balance.code.substring(0,1) == "3") { // 포지션 청산 if (ACC.Balance.position == 1) ACC.OrderBuy(ACC.Balance.code,ACC.Balance.count,0,1); if (ACC.Balance.position == 2) ACC.OrderSell(ACC.Balance.code,ACC.Balance.count,0,1); } } X = 1; } } 1. 위의 식에 오류는 없나요? 2. 812글 답변에 보면 //현재 예수금/예탁총액이 스팟시작시값보다 20% 이상 감소했으면 if (nEventID == 1 && Account1.GetBalanceETCinfo(0) <= i1*0.8) { 이라는 부분이 나옵니다.GetBalanceETCinfo(0) 값은 "예수금"인데 , 0 대신 100 "정산금" 값이 실시간 값 아닌지요? 3. 다른 스팟 주문식에 && X ==0 을 넣으라고 하셨는데 , 이 때 그 주문식에도 var X; 라고 정의를 해야 하나요? 4. 만일 3개의 스팟식을 운영한다고 할 때 저 조건식을 3개의 스팟식에 모두 넣어야 하는지요? 5. 아니면 하나의 스팟식에서 변수를 정의하면 동시에 실행하는 다른 스팟식에도 두루 사용할 수 있는지도 궁금합니다. ======= 전화통화로 해결되었습니다. 감사드립니다^^
프로필 이미지
피니트
2017-03-03
2473
글번호 224131

피니트 님에 의해서 삭제되었습니다.

프로필 이미지
피니트
2017-03-01
0
글번호 224130

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

프로필 이미지
chunsk
2017-02-22
1
글번호 224125
답변완료

시스템적용후 강제청산시 에라

1.시스템은 수동진입 시스템청산 으로 되어있습니다. 그런데, 수동진입후, 불가피하게 수동청산을 하게되는경우가 있는데, 다시 수동 재 진입하게 되면, "TypeError :cannot read property 'code'of undefined 메시지가 출력되며,멈추게 됩니다. 처리를 어떻게 해야할까요? function Main_OnUp*dateMarket(sItemCode, lUp*dateID) { for (var i=1 ; i <= Nth ; i++) //편입된 종목수 만큼만 수행 { if (ItemObject[i].code == sItemCode && lUp*dateID == 20001) 2. 수동주문에 대해 OCO 주문발생 하는 방법 아래처럼, 주문취소식을 넣었으나, 수동주문한 것에 대한 취소가 되지 않습니다. 강제 취소할 수 있는 방법은 없는지요? 예) 272.0 매수진입, 로스컷 0.20 , 손주문 272.30 예약 로스컷 발생전 손주문한 272.30 주문 취소. if (ItemObject[i].current <= Account1.Balance.avgUnitCost - ItemObject[i].GetTickSize()*LosscutTick)//손절 { //매수청산하려는데 매수익걸 매도주문 미체결 있으면 취소 Account1.SetUnfill(SellNum); if (Account1.Unfill.count > 0) { Account1.OrderCancel(SellNum); } BuyAvg = Account1.Balance.avgUnitCost; BxID = Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, ItemObject[i].Bid(1), 2); T = 1; Main.MessageLog("매수손절");
프로필 이미지
심심00
2017-02-21
2589
글번호 224124

심심00 님에 의해서 삭제되었습니다.

프로필 이미지
심심00
2017-02-21
1
글번호 224123

신혜아빠 님에 의해서 삭제되었습니다.

프로필 이미지
신혜아빠
2017-02-14
0
글번호 224122