안녕하세요? 아래 수식 작성 부탁드립니다 (매번 큰 도움 감사드립니다.)
1) (예를들어) 삼성전자 를 10주 기보유 (스마트폰 등으로 몇일전에 매수)
2) 기 보유한 삼성전자가 예스트레이더 차트(차트명 C1)에서 시스템(시스템명: S1) 적용되어 있음
3) 시스템 S1에서 매도신호 발생
4) 예스 스팟으로 매도신호 받아서 매도
-------------------------------------
위의 상황을 아래 수식으로 작성했을때, 이미 해당종목에 대해 보유 수량이 있음에도
매도신호가 발생을 안하네요..
도움 부탁드립니다.
(변수 선언 부분은 글에서 제거했습니다.)
function Main_OnStart()
{
Main.MessageList("시작합니다.");
Main.MessageList("C1 차트종목: ",C1.GetCode(1));
//S2차트종목코드를 불러와 종목객체를 요청
Main.ReqMarketData(C1.GetCode(1), 0, 0);
Start = 0;
state1 = 0;
}
//요청한 종목객체가 생성되어 수신되면
function Main_OnRcvMarketData(MarketData)
{
//현재 수신된 종목객체가 요청한 종목과 같으면
//item에 종목객체를 저장(이후에 item이 해당 종목객체로 사용됨)
if (MarketData.code == C1.GetCode(1))
SSEobject = MarketData;
}
function C1_OnRiseSignal(Signal)
{
Skind = Signal.signalKind;
Scode = Signal.code;
Scount = Signal.count;
if (Signal.signalKind == 2)
{
A1.SetBalance(scode,0);
BxID=A1.OrderSell(Scode,A1.Balance.count,SSEobject.current,0);
Main.MessageLog("매도주문");
Start1 = 0;
//타이머 실행
Main.MessageLog("매도주문 후 타이머20초 시작");
Main.SetTimer(2, 1000);//1초 타이머
}
}
function Main_OnOrderResponse(OrderResponse)
{
//매수주문 접수되면 주문번호 저장
if (OrderResponse.orderID == BuyID)
{
BuyNum = OrderResponse.orderNum;
}
//매수청산주문 접수되면 주문번호 저장
if (OrderResponse.orderID == BxID)
{
BxNum = OrderResponse.orderNum;
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 2)
{
//2번 타이머 종료
Main.KillTimer(2);
//BxNum주문번호에 대한 미체결 객체 설정
A1.SetUnfillOrderNumber(BxNum);
//설정된 미체결객체에 잔량이 있으면
if (A1.Unfill.count > 0)
{
//BxNum주문 정정 (매수1호가로 정정)
if (A1.Unfill.price != SSEobject.Bid(1))
{
BxID = A1.OrderReplacePrice(BxNum, SSEobject.Bid(1));
Main.MessageLog("매도 정정");
Main.SetTimer(3, 1000);
}
}
}
if (nEventID == 3)
{
//2번 타이머 종료
Main.KillTimer(3);
//BxNum주문번호에 대한 미체결 객체 설정
A1.SetUnfillOrderNumber(BxNum);
//설정된 미체결객체에 잔량이 있으면
if (A1.Unfill.count > 0)
{
//BxNum주문 정정 (매수1호가로 정정)
if (A1.Unfill.price != SSEobject.Bid(1))
{
BxID = A1.OrderReplacePrice(BxNum, SSEobject.Bid(1));
Main.MessageLog("매도 정정");
}
}
}
}
답변 1
예스스탁
예스스탁 답변
2019-07-18 14:34:16
안녕하세요
예스스탁입니다.
function C1_OnRiseSignal(Signal)
{
Skind = Signal.signalKind;
Scode = Signal.code;
Scount = Signal.count;
if (Signal.signalKind == 2)
{
A1.SetBalance(scode,0);
위 내용에 보시면 Scode에 종목코드를 저장하고
잔고셋팅에는 scode로 s가 소문자입니다.
스팟은 자바스크립트 언어로 대소문자를 업격히 구분합니다.
A1.SetBalance(Scode,0);
선언한 이름과 똑같이 대소문자 사용해 주셔야 합니다.
다른 변수도 선업과 다르게 대소문자 사용되지 않았는지 살펴보시기 바랍니다.
즐거운 하루되세요
> adino30 님이 쓴 글입니다.
> 제목 : 기 보유종목 매도(현물)
> 안녕하세요? 아래 수식 작성 부탁드립니다 (매번 큰 도움 감사드립니다.)
1) (예를들어) 삼성전자 를 10주 기보유 (스마트폰 등으로 몇일전에 매수)
2) 기 보유한 삼성전자가 예스트레이더 차트(차트명 C1)에서 시스템(시스템명: S1) 적용되어 있음
3) 시스템 S1에서 매도신호 발생
4) 예스 스팟으로 매도신호 받아서 매도
-------------------------------------
위의 상황을 아래 수식으로 작성했을때, 이미 해당종목에 대해 보유 수량이 있음에도
매도신호가 발생을 안하네요..
도움 부탁드립니다.
(변수 선언 부분은 글에서 제거했습니다.)
function Main_OnStart()
{
Main.MessageList("시작합니다.");
Main.MessageList("C1 차트종목: ",C1.GetCode(1));
//S2차트종목코드를 불러와 종목객체를 요청
Main.ReqMarketData(C1.GetCode(1), 0, 0);
Start = 0;
state1 = 0;
}
//요청한 종목객체가 생성되어 수신되면
function Main_OnRcvMarketData(MarketData)
{
//현재 수신된 종목객체가 요청한 종목과 같으면
//item에 종목객체를 저장(이후에 item이 해당 종목객체로 사용됨)
if (MarketData.code == C1.GetCode(1))
SSEobject = MarketData;
}
function C1_OnRiseSignal(Signal)
{
Skind = Signal.signalKind;
Scode = Signal.code;
Scount = Signal.count;
if (Signal.signalKind == 2)
{
A1.SetBalance(scode,0);
BxID=A1.OrderSell(Scode,A1.Balance.count,SSEobject.current,0);
Main.MessageLog("매도주문");
Start1 = 0;
//타이머 실행
Main.MessageLog("매도주문 후 타이머20초 시작");
Main.SetTimer(2, 1000);//1초 타이머
}
}
function Main_OnOrderResponse(OrderResponse)
{
//매수주문 접수되면 주문번호 저장
if (OrderResponse.orderID == BuyID)
{
BuyNum = OrderResponse.orderNum;
}
//매수청산주문 접수되면 주문번호 저장
if (OrderResponse.orderID == BxID)
{
BxNum = OrderResponse.orderNum;
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 2)
{
//2번 타이머 종료
Main.KillTimer(2);
//BxNum주문번호에 대한 미체결 객체 설정
A1.SetUnfillOrderNumber(BxNum);
//설정된 미체결객체에 잔량이 있으면
if (A1.Unfill.count > 0)
{
//BxNum주문 정정 (매수1호가로 정정)
if (A1.Unfill.price != SSEobject.Bid(1))
{
BxID = A1.OrderReplacePrice(BxNum, SSEobject.Bid(1));
Main.MessageLog("매도 정정");
Main.SetTimer(3, 1000);
}
}
}
if (nEventID == 3)
{
//2번 타이머 종료
Main.KillTimer(3);
//BxNum주문번호에 대한 미체결 객체 설정
A1.SetUnfillOrderNumber(BxNum);
//설정된 미체결객체에 잔량이 있으면
if (A1.Unfill.count > 0)
{
//BxNum주문 정정 (매수1호가로 정정)
if (A1.Unfill.price != SSEobject.Bid(1))
{
BxID = A1.OrderReplacePrice(BxNum, SSEobject.Bid(1));
Main.MessageLog("매도 정정");
}
}
}
}