커뮤니티

금액 기준 수량

프로필 이미지
몬스터
2021-04-06 17:53:02
2975
글번호 225460
답변완료
외부입력변수 EntryVol에 기입한 금액에 따른 주식 수량(Vol)을 매수하는 식을 작성하였는데, 수량을 입력시키라는 에러 메시지와 함께 매수 주문이 안나가네요. 아래의 스팟 검토 부탁드립니다. var BL = [],req; var CT = [],MK = []; function Main_OnStart() { //처음 시작시 step은 0 step = 0; //시작시점의 보유종목수 var num = Account1.GetTheNumberOfBalances(); //보유종목이 1개 이상이면 보유종목의 종목코드를 BL변수에 순차적으로 저장 if (num > 0) { BL = []; for(var i = 0 ; i < num ; i++) { Account1.SetBalance(i); BL.push(Account1.Balance.code); } Main.MessageList("BL : ",BL); if (BL.length >= 1) { req = 0; var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); // 최대진입횟수 var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); Main.MessageList("차트객체요청 :",BL[req]); } } else //보유종목이 없으면 바로 1분 타이머 시작 { Main.MessageList("보유종목없음"); Main.SetTimer(1, 10000);//1번 타이머, 60초 } } function Main_OnRcvChartEx(ChartEx) { if (ChartEx.GetCode(1) == BL[req]) { Main.MessageList("차트객체생성 :",ChartEx.GetCode(1)); CT.push(ChartEx); Main.ReqMarketData(BL[req]); Main.MessageList("종목객체요청 :",BL[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == BL[req]) { Main.MessageList("종목객체생성 :",MarketData.code); MK.push(MarketData); req = req+1; if (req < BL.length) { var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); Main.MessageList("차트객체요청 :",BL[req]); } else { Main.SetTimer(1, 10000);//1번 타이머, 60초 Main.MessageList("보유종목차트생성완료",CT.length,MK.length); } } } function Main_OnTimer(nEventID) { if (nEventID == 1) { //타이머 종료 Main.KillTimer(1); Main.ReqPowerSearch("PSearch"); } } function Main_OnRcvItemList(aItemList, nCount) { //검색된 종목이 없으면 if (nCount == 0) { //타이머 다시 셋팅 Main.SetTimer(1, 100000);//1번 타이머, 60초 } //검색된 종목이 있으면 if (nCount >= 1) { //검색된 종목과 기존 만든 차트들의 종목코드를 비교해 //차트가 만들어 지지 않은 종목이면 BL변수에 종목코드 추가 BL = []; for(var i = 0 ; i < aItemList.length ; i++) { var add = true; for(var z = 0 ; z < CT.length ; z++) { if (aItemList[i] == CT[z].GetCode(1)) { add = false; break; } } if (add == true) { BL.push(aItemList[i]); } } Main.MessageList("BL : ",BL); //차트 생성해야할 종목이 있으면 차트요청 if (BL.length >= 1) { req = 0; //차트 요청 var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); } else //없으면 타이머 다시 셋팅 { Main.SetTimer(1, 100000);//1번 타이머, 60초 } } } //생성된 차트들에서 신호가 발생하면 function Main_OnRiseSignal(ChartEx, Signal) { //매수신호 발생 if (Signal.signalKind == 1) { //EntryVol 금액 시장가 매수 var Vol = Math.floor(EntryVol/Signal.price); Account1.OrderBuy(Signal.code, Vol,Signal.price,1); } //매수청산신호 발생 if (Signal.signalKind == 2) { //잔고셋팅 Account1.SetBalance(Signal.code,0); //보유수량이 있으면 if (Account1.Balance.count > 0) { //전량 시장가 매도 Account1.OrderSell(Signal.code, Account1.Balance.count,Signal.price,1); } } }
답변 4
프로필 이미지

예스스탁 예스스탁 답변

2021-04-20 13:52:54

안녕하세요 예스스탁입니다. 해당 부분은 외부입력변수 EntryVol에 지정하신 값을 확인하셔야 합니다. Floor(EntryVol/Signal.Price)는 금액/가격에서 정수만 취하는 것으로 1미만이면 수량이 0이되게 됩니다. 즐거운 하루되세요 > 몬스터 님이 쓴 글입니다. > 제목 : 금액 기준 수량 > 외부입력변수 EntryVol에 기입한 금액에 따른 주식 수량(Vol)을 매수하는 식을 작성하였는데, 수량을 입력시키라는 에러 메시지와 함께 매수 주문이 안나가네요. 아래의 스팟 검토 부탁드립니다. var BL = [],req; var CT = [],MK = []; function Main_OnStart() { //처음 시작시 step은 0 step = 0; //시작시점의 보유종목수 var num = Account1.GetTheNumberOfBalances(); //보유종목이 1개 이상이면 보유종목의 종목코드를 BL변수에 순차적으로 저장 if (num > 0) { BL = []; for(var i = 0 ; i < num ; i++) { Account1.SetBalance(i); BL.push(Account1.Balance.code); } Main.MessageList("BL : ",BL); if (BL.length >= 1) { req = 0; var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); // 최대진입횟수 var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); Main.MessageList("차트객체요청 :",BL[req]); } } else //보유종목이 없으면 바로 1분 타이머 시작 { Main.MessageList("보유종목없음"); Main.SetTimer(1, 10000);//1번 타이머, 60초 } } function Main_OnRcvChartEx(ChartEx) { if (ChartEx.GetCode(1) == BL[req]) { Main.MessageList("차트객체생성 :",ChartEx.GetCode(1)); CT.push(ChartEx); Main.ReqMarketData(BL[req]); Main.MessageList("종목객체요청 :",BL[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == BL[req]) { Main.MessageList("종목객체생성 :",MarketData.code); MK.push(MarketData); req = req+1; if (req < BL.length) { var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); Main.MessageList("차트객체요청 :",BL[req]); } else { Main.SetTimer(1, 10000);//1번 타이머, 60초 Main.MessageList("보유종목차트생성완료",CT.length,MK.length); } } } function Main_OnTimer(nEventID) { if (nEventID == 1) { //타이머 종료 Main.KillTimer(1); Main.ReqPowerSearch("PSearch"); } } function Main_OnRcvItemList(aItemList, nCount) { //검색된 종목이 없으면 if (nCount == 0) { //타이머 다시 셋팅 Main.SetTimer(1, 100000);//1번 타이머, 60초 } //검색된 종목이 있으면 if (nCount >= 1) { //검색된 종목과 기존 만든 차트들의 종목코드를 비교해 //차트가 만들어 지지 않은 종목이면 BL변수에 종목코드 추가 BL = []; for(var i = 0 ; i < aItemList.length ; i++) { var add = true; for(var z = 0 ; z < CT.length ; z++) { if (aItemList[i] == CT[z].GetCode(1)) { add = false; break; } } if (add == true) { BL.push(aItemList[i]); } } Main.MessageList("BL : ",BL); //차트 생성해야할 종목이 있으면 차트요청 if (BL.length >= 1) { req = 0; //차트 요청 var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); } else //없으면 타이머 다시 셋팅 { Main.SetTimer(1, 100000);//1번 타이머, 60초 } } } //생성된 차트들에서 신호가 발생하면 function Main_OnRiseSignal(ChartEx, Signal) { //매수신호 발생 if (Signal.signalKind == 1) { //EntryVol 금액 시장가 매수 var Vol = Math.floor(EntryVol/Signal.price); Account1.OrderBuy(Signal.code, Vol,Signal.price,1); } //매수청산신호 발생 if (Signal.signalKind == 2) { //잔고셋팅 Account1.SetBalance(Signal.code,0); //보유수량이 있으면 if (Account1.Balance.count > 0) { //전량 시장가 매도 Account1.OrderSell(Signal.code, Account1.Balance.count,Signal.price,1); } } }
프로필 이미지

몬스터

2021-04-21 15:24:10

스팟에서 현물 종목검색 기능사용에 있어서 하나만 더 질문드립니다. 9시 이전 예스트레이더를 가동시키면 전일 검색된 종목을 스팟이 차트를 생성시키고 가동시키는데, 이럴 경우 9시 이후 장이 개시되면서 검색된 새로운 종목들도 추가가 되는 것인지요? 이 부분에 대한 예스트레이더의 동작 개념이 어떻게 되는지 정확히 알 수가 없어서 혼란스럽습니다. 현재는 수동으로 9시 장개시이후 다시 스팟을 가동시켜 9시 이후 검색된 금일기준 종목에 대한 자동 매매를 진행하고 있습니다. 예스스팟의 아래와 같은 수식에서 전일 검색 종목을 9시에 삭제하고 금일 검색분부터 적용시키는 수식을 추가해 주실수 있으실런지요? 혹은 파워종목검색에서 금일 장개시전 전일 검색 종목들은 없애주는 리셋 기능을 넣어주시면 어떠실런지요? 감사합니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 금액 기준 수량 > 안녕하세요 예스스탁입니다. 해당 부분은 외부입력변수 EntryVol에 지정하신 값을 확인하셔야 합니다. Floor(EntryVol/Signal.Price)는 금액/가격에서 정수만 취하는 것으로 1미만이면 수량이 0이되게 됩니다. 즐거운 하루되세요 > 몬스터 님이 쓴 글입니다. > 제목 : 금액 기준 수량 > 외부입력변수 EntryVol에 기입한 금액에 따른 주식 수량(Vol)을 매수하는 식을 작성하였는데, 수량을 입력시키라는 에러 메시지와 함께 매수 주문이 안나가네요. 아래의 스팟 검토 부탁드립니다. var BL = [],req; var CT = [],MK = []; function Main_OnStart() { //처음 시작시 step은 0 step = 0; //시작시점의 보유종목수 var num = Account1.GetTheNumberOfBalances(); //보유종목이 1개 이상이면 보유종목의 종목코드를 BL변수에 순차적으로 저장 if (num > 0) { BL = []; for(var i = 0 ; i < num ; i++) { Account1.SetBalance(i); BL.push(Account1.Balance.code); } Main.MessageList("BL : ",BL); if (BL.length >= 1) { req = 0; var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); // 최대진입횟수 var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); Main.MessageList("차트객체요청 :",BL[req]); } } else //보유종목이 없으면 바로 1분 타이머 시작 { Main.MessageList("보유종목없음"); Main.SetTimer(1, 10000);//1번 타이머, 60초 } } function Main_OnRcvChartEx(ChartEx) { if (ChartEx.GetCode(1) == BL[req]) { Main.MessageList("차트객체생성 :",ChartEx.GetCode(1)); CT.push(ChartEx); Main.ReqMarketData(BL[req]); Main.MessageList("종목객체요청 :",BL[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == BL[req]) { Main.MessageList("종목객체생성 :",MarketData.code); MK.push(MarketData); req = req+1; if (req < BL.length) { var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); Main.MessageList("차트객체요청 :",BL[req]); } else { Main.SetTimer(1, 10000);//1번 타이머, 60초 Main.MessageList("보유종목차트생성완료",CT.length,MK.length); } } } function Main_OnTimer(nEventID) { if (nEventID == 1) { //타이머 종료 Main.KillTimer(1); Main.ReqPowerSearch("PSearch"); } } function Main_OnRcvItemList(aItemList, nCount) { //검색된 종목이 없으면 if (nCount == 0) { //타이머 다시 셋팅 Main.SetTimer(1, 100000);//1번 타이머, 60초 } //검색된 종목이 있으면 if (nCount >= 1) { //검색된 종목과 기존 만든 차트들의 종목코드를 비교해 //차트가 만들어 지지 않은 종목이면 BL변수에 종목코드 추가 BL = []; for(var i = 0 ; i < aItemList.length ; i++) { var add = true; for(var z = 0 ; z < CT.length ; z++) { if (aItemList[i] == CT[z].GetCode(1)) { add = false; break; } } if (add == true) { BL.push(aItemList[i]); } } Main.MessageList("BL : ",BL); //차트 생성해야할 종목이 있으면 차트요청 if (BL.length >= 1) { req = 0; //차트 요청 var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); } else //없으면 타이머 다시 셋팅 { Main.SetTimer(1, 100000);//1번 타이머, 60초 } } } //생성된 차트들에서 신호가 발생하면 function Main_OnRiseSignal(ChartEx, Signal) { //매수신호 발생 if (Signal.signalKind == 1) { //EntryVol 금액 시장가 매수 var Vol = Math.floor(EntryVol/Signal.price); Account1.OrderBuy(Signal.code, Vol,Signal.price,1); } //매수청산신호 발생 if (Signal.signalKind == 2) { //잔고셋팅 Account1.SetBalance(Signal.code,0); //보유수량이 있으면 if (Account1.Balance.count > 0) { //전량 시장가 매도 Account1.OrderSell(Signal.code, Account1.Balance.count,Signal.price,1); } } }
프로필 이미지

예스스탁 예스스탁 답변

2021-04-22 15:48:42

안녕하세요 예스스탁입니다. 장전에 검색되면 전일데이타로 종목검색이 됩니다. 문의하신 내용은 사용하시는 전략에서 장전에 적용되더라도 종목검색은 9시 이후에 동작하게 하시면 됩니다. var BL = [],req; var CT = [],MK = []; function Main_OnStart() { //처음 시작시 step은 0 step = 0; //시작시점의 보유종목수 var num = Account1.GetTheNumberOfBalances(); //보유종목이 1개 이상이면 보유종목의 종목코드를 BL변수에 순차적으로 저장 if (num > 0) { BL = []; for(var i = 0 ; i < num ; i++) { Account1.SetBalance(i); BL.push(Account1.Balance.code); } Main.MessageList("BL : ",BL); if (BL.length >= 1) { req = 0; var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); // 최대진입횟수 var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); Main.MessageList("차트객체요청 :",BL[req]); } } else //보유종목이 없으면 바로 1분 타이머 시작 { Main.MessageList("보유종목없음"); Main.SetTimer(1, 10000);//1번 타이머, 10초 } } function Main_OnRcvChartEx(ChartEx) { if (ChartEx.GetCode(1) == BL[req]) { Main.MessageList("차트객체생성 :",ChartEx.GetCode(1)); CT.push(ChartEx); Main.ReqMarketData(BL[req]); Main.MessageList("종목객체요청 :",BL[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == BL[req]) { Main.MessageList("종목객체생성 :",MarketData.code); MK.push(MarketData); req = req+1; if (req < BL.length) { var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); Main.MessageList("차트객체요청 :",BL[req]); } else { Main.SetTimer(1, 60000);//1번 타이머, 60초 Main.MessageList("보유종목차트생성완료",CT.length,MK.length); } } } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 ) { //타이머 종료 Main.KillTimer(1); if (HHMMSS >= 90000) Main.ReqPowerSearch("PSearch"); else Main.SetTimer(1, 10000);//1번 타이머, 10초 } } function Main_OnRcvItemList(aItemList, nCount) { //검색된 종목이 없으면 if (nCount == 0) { //타이머 다시 셋팅 Main.SetTimer(1, 60000);//1번 타이머, 60초 } //검색된 종목이 있으면 if (nCount >= 1) { //검색된 종목과 기존 만든 차트들의 종목코드를 비교해 //차트가 만들어 지지 않은 종목이면 BL변수에 종목코드 추가 BL = []; for(var i = 0 ; i < aItemList.length ; i++) { var add = true; for(var z = 0 ; z < CT.length ; z++) { if (aItemList[i] == CT[z].GetCode(1)) { add = false; break; } } if (add == true) { BL.push(aItemList[i]); } } Main.MessageList("BL : ",BL); //차트 생성해야할 종목이 있으면 차트요청 if (BL.length >= 1) { req = 0; //차트 요청 var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); } else //없으면 타이머 다시 셋팅 { Main.SetTimer(1, 100000);//1번 타이머, 60초 } } } //생성된 차트들에서 신호가 발생하면 function Main_OnRiseSignal(ChartEx, Signal) { //매수신호 발생 if (Signal.signalKind == 1) { //EntryVol 금액 시장가 매수 var Vol = Math.floor(EntryVol/Signal.price); Account1.OrderBuy(Signal.code, Vol,Signal.price,1); } //매수청산신호 발생 if (Signal.signalKind == 2) { //잔고셋팅 Account1.SetBalance(Signal.code,0); //보유수량이 있으면 if (Account1.Balance.count > 0) { //전량 시장가 매도 Account1.OrderSell(Signal.code, Account1.Balance.count,Signal.price,1); } } } 즐거운 하루되세요 > 몬스터 님이 쓴 글입니다. > 제목 : Re : Re : 금액 기준 수량 : 종목검색관련 질문 > 스팟에서 현물 종목검색 기능사용에 있어서 하나만 더 질문드립니다. 9시 이전 예스트레이더를 가동시키면 전일 검색된 종목을 스팟이 차트를 생성시키고 가동시키는데, 이럴 경우 9시 이후 장이 개시되면서 검색된 새로운 종목들도 추가가 되는 것인지요? 이 부분에 대한 예스트레이더의 동작 개념이 어떻게 되는지 정확히 알 수가 없어서 혼란스럽습니다. 현재는 수동으로 9시 장개시이후 다시 스팟을 가동시켜 9시 이후 검색된 금일기준 종목에 대한 자동 매매를 진행하고 있습니다. 예스스팟의 아래와 같은 수식에서 전일 검색 종목을 9시에 삭제하고 금일 검색분부터 적용시키는 수식을 추가해 주실수 있으실런지요? 혹은 파워종목검색에서 금일 장개시전 전일 검색 종목들은 없애주는 리셋 기능을 넣어주시면 어떠실런지요? 감사합니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 금액 기준 수량 > 안녕하세요 예스스탁입니다. 해당 부분은 외부입력변수 EntryVol에 지정하신 값을 확인하셔야 합니다. Floor(EntryVol/Signal.Price)는 금액/가격에서 정수만 취하는 것으로 1미만이면 수량이 0이되게 됩니다. 즐거운 하루되세요 > 몬스터 님이 쓴 글입니다. > 제목 : 금액 기준 수량 > 외부입력변수 EntryVol에 기입한 금액에 따른 주식 수량(Vol)을 매수하는 식을 작성하였는데, 수량을 입력시키라는 에러 메시지와 함께 매수 주문이 안나가네요. 아래의 스팟 검토 부탁드립니다. var BL = [],req; var CT = [],MK = []; function Main_OnStart() { //처음 시작시 step은 0 step = 0; //시작시점의 보유종목수 var num = Account1.GetTheNumberOfBalances(); //보유종목이 1개 이상이면 보유종목의 종목코드를 BL변수에 순차적으로 저장 if (num > 0) { BL = []; for(var i = 0 ; i < num ; i++) { Account1.SetBalance(i); BL.push(Account1.Balance.code); } Main.MessageList("BL : ",BL); if (BL.length >= 1) { req = 0; var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); // 최대진입횟수 var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); Main.MessageList("차트객체요청 :",BL[req]); } } else //보유종목이 없으면 바로 1분 타이머 시작 { Main.MessageList("보유종목없음"); Main.SetTimer(1, 10000);//1번 타이머, 60초 } } function Main_OnRcvChartEx(ChartEx) { if (ChartEx.GetCode(1) == BL[req]) { Main.MessageList("차트객체생성 :",ChartEx.GetCode(1)); CT.push(ChartEx); Main.ReqMarketData(BL[req]); Main.MessageList("종목객체요청 :",BL[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == BL[req]) { Main.MessageList("종목객체생성 :",MarketData.code); MK.push(MarketData); req = req+1; if (req < BL.length) { var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); Main.MessageList("차트객체요청 :",BL[req]); } else { Main.SetTimer(1, 10000);//1번 타이머, 60초 Main.MessageList("보유종목차트생성완료",CT.length,MK.length); } } } function Main_OnTimer(nEventID) { if (nEventID == 1) { //타이머 종료 Main.KillTimer(1); Main.ReqPowerSearch("PSearch"); } } function Main_OnRcvItemList(aItemList, nCount) { //검색된 종목이 없으면 if (nCount == 0) { //타이머 다시 셋팅 Main.SetTimer(1, 100000);//1번 타이머, 60초 } //검색된 종목이 있으면 if (nCount >= 1) { //검색된 종목과 기존 만든 차트들의 종목코드를 비교해 //차트가 만들어 지지 않은 종목이면 BL변수에 종목코드 추가 BL = []; for(var i = 0 ; i < aItemList.length ; i++) { var add = true; for(var z = 0 ; z < CT.length ; z++) { if (aItemList[i] == CT[z].GetCode(1)) { add = false; break; } } if (add == true) { BL.push(aItemList[i]); } } Main.MessageList("BL : ",BL); //차트 생성해야할 종목이 있으면 차트요청 if (BL.length >= 1) { req = 0; //차트 요청 var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); } else //없으면 타이머 다시 셋팅 { Main.SetTimer(1, 100000);//1번 타이머, 60초 } } } //생성된 차트들에서 신호가 발생하면 function Main_OnRiseSignal(ChartEx, Signal) { //매수신호 발생 if (Signal.signalKind == 1) { //EntryVol 금액 시장가 매수 var Vol = Math.floor(EntryVol/Signal.price); Account1.OrderBuy(Signal.code, Vol,Signal.price,1); } //매수청산신호 발생 if (Signal.signalKind == 2) { //잔고셋팅 Account1.SetBalance(Signal.code,0); //보유수량이 있으면 if (Account1.Balance.count > 0) { //전량 시장가 매도 Account1.OrderSell(Signal.code, Account1.Balance.count,Signal.price,1); } } }
프로필 이미지

몬스터

2021-04-26 09:07:57

8시 반에 예스트레이더 재접속하고 스팟까지 켜진 상태에서 9시이후에 스팟이 PSearch에서 검색된 종목을 가져오지 못하고 있습니다. 마지막으로 확인 한번 부탁드립니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : Re : Re : 금액 기준 수량 : 종목검색관련 질문 > 안녕하세요 예스스탁입니다. 장전에 검색되면 전일데이타로 종목검색이 됩니다. 문의하신 내용은 사용하시는 전략에서 장전에 적용되더라도 종목검색은 9시 이후에 동작하게 하시면 됩니다. var BL = [],req; var CT = [],MK = []; function Main_OnStart() { //처음 시작시 step은 0 step = 0; //시작시점의 보유종목수 var num = Account1.GetTheNumberOfBalances(); //보유종목이 1개 이상이면 보유종목의 종목코드를 BL변수에 순차적으로 저장 if (num > 0) { BL = []; for(var i = 0 ; i < num ; i++) { Account1.SetBalance(i); BL.push(Account1.Balance.code); } Main.MessageList("BL : ",BL); if (BL.length >= 1) { req = 0; var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); // 최대진입횟수 var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); Main.MessageList("차트객체요청 :",BL[req]); } } else //보유종목이 없으면 바로 1분 타이머 시작 { Main.MessageList("보유종목없음"); Main.SetTimer(1, 10000);//1번 타이머, 10초 } } function Main_OnRcvChartEx(ChartEx) { if (ChartEx.GetCode(1) == BL[req]) { Main.MessageList("차트객체생성 :",ChartEx.GetCode(1)); CT.push(ChartEx); Main.ReqMarketData(BL[req]); Main.MessageList("종목객체요청 :",BL[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == BL[req]) { Main.MessageList("종목객체생성 :",MarketData.code); MK.push(MarketData); req = req+1; if (req < BL.length) { var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); Main.MessageList("차트객체요청 :",BL[req]); } else { Main.SetTimer(1, 60000);//1번 타이머, 60초 Main.MessageList("보유종목차트생성완료",CT.length,MK.length); } } } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 ) { //타이머 종료 Main.KillTimer(1); if (HHMMSS >= 90000) Main.ReqPowerSearch("PSearch"); else Main.SetTimer(1, 10000);//1번 타이머, 10초 } } function Main_OnRcvItemList(aItemList, nCount) { //검색된 종목이 없으면 if (nCount == 0) { //타이머 다시 셋팅 Main.SetTimer(1, 60000);//1번 타이머, 60초 } //검색된 종목이 있으면 if (nCount >= 1) { //검색된 종목과 기존 만든 차트들의 종목코드를 비교해 //차트가 만들어 지지 않은 종목이면 BL변수에 종목코드 추가 BL = []; for(var i = 0 ; i < aItemList.length ; i++) { var add = true; for(var z = 0 ; z < CT.length ; z++) { if (aItemList[i] == CT[z].GetCode(1)) { add = false; break; } } if (add == true) { BL.push(aItemList[i]); } } Main.MessageList("BL : ",BL); //차트 생성해야할 종목이 있으면 차트요청 if (BL.length >= 1) { req = 0; //차트 요청 var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); } else //없으면 타이머 다시 셋팅 { Main.SetTimer(1, 100000);//1번 타이머, 60초 } } } //생성된 차트들에서 신호가 발생하면 function Main_OnRiseSignal(ChartEx, Signal) { //매수신호 발생 if (Signal.signalKind == 1) { //EntryVol 금액 시장가 매수 var Vol = Math.floor(EntryVol/Signal.price); Account1.OrderBuy(Signal.code, Vol,Signal.price,1); } //매수청산신호 발생 if (Signal.signalKind == 2) { //잔고셋팅 Account1.SetBalance(Signal.code,0); //보유수량이 있으면 if (Account1.Balance.count > 0) { //전량 시장가 매도 Account1.OrderSell(Signal.code, Account1.Balance.count,Signal.price,1); } } } 즐거운 하루되세요 > 몬스터 님이 쓴 글입니다. > 제목 : Re : Re : 금액 기준 수량 : 종목검색관련 질문 > 스팟에서 현물 종목검색 기능사용에 있어서 하나만 더 질문드립니다. 9시 이전 예스트레이더를 가동시키면 전일 검색된 종목을 스팟이 차트를 생성시키고 가동시키는데, 이럴 경우 9시 이후 장이 개시되면서 검색된 새로운 종목들도 추가가 되는 것인지요? 이 부분에 대한 예스트레이더의 동작 개념이 어떻게 되는지 정확히 알 수가 없어서 혼란스럽습니다. 현재는 수동으로 9시 장개시이후 다시 스팟을 가동시켜 9시 이후 검색된 금일기준 종목에 대한 자동 매매를 진행하고 있습니다. 예스스팟의 아래와 같은 수식에서 전일 검색 종목을 9시에 삭제하고 금일 검색분부터 적용시키는 수식을 추가해 주실수 있으실런지요? 혹은 파워종목검색에서 금일 장개시전 전일 검색 종목들은 없애주는 리셋 기능을 넣어주시면 어떠실런지요? 감사합니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 금액 기준 수량 > 안녕하세요 예스스탁입니다. 해당 부분은 외부입력변수 EntryVol에 지정하신 값을 확인하셔야 합니다. Floor(EntryVol/Signal.Price)는 금액/가격에서 정수만 취하는 것으로 1미만이면 수량이 0이되게 됩니다. 즐거운 하루되세요 > 몬스터 님이 쓴 글입니다. > 제목 : 금액 기준 수량 > 외부입력변수 EntryVol에 기입한 금액에 따른 주식 수량(Vol)을 매수하는 식을 작성하였는데, 수량을 입력시키라는 에러 메시지와 함께 매수 주문이 안나가네요. 아래의 스팟 검토 부탁드립니다. var BL = [],req; var CT = [],MK = []; function Main_OnStart() { //처음 시작시 step은 0 step = 0; //시작시점의 보유종목수 var num = Account1.GetTheNumberOfBalances(); //보유종목이 1개 이상이면 보유종목의 종목코드를 BL변수에 순차적으로 저장 if (num > 0) { BL = []; for(var i = 0 ; i < num ; i++) { Account1.SetBalance(i); BL.push(Account1.Balance.code); } Main.MessageList("BL : ",BL); if (BL.length >= 1) { req = 0; var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); // 최대진입횟수 var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); Main.MessageList("차트객체요청 :",BL[req]); } } else //보유종목이 없으면 바로 1분 타이머 시작 { Main.MessageList("보유종목없음"); Main.SetTimer(1, 10000);//1번 타이머, 60초 } } function Main_OnRcvChartEx(ChartEx) { if (ChartEx.GetCode(1) == BL[req]) { Main.MessageList("차트객체생성 :",ChartEx.GetCode(1)); CT.push(ChartEx); Main.ReqMarketData(BL[req]); Main.MessageList("종목객체요청 :",BL[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == BL[req]) { Main.MessageList("종목객체생성 :",MarketData.code); MK.push(MarketData); req = req+1; if (req < BL.length) { var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); Main.MessageList("차트객체요청 :",BL[req]); } else { Main.SetTimer(1, 10000);//1번 타이머, 60초 Main.MessageList("보유종목차트생성완료",CT.length,MK.length); } } } function Main_OnTimer(nEventID) { if (nEventID == 1) { //타이머 종료 Main.KillTimer(1); Main.ReqPowerSearch("PSearch"); } } function Main_OnRcvItemList(aItemList, nCount) { //검색된 종목이 없으면 if (nCount == 0) { //타이머 다시 셋팅 Main.SetTimer(1, 100000);//1번 타이머, 60초 } //검색된 종목이 있으면 if (nCount >= 1) { //검색된 종목과 기존 만든 차트들의 종목코드를 비교해 //차트가 만들어 지지 않은 종목이면 BL변수에 종목코드 추가 BL = []; for(var i = 0 ; i < aItemList.length ; i++) { var add = true; for(var z = 0 ; z < CT.length ; z++) { if (aItemList[i] == CT[z].GetCode(1)) { add = false; break; } } if (add == true) { BL.push(aItemList[i]); } } Main.MessageList("BL : ",BL); //차트 생성해야할 종목이 있으면 차트요청 if (BL.length >= 1) { req = 0; //차트 요청 var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); } else //없으면 타이머 다시 셋팅 { Main.SetTimer(1, 100000);//1번 타이머, 60초 } } } //생성된 차트들에서 신호가 발생하면 function Main_OnRiseSignal(ChartEx, Signal) { //매수신호 발생 if (Signal.signalKind == 1) { //EntryVol 금액 시장가 매수 var Vol = Math.floor(EntryVol/Signal.price); Account1.OrderBuy(Signal.code, Vol,Signal.price,1); } //매수청산신호 발생 if (Signal.signalKind == 2) { //잔고셋팅 Account1.SetBalance(Signal.code,0); //보유수량이 있으면 if (Account1.Balance.count > 0) { //전량 시장가 매도 Account1.OrderSell(Signal.code, Account1.Balance.count,Signal.price,1); } } }