예스스탁
예스스탁 답변
2019-04-11 18:15:25
안녕하세요
예스스탁입니다.
3. 기존 계좌 보유 종목 및 수량
4. 당일 검색종목 및 기존 보유 종목의 수량 차트 설정
5. 당일 검색종목 및 기존 보유 종목의 수량 매매
기존 보유종목이나 새로 검색된 종목에 대해 차트를 열고 시스템을 적용은 가능합니다.
수량차트 설정은 어떤 의미인지 모르겠습니다.
스팟에서 신호는 발생시점과 그 종류만 필요합니다.
매수시 수량은 스팟에서 금액이나 수량을 지정하시면 되고
매도시 수량은 잔고객체에서 확인하면 되므로
차트 차트에 시스템을 적용시 수량적용은 의미가 없습니다.
아래 가이드 스팟수식의 흐름은 아래와 같습니다.
스팟이 시작하면 계좌잔고의 종목에 대해 전체 차트를 설정하고 지정한 시스템을 적용합니다.
위 작업후에 1분타이머를 셋팅해서 타이머 동작시 종목검색을 하고
검색된 종목이 오늘 차트를 생성했던 종목이 아니면 차트를 생성하고 시스템을 적용합니다.
각 차트의 시스템에서 매수신호 발생하고
잔고에 보유종목이 없으면 지정한 수량을 매수주문,
매도신호 발생시에는 잔고에 수량이 있으면
해당 수량으로 매도주문합니다.
수식은 단순히 식작성 흐름에 대한 가이드입니다.
내용 참고하셔서 수정보완해 사용하시기 바랍니다.
var BL = [],req=0,step;
var CT = [];
function Main_OnStart()
{
//처음 시작시 step은 0
step = 0;
//시작시점의 보유종목수
var num1 = Account1.GetTheNumberOfBalances();
//보유종목이 1개 이상이면 보유종목의 종목코드를 BL변수에 순차적으로 저장
if (num1 > 0)
{
step = 1;
for(var i = 0 ; i < num1 ; i++)
{
Account1.SetBalance(i);
BL[i] = Account1.Balance.code;
}
if (BL.length >= 1)
{
req = 0;
//1분봉 5000개
var ChartSet = new ReqChartItem(BL[req],1,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false);
var SymSet = new SystemInfo("#test");
Main.ReqChartEx(ChartSet, SymSet);
}
}
else //보유종목이 없으면 바로 1분 타이머 시작
{
step = 2;
Main.MessageList("보유종목없음");
Main.SetTimer(1, 60000);//1번 타이머, 60초
}
}
function Main_OnRcvChartEx(ChartEx)
{
if (step == 1 && ChartEx.GetCode(1) == BL[req])
{
step = 1;
CT[req] = ChartEx;
req = req+1;
if (req < BL.length)
{
var ChartSet = new ReqChartItem(BL[req],1,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false);
var SymSet = new SystemInfo("#test");
Main.ReqChartEx(ChartSet, SymSet);
}
else
{
step = 2;
Main.SetTimer(1, 60000);//1번 타이머, 60초
Main.MessageList("보유종목차트생성완료");
}
}
if (step == 2 && ChartEx.GetCode(1) == BL[req])
{
CT[req] = ChartEx;
req = req+1;
if (req < BL.length)
{
var ChartSet = new ReqChartItem(BL[req],1,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false);
var SymSet = new SystemInfo("#test");
Main.ReqChartEx(ChartSet, SymSet);
}
else
{
Main.MessageList("종목검색후차트생성완료");
//차트생성 완료하면 타이머 다시 셋팅
Main.SetTimer(1, 60000);//1번 타이머, 60초
}
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
//타이머 종료
Main.KillTimer(1);
Main.ReqPowerSearch("test_Search")
}
}
function Main_OnRcvItemList(aItemList, nCount)
{
//검색된 종목이 없으면
if (nCount == 0)
{
//타이머 다시 셋팅
Main.SetTimer(1, 6000);//1번 타이머, 60초
}
//검색된 종목이 있으면
if (nCount >= 1)
{
//검색된 종목과 기존 만든 차트들의 종목코드를 비교해
//차트가 만들어 지지 않은 종목이면 BL변수에 종목코드 추가
var cnt = 0;
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)
{
cnt = cnt+1;
BL.push(aItemList[i]);
}
}
Main.MessageList("BL : ",req,BL);
//차트 생성해야할 종목이 있으면 차트요청
if (cnt >= 1)
{
//차트 요청
var ChartSet = new ReqChartItem(BL[req],1,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false);
var SymSet = new SystemInfo("#test");
Main.ReqChartEx(ChartSet, SymSet);
}
else //없으면 타이머 다시 셋팅
{
Main.SetTimer(1, 60000);//1번 타이머, 60초
}
}
}
//생성된 차트들에서 신호가 발생하면
function Main_OnRiseSignal(ChartEx, Signal)
{
//매수신호 발생
if (Signal.signalKind == 1)
{
//잔고셋팅
Account1.SetBalance(Signal.code,0);
//보유수량이 없으면
if (Account1.Balance.count == 0)
{
//10주 시장가 매수
Account1.OrderBuy(Signal.code, 10,0,1);
}
}
//매수청산신호 발생
if (Signal.signalKind == 2)
{
//잔고셋팅
Account1.SetBalance(Signal.code,0);
//보유수량이 있으면
if (Account1.Balance.count > 0)
{
//전량 시장가 매도
Account1.OrderBuy(Signal.code, Account1.Balance.count,0,1);
}
}
}
즐거운 하루되세요
> 몬스터 님이 쓴 글입니다.
> 제목 : 현물 시스템 거래용 수식 문의 드립니다
> 수고 많으십니다.
현물 시스템 거래를 위한 스팟 수식을 문의 드립니다.
1. 갱신주기 1분
2. 거래일 당일 Power Search 종목검색 ( 검색명 : test_Search)
3. 기존 계좌 보유 종목 및 수량
4. 당일 검색종목 및 기존 보유 종목의 수량 차트 설정
5. 당일 검색종목 및 기존 보유 종목의 수량 매매
현재 게시판에 올라온 스팟 가이드 수식은 당일 종목 검색후 거래하는 부분만 올라와 있어서 기존 계좌 보유 종목 및 수량을 함께 차트 표시하고 거래하는 스팟 가이드가 있었으면 합니다.