예스스탁
예스스탁 답변
2013-07-02 16:03:22
안녕하세요
예스스탁입니다
1.
예스스팟은 차트에 적용되는 예스랭귀지의 전략과는 다른 형태로
차트에 적용되는 것이 아닙니다.
예스스팟은 실시간으로 여러가지 복합적인 데이터를 수신받아
동작을 하게 구현하는 것이지 과거데이터에 적용해 리포트를 보는 용도의 전략툴이 아닙니다.
차트도 예스스팟에서는 단지 하나의 정보를 주는 객체일 뿐입니다.
2.
var upcond1 = false, upid1 = 0, upnum1 = 0, upfill1 = false, mcond1 = false, h1 = 0, xcond1, xprice1;
var upcond2 = false, upid2 = 0, upnum2 = 0, upfill2 = false, mcond2 = false, h2 = 0, xcond2, xprice2;
var upcond3 = false, upid3 = 0, upnum3 = 0, upfill3 = false, mcond3 = false, h3 = 0, xcond3, xprice3;
var dncond1 = false, dnid1 = 0, dnnum1 = 0, dnfill1 = false;
var dncond2 = false, dnid2 = 0, dnnum2 = 0, dnfill1 = false;
var dncond3 = false, dnid3 = 0, dnnum3 = 0, dnfill1 = false;
function Main_OnStart()
{
upcond1 = false;
upcond2 = false;
upcond3 = false;
dncond1 = false;
dncond2 = false;
dncond3 = false;
}
function Main_OnU*pdateMarket(sItemCode, lU*pdateID)
{
//MarketData1종목이 시세업데이트가 됨
if(MarketData1.code == sItemCode && lU*pdateID == 20001 && MarketData1.open > 0)
{
//시초가+a1 주문
//upcond1이 false인 상태에서 현재가가 시초가+a1에 도달하면
if (upcond1 == false && MarketData1.current >= MarketData1.open +a1)
{
Main.MessageList("시초가+a1만족","현재가",MarketData1.current,"시초가+a1",MarketData1.open +a1)
//upcond1은 true로 변경
upcond1 = true;
//매도5호가로 1계약 매수주문 (주문아이디는 upid1에 저장)
upid1 = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(5), 0);
upfill1 = false;//체결확인하는 변수는 false
mcond1 = false;//an+m1 도달확인용 변수
h1 = MarketData1.current;
xcond1 = 0;
}
if (upcond1 == true && MarketData1.current >= h1)
h1 = MarketData1.current;
//시초가+a2 주문
//upcond2가 false인 상태에서 현재가가 시초가+a2에 도달하면
if (upcond2 == false && MarketData1.current >= MarketData1.open +a2)
{
Main.MessageList("시초가+a2만족","현재가",MarketData1.current,"시초가+a2",MarketData1.open +a2)
//upcond2는 true로 변경
upcond2 = true;
//매도5호가로 1계약 매수주문 (주문아이디는 upid2에 저장)
upid2 = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(5), 0);
upfill2 = false;//체결확인하는 변수는 false
mcond2 = false;//an+m1 도달확인용 변수
h2 = MarketData1.current;
xcond2 = 0;
}
if (upcond2 == true && MarketData1.current >= h2)
h2 = MarketData1.current;
//시초가+a3 주문
//upcond3가 false인 상태에서 현재가가 시초가+a3에 도달하면
if (upcond3 == false && MarketData1.current >= MarketData1.open +a3)
{
Main.MessageList("시초가+a3만족","현재가",MarketData1.current,"시초가+a3",MarketData1.open +a3)
//upcond3은 true로 변경
upcond3 = true;
//매도5호가로 1계약 매수주문 (주문아이디는 upid2에 저장)
upid3 = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(5), 0);
upfill3 = false;//체결확인하는 변수는 false
mcond3 = false;//an+m1 도달확인용 변수
h3 = MarketData1.current;
xcond3 = 0;
}
if (upcond3 == true && MarketData1.current >= h3)
h3 = MarketData1.current;
//시초가-b1 주문
//dncond1이 false인 상태에서 현재가가 시초가-b1에 도달하면
if (dncond1 == false && MarketData1.current <= MarketData1.open-b1)
{
Main.MessageList("시초가-b1만족","현재가",MarketData1.current,"시초가-b1",MarketData1.open-b1)
//dncond1은 true로 변경
dncond1 = true;
//매도5호가로 1계약 매수주문 (주문아이디는 dnid1에 저장)
dnid1 = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(5), 0);
dnfill1 = false;//체결확인하는 변수는 false
}
//시초가-b2 주문
//dncond2이 false인 상태에서 현재가가 시초가-b2에 도달하면
if (dncond2 == false && MarketData1.current <= MarketData1.open-b2)
{
Main.MessageList("시초가-b1만족","현재가",MarketData1.current,"시초가-b1",MarketData1.open-b2)
//dncond2는 true로 변경
dncond2 = true;
//매도5호가로 1계약 매수주문 (주문아이디는 dnid2에 저장)
dnid2 = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(5), 0);
dnfill2 = false;//체결확인하는 변수는 false
}
//시초가-b3 주문
//dncond3이 false인 상태에서 현재가가 시초가-b3에 도달하면
if (dncond3 == false && MarketData1.current <= MarketData1.open-b3)
{
Main.MessageList("시초가-b3만족","현재가",MarketData1.current,"시초가-b3",MarketData1.open-b1)
//dncond3은 true로 변경
dncond3 = true;
//매도5호가로 1계약 매수주문 (주문아이디는 dnid1에 저장)
dnid3 = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(5), 0);
dnfill2 = false;//체결확인하는 변수는 false
}
//시초가+a1이 체결된 이후
if (upfill1 == true)
{
//현재가가 (시초가+a1)+m1에 도달하면 mcond1은 true
if (MarketData1.current >= (MarketData1.open+a1)+m1)
mcond1 = true;
// mcond1이 false인 상태에서 현재가가 (시초가+a1)-m2에 도달하면 매수5호가로 1계약 매도주문
if (mcond1 == false && MarketData1.current <= (MarketData1.open+a1)-m2)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(5), 0);
xcond1 = 1;
}
if (MarketData1.current <= h1-m1)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(5), 0);
xcond1 = 2;
xprice1 = h1-m1;
}
if (xcond1 == 2 && MarketData1.current > xprice1)
{
upid1 = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(5), 0);
upfill1 = false;//체결확인하는 변수는 false
mcond1 = false;//an+m1 도달확인용 변수
h1 = MarketData1.current;
xcond1 = 0;
}
}
//시초가+a2이 체결된 이후
if (upfill2 == true)
{
//현재가가 (시초가+a2)+m1에 도달하면 mcond2은 true
if (MarketData1.current >= (MarketData1.open+a2)+m1)
mcond2 = true;
// mcond2이 false인 상태에서 현재가가 (시초가+a2)-m2에 도달하면 매수5호가로 1계약 매도주문
if (mcond2 == false && MarketData1.current <= (MarketData1.open+a2)-m2)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(5), 0);
xcond2 = 1;
}
if (MarketData1.current <= h1-m1)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(5), 0);
xcond2 = 2;
xprice2 = h2-m1;
}
if (xcond2 == 2 && MarketData1.current > xprice2)
{
upid2 = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(5), 0);
upfill2 = false;//체결확인하는 변수는 false
mcond2 = false;//an+m1 도달확인용 변수
h2 = MarketData1.current;
xcond2 = 0;
}
}
//시초가+a3이 체결된 이후
if (upfill1 == true)
{
//현재가가 (시초가+a3)+m1에 도달하면 mcond3은 true
if (MarketData1.current >= (MarketData1.open+a3)+m1)
mcond3 = true;
// mcond3이 false인 상태에서 현재가가 (시초가+a3)-m2에 도달하면 매수5호가로 1계약 매도주문
if (mcond3 == false && MarketData1.current <= (MarketData1.open+a3)-m2)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(5), 0);
xcond3 = 1;
}
if (MarketData1.current <= h1-m1)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(5), 0);
xcond3 = 2;
xprice3 = h3-m1;
}
if (xcond3 == 2 && MarketData1.current > xprice3)
{
upid3 = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(5), 0);
upfill3 = false;//체결확인하는 변수는 false
mcond3 = false;//an+m1 도달확인용 변수
h3 = MarketData1.current;
xcond3 = 0;
}
}
}
}
//수식에서 발생한 주문에 대해 주문응답이 수신되면
function Main_OnOrderResponse(OrderResponse)
{
//upid1주문이 접수되면 주문번호를 upnum1에 주문번호 저장
if (OrderResponse.orderID == upid1)
upnum1 = OrderResponse.orderNum;
//upid2주문이 접수되면 주문번호를 upnum2에 주문번호 저장
if (OrderResponse.orderID == upid2)
upnum2 = OrderResponse.orderNum;
//upid3주문이 접수되면 주문번호를 upnum3에 주문번호 저장
if (OrderResponse.orderID == upid3)
upnum3 = OrderResponse.orderNum;
//dnid1주문이 접수되면 주문번호를 dnnum1에 주문번호 저장
if (OrderResponse.orderID == dnid1)
dnnum1 = OrderResponse.orderNum;
//dnid2주문이 접수되면 주문번호를 dnnum2에 주문번호 저장
if (OrderResponse.orderID == dnid2)
dnnum2 = OrderResponse.orderNum;
//dnid3주문이 접수되면 주문번호를 dnnum3에 주문번호 저장
if (OrderResponse.orderID == dnid3)
dnnum3 = OrderResponse.orderNum;
}
//수식에서 발생한 주문에 대해 체결응답이 수신되면
function Main_OnNotifyFill(NotifyFill)
{
//upnum1주문번호가 체결되면 upfill1을 true로 변경
if (NotifyFill.orderNum == upnum1)
upfill1 = true;
//upnum2주문번호가 체결되면 upfill2를 true로 변경
if (NotifyFill.orderNum == upnum2)
upfill2 = true;
//upnum3주문번호가 체결되면 upfill3을 true로 변경
if (NotifyFill.orderNum == upnum3)
upfill3 = true;
//dnnum1주문번호가 체결되면 dnfill1을 true로 변경
if (NotifyFill.orderNum == dnnum1)
dnfill1 = true;
//dnnum2주문번호가 체결되면 dnfill2를 true로 변경
if (NotifyFill.orderNum == dnnum2)
dnfill2 = true;
//dnnum3주문번호가 체결되면 dnfill3을 true로 변경
if (NotifyFill.orderNum == dnnum3)
dnfill3 = true;
}
스팟수식은 참고용으로만 사용하시기 바랍니다.
스팟수식은 저희쪽에서 모든걸 검증해서 수식을 작성해 드리지는 않습니다.
충분히 검증하시고 사용하시기 바랍니다.
즐거운 하루되세요
> 음양조파 님이 쓴 글입니다.
> 제목 : 질문
> 너무 많이 여쭈어 보니 죄송하지만 워낙 아는 게 없어서..
1) 예스스팟으로 전략을 짜 본 후
동영상강좌에서 본대로 시뮬레이션도 하고 뭐라더라 최적화도 하고 성능도 보고 전진분석도 하고 경험해보고 싶어서
해당종목 차트를 열고 전략적용을 해 보려고 했더니 전략명단에 나타나지 않습니다.
제가 짜 본 전략이 차트를 이용하는 것이 아니라서 그런가 싶기도 합니다만
예스스팟으로 짠 전략은 최적화나 전진분석을 어떤 방식으로 하나요?
2) 시가 위 a1 지점에서 매수한 것이 있는데 그것이 매수후의 최고점(h1)에서 m1 만큼 떨어지면 매도하고, 그 후 가격이 회복되어 다시 h1-m1에 이르면 재매수하는 식을 보여주세요(예스스팟으로). 그리고, h1-m1이 아니라 h1에 이르면 재매수하는 식은 어떻게 달라지는지요? (매수하는 식을 어떻게 쓰는지는 이미 가르쳐주셔서 알고 있으니, 매수 이후 그렇게 구현하고자 할 때의 방식을 가르쳐주시면 됩니다)