커뮤니티

문의드립니다.

프로필 이미지
TWIG
2014-09-21 16:08:13
1335
글번호 223172
답변완료
제가 프로그램사용법 Q&A에 문의를 했는데요, 답변이 예스스팟에서 구현 가능하다고 하네요, 예스스팟에서 어떻게 구현 가능한지 구체적인 수식이나 방법을 알고 싶습니다 -------------------------------------------------------------------------------------- 안녕하세요? 예스스탁입니다. 차트를 기반으로 하여 YesLanguage로 작성해서 매매하는 시스템트레이딩 기능에서는 문의하신 내용을 구현하지 못합니다. 하지만 예스트레이더의 기능 중 차트 기반이 아닌 확장된 시스템 트레이딩 형태인 YesSpot기능을 이용하시면 문의하신 기능도 구현하실 수 있습니다. 감사합니다. > TWIG 님이 쓴 글입니다. 안녕하세요, 문의드릴께 있어서 글 남깁니다. 보통 시스템 트레이딩하면 차트를 바탕으로 전략을 구성하는데요, 차트가 아닌 평가금액이나 계좌 잔고를 기준으로 시스템을 구성하는것이 가능한지요. 예를 들어 평가금액이 얼마이상이 되면 몇%자동매도 되고 매도 후 평가금액이 얼마 이하가 되면 다시 몇%매수되고 하는 식으로요
답변 4
프로필 이미지

예스스탁 예스스탁 답변

2014-10-16 19:39:21

안녕하세요 예스스탁입니다. 답변이 늦어 죄송합니다. 식의 주요 흐름은 아래와 같습니다. 스팟이 시작하면 지정된 계좌에서 보유중인 잔고들 확인해서 잔고가 있으면 해당 잔고에 대해 종목코드 및 평가금액과 수량단위 확인을 위해 종목객체를 모두 생성합니다. 종목객체가 모두 생성이 되면 5초단위로 잔고의 평가금액을 파악하여 이전저장한 평가금액대비 20% 상승하면 잔고수량의 20%를 매도 주문을 내고 20% 하락하면 잔고수량으 20%만큼 매수주문을 내게 됩니다. 각 매수주문과 매도주문을 낼때 현재가에서 수량차이만큼을 가감해서 평가금액을 산정해 새로 저장합니다. 스크립트 객체에는 계좌객체만 설정하시면 됩니다. 계좌객체 - 객체명 Accoun1 예스스팟에 대한 수식답변은 가이드 정도입니다. 수식 작성의 흐름의 이해하시는 용도로 사용하시고 아래 수식 내용 참고하셔서 수정보완해 사용하시기 바랍니다. var Start; var Bnum; var Tcnt; var Rcv; var assessed = []; var Bcount = []; var Code = []; var MKD = []; var Pst = []; function Main_OnStart() { Bnum = Account1.GetTheNumberOfBalances(); if (Bnum >= 1) { Account1.SetBalanceIndex(0); Main.ReqMarketData(Account1.Balance.code,0,0); Tcnt = 0; Code[Tcnt] = Account1.Balance.code; assessed[Tcnt] = Account1.Balance.current* Account1.Balance.count; Pst[Tcnt] = 0; Main.SetTimer(1, 1000); Main.MessageList(Code[Tcnt],assessed[Tcnt],Bcount[Tcnt]) } Rcv = 0; } function Main_OnTimer(nEventID) { if (nEventID == 1) { Tcnt = Tcnt+1; if (Tcnt == Bnum) { Main.KillTimer(1); } if (Tcnt < Bnum) { Account1.SetBalanceIndex(Tcnt); Main.ReqMarketData(Account1.Balance.code,0,0); Code[Tcnt] = Account1.Balance.code; assessed[Tcnt] = Account1.Balance.assessedAmount; Pst[Tcnt] = 0; Main.MessageList(Code[Tcnt],assessed[Tcnt],Bcount[Tcnt]) } } if (nEventID == 2) { var num = Account1.GetTheNumberOfBalances(); for(var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); if (Code[i] == Account1.Balance.code && Pst[i] <= 0 && Account1.Balance.assessedAmount >= assessed[i]*1.20) { Pst[i] = 1; var Vol = 0; //1주 단위일 경우 if (MKD[i] == 1) Vol = Math.floor(Account1.Balance.count*0.2); //10주 단위일 경우 if (MKD[i] == 10) Vol = Math.floor(Math.floor(Math.floor(Account1.Balance.count*0.2)/10)*10); if (Vol > 0) { assessed[i] = Account1.Balance.current * Account1.Balance.count-Vol; Account1.OrderSell(Account1.Balance.code, Vol, 0,1); } } if (Code[i] == Account1.Balance.code && Pst[i] == 1 && Account1.Balance.assessedAmount <= assessed[i]*0.8) { Pst[i] = -1; var Vol = 0; //1주 단위일 경우 if (MKD[i] == 1) Vol = Math.floor(Account1.Balance.count*0.2); //10주 단위일 경우 if (MKD[i] == 10) Vol = Math.floor(Math.floor(Math.floor(Account1.Balance.count*0.2)/10)*10); if (Vol > 0) { assessed[i] = Account1.Balance.current * (Account1.Balance.count+Vol); Account1.OrderBuy(Account1.Balance.code, Vol, 0,1); } } } } } function Main_OnRcvMarketData(MarketData) { MKD[Rcv] = MarketData.tradeUnit; Main.MessageList(MarketData.code,MKD[Rcv]) Rcv = Rcv+1; if (Rcv == Bnum) { Main.SetTimer(2, 5000); } } 즐거운 하루되세요 > TWIG 님이 쓴 글입니다. > 제목 : 문의드립니다. > 제가 프로그램사용법 Q&A에 문의를 했는데요, 답변이 예스스팟에서 구현 가능하다고 하네요, 예스스팟에서 어떻게 구현 가능한지 구체적인 수식이나 방법을 알고 싶습니다 -------------------------------------------------------------------------------------- 안녕하세요? 예스스탁입니다. 차트를 기반으로 하여 YesLanguage로 작성해서 매매하는 시스템트레이딩 기능에서는 문의하신 내용을 구현하지 못합니다. 하지만 예스트레이더의 기능 중 차트 기반이 아닌 확장된 시스템 트레이딩 형태인 YesSpot기능을 이용하시면 문의하신 기능도 구현하실 수 있습니다. 감사합니다. > TWIG 님이 쓴 글입니다. 안녕하세요, 문의드릴께 있어서 글 남깁니다. 보통 시스템 트레이딩하면 차트를 바탕으로 전략을 구성하는데요, 차트가 아닌 평가금액이나 계좌 잔고를 기준으로 시스템을 구성하는것이 가능한지요. 예를 들어 평가금액이 얼마이상이 되면 몇%자동매도 되고 매도 후 평가금액이 얼마 이하가 되면 다시 몇%매수되고 하는 식으로요
프로필 이미지

초보로직

2020-07-12 17:33:26

> 예스스탁 님이 쓴 글입니다. > 제목 : Re : 문의드립니다. > 안녕하세요 예스스탁입니다. 답변이 늦어 죄송합니다. 식의 주요 흐름은 아래와 같습니다. 스팟이 시작하면 지정된 계좌에서 보유중인 잔고들 확인해서 잔고가 있으면 해당 잔고에 대해 종목코드 및 평가금액과 수량단위 확인을 위해 종목객체를 모두 생성합니다. 종목객체가 모두 생성이 되면 5초단위로 잔고의 평가금액을 파악하여 이전저장한 평가금액대비 20% 상승하면 잔고수량의 20%를 매도 주문을 내고 20% 하락하면 잔고수량으 20%만큼 매수주문을 내게 됩니다. 각 매수주문과 매도주문을 낼때 현재가에서 수량차이만큼을 가감해서 평가금액을 산정해 새로 저장합니다. 스크립트 객체에는 계좌객체만 설정하시면 됩니다. 계좌객체 - 객체명 Accoun1 예스스팟에 대한 수식답변은 가이드 정도입니다. 수식 작성의 흐름의 이해하시는 용도로 사용하시고 아래 수식 내용 참고하셔서 수정보완해 사용하시기 바랍니다. var Start; var Bnum; var Tcnt; var Rcv; var assessed = []; var Bcount = []; var Code = []; var MKD = []; var Pst = []; function Main_OnStart() { Bnum = Account1.GetTheNumberOfBalances(); if (Bnum >= 1) { Account1.SetBalanceIndex(0); Main.ReqMarketData(Account1.Balance.code,0,0); Tcnt = 0; Code[Tcnt] = Account1.Balance.code; assessed[Tcnt] = Account1.Balance.current* Account1.Balance.count; Pst[Tcnt] = 0; Main.SetTimer(1, 1000); Main.MessageList(Code[Tcnt],assessed[Tcnt],Bcount[Tcnt]) } Rcv = 0; } function Main_OnTimer(nEventID) { if (nEventID == 1) { Tcnt = Tcnt+1; if (Tcnt == Bnum) { Main.KillTimer(1); } if (Tcnt < Bnum) { Account1.SetBalanceIndex(Tcnt); Main.ReqMarketData(Account1.Balance.code,0,0); Code[Tcnt] = Account1.Balance.code; assessed[Tcnt] = Account1.Balance.assessedAmount; Pst[Tcnt] = 0; Main.MessageList(Code[Tcnt],assessed[Tcnt],Bcount[Tcnt]) } } if (nEventID == 2) { var num = Account1.GetTheNumberOfBalances(); for(var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); if (Code[i] == Account1.Balance.code && Pst[i] <= 0 && Account1.Balance.assessedAmount >= assessed[i]*1.20) { Pst[i] = 1; var Vol = 0; //1주 단위일 경우 if (MKD[i] == 1) Vol = Math.floor(Account1.Balance.count*0.2); //10주 단위일 경우 if (MKD[i] == 10) Vol = Math.floor(Math.floor(Math.floor(Account1.Balance.count*0.2)/10)*10); if (Vol > 0) { assessed[i] = Account1.Balance.current * Account1.Balance.count-Vol; Account1.OrderSell(Account1.Balance.code, Vol, 0,1); } } if (Code[i] == Account1.Balance.code && Pst[i] == 1 && Account1.Balance.assessedAmount <= assessed[i]*0.8) { Pst[i] = -1; var Vol = 0; //1주 단위일 경우 if (MKD[i] == 1) Vol = Math.floor(Account1.Balance.count*0.2); //10주 단위일 경우 if (MKD[i] == 10) Vol = Math.floor(Math.floor(Math.floor(Account1.Balance.count*0.2)/10)*10); if (Vol > 0) { assessed[i] = Account1.Balance.current * (Account1.Balance.count+Vol); Account1.OrderBuy(Account1.Balance.code, Vol, 0,1); } } } } } function Main_OnRcvMarketData(MarketData) { MKD[Rcv] = MarketData.tradeUnit; Main.MessageList(MarketData.code,MKD[Rcv]) Rcv = Rcv+1; if (Rcv == Bnum) { Main.SetTimer(2, 5000); } } ========================================== //예스스팟 공부용으로 주석 좀 부탁드립니다
프로필 이미지

초보로직

2021-05-31 18:48:20

노고에 감사드립니다... 1.매도20% 매수20%부분을 외부변수로 수정하고싶은데 가능한가요?? 2.처음실행후 장중 반복실행을 얼마간격으로 하나요?? > 초보로직 님이 쓴 글입니다. > 제목 : Re : Re : 문의드립니다. > > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 문의드립니다. > 안녕하세요 예스스탁입니다. 답변이 늦어 죄송합니다. 식의 주요 흐름은 아래와 같습니다. 스팟이 시작하면 지정된 계좌에서 보유중인 잔고들 확인해서 잔고가 있으면 해당 잔고에 대해 종목코드 및 평가금액과 수량단위 확인을 위해 종목객체를 모두 생성합니다. 종목객체가 모두 생성이 되면 5초단위로 잔고의 평가금액을 파악하여 이전저장한 평가금액대비 20% 상승하면 잔고수량의 20%를 매도 주문을 내고 20% 하락하면 잔고수량으 20%만큼 매수주문을 내게 됩니다. 각 매수주문과 매도주문을 낼때 현재가에서 수량차이만큼을 가감해서 평가금액을 산정해 새로 저장합니다. 스크립트 객체에는 계좌객체만 설정하시면 됩니다. 계좌객체 - 객체명 Accoun1 예스스팟에 대한 수식답변은 가이드 정도입니다. 수식 작성의 흐름의 이해하시는 용도로 사용하시고 아래 수식 내용 참고하셔서 수정보완해 사용하시기 바랍니다. var Start; var Bnum; var Tcnt; var Rcv; var assessed = []; var Bcount = []; var Code = []; var MKD = []; var Pst = []; function Main_OnStart() { Bnum = Account1.GetTheNumberOfBalances(); if (Bnum >= 1) { Account1.SetBalanceIndex(0); Main.ReqMarketData(Account1.Balance.code,0,0); Tcnt = 0; Code[Tcnt] = Account1.Balance.code; assessed[Tcnt] = Account1.Balance.current* Account1.Balance.count; Pst[Tcnt] = 0; Main.SetTimer(1, 1000); Main.MessageList(Code[Tcnt],assessed[Tcnt],Bcount[Tcnt]) } Rcv = 0; } function Main_OnTimer(nEventID) { if (nEventID == 1) { Tcnt = Tcnt+1; if (Tcnt == Bnum) { Main.KillTimer(1); } if (Tcnt < Bnum) { Account1.SetBalanceIndex(Tcnt); Main.ReqMarketData(Account1.Balance.code,0,0); Code[Tcnt] = Account1.Balance.code; assessed[Tcnt] = Account1.Balance.assessedAmount; Pst[Tcnt] = 0; Main.MessageList(Code[Tcnt],assessed[Tcnt],Bcount[Tcnt]) } } if (nEventID == 2) { var num = Account1.GetTheNumberOfBalances(); for(var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); if (Code[i] == Account1.Balance.code && Pst[i] <= 0 && Account1.Balance.assessedAmount >= assessed[i]*1.20) { Pst[i] = 1; var Vol = 0; //1주 단위일 경우 if (MKD[i] == 1) Vol = Math.floor(Account1.Balance.count*0.2); //10주 단위일 경우 if (MKD[i] == 10) Vol = Math.floor(Math.floor(Math.floor(Account1.Balance.count*0.2)/10)*10); if (Vol > 0) { assessed[i] = Account1.Balance.current * Account1.Balance.count-Vol; Account1.OrderSell(Account1.Balance.code, Vol, 0,1); } } if (Code[i] == Account1.Balance.code && Pst[i] == 1 && Account1.Balance.assessedAmount <= assessed[i]*0.8) { Pst[i] = -1; var Vol = 0; //1주 단위일 경우 if (MKD[i] == 1) Vol = Math.floor(Account1.Balance.count*0.2); //10주 단위일 경우 if (MKD[i] == 10) Vol = Math.floor(Math.floor(Math.floor(Account1.Balance.count*0.2)/10)*10); if (Vol > 0) { assessed[i] = Account1.Balance.current * (Account1.Balance.count+Vol); Account1.OrderBuy(Account1.Balance.code, Vol, 0,1); } } } } } function Main_OnRcvMarketData(MarketData) { MKD[Rcv] = MarketData.tradeUnit; Main.MessageList(MarketData.code,MKD[Rcv]) Rcv = Rcv+1; if (Rcv == Bnum) { Main.SetTimer(2, 5000); } } ========================================== //예스스팟 공부용으로 주석 좀 부탁드립니다
프로필 이미지

초보로직

2021-06-15 20:36:39

노고에 감사드립니다... 1.매도20% 매수20%부분을 외부변수로 수정하고싶은데 가능한가요?? 2.처음실행후 장중 반복실행을 얼마간격으로 하나요?? > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 문의드립니다. > 안녕하세요 예스스탁입니다. 답변이 늦어 죄송합니다. 식의 주요 흐름은 아래와 같습니다. 스팟이 시작하면 지정된 계좌에서 보유중인 잔고들 확인해서 잔고가 있으면 해당 잔고에 대해 종목코드 및 평가금액과 수량단위 확인을 위해 종목객체를 모두 생성합니다. 종목객체가 모두 생성이 되면 5초단위로 잔고의 평가금액을 파악하여 이전저장한 평가금액대비 20% 상승하면 잔고수량의 20%를 매도 주문을 내고 20% 하락하면 잔고수량으 20%만큼 매수주문을 내게 됩니다. 각 매수주문과 매도주문을 낼때 현재가에서 수량차이만큼을 가감해서 평가금액을 산정해 새로 저장합니다. 스크립트 객체에는 계좌객체만 설정하시면 됩니다. 계좌객체 - 객체명 Accoun1 예스스팟에 대한 수식답변은 가이드 정도입니다. 수식 작성의 흐름의 이해하시는 용도로 사용하시고 아래 수식 내용 참고하셔서 수정보완해 사용하시기 바랍니다. var Start; var Bnum; var Tcnt; var Rcv; var assessed = []; var Bcount = []; var Code = []; var MKD = []; var Pst = []; function Main_OnStart() { Bnum = Account1.GetTheNumberOfBalances(); if (Bnum >= 1) { Account1.SetBalanceIndex(0); Main.ReqMarketData(Account1.Balance.code,0,0); Tcnt = 0; Code[Tcnt] = Account1.Balance.code; assessed[Tcnt] = Account1.Balance.current* Account1.Balance.count; Pst[Tcnt] = 0; Main.SetTimer(1, 1000); Main.MessageList(Code[Tcnt],assessed[Tcnt],Bcount[Tcnt]) } Rcv = 0; } function Main_OnTimer(nEventID) { if (nEventID == 1) { Tcnt = Tcnt+1; if (Tcnt == Bnum) { Main.KillTimer(1); } if (Tcnt < Bnum) { Account1.SetBalanceIndex(Tcnt); Main.ReqMarketData(Account1.Balance.code,0,0); Code[Tcnt] = Account1.Balance.code; assessed[Tcnt] = Account1.Balance.assessedAmount; Pst[Tcnt] = 0; Main.MessageList(Code[Tcnt],assessed[Tcnt],Bcount[Tcnt]) } } if (nEventID == 2) { var num = Account1.GetTheNumberOfBalances(); for(var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); if (Code[i] == Account1.Balance.code && Pst[i] <= 0 && Account1.Balance.assessedAmount >= assessed[i]*1.20) { Pst[i] = 1; var Vol = 0; //1주 단위일 경우 if (MKD[i] == 1) Vol = Math.floor(Account1.Balance.count*0.2); //10주 단위일 경우 if (MKD[i] == 10) Vol = Math.floor(Math.floor(Math.floor(Account1.Balance.count*0.2)/10)*10); if (Vol > 0) { assessed[i] = Account1.Balance.current * Account1.Balance.count-Vol; Account1.OrderSell(Account1.Balance.code, Vol, 0,1); } } if (Code[i] == Account1.Balance.code && Pst[i] == 1 && Account1.Balance.assessedAmount <= assessed[i]*0.8) { Pst[i] = -1; var Vol = 0; //1주 단위일 경우 if (MKD[i] == 1) Vol = Math.floor(Account1.Balance.count*0.2); //10주 단위일 경우 if (MKD[i] == 10) Vol = Math.floor(Math.floor(Math.floor(Account1.Balance.count*0.2)/10)*10); if (Vol > 0) { assessed[i] = Account1.Balance.current * (Account1.Balance.count+Vol); Account1.OrderBuy(Account1.Balance.code, Vol, 0,1); } } } } } function Main_OnRcvMarketData(MarketData) { MKD[Rcv] = MarketData.tradeUnit; Main.MessageList(MarketData.code,MKD[Rcv]) Rcv = Rcv+1; if (Rcv == Bnum) { Main.SetTimer(2, 5000); } } 즐거운 하루되세요 > TWIG 님이 쓴 글입니다. > 제목 : 문의드립니다. > 제가 프로그램사용법 Q&A에 문의를 했는데요, 답변이 예스스팟에서 구현 가능하다고 하네요, 예스스팟에서 어떻게 구현 가능한지 구체적인 수식이나 방법을 알고 싶습니다 -------------------------------------------------------------------------------------- 안녕하세요? 예스스탁입니다. 차트를 기반으로 하여 YesLanguage로 작성해서 매매하는 시스템트레이딩 기능에서는 문의하신 내용을 구현하지 못합니다. 하지만 예스트레이더의 기능 중 차트 기반이 아닌 확장된 시스템 트레이딩 형태인 YesSpot기능을 이용하시면 문의하신 기능도 구현하실 수 있습니다. 감사합니다. > TWIG 님이 쓴 글입니다. 안녕하세요, 문의드릴께 있어서 글 남깁니다. 보통 시스템 트레이딩하면 차트를 바탕으로 전략을 구성하는데요, 차트가 아닌 평가금액이나 계좌 잔고를 기준으로 시스템을 구성하는것이 가능한지요. 예를 들어 평가금액이 얼마이상이 되면 몇%자동매도 되고 매도 후 평가금액이 얼마 이하가 되면 다시 몇%매수되고 하는 식으로요