예스스탁
예스스탁 답변
2013-10-23 20:39:46
안녕하세요
예스스탁입니다.
1.
올려주신 내용 최대한 빠른시간안에 확인해서 처리하도록 하겠습니다.
2.
아래는 수식으로 확장차트를 생성하는 식입니다.
각 함수의 매개변수값은 도움말에서 확인하시기 바랍니다.
별도의 객체 추가없이 해당 수식만 복사해 붙여넣으신 후에
적용해 보시면 됩니다.
function Main_OnStart()
{
//차트설정 - 연결선물,5분봉,5000개, 수정주가X, 갭보정X
var ChartSet = new ReqChartItem("00000000", 5, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false);
//시스템 설정
var SystemInputSet = new Array(new YLInputVar("shortPeriod", "13"),new YLInputVar("longPeriod", "27"));
var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT,
1, // 거래수량
123456789, // 자산
1, // 단위수량
0.1, 0.2, CALCMETHOD_PERCENT, // 진입/청산 수수료
0.3, 0.4, CALCMETHOD_POINT, // 진입/청산 슬리피지
PYRAMIDING_ALL, // 피라미딩 설정여부
1000, // 최대진입수량
20); // 최대진입횟수
var StopSet = new SystemStopInfo(new StopLoss(1, CALCMETHOD_PERCENT), // 손절매
new StopTrailing(2, 3, CALCMETHOD_PERCENT, 0), // 최대수익대비하락
new StopProfitTarget(4, CALCMETHOD_PERCENT), // 목표수익
new StopInactivity(5, 6, CALCMETHOD_PERCENT), // 최소가격변화
new StopEndOfDay(150000));
var SystemSet = new SystemInfo("DMI",YL_TYPE_NORMAL,SystemInputSet,TradeSet,StopSet);
//지표 설정
//지표명 MACD를 기간 10,20으로 설정해서 차트에 적용
I1 = new IndicatorInfo("MACD",
YL_TYPE_NORMAL,
new Array(new YLInputVar("shortPeriod", "10"),new YLInputVar("longPeriod", "20")));
//지표명 Stochastics를 기간 10,5,5로 설정해서 차트에 적용
I2 = new IndicatorInfo("Stochastics",
YL_TYPE_NORMAL,
new Array(new YLInputVar("Period", "10"),new YLInputVar("Period2", "5"),new YLInputVar("Period3", "5")));
var IndicatorSet = new Array(I1,I2);
//참조데이터 추가
var R1 = new ReqChartItem("EI734", 5, CHART_PERIOD_MINUTE, 300, CHART_REQCOUNT_BAR, false, false)
var R2 = new ReqChartItem("EI735", 5, CHART_PERIOD_MINUTE, 300, CHART_REQCOUNT_BAR, false, false)
var ReferDataSet = new Array(R1,R2);
//지정한 설정으로 차트생성을 요청
Main.ReqChartEx(ChartSet,SystemSet,IndicatorSet,ReferDataSet);
}
3,
차트만 생성하고 시스템이나 지표, 참조데이터 설정하지 않으실 경우에는
아래와 같이 Main.ReqChartEx에 차트설정값만 넣어주시면 됩니다.
function Main_OnStart()
{
//차트설정 - 연결선물,5분봉,5000개, 수정주가X, 갭보정X
var ChartSet = new ReqChartItem("00000000", 5, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false);
//지정한 설정으로 차트생성을 요청
Main.ReqChartEx(ChartSet);
}
즐거운 하루되세요
> 히말라야 님이 쓴 글입니다.
> 제목 : 확장차트를 만들때 현상
> 안녕하세요.
늘 수고 하십니다.
1.확장차트 검증에러
확장차트를 만들고 나서 검증을 누르면 다음과 같이 오류보고 창에 에러메시지가 생깁니다.
확장차트가 에러가 난것으로 보여 스크립트를 저장하고,적용해보면 정상적으로 나옵니다.
이후 일부 코딩을 수정하여 SyntaxError 가 나게 코딩을 처리하여 저장하기 전까지는
코딩이 에러가 있는지 없는지 조차 구분이 안되고
확장차트에 대한 에러가 지속적으로 나오고, 다시 저장을 해서 스크립트를 적용하면 그때서야 에러메시지를 출력합니다.
확인 부탁드립니다.
2. 수식으로 확장챠트 만들기
ReqChartEx(ReqChartItem, SystemInfo, IndicatorInfo, ReqRefItem)
를 사용하여 확장챠트를 만드는 샘플을 부탁드립니다.
SystemInfo, IndicatorInfo, ReqRefItem를 사용하지 않으려면 어떻게 처리하는지도
부탁드리겠습니다.
시도를 많이 해보았는데.... ㅠ.ㅠ 계속 예스트레이더가 다운되네요
수고하십니다.
위의 수식대로 정상적으로 코드를 통해 확장차트를 만들었습니다.
위의 수식중 다음과같이 출력하여 스크립트를 적요하면
TypeError:Object#<Object> has no mothod 'GetCode' 라는 에러메시지가 출력됩니다.
YesSpot Studio 창에서 확장차트 객체추가를 통해 사용할수 있는 method를 사용할 수 없는지
궁금합니다.
function Main_OnStart()
{
//차트설정 - 연결선물,5분봉,5000개, 수정주가X, 갭보정X
var ChartSet = new ReqChartItem("00000000", 5, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false);
//지정한 설정으로 차트생성을 요청
Main.ReqChartEx(ChartSet);
Main.MessageList("생성테스트" ,"코드 " , ChartSet.GetCode(1));
}
요새 예스스팟 마스터해가는 재미가 쏠쏠합니다.
그래서 게시판에 올라오는 글들을 보면 그 쏠쏠한 재미를 느끼시도록 해 드리고 싶어
손이 간질간질해 실례를 무릎쓰고 달아봅니다.
글을 보니 자바스크립트에 대한 공부가 선행되셔야 할 것 같군요.
var ChartSet = new ReqChartItem...
이 스크립트는 ChartSet 이라는 이름으로 ReqChartItem 이라는 객체를 생성하겠다는 의미입니다.
ChartSet 은 ReqChartItem 객체라는 변수인거죠.
Main 객체의 ReqChartEx 메쏘드의 첫번째 매개변수로 ReqChartItem 객체가 필요하니
Main.ReqChartEx(ChartSet);
이 스크립트까지는 잘 된거죠.
그런데 그 밑의 ChartSet.GetCode(1) 에서 GetCode 메쏘드는 ChartEx 확장차트의 메쏘드죠.
YesSpot Studio 의 객체정보 창을 차근차근 살펴보세요. ReqChartItem 객체는 프로퍼티만 가지고 있는 객체입니다.
그러니 당연히 GetCode 메쏘드는 모를 수 밖에요.
그리고, 저렇게 스크립트로 만들어진 확장차트 객체는 바로 사용할 수 없습니다.
MarketData 객체를 스크립트로 만들 때 OnRcvMarketData 이벤트가 발생하는 것처럼
ChartEx 객체를 스크립트로 요청하면 OnRcvChartEx 라는 이벤트가 발생하게 됩니다.
OnRcvMarketData 이벤트에서 요청에 의해 만들어진 MarketData 객체가 매개변수로
전달되는 것처럼 OnRcvChartEx 이벤트에서 요청에 의해 만들어진 ChartEx 객체가
매개변수로 전달되게 되죠. 따라서 스크립트에서 만들려고 하는 ChartEx 객체는
OnRcvChartEx 가 발생되기 전까지는 사용할 수 없습니다.
따라서 스크립트는 다음과 같이 변경되어야만 하는거죠.
function Main_OnStart()
{
var ChartSet = new ReqChartItem("00000000", 5, CHART_PERIOD_MINUTE, 5000);
Main.ReqChartEx(ChartSet);
}
function Main_OnRcvChartEx(ChartEx)
{
Main.MessageList("생성테스트" ,"코드 " , ChartEx.GetCode(1));
}
객체 정보창을 잘 보시면 알게되겠지만 ReqChartEx 는 매개변수가 달랑 4개인 단순한 메쏘드죠.
각 매개변수가 객체에 배열이라 모든 기능을 다 쓰려면 엄청난 스크립팅이 필요하게 되는거죠.
단순히 Main.ReqChartEx(new ReqChartItem("005930")); 이렇게만 해도 삼성전자 5분 300봉이 만들어진답니다.
참 쉽죠~ ㅋㅋ
> 히말라야 님이 쓴 글입니다.
> 제목 : Re : Re : 확장차트를 만들때 현상
> 수고하십니다.
위의 수식대로 정상적으로 코드를 통해 확장차트를 만들었습니다.
위의 수식중 다음과같이 출력하여 스크립트를 적요하면
TypeError:Object#<Object> has no mothod 'GetCode' 라는 에러메시지가 출력됩니다.
YesSpot Studio 창에서 확장차트 객체추가를 통해 사용할수 있는 method를 사용할 수 없는지
궁금합니다.
function Main_OnStart()
{
//차트설정 - 연결선물,5분봉,5000개, 수정주가X, 갭보정X
var ChartSet = new ReqChartItem("00000000", 5, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false);
//지정한 설정으로 차트생성을 요청
Main.ReqChartEx(ChartSet);
Main.MessageList("생성테스트" ,"코드 " , ChartSet.GetCode(1));
}
불꽃기사닙 좋은 다변 감사합니다.
자바에 대해 공부해야지 하고 아직 공부 못하고 있어요..ㅠ.ㅠ
스팟이 너무 잘 만들어져서 공부를 안해도 스팟을 사용할 수 있다는게 신기할 따름입니다.
ㅋㅋㅋ
즐거운 투자 되셔용 ^^
아 질문하나 더 드릴께요
1. 확장차트 갯수가 최대 5개박에 추가를 못하네요...(스크립트에서 직접추가시)
갯수를 늘려주실 수 없나요?
현재 5분봉기준으로 차트에서 20개정도의 종목정보를 받아 보고 있는데.. 그렇게 부하가
없는데 확장차트에서는 제한이 너무 심한거 같네요.
2. 아래처럼 코딩을 수정했는데...( Futures선물 종목 추가)
왜 시세에서 ChartSet를 처리를 못하나요?
전역변수로 객체를 생성하여 참조를 못하네요. 공부좀 많이 해야겠어요..ㅠ.ㅠ
var ChartSet;
function Main_OnStart()
{
ChartSet = new ReqChartItem("00000000", 5, CHART_PERIOD_MINUTE, 5000);
Main.ReqChartEx(ChartSet);
}
function Main_OnRcvChartEx(ChartSet)
{
Main.MessageList("생성테스트" ,"코드 " , ChartSet.GetCode(1),"현재가",ChartSet.GetClose(1,0));
}
function Main_On*dateMarket(sItemCode, l*pdateID)
{
if(sItemCode =Futures.code && l*pdateID == 20001) // 선물의 시세를 받으면
{
//Main.MessageList("생성테스트" ,"코드 " , ChartSet.GetCode(1),"현재가",ChartSet.GetClose(1,0));
Main.MessageList("FC ",Futures.current,"확장차트","현재가",ChartSet.GetClose(1,0) );
}
}
이 문제로 처음 공부할 때 저도 많이 헤맸었죠. ^^
전역변수 이름과 매개변수 이름이 중복되서 생기는 문제입니다.
자바스크립트에서는 자연스럽게 형변환이 되기때문에 조심해서 써야할 부분들이 좀 있죠.
OnRcvChartEx 이벤트의 매개변수이름과 ChartEx 객체를 저장할 변수이름과
ReqChartItem 객체의 변수이름을 명확하게 분리해주면 됩니다.
이름을 중복해서 사용하지 못하는 건 아니지만 나중에 스크립트가 길어지면 만든 사람도
헷갈려서 수정하기 힘듭니다. 목적에 따라 변수를 각각 만드는 것이 좋습니다.
님께서 작성한 스크립트는 ChartSet 이라는 변수에 ReqChartItem 을 할당한 거 말고는
ChartEx 객체를 할당한 부분이 없기 때문에 ChartEx 객체로는 사용할 수 없습니다.
또한, OnRcvChartEx 이벤트의 매개변수로 있는 ChartSet 은 전역으로 만들어진 변수와는
아무 상관이 없습니다. 이벤트의 괄호안에 변수가 있다고 전역변수에 값을 넣어주는 게 아니라 그냥 지역변수인거죠.
따라서, 첨부해 드린 그림처럼 스크립트를 수정하셔야 합니다.
그림파일에서 표시한 부분을 중점적으로 보시기 바랍니다.
chartEx1 == null 이 부분은 chartEx1 객체가 차트가 완성되어 할당되기 전에 사용되는 경우
에러를 미연에 방지하기 위해 필요합니다.
결론!! 스크립트에서 ReqChartEx 메쏘드를 통해 ChartEx 객체를 만들 경우 OnRcvChartEx 이벤트에서 전역변수에 객체가 할당되기 전에는 사용할 수 없다.
차암 쉽죠~~ ^^
도움이 되셨으면 좋겠군요. 이만 총총.
> 히말라야 님이 쓴 글입니다.
> 제목 : Re : Re : Re : Re : 확장차트를 만들때 현상
> 불꽃기사닙 좋은 다변 감사합니다.
자바에 대해 공부해야지 하고 아직 공부 못하고 있어요..ㅠ.ㅠ
스팟이 너무 잘 만들어져서 공부를 안해도 스팟을 사용할 수 있다는게 신기할 따름입니다.
ㅋㅋㅋ
즐거운 투자 되셔용 ^^
아 질문하나 더 드릴께요
아래처럼 코딩을 수정했는데...( Futures선물 종목 추가)
왜 시세에서 ChartSet를 처리를 못하나요?
전역변수로 객체를 생성하여 참조를 못하네요. 공부좀 많이 해야겠어요..ㅠ.ㅠ
var ChartSet;
function Main_OnStart()
{
ChartSet = new ReqChartItem("00000000", 5, CHART_PERIOD_MINUTE, 5000);
Main.ReqChartEx(ChartSet);
}
function Main_OnRcvChartEx(ChartSet)
{
Main.MessageList("생성테스트" ,"코드 " , ChartSet.GetCode(1),"현재가",ChartSet.GetClose(1,0));
}
function Main_On*dateMarket(sItemCode, l*pdateID)
{
if(sItemCode =Futures.code && l*pdateID == 20001) // 선물의 시세를 받으면
{
//Main.MessageList("생성테스트" ,"코드 " , ChartSet.GetCode(1),"현재가",ChartSet.GetClose(1,0));
Main.MessageList("FC ",Futures.current,"확장차트","현재가",ChartSet.GetClose(1,0) );
}
}
전 예스스탁 직원이 아니어서... ㅎㅎ
주말에 우연히 님이 올린 질문보고 쉬운 문제이기도 하고
저또한 기다림의 고통을 알기에 관리자님께 결례를 무릅쓰고 댓글을 달았답니다.
제가 괜한 참견을 한 것이라면 죄송할 따름. 삭제하도록 하겠습니다.
> 히말라야 님이 쓴 글입니다.
> 제목 : Re : Re : Re : Re : 확장차트를 만들때 현상
> 불꽃기사닙 좋은 다변 감사합니다.
자바에 대해 공부해야지 하고 아직 공부 못하고 있어요..ㅠ.ㅠ
스팟이 너무 잘 만들어져서 공부를 안해도 스팟을 사용할 수 있다는게 신기할 따름입니다.
ㅋㅋㅋ
즐거운 투자 되셔용 ^^
아 질문하나 더 드릴께요
1. 확장차트 갯수가 최대 5개박에 추가를 못하네요...(스크립트에서 직접추가시)
갯수를 늘려주실 수 없나요?
현재 5분봉기준으로 차트에서 20개정도의 종목정보를 받아 보고 있는데.. 그렇게 부하가
없는데 확장차트에서는 제한이 너무 심한거 같네요.
2. 아래처럼 코딩을 수정했는데...( Futures선물 종목 추가)
왜 시세에서 ChartSet를 처리를 못하나요?
전역변수로 객체를 생성하여 참조를 못하네요. 공부좀 많이 해야겠어요..ㅠ.ㅠ
var ChartSet;
function Main_OnStart()
{
ChartSet = new ReqChartItem("00000000", 5, CHART_PERIOD_MINUTE, 5000);
Main.ReqChartEx(ChartSet);
}
function Main_OnRcvChartEx(ChartSet)
{
Main.MessageList("생성테스트" ,"코드 " , ChartSet.GetCode(1),"현재가",ChartSet.GetClose(1,0));
}
function Main_On*dateMarket(sItemCode, l*pdateID)
{
if(sItemCode =Futures.code && l*pdateID == 20001) // 선물의 시세를 받으면
{
//Main.MessageList("생성테스트" ,"코드 " , ChartSet.GetCode(1),"현재가",ChartSet.GetClose(1,0));
Main.MessageList("FC ",Futures.current,"확장차트","현재가",ChartSet.GetClose(1,0) );
}
}
도움이 많이 되었습니다.
좋은 답변 감사드립니다. 저도 워낙 스팟의 기능이 좋고 배울때마다 기쁘기 때문에
불꽃기사님처럼 서로 도와주면서 좋은 스팟 게시판이 되었으면 좋겠습니다.
아마 예스 담당자분께서도 좋아하시리라 믿습니다.
즐거운 하루 되세용 ^^