예스스탁
예스스탁 답변
2019-11-07 18:14:07
안녕하세요
예스스탁입니다.
1
정상적으로 프로그램을 종료하시면 uservalue.yuv에 값 저장에 문제가 없습니다.
사용자분이 적용된 스팟을 해제하시는 것은 정상종료입니다.
프로그램이 비정상종료(다운, 강제종료)되면 값을 저장할수 없습니다.
2
종목별 프로그램매매는 데이타로 제공되지 않습니다.
3
자동종료기능은 없습니다.
스팟코드에 시간제한을 넣어서 특정시간 이후에는 스크립트를 읽지 않게 코딩하셔야 합니다.
예를 들어 아래와 같이 날짜시간객체를 가져와 조건으로 제한하시면 됩니다.
이벤트
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (HHMMSS >= 90000 && HHMMSS < 15300)
{
스크립트 내용
}
}
4
스팟은 식작성의 가이드입니다.
아래 수식내용과 주석 참고하셔서 수정보완하시기 바랍니다.
영문 업데이트가 게시판의 금칙어 입니다.
수식내에서 Up*date와 같이 중간에 *이 들어가 있습니다. *제거하고 적용하시기 바랍니다.
//스크립트 객체화면설정
//계좌객체추가 --> 객체명 Account1, 계좌번호지정
var BList = [];
var BStep = [];
var Bvol = [];
var MK = [];
var req = 0,T;
function Main_OnStart()
{
//스팟시작하면 T는 0부터 시작
T = 0;
//UserValue에 BList라는 이름으로 저장된 값이 없을때
if (T == 0 && Main.GetUserValue("BList") == "")
{
//T는 1
T = 1;
//보유종목수
var num = Account1.GetTheNumberOfBalances();
//보유종목 있으면
if (num > 0)
{
//BList에 종목코드저장
//BVol에 보유수량저장
//BStep에 매도진행스텝 저장
for (i = 0; i < num; i++)
{
Account1.SetBalance(i);
BList.push(Account1.Balance.code);
BVol.push(Account1.Balance.count);
BStep.push(0);
}
//종목객체 요청
req = 0;
Main.MessageList("BList종목객체생성시작")
Main.ReqMarketData(BList[req]);
}
else
{
//보유종목없으면 T는 2
T = 2;
}
}
//UserValue에 BList라는 이름으로 저장된 값이 있을때
if (T == 0 && Main.GetUserValue("BList") != "")
{
T = 1;
//BList변수에 UserValue에서 BList 값을 가져와 저장
BList = JSON.parse(Main.GetUserValue("BList"));
//BStep변수에 UserValue에서 BStep 값을 가져와 저장
BStep = JSON.parse(Main.GetUserValue("BStep"));
//BVol변수에 UserValue에서 BVol 값을 가져와 저장
BVol = JSON.parse(Main.GetUserValue("BVol"));
//종목객체 요청
if (BList.length > 0)
{
req = 0;
Main.MessageList("BList종목객체생성시작")
Main.ReqMarketData(BList[req]);
}
}
}
//계좌변동
function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID)// lUp*dateID에서 *제거
{
// 계좌에 신규종목에 편입되면
if (T == 2 && sAccntNum == Account1.number && lUp*dateID == 30001) // lUp*dateID에서 *제거
{
//종목코드저장
AddItem = sItemCode;
//잔고셋팅
Account1.SetBalanceIndex(AddItem,0)
//Blist 종목코드 추가
BList.push(Account1.Balance.code);
//BVol에 수량 추가
BVol.push(Account1.Balance.count);
//BStep에 매도진행스텝은 0으로 지정
BStep.push(0);
//UserValue의 각 파일 갱신
Main.SetUserValue("BList", JSON.stringify(BList),1);
Main.SetUserValue("BStep", JSON.stringify(BStep),1);
Main.SetUserValue("BVol", JSON.stringify(BVol),1);
//종목객체요청
Main.ReqMarketData(AddItem);
}
//계좌에 보유종목에 변동이 있으면
if (T == 2 && sAccntNum == Account1.number && lUp*dateID == 30003) // lUp*dateID에서 *제거
{
//잔고셋팅
Account1.SetBalance(sItemCode, 0);
if (BList.length > 0)
{
for (var i = 0l i < BList.length; i++)
{
//종목의 수량이 늘어난 경우이면
if (BList[i] == Account1.Balance.code && Account1.Balance.count > BVol[i])
{
//Bvol을 갱신
BVol[i] = Account1.Balance.count;
}
}
//UserValue의 각 파일 갱신
Main.SetUserValue("BList", JSON.stringify(BList),1);
Main.SetUserValue("BStep", JSON.stringify(BStep),1);
Main.SetUserValue("BVol", JSON.stringify(BVol),1);
//종목객체요청
Main.ReqMarketData(AddItem);
}
}
}
//요청한 종목객체 생성완료
function Main_OnRcvMarketData(MarketData)
{
if (T == 1 && MarketData.code == BList[req])
{
MK[req] = MarketData;
req = req+1;
if (req < BList.length)
{
Main.ReqMarketData(BList[req]);
}
else
{
Main.MessageList("BList종목객체생성끝");
T = 2;
}
}
if (T == 2)
{
MK[MK.length] = MarketData;
}
}
//종목객체 시세변동
function Main_OnUp*dateMarket(sItemCode, lUp*dateID) // lUp*dateID에서 *제거
{
if (lUp*dateID == 20001 && T == 2) // lUp*dateID에서 *제거
{
for (var i = 0; i < MK.length;i++)
{
//여러 종목객체 중 어떤 종목의 객체인지 찾아서
if (sItemCode == MK[i].code)
{
//잔고셋팅
Account1.SetBalance(MK[i].code,0);
var AllExit = false;
//-3%손실 전량청산
if (Account1.Balance.count > 0 && MK[i].current <= Account1.Balance.avgUnitCost*0.97)
{
AllExit = true;
Account1.OrderSell(MK[i].code, Account1.Balance.count, MK[i].Bid(5), 0);
BList.splice(0,1);
BStep.splice(0,1);
BVol.splice(0,1);
Main.RemoveMarketData(MK[i]);
MK.splice(0,1);
Main.SetUserValue("BList", JSON.stringify(BList),1);
Main.SetUserValue("BStep", JSON.stringify(BStep),1);
Main.SetUserValue("BVol", JSON.stringify(BVol),1);
}
//10%수익 전량청산
if (Account1.Balance.count > 0 && MK[i].current >= Account1.Balance.avgUnitCost*1.10)
{
AllExit = true;
Account1.OrderSell(MK[i].code, Account1.Balance.count, MK[i].Bid(5), 0);
BList.splice(0,1);
BStep.splice(0,1);
BVol.splice(0,1);
Main.RemoveMarketData(MK[i]);
MK.splice(0,1);
Main.SetUserValue("BList", JSON.stringify(BList),1);
Main.SetUserValue("BStep", JSON.stringify(BStep),1);
Main.SetUserValue("BVol", JSON.stringify(BVol),1);
}
//5%수익 전량청산
if (AllExit == false && BStep[i] == 0 && Account1.Balance.count > 0 && MK[i].current >= Account1.Balance.avgUnitCost*1.05)
{
Account1.OrderSell(MK[i].code,Math.floor(Bvol[i]*0.1), MK[i].Bid(5),0);
BStep[i] = 5;
Main.SetUserValue("BStep", JSON.stringify(BStep),1);
}
//6%수익 전량청산
if (AllExit == false && BStep[i] == 5 && Account1.Balance.count > 0 && MK[i].current >= Account1.Balance.avgUnitCost*1.06)
{
Account1.OrderSell(MK[i].code,Math.floor(Bvol[i]*0.1), MK[i].Bid(5),0);
BStep[i] = 6;
Main.SetUserValue("BStep", JSON.stringify(BStep),1);
}
//7%수익 전량청산
if (AllExit == false && BStep[i] == 6 && Account1.Balance.count > 0 && MK[i].current >= Account1.Balance.avgUnitCost*1.07)
{
Account1.OrderSell(MK[i].code,Math.floor(Bvol[i]*0.1), MK[i].Bid(5),0);
BStep[i] = 7;
Main.SetUserValue("BStep", JSON.stringify(BStep),1);
}
//8%수익 전량청산
if (AllExit == false && BStep[i] == 7 && Account1.Balance.count > 0 && MK[i].current >= Account1.Balance.avgUnitCost*1.08)
{
Account1.OrderSell(MK[i].code,Math.floor(Bvol[i]*0.1), MK[i].Bid(5),0);
BStep[i] = 8;
Main.SetUserValue("BStep", JSON.stringify(BStep),1);
}
//9%수익 전량청산
if (AllExit == false && BStep[i] == 8 && Account1.Balance.count > 0 && MK[i].current >= Account1.Balance.avgUnitCost*1.09)
{
Account1.OrderSell(MK[i].code,Math.floor(Bvol[i]*0.1), MK[i].Bid(5),0);
BStep[i] = 9;
Main.SetUserValue("BStep", JSON.stringify(BStep),1);
}
}
}
}
}
즐거운 하루되세요
> crazaq 님이 쓴 글입니다.
> 제목 : 분할매도 가이드좀 부탁 드립니다
> 매수는 수동으로 하고
잔고가 0 이상 인 종목만
매도만 스팟으로 매도 가능 한가요?
가능하면
매수가 기준 익절은 -3 % 전량매도
익절은
매수가 를 기준으로
5 % 수익 나면 50 % 1 % 상승 마다 10 % 씩 익절로 나누어 팔수 잇는 수식이 될까요?
누적
5% 50 % 50 %
6% 10 % 60 %
7 % 10 % 70 %
8% 10 % 80 %
9% 10 % 90 %
10% 10 % 100 %
그리고 vi에 전량 매도 수식도 가능 하면 가이드 부탁 드리겟읍니다
그리고 스탓 stop 하고 트레이더 종료 하는게 안전 한가요?
아니면 트레이더를 그냥 종료 해도 되나요?
스팟을 강제 종료되면 스팟의 저장 화일에 이상이 잇나요?
uservalue.yuv 에 저장 을 잘 하고 잘 불러오려면 종료를 어떻게 하는게 안전 한가요?
트레이더 종료후 장마감후 스팟이 같은 조건으로 돌리면 기억 하고 있던 매수 종목 검사후 장이 마감 되엇읍니다 이리 뜬적이 잇는데 그 이후 종료 하면 uservalue.yuv 에
전에 있던 화일과 새화일로 바뀌면서 저장 내용이 편 한나요?
수고 하시는데 너무 두서 없이 질문 드려서 죄송 합니다
종목별 프로그램 매매 도 객체 형성 할수 있나요?
현물 거래 시 3 시 30분 장 마감이 되면 3시 40분에 스팟 자동 종료 하려면 어떤 객체를 만들어서 실행 해야 할까요?