커뮤니티

예스스팟 Q&A

답변완료

문의

예스스팟 모의 계좌로 야간선물 지수옵션과 주식선물 그리고 ELW 거래는 불가능한가요? 안 된다면 가능하게 해주시면 안되나요?? 시뮬도 안해보고 실계좌에서 직접 테스트 한다는 건 좀 위험해 보여서요. 사고날 수 있으니...
프로필 이미지
한걸음씩
2014-05-22
971
글번호 222988
답변완료

예스스팟과 API (himt.ocx)를 연동할 수 있는 방법이 있을까요 ??

현재 api 프로그램을 통해 주문과 계좌 현황이 관리되고 있는데, 선물시스템 신호에 따라 외가 옵션 매매를 자동으로 하는 기능을 추가하고자 합니다. 그런데 선물시스템 신호는 예스스팟에서만 이벤트로 사용할 수 있어서 api 프로그램에서 직접 주문을 낼 수는 없을 것 같은데요... 혹시 상호간에 Interfacing 할 수 있는 방법이 있을지요 ?? 아니면 선물신호가 발생할 때 api에서 어떤 식으로든 이벤트를 받을 수 있을까요 ??
프로필 이미지
폴피닉스
2014-05-21
950
글번호 222986
답변완료

확장차트 - 제거 및 신호 구분

질문1) Main.ReqChartEx 함수를 통해 확장 차트를 생성한 이후에 제거하는 방법이 있는지요? 또한, 확장차트에 설정한 시스템 파라미터를 변경할 수 있나요? 예를 들어, 특정 시점에만 차트를 생성해서 시스템을 설정하여 신호를 발생시키고, 청산 후에는 생성한 차트를 제거하고자 합니다. 즉, 장중에 차트가 생성되었다 제거되는 작업이 수차례 반복되겠습니다. 질문2) Main.ReqChartEx 함수를 사용하여 3개의 확장 차트를 생성하고 시스템을 올린 후, 각 확장차트에서 발생한 Signal을 구분하여 처리할 수 있나요? 종목이 다른 경우는 ChartEx.GetCode(1)을 이용해서 구분할 수 있겠으나, 3개 확장차트가 모두 동일한 종목을 사용하고 있는 경우에 어떻게 신호를 구분하나요?
프로필 이미지
곰탈
2014-05-18
922
글번호 222983
답변완료

챠트 세팅

안녕하세요. 선물 시가기준 양옵션을 구한후 콜풋 2.0대의 옵션을 기준옵션으로 상대콜풋 옵션을 구하고 싶습니다 가령 콜 265 의 가격이 2.0에 근접, 상대 풋 265를 참고 데이타로 설정 풋 260의 상대로 콜 260의 옵션을 참조 데이타로 설정하는 확장 챠트. 아래의 수식에서는 콜을 기준으로 CoPut(상대옵션)의 행사가를 구하는게..... 감사합니다 var Start; var UNum; var LNum; var Num = 0; var CallCode; var CallPrice; var CoPut; var CallATM; var PutATM; var PutCode; var PutPrice; var CC; var PP; var PLsum; var CallOrderCode; var PutOrderCode; var OrderCode; var CallStart; var PutStart; var ChartEx1 ;//= null; var ChartEx4 ;//= null; var Nth = 0; var ItemCode = new Array(100);//갯수 var ItemObject = new Array(100);//갯수 var ItemHigh = new Array(100);//갯수 var ItemLow = new Array(100);//갯수 function Main_OnStart() { Start = 0; vol1 = 0; vol2 = 0; CallStart = 0; PutStart = 0; Main.MessageList("시 작"); var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //9시 5분에 if (Start == 0 && HHMMSS >= 085500)// && HHMMSS >= 90030 { Start = 1; 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++) { CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.3); CallCode[i+LNum] = Option.GetATMCallRecent(i); } CC = 99999999; // CallOrderCode = -1; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum]; } if (CallOrderCode == CallCode[i+LNum]) { CallOrderCode1 = CallCode[i+LNum-1]; CallOrderCode2 = CallCode[i+LNum+1]; CallOrderCode3 = CallCode[i+LNum+2]; } } for (var ii = -UNum; ii <= LNum; ii++) { PutPrice[ii+UNum] = Math.abs(Option.GetCurrent(1, ii)-2.3); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } PP = 99999999; // PutOrderCode = -1; for (var ii = -UNum; ii < LNum; ii++) { if (PutPrice[ii+UNum] <= PP) { PP = PutPrice[ii+UNum]; PutOrderCode = PutCode[ii+UNum]; } if (PutOrderCode == PutCode[ii+UNum]) { PutOrderCode1 = PutCode[ii+UNum-1]; PutOrderCode2 = PutCode[ii+UNum+1]; PutOrderCode3 = PutCode[ii+UNum+2]; PutOrderCode4 = PutCode[ii+UNum+3]; } } Main.MessageList("콜",CallOrderCode ,"풋",PutOrderCode); //코스피200선물에 가장 가까운 콜/풋 종목 선정 var var1 = MarketData1.open;//current;//expectedPrice var var2 = parseInt(var1/10)*10; var var3 = var1%10; var ATM = -1; if (var3 >= 8.75) ATM = var2+10; else if (var3 < 8.75 && var3 >= 6.25) ATM = var2+7.5; else if (var3 < 6.25 && var3 >= 3.75) ATM = var2+5.0; else if (var3 < 3.75 && var3 >= 1.25) ATM = var2+2.5; else ATM = var2+0.0; //CallATM = -1; for (var j = -LNum; j <= UNum; j++) { if (Option.GetExercisePrice(0, j) == ATM) { CallATM = Option.GetATMCallRecent(j,0); CallOrderCode = Option.GetATMCallRecent(j-Num,0); } } //PutATM = -1; for (var j = -UNum; j <= LNum; j++) { if (Option.GetExercisePrice(1, j) == ATM) { PutATM = Option.GetATMPutRecent(j,0); CoPut = Option.GetATMPutRecent(j-Num,0); } } Main.MessageList("콜ATM :",CallATM ,"풋ATM :",PutATM,"상대옵션 :",CoPut); //확장 차트객체 요청 var ChartSet4 = new ReqChartItem(CallOrderCode,2, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //시스템 설정 var TradeSet4 = new SystemTradeInfo(TRADE_FIXCAPITAL,1, 10000000,1, // 자산 0.07, 0.07,CALCMETHOD_PERCENT, // 진입/청산 수수료 0.01, 0.01,CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 50, //1000, // 최대진입수량 10); // 최대진입횟수 var SystemSet4 = new SystemInfo("Opover1",YL_TYPE_NORMAL,null,TradeSet4,null); //참조데이터 추가 var R31 = new ReqChartItem(CoPut, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R32 = new ReqChartItem(CallATM, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R33 = new ReqChartItem(PutATM, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var ReferDataSet4 = new Array(R31,R32,R33); //지정한 설정으로 챠트 생성을 요청 Main.ReqChartEx(ChartSet4, SystemSet4, null, ReferDataSet4); } } //요청한 차트객체 생성이 완료되면 function Main_OnRcvChartEx(ChartEx) { if ( ChartEx.GetCode(2) == CoPut) { ChartEx4 = ChartEx; OrderCode = Main.GetOrderCode(ChartEx4.GetCode(1));//ATM단위로 사용할때 Main.MessageList("CoPut코드",ChartEx4.GetCode(2)); } }
프로필 이미지
파문일기
2014-05-17
859
글번호 222982

마루아빠 님에 의해서 삭제되었습니다.

프로필 이미지
마루아빠
2014-05-16
23
글번호 222979
답변완료

[2014/0515] 예스스팟 기능추가

안녕하세요 예스스탁입니다. 예스스팟의 기능이 추가되어 알려드립니다. 1. 그리드 객체 추가 스크립트 객체화면에서 그리드 객체가 추가되었습니다. 그리드를 추가해 각 셀 혹은 행, 열에 값을 적거나 가져와서 수식에서 이용하실 수 있습니다. 2. 옵션객체 메써드 오버로딩 기능추가 수식을 좀더 간편하게 작성하실수 있도록 옵션객체의 함수 오버로딩 기능을 추가했습니다. 기존 옵션객체의 함수가 특정값을 불러올때 ATM단계로 지정하거나 종목코드로 지정해서 불러오는 함수 2개로 제공이 되고 있었습니다. 하나의 함수를 이용해 값을 불러와 사용할수 있게 변경이 되었습니다. 예) GetAskAmount(nCallPut, nATMLevel, nAskLevel) GetAskAmountByCode(sItemCode, nAskLevel) --> GetAskAmount 함수 하나로 2가지 상황 모두 지정가능 GetAskAmount(nCallPut, nATMLevel, nAskLevel) GetAskAmount(sItemCode, nAskLevel) 옵션객체의 리스트에는 기존 사용하시던 ByCode함수가 없지만 수식내에서는 ByCode함수도 그대로 사용하실 수 있습니다. 3. 옵션객체에 GetBasePrice, GetLimitDn, GetLimitUp 함수 추가 옵션객체에 함수가 추가되었습니다. 기준가를 리턴 GetBasePrice(nCallPut, nATMLevel) GetBasePrice(sItemCode) 상한가를 리턴 GetLimitDn(nCallPut, nATMLevel) GetLimitDn(sItemCode) 하한가를 리턴 GetLimitUp(nCallPut, nATMLevel) GetLimitUp(sItemCode) 4. 외부입력변수를 전략 실행 중에 설정창에서 변경하면 변경된 값으로 실행이 되게 수정했습니다. 도움말에는 다음주에 설명이 추가될 예정입니다.감사합니다. 즐거운 하루되세요
프로필 이미지
예스스탁
2014-05-15
355
글번호 222977

파문일기 님에 의해서 삭제되었습니다.

프로필 이미지
파문일기
2014-05-15
4
글번호 222975
답변완료

문의 드립니다.

항상 친절하시고 상세하신 답변 감사드립니다. 수식작성 Q&A 36191 글(아래에 복사해 넣었습니다)에 답해 주신 내용과 관련하여 문의드리고자 합니다. 1. 예스글로벌에서 가령 원유와 브라질상품(보베스파 등) 이렇게 두 품목을 거래할 경우, 원유는 일반해외선물용 계좌(00000-00-001)로, 브라질상품은 브라질상품용 계좌(00000-00-002)로 거래하도록 되어 있습니다. 두 품목을 동시에 거래하는 경우, Account1은 001계좌, Account2는 002계좌로 하고 싶은데, 그럴 경우 아래 식은 어떻게 수정되어야 하는지요? (계좌가 복수이면 계좌 관련해서도 배열과 loop를 사용해야 할 것 같습니다만...) 2. 아래 식은 여러 품목을 매매하는 경우를 위한 것이라서 종목객체들을 구하기 위해 배열을 이용하여 loop를 돌리는 식입니다만, 만일 가장 간단하게, "단 한 품목만 매매"할 때에는 아래 식을 어떻게 단순화해서 사용할 수 있을지 부탁드립니다. 감사합니다! 아래: 수식작성 Q&A 36191 글 답글 내용: var Nth = 0; var ItemCode = []; var ItemObject = []; var ItemHigh = []; var Bnum; function Main_OnStart() { Nth = 0; Bnum = Account1.GetTheNumberOfBalances() Main.MessageList("잔고종목수",Bnum); if (Bnum > 0) { Account1.SetBalanceIndex(Nth);//잔고는 순번이 0부터 시작 //셋팅된 잔고의 수량이 0이상이면 if (Account1.Balance.count > 0) { //1번째 종목객체 생성요청 Main.ReqMarketData(Account1.Balance.code, 0,0); //ItemCode의 [Nth]번째 방에 종목코드 저장 ItemCode[Nth] = Account1.Balance.code; Main.MessageList("종목객체요청",Account1.Balance.code); } } } //요청한 종목객체 수신되면 function Main_OnRcvMarketData(MarketData) { Main.MessageList("종목객체수신",MarketData.code); //수신받은 종목객체의 종목코드와 직전에 요청한 종목과 같은지 확인 후에 if (MarketData.code == ItemCode[Nth]) { ItemObject[Nth] = MarketData;//ItemObject의 [Nth]방에 수신받은 객체를 저장 ItemHigh[Nth] = 0; //ItemHigh의 [Nth]방의 값을 0으로 셋팅 (이후 최고값 계산해 저장할 변수) Main.MessageList(Nth,"번째","종목객체생성완료 : ",ItemObject[Nth].code); //순번은 1 증가 Nth = Nth+1; //종목객체 수신완료되면 다음 종목 종목객체 요청 if (Bnum > 0) { //계좌의 잔고리스트에서 다음 순번 잔고 셋팅 Account1.SetBalanceIndex(Nth); //셋팅된 잔고의 수량이 0이상이면 if (Account1.Balance.count > 0) { //Nth번째 종목객체 생성요청 Main.ReqMarketData(Account1.Balance.code, 0,0); //ItemCode의 [Nth]번째 방에 종목코드 저장 ItemCode[Nth] = Account1.Balance.code; Main.MessageList("종목객체요청",Account1.Balance.code); } } } } //종목객체 시세 업데이트 function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*삭제 { if (Nth == Bnum-1) { //편입된 종목수 만&#53380;만 수행 for (var i = 0; i <= Nth; i++) { if (ItemObject[i].code == sItemCode && lUp*dateID == 20001)//*삭제 { Main.MessageList("-----------------------------------------------"); Main.MessageList(ItemObject[i].code,"업데이트"); //잔고셋팅 Account1.SetBalanceItem(ItemObject[i].code,0); //종목편입 이후의 최고가 계산 if (ItemObject[i].current > ItemHigh[i]) { ItemHigh[i] = ItemObject[i].current; } //매수잔고 if (Account1.Balance.position == 2) { //현재가가 평균단가 대비 +1이상 수익나면 청산 if (ItemObject[i].current >= Account1.Balance.avgUnitCost+1) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0,1); //주문 후 해당 종목객체 삭제 Main.RemoveMarketData(ItemObject[i]); Main.MessageList("수익청산 : ",ItemObject[i].code,"종목객체삭제"); } // 현재가가 평균단가 대비 1이상 손실나하면 청산 if (ItemObject[i].current <= Account1.Balance.avgUnitCost-1) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0,1); //주문 후 해당 종목객체 삭제 Main.RemoveMarketData(ItemObject[i]); Main.MessageList("손절청산 : ",ItemObject[i].code,"종목객체삭제"); } //현재가가 평균단가 0.7포인트 이상 수익후 +0.5 수익 하락하면 청산 if (ItemHigh[i] >= Account1.Balance.avgUnitCost*1.08 && ItemObject[i].current <= Account1.Balance.avgUnitCost*1.05) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0,1); //주문 후 해당 종목객체 삭제 Main.RemoveMarketData(ItemObject[i]); Main.MessageList("TR청산 : ",ItemObject[i].code,"종목객체삭제"); } } //매도잔고 if (Account1.Balance.position == 1) { //현재가가 평균단가 대비1포인트이상 수익나면 청산 if (ItemObject[i].current <= Account1.Balance.avgUnitCost-1) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count, 0,1); //주문 후 해당 종목객체 삭제 Main.RemoveMarketData(ItemObject[i]); Main.MessageList("수익청산 : ",ItemObject[i].code,"종목객체삭제"); } // 현재가가 평균단가 대비 1이상 손실나면 청산 if (ItemObject[i].current >= Account1.Balance.avgUnitCost+1) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count, 0,1); //주문 후 해당 종목객체 삭제 Main.RemoveMarketData(ItemObject[i]); Main.MessageList("손절청산 : ",ItemObject[i].code,"종목객체삭제"); } //현재가가 평균단가 대비 0.7포인트 이상 수익 후 0.5까지 수익이 감소하면 청산 if (ItemHigh[i] <= Account1.Balance.avgUnitCost-0.7 && ItemObject[i].current <= Account1.Balance.avgUnitCost-0.5) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count, 0,1); //주문 후 해당 종목객체 삭제 Main.RemoveMarketData(ItemObject[i]); Main.MessageList("TR청산 : ",ItemObject[i].code,"종목객체삭제"); } } } } } }
프로필 이미지
즐겁게
2014-05-14
860
글번호 222971
답변완료

교차매매

안녕하세요, 예스트레이더에서는 특정데이터(예를들면 data2)를 참조해서 레버리지 ETF 매도 후 전액 인버스 매수 (혹은 인버스 매도 후 전액 레버리지 매수) 가 안된다고 들은거 같은데 혹시 예스스팟에서는 가능한지요? 가능하다면 간단한 Logic을 부탁드립니다. 감사합니다.
프로필 이미지
밝은아침
2014-05-12
993
글번호 222970

지나리 님에 의해서 삭제되었습니다.

프로필 이미지
지나리
2014-05-09
0
글번호 222969