커뮤니티

문의드립니다.

프로필 이미지
사과쥬스
2016-03-28 23:41:08
2220
글번호 223870
답변완료
노고에 감사드립니다. 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("잔고확인"); } } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2016-04-18 21:11:20

안녕하세요 예스스탁입니다. 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; Main.MessageList("매수신호발생",Position,"신호종류",Signal.signalKind); BID = A1.OrderBuy(Signal.code, Signal.count,0, 1, 1); Main.MessageList("유통융자 매수진입 : ","ID",BID,"종목코드",Signal.code,"수량",Signal.count); 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; Main.MessageList("주문응답 : 응답전체내용",OrderResponse); } } function Main_OnNotifyFill(NotifyFill) { if (Position == 1 && NotifyFill.orderNum == Bnum) { BuyFill = 1; LOANDATE = NotifyFill.loanDate; Main.MessageList("체결응답 : 응답전체내용",NotifyFill); } } 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); Main.MessageList("셋팅된 잔고정보",A1.Balance); 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.MessageList("매도실행 : ","종목코드",A1.Balance,"수량",A1.Balance.count,"대출종류",A1.Balance.loanKind,"대출일",A1.Balance.loanDate); } //Position변수는 0 Position = 0; } } 2. var Position; var BID; var BuyFill; function C1_OnRiseSignal(Signal) { if (Position == 0 && Signal.signalKind == 1 ) { Position = 1; Main.MessageList("매수신호발생",Position,Signal.signalKind) // 보유종목수 산정(동일종목코드 1개로 처리) var num = A1.GetTheNumberOfBalances(); var BalanceCode = [];//잔고에서 중복코드 제외하고 종목코드를 저장할 배열변수 var OrderAble = false;//보유중인 종목인지 판단변수 Main.MessageList("잔고보유종목수",num); for (i = 0; i < num; i++) { A1.SetBalance(i); Main.MessageList("셋팅된 잔고정보",A1.Balance); 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); Main.MessageList("잔고종목추가 ",BalanceCode); } if (A1.Balance.code == Main.GetOrderCode(Signal.code)) { OrderAble = true; Main.MessageList("잔고와차트종목코드 동일여부 확인",OrderAble); } } } //if (BalanceCode.length < 100 || OrderAble == true ) //원식이 or로 연결되어 잇는데 and같습니다. if (BalanceCode.length < 100 && OrderAble == true ) { Main.MessageList("유통융자매수","주문종목",Signal.code,"주문수량",Signal.count); BID = A1.OrderBuy(Signal.code, Signal.count,0, 1, 1); BuyFill = 0; } if (BalanceCode.length > 99 && OrderAble == false ) { Main.MessageList("잔고확인"); } } } 즐거운 하루되세요 > 사과쥬스 님이 쓴 글입니다. > 제목 : 문의드립니다. > 노고에 감사드립니다. 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("잔고확인"); } } }