답변완료
MarketData.Ask(1),0); 에서 0의 의미가 궁금합니다.
::::0의 의미::::
Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),MarketData.Ask(1),0);
위 코드에서 마지막 0은 잘못된 것인가요?
1:신규주문
2:청산주문
3:정정주문
4:취소주문
으로 알고 있습니다.
아니면 예스스팟 고유의 다는 의미인가요?
답변완료
항상 감사드립니다. 또 예스스팟 스크립트 질문입니다.
안녕하세요. 항상 감사드립니다.
현재 쓰고 있는 스크립트에는 예스스팟 시작시의 평가금액대비 +4%가 되면 모든 종목들이 자동매도 되도록 설정이 되어 있습니다.
이 부분을 예스스팟 시작시의 평가금액대비 +4%가 아닌, 현재 계좌에 보유중인 모든 종목들의 손익의 총합의 평가금액이 투자원금대비 +4%가 되면 전부 자동매도 되도록 스크립트 설정이 가능할까요?
(손실이 난 종목들을 바로 그날 정리하지 않고 가져가면서 기간이 얼마가 걸리든 상관없이 다른 종목에서 난 이익으로 전체 투자 원금의 +4%를 목표로 하는 전략입니다.)
다음은 현재쓰고 있는 스크립트 입니다.
var timer5 = 3; // 3초
var 매수금 =100000 ;
var 익절 = 1.09;
var OrderList = [];
var MKList = [];
var SellList = [];
var req;
function Main_OnStart()
{
Main.SetTimer(1, timer5*1000); // 1번 타이머 , 3초
MKList = []; //오늘 매수한 종목관리 배열 초기화
V1 =Account1.GetBalanceETCinfo(100); // 시작시 잔고 평가 금액
}
function Main_OnTimer(nEventID)
{
var d = new Date();
YYYYMMDD = d.getFullYear()* 10000 + (d.getMonth() +1)*100 + d.getDate();
HHMMSS = d.getHours()* 10000+ d.getMinutes()*100 + d.getSeconds();
if (nEventID==1 && HHMMSS>090000 && HHMMSS<153000 )
{
Main.ReqPowerSearch("필필필") // 종목검색수행
}
if (nEventID==1)
{
var num = Account1.GetTheNumberOfBalances(); // 계좌보유종수
if (nEventID==1 && HHMMSS>090000 && HHMMSS<153000 )
{ // 9시 ~ 15시 30분 사이
if(num >= 1)
{ // 보유종목이 1개 이상
if(Account1.GetBalanceETCinfo(100) >=V1*1.04)
{ //계좌평가금액이 스팟시작시 평가금액대비
Main.KillTimer(1); // 1번 타이머 종료
for (var i=0; i<num; i++)
{ //계좌리스트의 순서대로
Account1.SetBalance(i); //잔고를 세팅
if(Account1.Balance.count >0)
{
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1);
}
}
}
else
{
for (var i=0; i<num; i++)
{
Account1.SetBalance(i);
if(Account1.Balance.current >= Account1.Balance.avgUnitCost*익절)
{
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1);
//익절매도 종목들의 종목코드 저장
SellList.push(Account1.Balance.code);
}
}
}
}
}
/** if (HHMMSS >= 151500)
{
Main.KillTimer(1);
for(var i=0; i <num; i++)
{
Account1.SetBalance(i);
if(Account1.Balance.count>0)
{
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0,1);
}
}
} */
}
if(nEventID ==2)
{
Main.ReqMarketData(OrderList[req]);
}
}
function Main_OnRcvItemList(aItemList, nCount)
{
Main.KillTimer(1);
OrderList = [];
if (nCount >=1 )
{
if(MKList.length == 0)
{
OrderList = aItemList
}
else
{
for(var a =0; a<nCount; a++)
{
var Add = true;
for (var b=0; b<MKList.length; b++)
{
if(aItemList[a]==MKList[b].code)
{
Add = false;
}
}
//매도종목인지 확인
for (var b=0; b<SellList.length; b++)
{
if(aItemList[a]==SellList[b])
{
Add = false;
}
}
if(Add==true && !IsStockInAccount(aItemList[a]))
{
OrderList.push(aItemList[a]);
}
}
}
}
if(OrderList.length==0)
{
Main.SetTimer(1, timer5*1000);
}
else
{
req = 0;
Main.ReqMarketData(OrderList[req]);
}
}
function Main_OnRcvMarketData(MarketData)
{
if( MarketData.code == OrderList[req])
{
MKList.push(MarketData);
//계좌에 같은 종목 있는지 확인하고 없는 경우만 매수
if(!IsStockInAccount(MarketData.code))
{
// Account1.OrderBuy(MarketData.code,1,0,1); // 시장가 한주를 주문한다.
// 지정가로 주문하고자 할때는 아래로 변경
Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1);
//Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),MarketData.Ask(1),0);
Main.MessageList(MarketData.code + "주식을 매수합니다");
}
else
{
Main.MessageList(MarketData.code + "주식을 매수 안 합니다");
}
req = req+1;
if(req<OrderList.length)
{
var aa = Main.ReqMarketData(OrderList[req]);
if( aa = -1 )
{
Main.SetTimer(2, 15000);
}
}
else
{
Main.SetTimer(1, timer5*1000);
}
}
}
//계좌에 같은 종목이 있는지 확인
function IsStockInAccount(stockCode){
var numberOfBalances = Account1.GetTheNumberOfBalances();
for (var i = 0; i <numberOfBalances; i++){
Account1.SetBalance(i);
if(stockCode == Account1.Balance.code){return true;} // 계좌에 같은 종목이 있으면 트루 반환
}
return false; // 계좌에 같은 종목이 없으면 폴스 반환
}