답변완료
엑셀에 데이터를 매일 누적해서 쌓는 방법
엑셀에 데이터를 누적해서 쌓으려 하는데
아래 rayen님 께서 질문하신 내용을 참고하니까 킨 순간부터 끌때까지의 당일 데이터는 누적으로 받아지나, 매일 9시 이전에 키고, 장 마감할때 꺼서 데이터를 매일 누적하고 싶은데
어떤식으로 해야할까요.
rayan님처럼 하면 매일 엑셀데이터가 초기화 되네요
일단 이를 해결하기위해 Excel1.GetRowCount함수를 사용해서 현제 엑셀파일의 row를 읽은 후 +1을 해줘서 누적을 하려했는데, 잘 안되는거같네요
var Time;
var S; //기초자산(현재가)
var r; //무위험이자율
var K; //행사가
var T; //잔존만기
var xlRow; //엑셀의 행
function Main_OnStart()
{
xlRow =Excel1.GetRowCount(1) + 1; //2번째 행부터 시작
Time = getHHMMSSS();
S = MarketData1.current; //연결선물지수 현재가
r = Option1.RiskFreeRate;
K = Option1.GetExercisePrice(0, 0);
T = Option1.GetRemainDays(0, 0)/252;
Main.SetTimer(1, 5000)
}
function Main_OnTimer(nEventID)
{
Time = getHHMMSSS();
S = MarketData1.current; //연결선물지수 현재가
r = Option1.RiskFreeRate;
K = Option1.GetExercisePrice(0, 0);
T = Option1.GetRemainDays(0, 0)/252;
Excel1.SetRowData(1, "A"+xlRow, Time);
Excel1.SetRowData(1, "B"+xlRow, S);
Excel1.SetRowData(1, "C"+xlRow, K);
Excel1.SetRowData(1, "D"+xlRow, Option1.GetCurrent(0, 1));
Excel1.SetRowData(1, "E"+xlRow, Option1.GetCurrent(1, -1));
Excel1.SetRowData(1, "F"+xlRow, Option1.GetRemainDays(0,0));
Excel1.SetRowData(1, "G"+xlRow, Option1.RiskFreeRate);
xlRow = xlRow + 1;
에러 메세지가 4개가 뜨는데
1. 엑셀을 정상적으로 호출할 수 없습니다
2. excel1:객체를 생성할 수 없습니다.
3. 엑셀파일에 연결되지 않았습니다.
4. 엑셀을 정상적으로 호출할 수 없습니다.
이렇게 뜨네요
2019-05-07
3799
글번호 224852
답변완료
수정요청드립니다.
안녕하세요.
연결선물 당일청산 차트 신호로 미니선물 진입 청산하는 아래스팟 시스템에서
연결선물 차트의 매수 매도 진입 신호가 여러번 발생하는 차트에서 당일 첫신호로
미니선물 1계약만 진입 나머지 진입신호는 진입 보류하고, 청산시호 발생시 첫신호로
진입한 미니선물 1계약 청산하고 당일 매매종료하는 스팟수식으로 수정 요청 드립니다.
연결선물 매수 첫신호로 미니선물 1계약만 매수진입(추가 매수 진입신호 진입보류)
-> 연결선물 매수청산신호 또는 매수 스위칭 반대신호 발생시 첫신호로 청산하고 당일매매종료.
연결선물 매도 첫신호로 미니선물 1계약만 매도진입(추가 매도 진입신호 진입보류)
-> 연결선물 매도청산신호 또는 매도 스위칭 반대신호 발생시 첫신호로 청산하고 당일매매종료.
(당일 첫진입신호 발생시 진입하고, 진입신호의 첫 반대신호 발생시 청산하고 당일 매매종료)
감사합니다.
function Chart1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.current + MarketData1.GetTickSize()*5, 0);
}
if (Signal.signalKind == 2)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.current - MarketData1.GetTickSize()*5, 0);
}
if (Signal.signalKind == 3)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.current - MarketData1.GetTickSize()*5, 0);
}
if (Signal.signalKind == 4)
{
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.current + MarketData1.GetTickSize()*5, 0);
}
}
2019-05-13
2920
글번호 224850
답변완료
엑셀로 데이터 전송시 주소동적변경 문의
안녕하십니까? 예스스팟에서 엑셀로 데이터 전송시 주소 동적변경 문의 드립니다.
var CallIV, PutIV;
function Main_OnStart()
{
Main.MessageList(getYYYYMMDD(),getHHMMSSS(),"--시작--");
var D = new Date();
var hh = D.getHours();
var mm = D.getMinutes();
if (hh > 09 && mm > 01)
{
Main.SetTimer(1, 1000);
Main.MessageList(getYYYYMMDD(),getHHMMSSS(),"--타이머셋--");
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
CallIV = (O1.GetImpliedVolatility(0, 0)+O1.GetImpliedVolatility(0, 1)+O1.GetImpliedVolatility(0, 2))/3;
PutIV = (O1.GetImpliedVolatility(1, 0)+O1.GetImpliedVolatility(1, 1)+O1.GetImpliedVolatility(1, 2))/3;
E1.SetRowData(1, "A1", CallIV);
E1.SetRowData(1, "B1", PutIV);
Main.MessageList(getYYYYMMDD(),getHHMMSSS(),"CallIV:",CallIV," /PutIV:",PutIV);
var D = new Date();
var hh = D.getHours();
var mm = D.getMinutes();
if (hh>15 && mm>30)
Main.KillTimer(1);
E1.Save();
}
}
위와 같은 수식에서 CallIV와 PutIV를 엑셀파일의 "A1"과 "B1"으로 전송하게 되는데
저렇게 하게되면 데이터가 전송될때마다 동일한 엑셀의 셀에 데이터가 중첩되는 문제가
발생합니다. 이런 문제를 해결하기 위해서 데이터전송 주소를 전송시마다 변경하는 방식이나
엑셀파일에서 VBA로 처리하는 방안을 생각했는데
우선 예스스팟과 연동되는 파일은 매크로엑셀파일(.xlsm)이 아니라 일반엑셀파일(.xlsx)이기
때문에 데이터를 자동연결할 수가 없는 문제가 있습니다. 일반 파일과 매크로 파일을 수식으로
연결한다고 하더라도 자동으로 값이 수정되지 않고 작동시에만 수정하는 문제로 데이터가
따라오지 않았습니다.
그래서 예스스팟에서 데이터 전송 엑셀주소를
1회차 전송시, A1
2회차 전송시, A2
...
n회차 전송시, An
으로 변경하는 동적변경을 할 수 있지 않을까 하는 의문이 들었는데, ""안에 들어가는 값은
텍스트 값으로 수정이 안되는 문제점이 있어서 해결을 못했습니다.
이를 해결할 수 있는 방법이나 새로운 방법에 대해서 알려주시면 감사하겠습니다.
수고하십시오.
2019-04-30
2818
글번호 224846