커뮤니티
구동시간 질문, 특정 시각 기준 일별 가격
2017-04-04 09:36:00
179
글번호 108459
안녕하세요. 시스템 관련 2가지 질문이 있어 문의드립니다. 전부 S&P 500 E-mini 선물 관련 내용입니다.
1) 밤 11시부터 새벽 5시 사이에만 돌리고 싶습니다. sTime >= 230000 or sTime < 50000 으로
짜면 될 줄 알았는데, 시뮬레이션을 돌려보면, 한국 시각 기준 아침 8시에도 시그널이 trigger 됩니다. 어떻게 해야 하는가요?
2) 새벽 5시 기준으로, 과거 21일의 closing price 를 알 수 있는 방법이 있는가요? 예) 4/3 5시 가격, 3/31 5시 가격, 3/30 5시 가격... 이유: DayClose 를 활용하면, 전자장 종료 시각 기준으로 가격을 불러오는데, 실제 본장의 종료 시각과 제법 차이가 있습니다. 해당 가격들을 Array 에 집어 넣어서, 일간 수익률 기준 변동성을 계산키 위함입니다.
아래는 코드 전문 입니다. 감사합니다.
Input : std_mult(1), loss_mult(1.5), start_t(230000), end_t(50000);
Var: std20d(0.05), Done(0), daysum(0), dayma(0), daysumsqrt(0), daycnt(0), daycnter(0);
Done =0;
# 20일 평균수익률
daysum = 0;
for daycnt=1 to 20 {
daysum = daysum + data2(DayClose(daycnt)) / data2(DayClose(daycnt+1)) -1;
}
dayma = daysum / 20;
daysumsqrt= 0;
# 수익률 기준, 표준편차 계산
for daycnter=1 to 20 {
daysumsqrt = daysumsqrt + (data2(DayClose(daycnter)) / data2(DayClose(daycnter+1)) -1 - dayma)^2;
}
std20d = SquareRoot(daysumsqrt / 20 ) * data2(DayClose(1)); // 전일 종가 기준으로 가격 치환
if stime == end_t then {
ExitShort(); # time stop
Done = 0;
}
If MarketPosition < 0 and CrossUp(C ,Lowest(Low, BarsSinceEntry) + loss_mult * std20d) then {
ExitShort("ExS",OnClose, Lowest(Low,BarsSinceEntry) + loss_mult * std20d ); # trailing stop
}
if (sTime >= start_t and sTime <= 240000 ) or (sTime < end_t and sTime >= 0)then {
If MarketPosition == 0 and CrossDown(C, data2(DayClose(1)) - std_mult * std20d) and Done == 0 Then {
Sell("Short",OnClose);
Done = -1;
}
}
답변 1
예스스탁 예스스탁 답변
2017-04-05 17:01:11
안녕하세요
예스스탁입니다.
1.
sTime >= 230000 or sTime < 50000
위 조건일때 일반적인 onclose타입의 신호라면 8시봉에 신호가 발생할수 없습니다.
진입이 atstop이나 atlimit타입이면
해당 타입들이 봉완성시 조건이 만족하면 가격조건을 셋팅하고
다음봉의 시세와 비교해 즉시 신호가 발생하는 타입입니다.
이 경우에는 따로 제어가 되지 않습니다
8시봉의 직전봉이 5시 이전봉이고
해당 봉에서 조건이 만족해 값이 셋팅되면 8시봉에 신호가 발생할수 있습니다.
2
var : cnt(0),sum(0),mav(0);
Array : CC[50](0);
if stime == 050000 or (stime > 050000 and stime[1] < 050000) Then{
#지정한 시간의 종가를 배열변수에 저장
CC[0] = C;
for cnt = 1 to 49{
CC[cnt] = CC[cnt-1][1];
}
#20개 값이 할당된 이후에
if CC[20] > 0 then{
#평균계산
sum = 0;
for cnt = 1 to 20{
sum = sum + CC[cnt];
}
mav = sum/20;
}
}
3
data2(DayClose(1))
위 내용은 잘못된 수식입니다.
data2(CloseD(1))로 사용하셔야 합니다.
DayClose/dayhigh/daylow/dayoepn은 data1의 값만 리턴하는 함수입니다.
참조데이터는 closeD,highD,lowD,openD함수 이용해셔야 합니다.
즐거운 하루되세요
> 쭈꾸미제엔장 님이 쓴 글입니다.
> 제목 : 구동시간 질문, 특정 시각 기준 일별 가격
> 안녕하세요. 시스템 관련 2가지 질문이 있어 문의드립니다. 전부 S&P 500 E-mini 선물 관련 내용입니다.
1) 밤 11시부터 새벽 5시 사이에만 돌리고 싶습니다. sTime >= 230000 or sTime < 50000 으로
짜면 될 줄 알았는데, 시뮬레이션을 돌려보면, 한국 시각 기준 아침 8시에도 시그널이 trigger 됩니다. 어떻게 해야 하는가요?
2) 새벽 5시 기준으로, 과거 21일의 closing price 를 알 수 있는 방법이 있는가요? 예) 4/3 5시 가격, 3/31 5시 가격, 3/30 5시 가격... 이유: DayClose 를 활용하면, 전자장 종료 시각 기준으로 가격을 불러오는데, 실제 본장의 종료 시각과 제법 차이가 있습니다. 해당 가격들을 Array 에 집어 넣어서, 일간 수익률 기준 변동성을 계산키 위함입니다.
아래는 코드 전문 입니다. 감사합니다.
Input : std_mult(1), loss_mult(1.5), start_t(230000), end_t(50000);
Var: std20d(0.05), Done(0), daysum(0), dayma(0), daysumsqrt(0), daycnt(0), daycnter(0);
Done =0;
# 20일 평균수익률
daysum = 0;
for daycnt=1 to 20 {
daysum = daysum + data2(DayClose(daycnt)) / data2(DayClose(daycnt+1)) -1;
}
dayma = daysum / 20;
daysumsqrt= 0;
# 수익률 기준, 표준편차 계산
for daycnter=1 to 20 {
daysumsqrt = daysumsqrt + (data2(DayClose(daycnter)) / data2(DayClose(daycnter+1)) -1 - dayma)^2;
}
std20d = SquareRoot(daysumsqrt / 20 ) * data2(DayClose(1)); // 전일 종가 기준으로 가격 치환
if stime == end_t then {
ExitShort(); # time stop
Done = 0;
}
If MarketPosition < 0 and CrossUp(C ,Lowest(Low, BarsSinceEntry) + loss_mult * std20d) then {
ExitShort("ExS",OnClose, Lowest(Low,BarsSinceEntry) + loss_mult * std20d ); # trailing stop
}
if (sTime >= start_t and sTime <= 240000 ) or (sTime < end_t and sTime >= 0)then {
If MarketPosition == 0 and CrossDown(C, data2(DayClose(1)) - std_mult * std20d) and Done == 0 Then {
Sell("Short",OnClose);
Done = -1;
}
}
다음글
이전글