답변완료
문의드립니다.
노고에 감사드립니다.
1. 문의
NH트레이더를 사용하고 있습니다.
설정창에서 "계좌비밀번호 설정시 가원장 생성"에 체크한 상태입니다.
아래1.의 수식을 적용하였습니다.
"매수청산실행"이라는 문구가 나오는것을 보아 수식은 정상적으로 작동하는듯 하나
실제 매수청산이 실행되지 않습니다.
컴퓨터 설정의 문제인지, 예스스팟 자체의 문제인지 알수 없어
당사의 컴퓨터로 예스스팟 로직을 실행하여 실제주문이 나가는지 확인하여 주셨으면 합니다.
2. 문의
아래2.의 수식을 적용하였습니다.
실제 종목 수는 10종목 입니다. 실제 매수가 진행되지 않습니다.
매수 조건이 충족되지 않은 경우 일지도 모른다는 생각에
if (BalanceCode.length > 99 && OrderAble == false )
{
Main.MessageLog("잔고확인");
}
라는 조건을 추가 해봤지만, 실행 창에 "매수진입" 또는 "잔고확인"이라는 문구가 나타나지 않습니다.
메뉴얼을 살펴보며 수식을 확인해 보았지만, 올바른 수식인 듯하여 혼란스럽습니다.
잘못된 점을 살펴봐 주시기 바랍니다.
아래1.
var Position;
var BID;
var Bnum;
var BuyFill;
var LOANDATE;
function Main_OnStart()
{
Main.MessageLog("시작");
Position = 0;
}
function C1_OnRiseSignal(Signal)
{
if (Position == 0 && Signal.signalKind == 1 )
{
Position = 1;
BID = A1.OrderBuy(Signal.code, Signal.count,0, 1, 1);
Main.MessageLog("매수진입");
BuyFill = 0;
}
//매수청산신호가 발생하고
if (Position == 1 && Signal.signalKind == 2 )
{
//체결확인값이 1이면
if (BuyFill == 1)
{
//계좌 refresh
A1.Refresh();
//Position변수는 2
Position = 2;
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
if (Position == 1 && OrderResponse.orderID == BID)
{
Bnum = OrderResponse.orderNum;
}
}
function Main_OnNotifyFill(NotifyFill)
{
if (Position == 1 && NotifyFill.orderNum == Bnum)
{
BuyFill = 1;
LOANDATE = NotifyFill.loanDate;
}
}
function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID)//*제거
{
//잔고 refresh완료
if (sAccntNum == A1.number && lUp*dateID == 30000)//*제거
{
//잔고 전체 종목중
//차트종목과 같고 대출종류는 1이고, 대출일이 LOANDATE와 같은 잔고가 있으면 매도
var num = A1.GetTheNumberOfBalances();
for (i = 0; i < num; i++)
{
A1.SetBalance(i);
if (A1.Balance.code == Main.GetOrderCode(C1.GetCode(1))
&& A1.Balance.loanKind == 1
&& A1.Balance.loanDate == LOANDATE)
A1.OrderSell(A1.Balance.code,A1.Balance.count,0, 1, A1.Balance.loanKind,A1.Balance.loanDate);
Main.MessageLog("매수청산실행");
}
//Position변수는 0
Position = 0;
}
}
2.
var Position;
var BID;
var BuyFill;
function C1_OnRiseSignal(Signal)
{
if (Position == 0 && Signal.signalKind == 1 )
{
Position = 1;
// 보유종목수 산정(동일종목코드 1개로 처리)
var num = A1.GetTheNumberOfBalances();
var BalanceCode = [];//잔고에서 중복코드 제외하고 종목코드를 저장할 배열변수
var OrderAble = false;//보유중인 종목인지 판단변수
for (i = 0; i < num; i++)
{
A1.SetBalance(i);
var hold = false;
if (A1.Balance.count > 0 && A1.Balance.position == 2)
{
for (y = 0; y < BalanceCode.length; y++)
{
if (A1.Balance.code == BalanceCode[i])
{
hold = true;
}
}
if (hold == false)
{
BalanceCode.push(A1.Balance.code);
}
if (A1.Balance.code == Main.GetOrderCode(Signal.code))
{
OrderAble = true;
}
}
}
if (BalanceCode.length < 100 || OrderAble == true )
{
BID = A1.OrderBuy(Signal.code, Signal.count,0, 1, 1);
Main.MessageLog("매수진입");
BuyFill = 0;
}
if (BalanceCode.length > 99 && OrderAble == false )
{
Main.MessageLog("잔고확인");
}
}
}
2016-03-28
2234
글번호 223870
답변완료
가이드라인 부탁드립니다.
수식작성 Q&A에 질문했던 유저입니다.
아래 내용에 대해 바쁘시겠지만, 가이드라인 부탁드립니다.
예스스팟을 이용해 주식매매를 하고자 합니다. 주로 스윙포지션으로 운용예정임.
YL로 작성된 종목검색 수식을 예스스팟에서 이용하고, 전략을 YL로 기술
공통) 리얼타임으로 1분마다 종목검색을 하여 검색된 종목에 대해 7%이내에서 상승률 상위 10개 종목에 대해(옵션으로 상승률이 아닌 전일 대비 거래량증가 상위 10개로 할 경우에는 어떻게 하는지도 알려주시면 감사) 확장차트를 생성하고, A전략과 B 이평선 인디케이터를 적용
(확장차트 최대허용생성은 N으로 변수화 시킴)
*** 진입전략
1) 진입신호 발생시 진입은 무조건 3회에 걸쳐 분할 진입, 매수 1호가 ~ 3호가
1.1) 만약 잔고에 편입되지 않은 종목은 신규진입하고, 잔고에 있는 종목이면 스킵
1.2) 진입시 잔고를 조회하여 한 종목당 최대 20%까지 허용, 신용매수가 가능한 종목은 신용으로 진입 (잔고가 만약 1,000만원 이고 신용으로 최대주문가능금액이 2000만원이면 종목당 최대 400만원까지 진입허용)
1.3) 10분후 미체결내역이 있으면 미체결분에 대해 매도 3호가에 진입시킴
*** 청산전략
2) 청산신호가 발생하지 않는 이상 보유
2.1) 청산신호가 발생하지 않았지만, 상한가 근처 (28%이상)에 도달할 경우 해당종목의 50%를 3번에 걸쳐 분할청산 (매도1호가 ~ 매도 3호가) 3분후 청산되지 않으면 매수 3호가에 던져 청산완료
2.2) 장중 청산신호가 발생하면 해당종목에 대해 3분할 청산주문함 (매도호가1 ~ 매도호가3에 주문함)
2.3) 2.2 연장선에서 10분이 지나면 모두 청산되어야 함. 만약 10분이 지나서도 미청산된 것이 있으면 매수 3호가에 던짐
2.4) 당일 진입한 종목의 수익률이 10%이상일 경우, M1이평선(확장차트에 이평선적용됨)을 하향돌파시 무조건 청산
2.4) 당일 청산된 종목이 있으면 재진입하지 않음
2.5) 청산완료되면 확장차트 삭제하고, 즉시 종목재검색을 하여 상위7%이내에서 편입되지 않은 종목중에 신규편입함 (진입조건은 위에 언급한것과 동일)
3) 다음날 장시작전, 편입되어 있는 종목에 대해 확장차트를 모두 생성하고, 1번에서 적용한 동일 YL전략으로 설정, 마찬가지로 청산신호 발생하기 이전까지 보유
기타 추가되어야 할 부분에 대해 함께 언급해주시면 감사하겠습니다.
내용이 다소 많은데 부탁드리겠습니다.
감사드립니다.
2016-03-18
2395
글번호 223860