답변완료
수식 수정 부탁드립니다
안녕하세요~
다음 수식 수정 부탁드립니다.
1) 현재 아래의 수식을 자동으로 설정하였을 경우, 8시30분 이전 주식시장 주문가능시간전에
HTS에 접속을 하면 주문 오류가 발생합니다. ---> 주문가능 시간전이므로 당연함
(8시30분 이후 접속시는 정상주문 됨)
---> 접속시간에 관계없이, 8시45분~ 8시55분 사이에 'test1'의 종목검색 및 매수주문이
발생하도록 수정 부탁드립니다.
2) 장개시전 매수 주문시 다음 조건을 추가하고 싶습니다.
* 장개시전 계좌의 D+2 예수금 잔고가 주식평가자산을 포함한 순자산액의 1/10 이상일 때라는 조건
* 매수시 'K200 지수의 전일저가가 전전일저가보다 작을 때' 라는 조건
* 현재 작성된 수식은 검색된 종목들중 전일종가가 가장 높은 종목부터 순차적으로
5종목 이하로 매수하도록 작성되어 있습니다.
---> 이때 만약 잔고에 해당 종목들의 잔고가 미결제 포함하여 100주 미만이라면
매수주문이 발생하고, 100주 이상이라면 건너뛰고 가격이 높은 순으로 검색된
종목중 다음 가격이 높은 종목으로 순연하여 5종목 이하로 주문되도록 하고 싶습니다.
3) 8시45분 ~ 8시55분에 잔고에 있는 종목들중 평균매입가격대비 전일종가 기준으로
30% 이상 상승한 종목들이 있다면, 해당종목들의 전체 수량을 전일종가로
매도주문 내고 싶습니다.
---> 매도시 수량은 3일 결제로 인한 전일의 미결제 수량 포함입니다.
4) 당일 매수 및 매도 주문에 대한 정정과 취소는 없습니다.
즉, 개장전 주문이 장종료시까지 유지됩니다.
차트는 사용하지 않습니다.
다음 수식은 일봉기준으로 종목검색후, 장개시전 고가순으로 5종목 매수주문
< 스크립트 객체 >
- Main
- Account1
- Vol
---------------------
var List;
var ListCnt;
var RcvCount;
var ItemCode = new Array(200);
var PPrice = new Array(200);
var RcvCount = 0;
var Ymoney;
function Main_OnStart()
{
Main.ReqPowerSearch("test1")
Ymoney = Account1.GetBalanceETCinfo(0); // D+2 예수금을 불러오는지요?
Main.MessageLog("종목검색");
}
function Main_OnRcvItemList(aItemList, nCount)
{
List = aItemList;
ListCnt = nCount;
for (var i = 0; i < nCount; i++)
{
Main.ReqMarketData(List[i], 0, 0);
}
}
function Main_OnRcvMarketData(MarketData)
{
RcvCount = RcvCount+1;
ItemCode[RcvCount] = MarketData.code;
PPrice[RcvCount] = MarketData.prevClose;
if (RcvCount == ListCnt)
{
for (var ii = 1; ii <= 5; ii++)
{
var HH = -1;
var Hi = -1;
for (var iii = 1; iii <= RcvCount; iii++)
{
if (PPrice[iii] > HH)
{
HH = PPrice[iii];
Hi = iii;
}
}
//매수주문
if (Hi > -1)
{
Account1.OrderBuy(ItemCode[Hi], Vol, PPrice[Hi], 0);
ItemCode[Hi] = -1;
PPrice[Hi] = -1;
}
}
}
}
감사합니다 !!
2019-09-10
3356
글번호 224971
답변완료
매도, 매도식 부탁드립니다.
=======매수========
1. a,b,c,d종목의 전일종가대비 n%에 m1 수량만큼 매수주문한다.(장전 주문)
2. a,b,c,d종목 현재가가 전일종가의 n%(==매수가) 보다 p% 낮으면 m2 매수주문한다.
3. t1시에 미체결 매수 취소
(영어는 외부변수로 빠지게 해 주세요)
=======매도========
1. t2시부터 미체결 매도 취소
2. 보유종목 호출
3. s회차 매도 시행(최우선) : 매도량은 (호출시 보유량)/(k-s+1) (총 k회 분할매도)
***매도간격은 t3***
ex) 총10회 매도 예정일 때,
1회차 매도시
(호출된 보유량)/(10-1+1) = (보유량)/10
5회차 매도시
(호출된 보유량)/(10-5+1) = (보유량)/6
4. 마지막 회차에서는 (1번,2번) 진행후 잔량 모두 시장가 매도
==> 1-3번을 (k-1)회차 진행후 마지막회차 시장가 매도 진행(4번 항목)
(영어는 외부변수로 빠지게 해 주세요)
부탁드리겠습니다. 감사합니다.
2019-09-05
3409
글번호 224970
답변완료
파워종목검색후 자동매수 그리고 몇가지
제가 하고 싶은것
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;
}
}
}
}
2019-08-26
3468
글번호 224968