커뮤니티

예스스팟 Q&A

답변완료

매도식 부탁드립니다.

1. 관심종목의 종목이 매수되면 감시시작 2. 매수 이후 최고 상승이 n% 미만일 경우 2-1. 현재가 < 매수후_최고가*[1 - (n/2)/100] ==> 잔고의 50% 매도 2-2. 현재가 < 매수가*[1 - n/100] ==> 전량 매도 3. 매수 이후 최고 상승이 n% ~ (2*n) % 일경우 3-1 현재가 < 매수후_최고가*[1 - n/100] ==> 잔고의 50% 매도 3-2 현재가 < 매수가*[1 - (n/2)/100] ==> 전량 매도 4. 매수 이후 최고 상승이 (2*n) % 이상일 경우 4-1 현재가 < 매수후_최고가*[1 - n/100] ==> 전량 매도 5. 2~4번과 상관없이 매수가대비 2%, 3%, 4% 상승시 최초 잔고의 15% 씩 매도 6. T1 시간이후 1번에서 감시한 종목의 미체결 매도 취소후 전량 시장가 매도 감사합니다.
프로필 이미지
cs아빠
2020-03-27
3930
글번호 225188
답변완료

예스스팟에서 파워종목 검색 질문

Main.ReqPowerSearch 위의 함수를 사용하여 파워종목 검색 기능을 사용하는데 결과 값이 60개만 나옵니다. 상위 60개만 전달되는게 맞나요? 검색후 거래대금 순서대로 결과 값을 받고자 합니다. (100개 검색되면 거래대금 순서로 정렬후 리턴) 검색 결과가 전부 전달되던지 아니면 파워종목 검색 기능에서 거래대금 순서로 정렬해서 넘기던지 하는 방법이 있나요? (지금 순위 검색기능으로는 불가능합니다.)
프로필 이미지
매너모드
2020-03-26
4003
글번호 225183
답변완료

질문드립니다.

스팟활용에 대해 질문드립니다. 1. 스팟에서의 자료요청은 API를 통해서 되는걸로 알고 있는데 어떠한 제약들이 있습니까. 15초 60회외에.. 2. 그리고 나열식으로 만들다 보니 랭귀지로 작성된 시스템식의 용량이 커서 실시간챠트에 적용시 시간이 많이 걸리고 장중에 과부하가 걸리는데... 코딩력이 부족하다보니 어떻게 해야될지 모르겠네요. 계산이나 명령을 최소화하는 방법이 있으면 번거롭더라도 간략히 설명좀 부탁드립니다. 3. 당일강제청산(StopEndOfDay),손절매,트레일링,최소가격.....이런 객체는 랭귀지처럼 가변적으로 적용이 안되나요..(조건별로 중복설정) 4. 현물시장데이터중 상승하락종목수와 등락율별종목수를 사용할수 있나요.. 5. 자바스크립트에서 사용가능한 명령문이나 코딩방법은 스팟에서 모두 활용가능한가요. 간단한 답변 부탁드립니다.
프로필 이미지
다낚아
2020-03-31
4060
글번호 225182

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

프로필 이미지
coralre2
2020-03-20
1
글번호 225179

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

프로필 이미지
jack112
2020-03-19
6
글번호 225178

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
4438
글번호 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
4026
글번호 225174

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

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