답변완료
문의 드립니다.
항상 상세하시고 친절하신 답변에 감사드립니다.
예스스팟에서 손절 익절 추적스탑 등을 구현하는 방법을 공부하려고 하는데,
예스스팟의 "객체정보" 화면에서 보면,
StopLoss, StopPrifitTarget, StopTrailing이라는 객체들이 보입니다.
YesLanguage의 SetStopLoss, SetStopPrifitTarget, SetStopTrailing이라는 강제청산함수들과 기능이 매우 유사할 것으로 짐작이 되는데,
이 객체들의 실제 적용례를 부탁드립니다.
1.
StopLoss,
StopPrifitTarget,
StopTrailing
객체들의 실제 사용례를, 아주 간단하게라도 예문을 각각 보여 주시면 대단히 감사하겠습니다.
2.
특히, 이 객체들의 properties 중에 보면 "color"라고 하는 프라퍼티가 있어서, 화면상에 손절선, 익절선, 추적스탑선 등을 색깔로 표시해 주는 좋은 기능일 것으로 짐작이 되는데, 시뮬레이션 등을 할 수 없는 예스스팟에서 색깔로라도 그 것들을 볼 수 있으면 크게 도움이 될 거 같습니다.
이 color의 사용례도 (소스 코드 문장 중에) 보여 주시면 대단히 감사하겠습니다.
(3. 더불어서, StopEndOfDay, StopInactivity 객체들의 예문도 짧게라도 보여 주시면 감사하겠습니다)
감사합니다.
2013-08-09
1022
글번호 222496
답변완료
옵션데이타 데이타베이스 저장
옵션 데이타를 개인데이타 베이스에 저장하려 합니다.
아래와 같이 수식을 만들었는데
장시작시 부터 장 종료시까지만 데이타를 등록하고자 하려면
무엇을 추가해야 할까요 ?
var CCode = new Array(101);
var PCode = new Array(101);
var CPrice = new Array(101);
var PPrice = new Array(101);
var SQL_C;
var SQL_P;
function Main_OnStart()
{
for(var i = -50; i <= 50; i++)
{
CCode[50+i] = Option.GetATMCallRecent(i);
PCode[50+i] = Option.GetATMPutRecent(i);
Main.ReqMarketData(CCode[50+i], 1,0);
Main.ReqMarketData(PCode[50+i], 1,0);
}
Main.SetTimer(1, 60 * 1000);
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
for(var i = 0; i <= 100; i++)
{
CPrice[i] = Option.GetCurrentByCode(CCode[i]);
PPrice[i] = Option.GetCurrentByCode(PCode[i]);
SQL_C = "OPTION_DATA (O_CODE, O_VALUE, O_TIME) VALUES ('" + CCode[i] + "' , " + CPrice[i] + ", SYSTIMESTAMP )";
SQL_P = "OPTION_DATA (O_CODE, O_VALUE, O_TIME) VALUES ('" + PCode[i] + "' , " + PPrice[i] + ", SYSTIMESTAMP )";
DataBase1.In$ert(SQL_C);
DataBase1.In$ert(SQL_P);
}
}
}
2013-08-05
497
글번호 222489
답변완료
ReqMarketData - 옵션 종목 시세 업데이트
아래 코드는 다른 분의 문의 내용에 답변 주신 내용입니다. 차트 신호 발생 시 현재 진입한 옵션 종목의 시세를 확인하고 주문하는 내용이었습니다.
한 가지 추가로 질문 드릴 내용은 차트 신호와 관계 없이 현재 진입 중인 옵션 종목의 현재 시세를 계속 업데이트하면서 확인하려면 어떻게 해야하는지요?
==============================================
var BuyCallCode;
var Sig;
var Request;
function Chart1_OnRiseSignal(Signal)
{
//발생된 신호종류 저장
Sig = Signal.signalKind;
//buy신호 발생하면
if (Sig == 1 )
{
//ATM 콜옵션 종목코드 저장
BuyCallCode = Option.GetATMCallRecent(0);
//BuyCallCode 종목객체 요청
//(종목코드는 BuyCallCode, 일봉갯수는 1개(전일것만), 수급데이터는 0개)
Main.ReqMarketData(BuyCallCode, 1,0);
//Request는 true(매수신호 발생 후 한번만 요청하기 위한 변수)
Request = true;
}
}
//요청한 종목객체 생성완료
function Main_OnRcvMarketData(MarketData)
{
//item에 수신받은 종목객체 저장
var item = MarketData;
//최근 buy신호 발생되었고
//Request는 true이고
//생성된 종목객체의 종목코드가 BuyCallCode와 같으면
if (Sig == 1 && Request == true && item.code == BuyCallCode)
{
//Request는 false
Request = false;
//현재가가 전일종가보다 크면
if (item.current > item.GetPrevClose(1));
{
//BuyCallPrice에 매도2호가 저장
var BuyCallPrice = item.Ask(2);
//BuyCallCode종목을 BuyCallPrice에 지정가 매수주문
Account1.OrderBuy(BuyCallCode, 1, BuyCallPrice, 0);
//주문 후 종목객체 삭제
Main.RemoveMarketData(item);
}
}
}
2013-08-05
526
글번호 222486
답변완료
엑셀 개체 관련 문의
var nSheetIndex = 1;
// 엑셀 시트에서 해당 구역 행을 삭제하면서 RowCount = 0 이 되기를 기대
// 행 전체를 삭제하려면 ?
XLSInventory.Clear(nSheetIndex, "A1", "Z65536");
for ( var i=0; i<10; i++) {
// RowCount = 1 부터 10 에 데이터가 추가되기를 기대
XLSInventory.SetRowData(nSheetIndex, "A"+( XLSInventory.GetRowCount(nSheetIndex) + 1 ), i,i*2,i*3,i*4);
Main.MessageList(XLSInventory.GetRowCount(nSheetIndex));
}
위 코드가 기대한대로 동작을 하지 않는데, 어떻게 해결해야 할런지요 ?
2013-08-02
651
글번호 222484
답변완료
문의 드립니다.
안녕하세요.
질문 1.
예스스팟을 이용해서,
가령 코스피200선물을 거래하는 경우,
주간장에서는 10분봉 차트를 이용하고
야간장에서는 5분봉 차트를 이용하는 것이, 예스스팟에 의해 자동으로 선택되게 하는 것이 가능한지요?
가능하다면 소스를 어떻게 짜야 할지 알려 주시면 대단히 감사하겠습니다.
(좀더 일반적으로 표현한다면,
예스스팟을 이용하여,
지정한 시간대에,
지정한 분봉차트 내지 지정한 틱 차트를 바탕으로
매매되게하는 방법)
질문 2.
미체결 주문의 주문번호를 알아 내는 방법 부탁드립니다.
미체결 주문을 취소하기 위해서 주문번호가 필요한데,
SetUnfillIndex를 써서, 루프를 돌려서
// A. Buy 신호 발생.
if (Signal.signalKind == 1)
{
// 전체 미체결 객체 중에 차트 주종목과 같은 종목으로 주문낸 미체결 매수 주문, 미체결 매도 주문이 있는지를 찾음
A_Unfill_Buy_Cond = false; // 미체결 매수 주문이 있으면 true, 없으면 false
A_Unfill_Sell_Cond = false;// 미체결 매도 주문이 있으면 true, 없으면 false
// 사실 이 부분을 위해선, Unfill.count를 이용하는 것도 가능할 텐데...
var NumberOfUnfills = Account1.GetTheNumberOfUnfills();
for (var i=1; i<=NumberOfUnfills; i++)
{
Account1.SetUnfillIndex(i);
var ChartCode = Main.GetOrderCode(Chart1.GetCode(1));
if (Account1.Unfill.code == ChartCode && Account1.Unfill.orderKind == 2)
// 여기에서의 Unfill은 미체결 매수주문을 의미.
{
A_Unfill_Buy_Cond = true;
// 이 때의 i번째 Unfill은 차트 주종목(과 같은 종목)이고, 또 매수 미체결이다.
A_Unfill_Buy_OrderNumber = Account1.Unfill.orderNum
}
if (Account1.Unfill.code == ChartCode && Account1.Unfill.orderKind == 1)
// 여기에서의 Unfill은 미체결 매도 주문을 의미.
{
A_Unfill_Sell_Cond = true;
// 이 때의 i번째 Unfill은 차트 주종목(과 같은 종목)이고, 또 매도 미체결이다.
A_Unfill_Sell_OrderNumber = Account1.Unfill.orderNum
}
이렇게 해 보고 있는데, 실제 적용을 해 보면,
ReferenceError: A_Unfill_Buy_Cond is not defined
ReferenceError: C_Unfill_Buy_OrderNumber is not defined
이런 오류보고가 계속 나옵니다.
(위의 A는 Buy 신호 발생의 경우이고, C는 Sell 신호 발생의 경우입니다).
오타는 최대한 검토해서 없는 것으로 보이는데, 논리적인 문제가 있는 것 같습니다.
위 소스의 문제점을 지적해 주시고 수정해 주셔도 대단히 감사하겠고,
위 소스를 완전히 무시하시고, 미체결 주문의 주문번호를 알아 내는 다른 방법을 알려 주셔도 대단히 감사하겠습니다.
질문 3.
특히, 2번 질문에 대해, Unfill.count를 이용해서 하는 방법이 가능하다면 코드를 알려 주시면 대단히 감사하겠습니다.
감사합니다.
2013-07-31
611
글번호 222478