커뮤니티

예스스팟 Q&A

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

프로필 이미지
Trader
5
글번호 226131
답변완료

종목객체 생성시

종목객체 생성이후 해당 종목의 10분전 가격을 얻고자 하는데 확장차트객체를 생성함으로써 위 값을 알수 있을까요?
프로필 이미지
지순신
342
글번호 226130

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

프로필 이미지
tktmsl
81
글번호 226129
답변완료

문의드립니다.

안녕하세요? 랭귀지에 대한 기초지식이 없다보니 이것저것 테스트 하는데 시간이 많이 소요되어서 문의 드립니다. 1) 15분봉으로 검색기는 만들었습니다.("TEST") 2) 15분마다 읽어 들여서 기본적으로 매수/매도 하는 식을 부탁드립니다. Main.ReqPowerSearch("TEST") var MK = []; var OrderCount = []; var BuyPrice = []; var MM = 500000; var 타이머간격 = 5;// 5초 var 매수금 = 100000 var OrderList = []; var MKList = []; var req; function Main_OnStart() { Main.SetTimer(1, 타이머간격*1000); //1번타이머, 주기 5분(종목검색간격) // Main.SetTimer(1, 300000); //1번타이머, 주기 5분(종목검색간격) // Main.SetTimer(2, 10000); //2번타이머, 주기 10초 (추가매수 타이밍 및 익절을 체크하는 시간간격) } //타이머동작 function Main_OnTimer(nEventID) { var d = new Date(); YYYYMMDD = d.getFullYear()*10000+(d.getMinutes()+1)*100+d.getSeconds(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //1번타이머 if (nEventID == 1 && HHMMSS > 90000 && HHMMSS < 151500) //9시 ~15시15분 { // Main.KillTimer(1); //타이머중지 Main.ReqPowerSearch("TEST"); //****** 종목검색실행 } //2번타이머 if (nEventID == 2) { // Main.KillTimer(2); Main.ReqMarketData(MKList[req]); } }
프로필 이미지
배움이
340
글번호 226128
답변완료

account1이 정의되지 않았습니다

account1이 정의되지 않았습니다 라고 뜨네요 account1 is not defined 바쁘시더라도 수정 부탁 드려요 건강하세요 var timer2 = 2; // 2초 var 매수금 = 17000000; var 손절 = 0.95; var 익절 = 1.03; var OrderList = []; var MKList = []; var req; var 종목수 = 1, BuyCount; function Main_OnStart() { //1번 타이머, 1초 Main.SetTimer(1, timer2*1000); // 오늘 매수한 종목 관리 배열 초기화 MKList = []; //스팟 시작시 잔고평가금액 V1 = Account1.GetBalanceETCinfo(100); BuyCount = 0; } function Main_OnTimer(nEventID) { var d = new Date(); YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && HHMMSS >= 090000 && HHMMSS < 113000 && BuyCount < 종목수) { //종목검색 수행 Main.ReqPowerSearch("단타") } if (nEventID == 1) { //계좌보유종수 var num = Account1.GetTheNumberOfBalances(); //9시~11시 15분 사이 if (HHMMSS >= 090000 && HHMMSS < 113000) { //보유종목이 1개 이상 if (num >= 1) { //계좌평가금액이 스팟시작시 평가금액대비 3% 이상이면 전종목 전량매도 if (Account1.GetBalanceETCinfo(100) >= V1*1.03) { //1번 타이머 종료 Main.KillTimer(1); //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account1.SetBalance(i); //수량이 있고 3%수익이거나 5% 손실이면 시장가 매도 if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } else //아니면 개별종목 3%익절, -5%손절 체크 { //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account1.SetBalance(i); //수량이 있고 3%수익이거나 -5% 손실이면 시장가 매도 if (Account1.Balance.count > 0 && (Account1.Balance.current >= Account1.Balance.avgUnitCost*익절 || Account1.Balance.current <= Account1.Balance.avgUnitCost*손절)) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } } } //13시 00분이후이면 모든 종목 전량 수익에 상관없이 매도 if (HHMMSS >= 130000) { //1번 타이머 종료 Main.KillTimer(1); //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account1.SetBalance(i); //수량이 있고 3%수익이거나 -5% 손실이면 시장가 매도 if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvItemList(aItemList, nCount) { Main.KillTimer(1); OrderList = []; if (nCount >= 1) { if (MKList.length == 0) { OrderList = aItemList; } else { for (var a = 0; a < nCount; a++) { var Add = true; for (var b = 0; b < MKList.length; b++) { if (aItemList[a] == MKList[b].code) { Add = false; } } if (Add == true && !IsStockInAccount(aItemList[a])) { OrderList.push(aItemList[a]); } } } } if (OrderList.length == 0) { Main.SetTimer(1, timer2*1000); } else { req = 0; Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OrderList[req]) { MKList.push(MarketData); // 계좌에 같은 종목이 있는지 확인 if (!IsStockInAccount(MarketData.code)) { if (BuyCount < 종목수) { // 계좌에 없는 경우에만 매수 //Account1.OrderBuy(MarketData.code,1,0,1); 밑에 한번에 17000000 시장가에 매수 Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1); //Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(4)),MarketData.Ask(1),0); //지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다. Main.MessageList(MarketData.code + " 주식을 매수합니다."); BuyCount = BuyCount+1; } } else { Main.MessageList( MarketData.code + " 주식은 이미 계좌에 있으므로 매수하지 않습니다."); } req = req+1; if (req < OrderList.length && BuyCount < 종목수) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 15000); } } else { Main.SetTimer(1, timer2*1000); } } } function IsStockInAccount(stockCode) { // 계좌에 해당 종목이 있는지 확인하는 함수 var numberOfBalances = Account1.GetTheNumberOfBalances(); for (var i = 0; i < numberOfBalances; i++) { Account1.SetBalance(i); if (stockCode == Account1.Balance.code) { return true; // 계좌에 같은 종목이 있으면 true 반환 } } return false; // 계좌에 같은 종목이 없으면 false 반환 }
프로필 이미지
뽀스뽀스
376
글번호 226126
답변완료

문의드림니다

문의드림니다 문1) 아래 주문수식을 매도5호가로 매수주문하는 수식으로 변경 부탁드림니다 OrderBuy(minifuture.code, EntryVol, minifuture.current + 1, 0); 아래 주문수식을 매수5호가로 매도주문하는 수식으로 변경 부탁드림니다 OrderSell(minifuture.code, EntryVol, minifuture.current - 1, 0); 문2) 아래 스팟수식에서 매수청산 하면 예스스팟 적용시 매수청산 되었다는 메시지가 뜨지 않는데요 매수청산 메시지 볼수 있게 수정좀 부탁드림니다 if(Signal.signalKind == 2) { Main.MessageList("ExitLong_Signal"); Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0) if (Account1.Balance.position == 2) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count,MarketData1.Bid(5), 0); } }
프로필 이미지
mao
329
글번호 226123
답변완료

특정조건 특정시간 특정가격 옵션 매수 진입횟수 조절

아래수식은 1번만 사고 파는 수식입니다. 그런데 처음 매수 후 추가 매수는 없어야 하는데 장이 움직여서 다른 행사가에서도 감시가격 0.05의 체결이 발생하면 매수를 또 냅니다. 장이 크게 움직이면 계속 행사가를 바꾸면서 0.05 체결이 발생합니다. 결과적으로 행사가별로 피라미딩하는 수식이 되었는데 거래횟수를 지정하여 사용하고 싶습니다. 요청사항1) 매수횟수를 세팅해 주십시요. 매수횟수 1이면 1회 매수횟수 2이면 2회 매수횟수를 2로 하면 중복되는 행사가 없이 총 2번의 매수를 합니다.(누적 2개) - 진입조건을 만족할 때 0.05 체결이 350 행사가에서 발생했다고 한다면 ex) 콜350.00 0.05 매수 (선물 상승시 콜352.50 0.05 매수) 콜350.00 0.05 매수 (선물 하락시 콜347.50 0.05 매수) 변수선언 var BuyPrice1 = 0.05, ExitPrice1 = 1.48; var BuyPrice2 = 0.05, ExitPrice2 = 0.98; 청산할 때 잔고에 있는 다른 전략의 포지션에 영향이 없어야 합니다. 항상 고맙습니다. ****************************************************************************** var BuyPrice = 0.05, ExitPrice = 999; var StartTime = 084500, EndTime = 144500; var List = [],MK = [],OD = []; var req, Exit, ReqCom; function Main_OnStart() { List = []; for (var i = -Option1.lowersATM; i <= Option1.uppersATM; i++) { List.push(Option1.GetATMCallRecent(i)); } Main.MessageList("콜옵션종목수:",List.length); req = 0; if (List.length > 0) { Main.MessageList("종목객체요청:",req,List.length); Main.ReqMarketData(List[req]); } Exit = false; ReqCom = false; } function Main_OnRcvMarketData(MarketData) { if (List[req] == MarketData.code) { Main.MessageList("종목객체생성:",req,MarketData.code); MK.push(MarketData); OD.push(0); req = req+1; if (req < List.length) { Main.MessageList("종목객체요청:",req,List[req]); var S = Main.ReqMarketData(List[req]); if (S == -1) { Main.SetTimer(1, 15000); Main.MessageList("종목객체생성 제한 --> 15초 뒤 다시 요청:"); } } else { Main.MessageList("종목객체생성완료"); ReqCom = true; } } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.KillTimer(1); Main.MessageList("종목객체 재요청:",req,List[req]); Main.ReqMarketData(List[req]); } } function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*제거 { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (HHMMSS >= StartTime && HHMMSS < EndTime && MarketData1.current >= MarketData1.open + 0.01 && //시가에서 0.01 상승 ReqCom == true && Exit == false && lUp*dateID == 20001 )//*제거 { Main.MessageList(HHMMSS,Exit); for (var i = 0; i < MK.length; i++) { if (OD[i] == 0) { if (MK[i].current == BuyPrice) { OD[i] = 1; Account1.OrderBuy(MK[i].code, 1,MK[i].current,0); } } else { if (MK[i].current == ExitPrice) { OD[i] = 2; Account1.SetBalance(MK[i].code,0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(MK[i].code, 1,MK[i].current,0); } } } } } if (HHMMSS >= EndTime && Exit == false) { Main.MessageList(HHMMSS,Exit); Exit = true; //미체결주문수 var UF = Account1.GetTheNumberOfUnfills(); Main.MessageList(HHMMSS,"미체결수",UF); if (UF > 0) { //모든 옵션 미체결 취소 for (var i = 0; i < UF; i++) { Account1.SetUnfill(i) if (Account1.Unfill.code != MarketData1.code && Account1.Unfill.count > 0) { Account1.OrderCancel(Account1.Unfill.orderNum); Main.MessageList(HHMMSS,"OrderCancel",Account1.Unfill.orderNum); } } } //보유종목수 var BB = Account1.GetTheNumberOfBalances() Main.MessageList(HHMMSS,"보유종목수",BB); if (BB > 0) { //잔고의 모든 옵션매수청산 for (var i = 0; i < BB; i++) { Account1.SetBalance(i); if (Account1.Balance.code != MarketData1.code && Account1.Balance.count > 0 && Account1.Balance.position == 2) { //매수3호가로 잔고잔량 매수청산(매도주문) Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,Option1.GetBid(Account1.Balance.code, 5) ,0); Main.MessageList(HHMMSS,"OrderSell",Account1.Balance.code); } } } } }
프로필 이미지
좌오비우오비
385
글번호 226122
답변완료

잔고 조회시 자정 이후 오류 (수정 및 파일첨부)

다음은 특정 시간마다 계좌의 미결제잔고 종목 개수를 조회하는 YesSpot 수식입니다. var RF1 = 0; function Main_OnTimer(nEventID) { if(nEventID == 1) { RF1 = 1; Account1.Refresh() } } function Main_OnUpdat*Account(sAccntNum, sItemCode, IUpdat*ID) { if(RF1 == 1) { RF1 = 0; Count1 = Account1.GetTheNumberOfBalances(); Main.MessageList("Updat*: ", Count1) } } 이렇게 적용을 할 시 계좌의 미결제잔고 종목 개수 (포지션 있는 잔고 개수)를 실시간으로 확인할 수 있습니다. 하지만 자정 +10분 (00:10) 이 지나가면서 미결제잔고 종목이 있음에도 불구하고 미결제잔고 종목 개수가 0으로 인식이 됩니다. 스크립트 메시지를 확인해보니 장이 종료된 이후인 06:23에는 다시 제대로 인식이 됩니다 스크립트 내용 중 어디서 문제가 발생하나요? 해결될 수 있는건가요? ('업데이트'가 '금지어'라 Updat*로 통일했습니다.)
프로필 이미지
민현종
356
글번호 226121

관리자에 의해 프로그램 사용법 QnA로 이동되었습니다

같은날, 같은 포지션으로 1분간격으로 시뮬을 했을때와 15분간격으로 시뮬을 했는데, 손익이 조그차이나는것이 아니라, 너무 차이가 많이나서, 그동안 몇년치를 분석했던 데이터에 대한 신뢰가 모호해졌습니다. 왜 그런것인지? 관련 영상을 보시고, 답변부탁드립니다. 010- 9959-5525 영상을 업로드 하려고하는데, 용량이 제한이 있어 어렵네요. 용량이 8메가 정도 됩니다.
프로필 이미지
토니스타크
4
글번호 226120
0

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

프로필 이미지
1000djr
3
글번호 226119