제가 하고 싶은것
1. 파워종목 검색(1분단위)
2. 검색된 종목들을 단주, 시장가로 매수
-단, 기존에 보유종목인 경우에는 매수하지 않음
사실 언어 이런것도 모르고 샘플을 보면서 살짝 살짝 수정하고자 하고 있습니다.
메뉴얼 보면서 공부는 병행하고 있습니다.
아래는 게시판 답변에서 찾은 샘플인데 이 샘플에 위 두가지 조건을 적용한 전략을 부탁드립니다. 감사합니다.
var List;
var ListCnt;
var RcvCount;
var ItemCode = new Array(200);
var ItemPrice = new Array(200);
var ItemUnits = new Array(200);
var RcvCount = 0;
var Ymoney;
//스팟 첫 실행시
function Main_OnStart()
{
// 파워종목검색의 사용자검색조건 검색 요청
Main.ReqPowerSearch("Winning")
//예수금 저장
Ymoney = Account1.GetBalanceETCinfo(0);
}
//종목검색 완료되어 리스트(검색된 종목코드) 수신
function Main_OnRcvItemList(aItemList, nCount)
{
//검색된 종목코드를 저장
List = aItemList;
//검색된 종목수 저장
ListCnt = nCount;
//종목코드 디버깅창에 출력
Main.MessageList("전체종목코드",List);
//검색된 종목에 대해 종목객체 요청
for (var i = 0; i < nCount; i++)
{
Main.ReqMarketData(List[i], 0, 0);
}
}
//요청한 종목객체가 생성되면
function Main_OnRcvMarketData(MarketData)
{
//생성 횟수 카운트
RcvCount = RcvCount+1;
//생성된 순서로 1번방부터 종목코드 저장
ItemCode[RcvCount] = MarketData.code;
//생성된 순서로 1번방부터 현재가 저장
ItemPrice[RcvCount] = MarketData.current;
ItemUnits[RcvCount] = MarketData.tradeUnit;
//값저장 후 해당 종목객체는 삭제
Main.RemoveMarketData(ItemCode[RcvCount]);
//생성횟수와 해당 종목의 코드와 현재가, 매매단위를 디버깅창에 출력
Main.MessageList("생성순번",RcvCount,"종목코드",ItemCode[RcvCount],"현재가",ItemPrice[RcvCount],"주문수량단위",ItemUnits[RcvCount]);
//검색된 종목에 대해 모두 종목객체가 생성되었다면
if (RcvCount == ListCnt)
{
//현재가가 큰 종목순으로 상위 5개 주문
for (var ii = 1; ii <= 5; ii++)
{
var HH = -1;
var Hi = -1;
//각 종목이 현재가를 비교해 가장 큰 종목 선택
for (var iii = 1; iii <= RcvCount; iii++)
{
if (ItemPrice[iii] > HH)
{
HH = ItemPrice[iii];
Hi = iii;
}
}
//매수주문
if (Hi > -1)
{
//수량 계산
var vol;
if (ItemUnits[Hi] == 1) //1주단위이면
vol = Math.floor((Ymoney/5)/ItemPrice[Hi]);
if (ItemUnits[Hi] == 10)//10주 단위이면
vol = Math.floor(((Ymoney/5)/ItemPrice[Hi])/10)*10;
//시장가로 매수주문
Main.MessageList("순번",ii,"매수주문종목",ItemCode[Hi],"현재가",ItemPrice[Hi],"주문수량단위",ItemUnits[Hi]);
//디버깅창에 매수 종목의 코드와 현재가,주문수량 표시
Account1.OrderBuy(ItemCode[Hi], vol, 0,1);
//해당 종목의 종목코드와 현재가는 다음순위를 찾기위해 -1로 지정
ItemCode[Hi] = -1;
ItemPrice[Hi] = -1;
}
}
}
}
답변 1
예스스탁
예스스탁 답변
2019-09-10 11:48:40
안녕하세요
예스스탁입니다.
아래 가이드 참고하시기 바랍니다.
스크립트 객체설정
계좌객체 추가 --> 속성에서 객체명은 Account1, 주문계좌지정
//스팟 첫 실행시
function Main_OnStart()
{
//1번 타이머, 60초
Main.SetTimer(1, 60000);
}
function Main_OnTimer(nEventID)
{
//1번 타이머 동작
if (nEventID == 1)
{
//종목검색 수행
Main.ReqPowerSearch("Winning")
}
}
//종목검색 완료
function Main_OnRcvItemList(aItemList, nCount)
{
//1종목 이상 검색되면
if (nCount >= 1)
{
//리스트 첫종목부터 마지막종목까지 순차적으로
for (var i = 0; i < nCount; i++)
{
//잔고를 셋팅
Account1.SetBalance(aItemList[i],0);
//보유수량이 없으면
if (Account1.Balance.count == 0)
{
//매수주문
Account1.OrderBuy(aItemList[i], 1,0,1);
}
}
}
}
즐거운 명절되시길 바랍니다.
> 달군 님이 쓴 글입니다.
> 제목 : 파워종목검색후 자동매수 그리고 몇가지
> 제가 하고 싶은것
1. 파워종목 검색(1분단위)
2. 검색된 종목들을 단주, 시장가로 매수
-단, 기존에 보유종목인 경우에는 매수하지 않음
사실 언어 이런것도 모르고 샘플을 보면서 살짝 살짝 수정하고자 하고 있습니다.
메뉴얼 보면서 공부는 병행하고 있습니다.
아래는 게시판 답변에서 찾은 샘플인데 이 샘플에 위 두가지 조건을 적용한 전략을 부탁드립니다. 감사합니다.
var List;
var ListCnt;
var RcvCount;
var ItemCode = new Array(200);
var ItemPrice = new Array(200);
var ItemUnits = new Array(200);
var RcvCount = 0;
var Ymoney;
//스팟 첫 실행시
function Main_OnStart()
{
// 파워종목검색의 사용자검색조건 검색 요청
Main.ReqPowerSearch("Winning")
//예수금 저장
Ymoney = Account1.GetBalanceETCinfo(0);
}
//종목검색 완료되어 리스트(검색된 종목코드) 수신
function Main_OnRcvItemList(aItemList, nCount)
{
//검색된 종목코드를 저장
List = aItemList;
//검색된 종목수 저장
ListCnt = nCount;
//종목코드 디버깅창에 출력
Main.MessageList("전체종목코드",List);
//검색된 종목에 대해 종목객체 요청
for (var i = 0; i < nCount; i++)
{
Main.ReqMarketData(List[i], 0, 0);
}
}
//요청한 종목객체가 생성되면
function Main_OnRcvMarketData(MarketData)
{
//생성 횟수 카운트
RcvCount = RcvCount+1;
//생성된 순서로 1번방부터 종목코드 저장
ItemCode[RcvCount] = MarketData.code;
//생성된 순서로 1번방부터 현재가 저장
ItemPrice[RcvCount] = MarketData.current;
ItemUnits[RcvCount] = MarketData.tradeUnit;
//값저장 후 해당 종목객체는 삭제
Main.RemoveMarketData(ItemCode[RcvCount]);
//생성횟수와 해당 종목의 코드와 현재가, 매매단위를 디버깅창에 출력
Main.MessageList("생성순번",RcvCount,"종목코드",ItemCode[RcvCount],"현재가",ItemPrice[RcvCount],"주문수량단위",ItemUnits[RcvCount]);
//검색된 종목에 대해 모두 종목객체가 생성되었다면
if (RcvCount == ListCnt)
{
//현재가가 큰 종목순으로 상위 5개 주문
for (var ii = 1; ii <= 5; ii++)
{
var HH = -1;
var Hi = -1;
//각 종목이 현재가를 비교해 가장 큰 종목 선택
for (var iii = 1; iii <= RcvCount; iii++)
{
if (ItemPrice[iii] > HH)
{
HH = ItemPrice[iii];
Hi = iii;
}
}
//매수주문
if (Hi > -1)
{
//수량 계산
var vol;
if (ItemUnits[Hi] == 1) //1주단위이면
vol = Math.floor((Ymoney/5)/ItemPrice[Hi]);
if (ItemUnits[Hi] == 10)//10주 단위이면
vol = Math.floor(((Ymoney/5)/ItemPrice[Hi])/10)*10;
//시장가로 매수주문
Main.MessageList("순번",ii,"매수주문종목",ItemCode[Hi],"현재가",ItemPrice[Hi],"주문수량단위",ItemUnits[Hi]);
//디버깅창에 매수 종목의 코드와 현재가,주문수량 표시
Account1.OrderBuy(ItemCode[Hi], vol, 0,1);
//해당 종목의 종목코드와 현재가는 다음순위를 찾기위해 -1로 지정
ItemCode[Hi] = -1;
ItemPrice[Hi] = -1;
}
}
}
}