예스스탁
예스스탁 답변
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 님이 쓴 글입니다.
안녕하세요, 문의드릴께 있어서 글 남깁니다.
보통 시스템 트레이딩하면 차트를 바탕으로 전략을 구성하는데요, 차트가 아닌 평가금액이나
계좌 잔고를 기준으로 시스템을 구성하는것이 가능한지요.
예를 들어 평가금액이 얼마이상이 되면 몇%자동매도 되고 매도 후 평가금액이 얼마 이하가 되면 다시 몇%매수되고 하는 식으로요
> 예스스탁 님이 쓴 글입니다.
> 제목 : 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);
}
}
==========================================
//예스스팟 공부용으로 주석 좀 부탁드립니다
노고에 감사드립니다...
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);
}
}
==========================================
//예스스팟 공부용으로 주석 좀 부탁드립니다
노고에 감사드립니다...
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 님이 쓴 글입니다.
안녕하세요, 문의드릴께 있어서 글 남깁니다.
보통 시스템 트레이딩하면 차트를 바탕으로 전략을 구성하는데요, 차트가 아닌 평가금액이나
계좌 잔고를 기준으로 시스템을 구성하는것이 가능한지요.
예를 들어 평가금액이 얼마이상이 되면 몇%자동매도 되고 매도 후 평가금액이 얼마 이하가 되면 다시 몇%매수되고 하는 식으로요