커뮤니티

예스스팟 Q&A

답변완료

시스템모니터의 정보 가져오기

시스템 모니터에서보면 모든 시스템의 진입수량/잔고수량을 한눈에 알 수 있는데, 혹시 예스스팟으로 같은 정보를 불러올 순 없을까요?
프로필 이미지
link9
2024-08-29
496
글번호 226106
답변완료

문의드립니다

안녕하세요 이제 더위가 한풀꺾이는듯합니다. 이럴때 감기가 잘 온다고 합니다. 건강관리 잘하시고요 다름이 아니라 진입시 시가기준으로 진입을 하는데 봉캔들의 액션을 참고로 하고싶어서요 이런것도 가능한지 여쭤보고싶습니다 시가를 기준으로 1분봉이 시가위인경우 1분봉완성봉의 저가가 시가위면 다음봉시가에 진입을 한다라는조건을 진입에 주고싶은데 가능한지 매도도 마찬가지로 시가 아래에 1분봉완성봉고가가 있을때만 다음봉시가에 진입 이런식으로 하고싶습니다
프로필 이미지
1000djr
2024-08-28
506
글번호 226103
답변완료

하루에 한 종목만 거래할수 있게 자바 부탁해요

하루에 한 종목만 거래할수 있게 자바 수정부탁해요 건강하세요 var timer120 = 120; // 2분 var 매수금 = 19000000; var 손절 = 0.89; var 익절 = 1.05; var OrderList = []; var MKList = []; var req; function Main_OnStart() { //1번 타이머, 2분 Main.SetTimer(1, timer120*1000); // 오늘 매수한 종목 관리 배열 초기화 MKList = []; //스팟 시작시 잔고평가금액 V1 = Account1.GetBalanceETCinfo(100); } 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 >= 90000 && HHMMSS < 113000) { //종목검색 수행 Main.ReqPowerSearch("단타테스트2") } if (nEventID == 1) { //계좌보유종수 var num = Account1.GetTheNumberOfBalances(); //9시~11시 15분 사이 if (HHMMSS >= 090000 && HHMMSS < 113000) { //보유종목이 1개 이상 if (num >= 1) { //계좌평가금액이 스팟시작시 평가금액대비 5% 이상이면 전종목 전량매도 if (Account1.GetBalanceETCinfo(100) >= V1*1.05) { //1번 타이머 종료 Main.KillTimer(1); //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account1.SetBalance(i); //수량이 있고 5%수익이거나 5% 손실이면 시장가 매도 if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } else //아니면 개별종목 5%익절, -5%손절 체크 { //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account1.SetBalance(i); //수량이 있고 5%수익이거나 -11% 손실이면 시장가 매도 if (Account1.Balance.count > 0 && (Account1.Balance.current >= Account1.Balance.avgUnitCost*1.05 || Account1.Balance.current <= Account1.Balance.avgUnitCost*0.89)) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } } } //14시 15분이후이면 모든 종목 전량 수익에 상관없이 매도 if (HHMMSS >= 141500) { //1번 타이머 종료 Main.KillTimer(1); //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account1.SetBalance(i); //수량이 있고 5%수익이거나 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, timer120*1000); } else { req = 0; Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OrderList[req]) { MKList.push(MarketData); // 계좌에 같은 종목이 있는지 확인 if (!IsStockInAccount(MarketData.code)) { // 계좌에 없는 경우에만 매수 //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 + " 주식을 매수합니다."); } else { Main.MessageList( MarketData.code + " 주식은 이미 계좌에 있으므로 매수하지 않습니다."); } req = req+1; if (req < OrderList.length) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 15000); } } else { Main.SetTimer(1, timer120*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 반환 }
프로필 이미지
뽀스뽀스
2024-08-26
517
글번호 226098
답변완료

크립토,nft 프로그램

nft 거래소에는 주식 봉그림(차트)와 같은 방식의 봉그림이 없어서 nft 봉그림과 암호화폐 현물 선물 연관 시스템 트레이딩 프로그램 제작 계획?
프로필 이미지
aw
2024-08-24
487
글번호 226096
답변완료

MarketData에 시가총액 추가 요청

종목객체에 종목의 기본정보가 추가되면 좋겠습니다. 주가따라 바뀌어서 문제라면 유통주식수 같은 것 정도라도... 기술적 분석이어도 수급이 시총대비 어떤지는 유용한 정보인데...ㅠㅠ 가능할까요?
프로필 이미지
푸른비행
2024-08-23
447
글번호 226095
답변완료

취소 접수 확인을 위한 프라퍼티는 어떤것일까요?

주문을 취소한 것도, 주문접수 함수가 반응하네요. Main_OnOrderResponse(OrderResponse)의 OrderResponse에서 원주문, 주문수정, 주문취소 각각을 구분하려면 어떤 프라퍼티를 이용해야 할까요? 그리고, STOP주문이나, 외부에서 한 주문의 경우를 구분할 수 있는지요? 있다면 어떻게 구분해야하는지 알려주시기 바랍니다.
프로필 이미지
푸른비행
2024-08-23
436
글번호 226086
답변완료

TypeError: Account1.OrderReplace is not a function

SI증권, NH선물에서 모의테스트 중인데 NH선물에서만 이런 오류가 뜹니다. TypeError: Account1.OrderReplace is not a function 원주문을 취소하려다가 원주문이 없어서 거부된 것으로 보이는데 어떻게 해야 하는지 가이드 부탁드립니다.
프로필 이미지
gap
2024-08-20
476
글번호 226085
답변완료

외가격 옵션 매수

1. 검토사항 (아래 수식) 진입조건(등가격의 합과 차)을 만족했을 때 등가콜과 등가풋 중 절대값이 작은 쪽의 등가격 옵션을 매수하는 수식을 작성해보았습니다. 코딩내용이 맞는지 봐주셨으면 합니다. 2. 요청수식 검토요청한 수식과 진입조건은 똑같습니다. 다만 매수는 등가격이 아니고 1행사가 아래인 외가격1 입니다. 등가콜과 등가풋 중 절대값이 작은 쪽의 외가격1 옵션을 매수합니다. (판단은 등가격의 합과 차로, 액션은 외가격으로) 익절과 손절과 시간청산은 외가격1옵션으로 처리될 수 있도록 부탁드립니다. 포지션 청산은 다른 전략 미결제가 있으니 case by case 청산입니다. **************************************************************************** var ID, num; var Entry, Code; var Xvol; var HasExited; // 청산 후 재진입을 방지하는 변수 function Main_OnStart() { Main.MessageList("Start"); Main.SetTimer(1, 5000); // 기존 타이머 설정 (5초 간격) Main.SetTimer(2, 1000); // 15시 청산을 위한 타이머 설정 (1초 간격) Entry = 0; // 초기 Entry 값 설정 HasExited = false; // 초기 재진입 가능 상태 } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours() * 10000 + d.getMinutes() * 100 + d.getSeconds(); if (nEventID == 1) { if (!HasExited) { // 재진입 방지 조건 추가 if (HHMMSS >= 84500) { var CallPrice = Option1.GetCurrent(0, 0); var PutPrice = Option1.GetCurrent(1, 0); var CallAsk = Option1.GetAsk(Option1.GetATMCallRecent(0), 5); var PutAsk = Option1.GetAsk(Option1.GetATMPutRecent(0), 5); var absCall = Math.abs(CallPrice); var absPut = Math.abs(PutPrice); var sum = absCall + absPut; var diff = Math.abs(absCall - absPut); // 진입 조건 if (Entry == 0 && sum <= 5.00 && diff <= 2.50) { if (absCall <= absPut) { Entry = CallPrice; Code = Option1.GetATMCallRecent(0); ID = Account1.OrderBuy(Code, 1, CallAsk, 0); Xvol = 1; } else { Entry = PutPrice; Code = Option1.GetATMPutRecent(0); ID = Account1.OrderBuy(Code, 1, PutAsk, 0); Xvol = 1; } } // 익절/손절 조건 if (Entry > 0 && Xvol > 0) { var currentPrice = Option1.GetCurrent(Code); if (currentPrice >= Entry + 0.50 || currentPrice <= Entry - 0.50) { closePosition(); // 청산 후 매수 재진입 방지 HasExited = true; // 청산 후 재진입 방지 Main.KillTimer(1); // 타이머 1 종료 } } } } } if (nEventID == 2) { // 15시 청산 조건 if (HHMMSS >= 151000 && HHMMSS < 151500) { // 15시 15분에 청산 closePosition(); Main.KillTimer(2); // 타이머 2 종료 } } } function closePosition() { // 포지션 청산 if (Xvol > 0) { if (Code) { Account1.OrderSell(Code, Xvol, Option1.GetBid(Code, 5), 0); } } Entry = 0; // Entry 값 초기화 Code = null; // Code 초기화 Xvol = 0; // 수량 초기화 // HasExited = true; // 청산 후 재진입 방지 } function Main_OnOrderResponse(OrderResponse) { // 주문 응답 처리 if (OrderResponse.orderID == ID) { num = OrderResponse.orderNum; } }
프로필 이미지
좌오비우오비
2024-08-22
542
글번호 226084
답변완료

문의드립니다

안녕하세요 계좌잔고 에 있는데 중복매수되는걸 어떻게 해야하는지 문의드립니다 계좌에 잇다면 pass해야하는데 그걸 어떻게 넣어야 하는지 부탁드립니다 var 진입수량 = 2; var DH, DH1, DL, DL1; var BEID, BENM, SEID, SENM; var CC, C1; var T; function Main_OnStart() { Main.MessageList("Start"); T = 0; } function Main_OnU*dateMarket(sItemCode, lU*dateID) { if (lU*dateID == 20001) { C1 = CC; CC = MarketData1.current; Main.MessageList("Main_OnU*dateMarket", MarketData1.current); // 시초가 + 10틱 터치 if (T <= 0 && C1 > 0 && C1 < MarketData1.open + MarketData1.GetTickSize() * 10 && CC >= MarketData1.open + MarketData1.GetTickSize() * 10) { T = 1; BEID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 진입수량, MarketData1.current, 2); Main.MessageList("매수 진입 주문: " + MarketData1.current,+ MarkerDatal.open); } // 매수 후 손절, 익절, 미체결 셋팅 if (T == 1) { // 손절 셋팅 if (MarketData1.current <= MarketData1.open - MarketData1.GetTickSize() * 8) { 청산수량처리(BENM, 진입수량, "매수 포지션 손절"); T = 0; // 초기화 } // 익절 셋팅 else if (MarketData1.current >= MarketData1.open + MarketData1.GetTickSize() * 130) { 청산수량처리(BENM, 진입수량, "매수 포지션 익절"); T = 0; // 초기화 } } // 시초가 - 10틱 터치 if (T >= 0 && C1 > MarketData1.open - MarketData1.GetTickSize() * 10 && CC <= MarketData1.open - MarketData1.GetTickSize() * 10) { T = -1; SEID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 진입수량, MarketData1.current, 2); Main.MessageList("매도 진입 주문: " + MarketData1.current,+ MarkerDatal.open); } // 매도 후 손절, 익절, 미체결 셋팅 if (T == -1) { // 손절 셋팅 if (MarketData1.current >= MarketData1.open + MarketData1.GetTickSize() * 8) { 청산수량처리(SENM, 진입수량, "매도 포지션 손절"); T = 0; // 초기화 } // 익절 셋팅 else if (MarketData1.current <= MarketData1.open - MarketData1.GetTickSize() * 130) { 청산수량처리(SENM, 진입수량, "매도 포지션 익절"); T = 0; // 초기화 } } } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BEID) { BENM = OrderResponse.orderNum; } if (OrderResponse.orderID == SEID) { SENM = OrderResponse.orderNum; } } function 청산수량처리(orderNum, 수량, message) { Account1.SetUnfillOrderNumber(orderNum); var 청산수량 = 수량 - Account1.Unfill.count; if (Account1.Unfill.count > 0) { Account1.OrderCancel(orderNum); } if (청산수량 > 0) { if (T == 1) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 청산수량, MarketData1.current, 2); Main.MessageList("매수 포지션 청산: " + MarketData1.current + " (" + message + ")"); } else if (T == -1) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 청산수량, MarketData1.current, 2); Main.MessageList("매도 포지션 청산: " + MarketData1.current + " (" + message + ")"); } } } 이렇게 되있는데 어떤땐 정상적으로 2계약체결되고 어떤땐 4계약이 체결됩니다
프로필 이미지
1000djr
2024-08-16
503
글번호 226083
답변완료

문의 드립니다

안녕하세요! https://www.yesstock.com/Board/View.asp?db=board100070&Ext=0&startpage=1&pageno=1&num=4480&ref=4471&Sort=&KeyField=Content&KeyWord=%B0%FC%BD%C9%C1%BE%B8%F1&SystemName= 윗글을 보고 궁금한점이 생겨서 문의 드립니다. 링크된 문의 내용을 간략히 말하자면 관심종목을 감시해서 조건이 맞을때 자동 매수매도가 되냐는 질문이였는데요, 저도 비슷한 맥락의 스팟을 만들고 싶은데 궁금한부분이 있어서요. 예시로 작성해주신 가이드문에선 5초 간격으로 관심종목의 시세와 계좌를 감시해 조건문이 실행된다고 해주셨는데요. 5초인 이유가 있나요? 혹시 그보다 더 잦은 빈도수로 감시가 불가능하거나 그렇게하면 문제가 생길 수 있나요? 저는 1초나 그 이하로 감시를 했으면 하는데 이부분이 기술적으로 불가능한가요? 관심종목의 종목수 자체는 그렇게 까지 많지 않을거라서요... 배우기 시작한지 얼마 안되서 여쭤봅니다 도와주셔서 감사합니다!
프로필 이미지
제천지박령
2024-08-15
473
글번호 226082