예스스탁
예스스탁 답변
2015-06-25 10:05:54
안녕하세요
예스스탁입니다.
현재 수식에서 수량이 0이 발생하면 이유는
5호가 가격이 없어서 발생되는 내용 같습니다.
아래와 같이 처리하시면
매수주문시 매도5호가가 있으면 해당 가격으로 주문을 집행하고 없으면
현재가+5틱으로 주문을 내게 됩니다.
반대로 매도주문시 매수5호가가 있으면 해당 가격으로 주문을 내고
없으면 현재가-5틱 으로 주문을 내게 됩니다.
var Money = 50000;//금액
var Start;
var Bcode,Bprice,Bvol;
var Scode,Sprice,Svol;
function Main_OnStart()
{
Start = 0;
}
//신호발생
function Chart2_OnRiseSignal(Signal)
{
//차트 Buy 신호 발생
if (Signal.signalKind == 1)
{
Start = 1;
//매수종목코드
Bcode = MarketData1.code;
//매수종목 매도5호가
if (MarketData1.Ask(5) > 0)
Bprice = MarketData1.Ask(5);
else
Bprice = MarketData1.current+MarketData1.GetTickSize()*5;
//지정한 금액으로 수량계산
Bvol = Math.floor(Money/Bprice);
//매도 5호가에 지정한 수량 매수
Account1.OrderBuy(Bcode, Bvol,Bprice, 0);
}
//차트 Exitlong 신호 발생
if (Signal.signalKind == 2 && Start == 1)
{
//매수청산가격 매수5호가가 있으면 매수5호가로 없으면 현재가-5틱
if (MarketData1.Bid(5) > 0)
Bxprice = MarketData1.Bid(5);
else
Bxprice = MarketData1.current-MarketData1.GetTickSize()*5;
//매수5호가 매도
Account1.OrderSell(Bcode,Bvol,Bxprice, 0)
}
//차트 Sell 신호 발생
if (Signal.signalKind == 3)
{
Start = 1;
//매수주문종목
Scode = MarketData2.code;
//매수종목 매도 5호가
if (MarketData2.Ask(5) > 0)
Sprice = MarketData2.Ask(5);
else
Sprice = MarketData2.current+MarketData2.GetTickSize()*5;
//지정한 금액으로 수량계산
Svol = Math.floor(Money/Sprice);
//매도5호가에 매수주문
Account1.OrderBuy(Scode, Svol,Sprice, 0);
}
//차트 Exitshort 신호 발생
if (Signal.signalKind == 4 && Start == 1)
{
if (MarketData2.Bid(5) > 0)
Sxprice = MarketData2.Bid(5);
else
Sxprice = MarketData2.current-MarketData2.GetTickSize()*5;
Account1.OrderSell(Scode, Svol, Sxprice, 0);
}
}
즐거운 하루되세요
> 소총부대 님이 쓴 글입니다.
> 제목 : 1020 질문에 사용된 수식
> 안녕하세요?
아래 1020 질문 관련하여 사용한 수식입니다.
수식은 지극히 초보적인 것으로 예스스탁에서 초기에 올려주신 수식입니다.
1020질문 답변 바랍니다.
문제는 장 초반에 매수가 4주 정도는 되야 하는데 주문 수량이 0으로 찍히면서 주문이 안되었다는 겁니다. 거기다가 장 중반에는 프로그램이 잘 작동하는 것을 확인했습니다.
감사합니다.
//스크립트 객체 화면에서 아래와 같이 지정하고 식적용하시면 됩니다.
//계좌객체 추가 --> 속성에서 객체명은 Account1, 주문할 계좌번호 지정
//차트객체 추가 --> 속성에서 객체명은 Chart1, 차트아이디를 부여후 차트에 동일아이디 지정
//종목객체 추가 --> 속성에서 객체명은 MarketData1, 종목은 코덱스 레버리지로 지정
//종목객체 추가 --> 속성에서 객체명은 MarketData2, 종목은 코덱스 레버리지로 지정
//각 객체에 대한 설명은 예스스팟 도움말 참고하시기 바랍니다.
var Money = 50000;//금액
var Start;
var Bcode,Bprice,Bvol;
var Scode,Sprice,Svol;
function Main_OnStart()
{
Start = 0;
}
//신호발생
function Chart2_OnRiseSignal(Signal)
{
//차트 Buy 신호 발생
if (Signal.signalKind == 1)
{
Start = 1;
//매수종목코드
Bcode = MarketData1.code;
//매수종목 매도5호가
Bprice = MarketData1.Ask(5);
//지정한 금액으로 수량계산
Bvol = Math.floor(Money/Bprice);
//매도 5호가에 지정한 수량 매수
Account1.OrderBuy(Bcode, Bvol,Bprice, 0);
}
//차트 Exitlong 신호 발생
if (Signal.signalKind == 2 && Start == 1)
{
//매수5호가 매도
Account1.OrderSell(Bcode,Bvol,MarketData1.Bid(5), 0)
}
//차트 Sell 신호 발생
if (Signal.signalKind == 3)
{
Start = 1;
//매수주문종목
Scode = MarketData2.code;
//매수종목 매도 5호가
Sprice = MarketData2.Ask(5);
//지정한 금액으로 수량계산
Svol = Math.floor(Money/Sprice);
//매도5호가에 매수주문
Account1.OrderBuy(Scode, Svol,Sprice, 0);
}
//차트 Exitshort 신호 발생
if (Signal.signalKind == 4 && Start == 1)
{
//매수5호가에 매도
Account1.OrderSell(Scode, Svol, MarketData2.Bid(5), 0);
}