항상 도움에 감사드립니다.
아래와 같이 매도관련하여 스팟 수식작성 부탁드립니다.
잘몰라서 그러니 간단한 설명도 부탁드립니다.
* 매수된 주식을 특정시간 경과한 후 매도(예: 3일 경과후 10시)
* 계좌내에 다른 주식은 매도하지 않음
답변 1
예스스탁
예스스탁 답변
2019-09-04 15:52:48
안녕하세요
예스스탁입니다.
스팟의 수식답변은 가이드입니다.
아래 수식을 참고하시기 테스트하시면서 수정보완해 사용하시기 바랍니다.
실제 계좌의 잔고에는 종목의 진입일 정보가 없습니다.
그러므로 스팟에서 새로운 종목을 매수할때 날짜정보를 별도로 저장해서 이용하셔야 합니다.
스팟 적용이 안된 상태에서 매수된 종목에 대해서는 처리를 할수 없습니다.
영문 업데이트가 게시판의 금칙어입니다.
수식안에 Up*date와 같이 중간에 *이 추가되어 있으므로 삭제하시면 됩니다.
var EntryCode = [];
var SellDate = [];
function Main_OnStart()
{
var d = new Date();
Main.MessageList("Start");
//1분 타이머 셋팅
Main.SetTimer(1, 60000);
}
//계좌이벤트
function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID)//*삭제
{
var d = new Date();
//잔고에 새로운 종목이 편입
if (sAccntNum == Account1.number && lUp*dateID == 30001)//*삭제
{
//내부저장파일에서 종목코드리스트와 날짜 리스트를 가져와 변수에 저장
if (Main.GetUserValue("EntryCode") != "")
EntryCode = JSON.parse(Main.GetUserValue("EntryCode"));
if (Main.GetUserValue("SellDate") != "")
SellDate = JSON.parse(Main.GetUserValue("SellDate"));
//새로 편입된 종목의 종목코드와 날짜정보를 리스트에 추가
EntryCode.push(sItemCode);
//월요일이나 화요일이면 영엽일로 3일이 그 주이므로 3만 더함
if (d.getDay() >= 1 && d.getDay() <= 2 )
SellDate.push(dateToJulianNumber(d)+3);
//수,목,금요일은 주말을 포함해야 하므로 5를 더함
if (d.getDay() >= 3 && d.getDay() <= 5)
SellDate.push(dateToJulianNumber(d)+5);
//추가후 다시 내부파일에 저장
Main.SetUserValue("EntryCode", JSON.stringify(EntryCode));
Main.SetUserValue("SellDate", JSON.stringify(SellDate));
}
}
//타이머이벤트
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
var JD = dateToJulianNumber(d);
//10시가 되면
if (HHMMSS >= 100000 )
{
//타이머 종료
Main.KillTimer(1);
//내부저장파일에서 종목코드리스트와 날짜정보 리스트를 가져와 변수에 저장
if (Main.GetUserValue("EntryCode") != "")
EntryCode = JSON.parse(Main.GetUserValue("EntryCode"));
if (Main.GetUserValue("SellDate") != "")
SellDate = JSON.parse(Main.GetUserValue("SellDate"));
//저장된 값이 있으면
if (SellDate.length >= 1)
{
for (var i = SellDate.length-1; i >= 0; i-- )
{
//리스트의 전체날짜와 오늘 날짜를 비교해
//오늘날짜가 저장된 날짜 이후인 종목이 있으면
if (JD >= SellDate[i])
{
//잔고셋팅하고
Account1.SetBalance(EntryCode[i],0);
if (Account1.Balance.count >= 1)
{
//전량 매도
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1);
//종목코드, 날짜정보 삭제
EntryCode.splice(i,1);
SellDate.splice(i,1);
}
}
}
}
//내부파일에 다시 저장
Main.SetUserValue("EntryCode", JSON.stringify(EntryCode));
Main.SetUserValue("SellDate", JSON.stringify(SellDate));
}
}
}
//날짜를 줄리안데이트로 변경
function dateToJulianNumber(d){
var year = d.getFullYear();
var month = d.getMonth()+1;
var day = d.getDate();
var a = Math.floor((14-month)/12);
var y = Math.floor(year+4800-a);
var m = month+12*a-3;
var JDN = day + Math.floor((153*m+2)/5)+(365*y)+Math.floor(y/4)-Math.floor(y/100)+Math.floor(y/400)-32045;
return JDN;
}
즐거운 하루되세요
> dayun01 님이 쓴 글입니다.
> 제목 : 수식작성 부탁드립니다.
> 항상 도움에 감사드립니다.
아래와 같이 매도관련하여 스팟 수식작성 부탁드립니다.
잘몰라서 그러니 간단한 설명도 부탁드립니다.
* 매수된 주식을 특정시간 경과한 후 매도(예: 3일 경과후 10시)
* 계좌내에 다른 주식은 매도하지 않음