커뮤니티

예스스팟 Q&A

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

프로필 이미지
cs아빠
2020-03-19
9
글번호 225177

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

프로필 이미지
coralre2
2020-03-19
0
글번호 225176
답변완료

질문

이전에 게시된 내용으로 공부하고 있습니다. 아래코드로 실험을 해보면 매수가 1백만원 이상으로 진행되는 것 같습니다. 첨부 화면2에 보시면 계속해서 동일 종목을 제시한 금액보다 많이 반복하여 매수하는 것 같습니다. 100만원까지만 매수할 수 있도록 정정하려면 어떻게 하면 될까요?? 항상 감사합니다. var BL = []; var MK = []; var ID = []; var Num = []; var Fill = []; var req,MKreq; var n1 = 60;//60초 var n2 = 5;//% var mm = 1000000;//매수금액 var n3 = 30;//30종목 var run; function Main_OnStart() { req = 0; CTreq = 0; MKreq = 0; Main.SetTimer(1, n1*1000); fillcnt = 0; run= true; } function Main_OnTimer(nEventID) { if (nEventID == 1 && run == true) { //타이머 종료 Main.KillTimer(1); Main.MessageList("OnTimer --> ReqPowerSearch"); Main.ReqPowerSearch("test이평1"); } } function Main_OnRcvItemList(aItemList, nCount) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); Main.MessageList("Main_OnRcvItemList : ",nCount); if ( run == true) { if (nCount <= 0) //검색된 종목이 없으면 { //타이머 다시 셋팅 Main.SetTimer(1, n1*1000); } else { BL = []; if (MK.length == 0) { BL = aItemList; Main.MessageList("BL:",BL); } else { for(var a = 0 ; a < aItemList.length ; a++) { var add = true; for(var b = 0 ; b < MK.length ; b++) { if (aItemList[a] == MK[b].code) { add = false; } } if (add == true) { BL.push(aItemList[a]); } } Main.MessageList("BL:",BL); } Main.MessageList("시간",HHMMSS,"BL : ",BL.length); if (BL.length > 0) { //차트 요청 req = 0; Main.ReqMarketData(BL[req]); } else //없으면 타이머 다시 셋팅 { Main.SetTimer(1, n1*1000);//1번 타이머, 60초 } } } } function Main_OnRcvMarketData(MarketData) { if (run == true) { if (MarketData.code == BL[req]) { MK[MKreq] = MarketData; ID[MKreq] = 0; Num[MKreq] = 0; Fill[MKreq] = 0; Main.MessageList("RcvMarket : ",req,MK[MKreq].code); MKreq = MKreq+1; req = req+1; if (req < BL.length) { Main.MessageList("ReqMarket : ",req,BL[req]); Main.ReqMarketData(BL[req]); } else { Main.MessageList("종목객체요청완료"); Main.SetTimer(1, n1*1000);//1번 타이머, 60초 } } } } function Main_OnU*pdateMarket(sItemCode, lU*pdateID)//*제거 { if (lU*pdateID == 20001)//*제거 { for(var i = 0 ; i < MK.length ; i++) { if (sItemCode == MK[i].code && ID[i] == 0 && MK[i].current <= MK[i].open*(1+n2/100))// 5%이상으로 정정 { var vol = Math.floor(mm/MK[i].current); ID[i] = Act1.OrderBuy(MK[i].code,vol,MK[i].current, 0); } } } } function Main_OnOrderResponse(OrderResponse) { for(var i = 0 ; i < ID.length ; i++) { if (OrderResponse.orderID == ID[i]) { Num[i] = OrderResponse.orderNum; } } } function Main_OnNotifyFill(NotifyFill) { for(var i = 0 ; i < Num.length ; i++) { if (Fill[i] == 0 && NotifyFill.orderNum == Num[i]) { Fill[i] = 1; FillCnt = FillCnt+1; if (Fillcnt == n3) { run = false; } } } if (run == false) { //타이머 종료 Main.KillTimer(1); var nufill = Account1.GetTheNumberOfUnfills() for(var i = 0 ; i < Num.length ; i++) { Act1.SetUnfill(Num[i]); if (Act1.Unfill.count > 0 && Fill[i] == 0) { Act1.OrderCancel(Num[i]); } } } }
프로필 이미지
짱짱해야지
2020-03-17
4480
글번호 225175
답변완료

검색식 새 종목에 대한 매매

1. 2분간격으로 사용자 종목검색을 지속적으로 수행 2. 새로 검색된 종목에 대해 차트 생성, 기존 검색된 차트는 유지 3. 종목검색에서 새로 파악된 종목을 종목차트로 시스템 적용 4. 생성된 차트에 시스템 적용 5. 차트 생성이 50개가 되면 새 종목 추가 완료 아래 내용은 다른분이 이전에 질문한 답변입니다. 여기에서 파워종목검색이 2분간격시간에 따라 추가되는 종목에 대한 추가 매수는 어떻게 하면 좋을까요? var ItemList; var Count; var ReqCount; function Main_OnStart() { Main.MessageLog("스팟시작"); Main.MessageLog("종목검색시작"); Main.ReqPowerSearch("전략1"); } function Main_OnRcvItemList(aItemList, nCount) { ItemList = aItemList; Count = nCount; Main.SetTimer(1, 1000); ReqCount = 0; } function Main_OnTimer(nEventID) { if (nEventID == 1) { var StopSet = new SystemStopInfo(new StopLoss(4, CALCMETHOD_PERCENT, 0xFFDA93), new StopTrailing(2, 5, CALCMETHOD_PERCENT, 0), //new StopProfitTarget(10, CALCMETHOD_PERCENT, 0xFFDA93), //new StopInactivity(0.5, 6, CALCMETHOD_PERCENT, 0xFFDA93), new StopEndOfDay(151500)); var ChartSet = new ReqChartItem(ItemList[ReqCount],3,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,StopSet); var SystemSet = new SystemInfo("10전략1", YL_TYPE_NORMAL, null, null, null); Main.ReqChartEx(ChartSet,SystemSet); Main.MessageLog("확장차트생성_"+ItemList[ReqCount]); ReqCount = ReqCount+1; if (ReqCount == Count) { Main.KillTimer(1); Main.MessageLog("종목검색완료"); } } } //신호발생 function Main_OnRiseSignal(ChartEx, Signal) { //신호발생 종목에 대해 잔고셋팅 Account1.SetBalance(Main.GetOrderCode(Signal.code),0); //매수신호이고 잔고가 없을때만 매수 if (Signal.signalKind == 1 && Account1.Balance.count == 0) { Account1.OrderBuy(Main.GetOrderCode(Signal.code),Math.floor(100000/ChartEx.GetClose(1,0)),0,1); Main.MessageLog("매수주문"); } if (Signal.signalKind == 2) { //전체미체결주문 갯수 var num = Account1.GetTheNumberOfUnfills(); //전체 미체결수 만큼 루프를 돌면서 for (var i = 0; i < num; i++) { //미체결을 하나씩 셋팅하고 Account1.SetUnfill(i); //미체결종목이 신호종목과 같고 미체결수량이 있으면 if (Account1.Unfill.code == Main.GetOrderCode(Signal.code) && Account1.Unfill.count > 0) { Account1.OrderCancel(Account1.Unfill.orderNum); } } //잔고수량만큼만 매도 if (Account1.Balance.count > 0) { Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,0,1); Main.MessageLog("매도주문"); } } }
프로필 이미지
짱짱해야지
2020-03-10
4072
글번호 225174

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

프로필 이미지
kaka2020
2020-03-09
1
글번호 225173
답변완료

분할 매수 수식

안녕하세요? 항상 친절한 답변 감사드립니다. 다음 로직의 수식 부탁드립니다. 0. 선물데이트레이딩의 경우입니다. 1. 총 자금 10억원에서 출발하여 첫 번째 매매에서 자금의 17%를 베팅합니다. 2. 첫 번째 베팅에서 수익이 나면 초기 자금에 수익금을 더하고, 손실이 나면 초기자금에서 손실금을 뺍니다. 이것을 수정 총 자금으로 합니다. 3. 다음 베팅은 2.의 계산 결과에서 시작하여 재차 수정 총자금의 17%를 베팅합니다. 4. 다시 수익이 나면 수정 총자금에 수익금을 더하고, 손실이 나면 수정 총 자금에서 손실금을 뺍니다. 이것을 재 수정 총 자금으로 합니다. 5. 이 과정을 반복하여 수행합니다. 총자금이나 수정 총 자금은 별도의 항목으로 관리되거나 아니면 계좌의 정산금액으로 해도 좋을 것 같습니다. 감사합니다.
프로필 이미지
소총부대
2020-03-07
4095
글번호 225172
답변완료

잔고와 차트신호 간 연동

안녕하세요. 실거래 중에 발생한 경우때문에 요청드립니다. 미니나스닥 기준으로 2계약 증거금을 맞추고 나서 실거래 진행 중 유독 손실이 컸던 날에 매수 포지션에서 매도로 스위칭하는 신호가 떴음에도 달랑 몇 만원 차이로 주문금액이 부족하다는 아래와 같은 주문메시지가 뜨면서 매도 진입은 못하고 익절 청산신호에서 매수진입을 하는 바람에 손실이 더 커졌습니다. [전송오류] [G50306] 주문가능금액이 부족합니다. 실매매 중 증거금 부족으로 초래된 문제였으나 결국은 차트신호와 잔고 원장과의 연동이 되지 않은 상태에서 발생한 이슈이기도 합니다. 예스스팟에서 이 부분을 매꿔줘야 하는데 자바스크립트를 다뤄본 적이 없어 어떻게 연동을 시켜줘야 하는지 막막합니다. 차트신호와 잔고를 연동하는 스크립트가 필요한 상황이오니 작성을 해주시면 감사하겠습니다.
프로필 이미지
gap
2020-03-06
4111
글번호 225170
답변완료

예스스팟은 시뮬레이션이 안되나요?

예스트레이더에서는 전략을 과거 데이터로 백테스트하고, 결과를 분석할 수 있는데, 예스스팟은 안되는 건가요?
프로필 이미지
리버모어71
2020-03-05
3906
글번호 225169
답변완료

예수금조회가 잘 되지 않습니다.

YS이 시작되면.. function Main_OnStart() { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); Main.MessageLog(HHMMSS+": Main_OnStart 이벤트입니다"); Position = 0; // 포지션 없는 상태 // 잔고조회 하기 Ymoney = 0; // 자본금 초기화 Account1.Refresh(); // 계좌 가원장 동기화 완료후, Main_OnU*dateAccount 호출 위 Refresh가 시작되고 function Main_OnU*dateAccount(sAccntNum, sItemCode, lU*dateID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); Main.MessageLog(HHMMSS+": Main_OnU*dateAccount 이벤트입니다."); // 계좌잔고 조회, 첫 시작할때 if (lU*dateID == 30000 && Ymoney == 0) { Ymoney = Account1.GetBalanceETCinfo(0); // 계좌 예수금 저장 Main.MessageLog("예수금:"+Ymoney.toString().replace(/₩B(?=(₩d{3})+(?!₩d))/g, ",")); } } 계좌잔고 예수금을 찍게 되어있습니다. YS실행시 계좌잔고 표시까지 될때가 있고 되지 않을을때는 YS를 종류후 여러번 다시 시작해야 잔고조회가 정상적으로 됩니다. 해당 부분의 문제점을 확인 부탁드립니다.
프로필 이미지
2ndbus
2020-03-05
3827
글번호 225168

자동매매 주문오류에 대한 구분이 있을까요?

BuyID = Account1.OrderBuy(OrderCode, EntryCount,KQ150선물연결.Ask(3), 0); 로 금일 진입시 "주문상태"에 "오류발생" 이라고 표기되고 어떤 오류인지? 파악이 되지 않습니다. 이러한 경우 어떠한 오류인지 구분할수있는 방법이 있을까요?
프로필 이미지
2ndbus
2020-03-02
3780
글번호 225167