커뮤니티
함수 문의드립니다.
2014-11-28 16:36:54
174
글번호 80882
항상 도움 주셔서 감사합니다.
문1)
지난번에 함수 만들고 주시고 아래와 같이
함수를 사용하면 된다고 가르쳐 주셨는데요
초보라 사용법을 잘 모르겠습니다.
다시 한번 사용법 부탁드립니다.
8가지 변수를 넣으라고 나오던데
8가지가 무엇인지 모르겠습니다.
저는 아래에 Volatility( VolLen ) 부분을
함수화 하여 사용하고 싶습니다.
즉 8일 동안의 변동성에 대한 값을 가지고
오고 싶습니다.
도움 부탁드립니다.
*---------------------------------
Inputs: VolLen(8), MultFact(2);
Vars: TopBand(0), BotBand(0);
#{ Define initial Top and Bottom Band }
If BarNumber = 1 then Begin
TopBand = Open + Volatility( VolLen ) * MultFact;
BotBand = Open - Volatility( VolLen ) * Multfact;
End;
*---------------------------------
1. 함수명 VBEup
input : N(Numeric), len0(Numeric),len1(Numeric),len2(Numeric),len3(Numeric),len4(Numeric),len5(Numeric),corPeriod(Numeric);
Var:chng_rt(0),j(0),ma_val(0),std_val(0),dn_rng(0),up_rng(0),rawVBE_up(0),rawVBE_dn(0);
Array:len[6](0),VBE_up[6](0),VBE_dn[6](0),
up_chg[6](0),dn_chg[6](0),up_cor[6](0),dn_cor[6](0),
fcstVBE_up[6](0),fcstVBE_dn[6](0);
len[0] = len0;
len[1] = len1;
len[2] = len2;
len[3] = len3;
len[4] = len4;
len[5] = len5;
chng_rt = (C/C[1]-1); //가격 변동률
ma_val = ma(chng_rt,len[0]); //가격변동률의 평균
std_val = Std(chng_rt,len[0]); //가격변동률의 표준편차
dn_rng = ma_val - (std_val * 2);
up_rng = ma_val + (std_val * 2);
rawVBE_up = C * (1 + up_rng); //원시VBE
rawVBE_dn = C * (1 + dn_rng);
for j = 0 to 5 {
VBE_up[j] = wma(rawVBE_up,len[j]); //원시VBE를 가중이평으로 평활화
VBE_dn[j] = wma(rawVBE_dn,len[j]);
if VBE_up[j][1] > 0 then up_chg[j] = (VBE_up[j]-VBE_up[j][1])/VBE_up[j][1]; //VBE의 변동률
if VBE_dn[j][1] > 0 then dn_chg[j] = (VBE_dn[j]-VBE_dn[j][1])/VBE_dn[j][1];
}
fcstVBE_up[0] = VBE_up[0];
fcstVBE_dn[0] = VBE_dn[0];
for j = 1 to 5 {
up_cor[j] = Correlation(up_chg[0], up_chg[j],corPeriod); //21일 VBE변동률과 17,13,9,5,2 변동률간의 상관도
dn_cor[j] = Correlation(dn_chg[0], dn_chg[j],corPeriod);
fcstVBE_up[j] = fcstVBE_up[j-1] * (1+(up_chg[j]*up_cor[j])); //이전값에 상관도와 변동률을 곱해서 계산
fcstVBE_dn[j] = fcstVBE_dn[j-1] * (1+(dn_chg[j]*dn_cor[j]));
}
VBEup = fcstVBE_up[N];
2. 함수명 : VBEdn
input : N(Numeric), len0(Numeric),len1(Numeric),len2(Numeric),len3(Numeric),len4(Numeric),len5(Numeric),corPeriod(Numeric);
Var:chng_rt(0),j(0),ma_val(0),std_val(0),dn_rng(0),up_rng(0),rawVBE_up(0),rawVBE_dn(0);
Array:len[6](0),VBE_up[6](0),VBE_dn[6](0),
up_chg[6](0),dn_chg[6](0),up_cor[6](0),dn_cor[6](0),
fcstVBE_up[6](0),fcstVBE_dn[6](0);
len[0] = len0;
len[1] = len1;
len[2] = len2;
len[3] = len3;
len[4] = len4;
len[5] = len5;
chng_rt = (C/C[1]-1); //가격 변동률
ma_val = ma(chng_rt,len[0]); //가격변동률의 평균
std_val = Std(chng_rt,len[0]); //가격변동률의 표준편차
dn_rng = ma_val - (std_val * 2);
up_rng = ma_val + (std_val * 2);
rawVBE_up = C * (1 + up_rng); //원시VBE
rawVBE_dn = C * (1 + dn_rng);
for j = 0 to 5 {
VBE_up[j] = wma(rawVBE_up,len[j]); //원시VBE를 가중이평으로 평활화
VBE_dn[j] = wma(rawVBE_dn,len[j]);
if VBE_up[j][1] > 0 then up_chg[j] = (VBE_up[j]-VBE_up[j][1])/VBE_up[j][1]; //VBE의 변동률
if VBE_dn[j][1] > 0 then dn_chg[j] = (VBE_dn[j]-VBE_dn[j][1])/VBE_dn[j][1];
}
fcstVBE_up[0] = VBE_up[0];
fcstVBE_dn[0] = VBE_dn[0];
for j = 1 to 5 {
up_cor[j] = Correlation(up_chg[0], up_chg[j],corPeriod); //21일 VBE변동률과 17,13,9,5,2 변동률간의 상관도
dn_cor[j] = Correlation(dn_chg[0], dn_chg[j],corPeriod);
fcstVBE_up[j] = fcstVBE_up[j-1] * (1+(up_chg[j]*up_cor[j])); //이전값에 상관도와 변동률을 곱해서 계산
fcstVBE_dn[j] = fcstVBE_dn[j-1] * (1+(dn_chg[j]*dn_cor[j]));
}
VBEdn = fcstVBE_dn[N];
3.
지표식등에서 아래와 같이 함수 호출해 사용하시면 됩니다.
input : len0(21),len1(17),len2(13),len3(9),len4(5),len5(2),corPeriod(63);
plot1(VBEup(0,len0,len1,len2,len3,len4,len5,corPeriod),"상-5",RED); //5봉 뒤로 이동
plot2(VBEdn(0,len0,len1,len2,len3,len4,len5,corPeriod),"하-5",BLUE); //5봉 뒤로 이동
if LastBarOnChart then { //마지막봉에서 아래 5봉만 추가로 출력
plot3(VBEup(5,len0,len1,len2,len3,len4,len5,corPeriod),"상0",RED);
plot4(VBEup(4,len0,len1,len2,len3,len4,len5,corPeriod),"상-1",RED); //1봉 뒤로 이동
plot5(VBEup(3,len0,len1,len2,len3,len4,len5,corPeriod),"상-2",RED); //2봉 뒤로 이동
plot6(VBEup(2,len0,len1,len2,len3,len4,len5,corPeriod),"상-3",RED); //3봉 뒤로 이동
plot7(VBEup(1,len0,len1,len2,len3,len4,len5,corPeriod),"상-4",RED); //4봉 뒤로 이동
plot8(VBEdn(1,len0,len1,len2,len3,len4,len5,corPeriod),"하0",BLUE);
plot9(VBEdn(2,len0,len1,len2,len3,len4,len5,corPeriod),"하-1",BLUE); //1봉 뒤로 이동
plot10(VBEdn(3,len0,len1,len2,len3,len4,len5,corPeriod),"하-2",BLUE); //2봉 뒤로 이동
plot11(VBEdn(4,len0,len1,len2,len3,len4,len5,corPeriod),"하-3",BLUE); //3봉 뒤로 이동
plot12(VBEdn(5,len0,len1,len2,len3,len4,len5,corPeriod),"하-4",BLUE); //4봉 뒤로 이동
}
문2) 당일 매매손익이 50틱이상 손실이 나면 매매를 그만하려고합니다.
어떻게 시스템식을 작성해야 하나요?
누적 손익이 아닌 당일 손익에 대한 함수가 있나요?
문3) 당일 손실거래 회수에 대한 함수도 부탁드립니다.
3회 이상 손실 발생하면 매매를 그만하려 합니다.
도움 부탁드립니다.
답변 1
예스스탁 예스스탁 답변
2014-11-28 17:55:26
안녕하세요
예스스탁입니다.
1.
올려주신 식의 Volatility가 다른 프로그램의 함수이고
해당 프로그램을 사용하지 않아 해당 함수의 내용을 알수 없어
수식으로 답변을 드릴수가 없습니다.
사용자함수 만드는 과정은 아래와 같습니다.
예스랭귀지 편집기에서 상단 메뉴에서
파일 --> 새로만들기 --> 사용자함수아이콘 선택 후 확인 -->
이름 입력 후 확인 --> 수식입력하시면 됩니다.
답변으로 드린내용에서
함수명으로 지정한 단어를 함수명으로 지정하시고
수식 복사후 붙여넣기 하시면 됩니다.
각 함수의 매개변수는 기존 올려주신 식에서 저장된는 배열변수의 방법호와 지정된 기간값들입니다
1번째 매개변수 -> 방번호(fcstVBE_up,fcstVBE_dn);
2번째 매개변수 -> len[0]
3번째 매개변수 -> len[1]
4번째 매개변수 -> len[2]
5번째 매개변수 -> len[3]
6번째 매개변수 -> len[4]
7번째 매개변수 -> len[5]
8번째 매개변수 -> 상관도 구하는 기간 (Correlation(up_chg[0], up_chg[j],63);
올려주신 식에 해당식의 작성의자 블로그 주소가 있습니다.
해당 블로그에서 식 설명 참고하시기 바랍니다.
2.
당일손익함수는 따로 제공되는 함수가 없습니다.
아래 계산식이 당일손익을 계산하는 계산식입니다.
참고하시기 바랍니다.
var : NP(0),preNP(0),DayPL(0);
NP = NetProfit;
if date != date[1] Then
PreNP = NetProfit;
DayPL = NP-PreNP+PositionProfit;//당일손익
if dayPL > -PriceScale*50 Then{
if 매수진입조건 Then
buy();
if 매도진입조건 Then
sell();
}
3.
var : NP(0),Loss(0);
loss = 0;
for cnt = 0 to 20{
if EntryDate(cnt) == sdate and PositionProfit(cnt) < 0 Then
Loss = loss+1;
}
if loss < 3 Then{
if 매수진입조건 Then
buy();
if 매도진입조건 Then
sell();
}
즐거운 하루되세요
> 양치기 님이 쓴 글입니다.
> 제목 : 함수 문의드립니다.
> 항상 도움 주셔서 감사합니다.
문1)
지난번에 함수 만들고 주시고 아래와 같이
함수를 사용하면 된다고 가르쳐 주셨는데요
초보라 사용법을 잘 모르겠습니다.
다시 한번 사용법 부탁드립니다.
8가지 변수를 넣으라고 나오던데
8가지가 무엇인지 모르겠습니다.
저는 아래에 Volatility( VolLen ) 부분을
함수화 하여 사용하고 싶습니다.
즉 8일 동안의 변동성에 대한 값을 가지고
오고 싶습니다.
도움 부탁드립니다.
*---------------------------------
Inputs: VolLen(8), MultFact(2);
Vars: TopBand(0), BotBand(0);
#{ Define initial Top and Bottom Band }
If BarNumber = 1 then Begin
TopBand = Open + Volatility( VolLen ) * MultFact;
BotBand = Open - Volatility( VolLen ) * Multfact;
End;
*---------------------------------
1. 함수명 VBEup
input : N(Numeric), len0(Numeric),len1(Numeric),len2(Numeric),len3(Numeric),len4(Numeric),len5(Numeric),corPeriod(Numeric);
Var:chng_rt(0),j(0),ma_val(0),std_val(0),dn_rng(0),up_rng(0),rawVBE_up(0),rawVBE_dn(0);
Array:len[6](0),VBE_up[6](0),VBE_dn[6](0),
up_chg[6](0),dn_chg[6](0),up_cor[6](0),dn_cor[6](0),
fcstVBE_up[6](0),fcstVBE_dn[6](0);
len[0] = len0;
len[1] = len1;
len[2] = len2;
len[3] = len3;
len[4] = len4;
len[5] = len5;
chng_rt = (C/C[1]-1); //가격 변동률
ma_val = ma(chng_rt,len[0]); //가격변동률의 평균
std_val = Std(chng_rt,len[0]); //가격변동률의 표준편차
dn_rng = ma_val - (std_val * 2);
up_rng = ma_val + (std_val * 2);
rawVBE_up = C * (1 + up_rng); //원시VBE
rawVBE_dn = C * (1 + dn_rng);
for j = 0 to 5 {
VBE_up[j] = wma(rawVBE_up,len[j]); //원시VBE를 가중이평으로 평활화
VBE_dn[j] = wma(rawVBE_dn,len[j]);
if VBE_up[j][1] > 0 then up_chg[j] = (VBE_up[j]-VBE_up[j][1])/VBE_up[j][1]; //VBE의 변동률
if VBE_dn[j][1] > 0 then dn_chg[j] = (VBE_dn[j]-VBE_dn[j][1])/VBE_dn[j][1];
}
fcstVBE_up[0] = VBE_up[0];
fcstVBE_dn[0] = VBE_dn[0];
for j = 1 to 5 {
up_cor[j] = Correlation(up_chg[0], up_chg[j],corPeriod); //21일 VBE변동률과 17,13,9,5,2 변동률간의 상관도
dn_cor[j] = Correlation(dn_chg[0], dn_chg[j],corPeriod);
fcstVBE_up[j] = fcstVBE_up[j-1] * (1+(up_chg[j]*up_cor[j])); //이전값에 상관도와 변동률을 곱해서 계산
fcstVBE_dn[j] = fcstVBE_dn[j-1] * (1+(dn_chg[j]*dn_cor[j]));
}
VBEup = fcstVBE_up[N];
2. 함수명 : VBEdn
input : N(Numeric), len0(Numeric),len1(Numeric),len2(Numeric),len3(Numeric),len4(Numeric),len5(Numeric),corPeriod(Numeric);
Var:chng_rt(0),j(0),ma_val(0),std_val(0),dn_rng(0),up_rng(0),rawVBE_up(0),rawVBE_dn(0);
Array:len[6](0),VBE_up[6](0),VBE_dn[6](0),
up_chg[6](0),dn_chg[6](0),up_cor[6](0),dn_cor[6](0),
fcstVBE_up[6](0),fcstVBE_dn[6](0);
len[0] = len0;
len[1] = len1;
len[2] = len2;
len[3] = len3;
len[4] = len4;
len[5] = len5;
chng_rt = (C/C[1]-1); //가격 변동률
ma_val = ma(chng_rt,len[0]); //가격변동률의 평균
std_val = Std(chng_rt,len[0]); //가격변동률의 표준편차
dn_rng = ma_val - (std_val * 2);
up_rng = ma_val + (std_val * 2);
rawVBE_up = C * (1 + up_rng); //원시VBE
rawVBE_dn = C * (1 + dn_rng);
for j = 0 to 5 {
VBE_up[j] = wma(rawVBE_up,len[j]); //원시VBE를 가중이평으로 평활화
VBE_dn[j] = wma(rawVBE_dn,len[j]);
if VBE_up[j][1] > 0 then up_chg[j] = (VBE_up[j]-VBE_up[j][1])/VBE_up[j][1]; //VBE의 변동률
if VBE_dn[j][1] > 0 then dn_chg[j] = (VBE_dn[j]-VBE_dn[j][1])/VBE_dn[j][1];
}
fcstVBE_up[0] = VBE_up[0];
fcstVBE_dn[0] = VBE_dn[0];
for j = 1 to 5 {
up_cor[j] = Correlation(up_chg[0], up_chg[j],corPeriod); //21일 VBE변동률과 17,13,9,5,2 변동률간의 상관도
dn_cor[j] = Correlation(dn_chg[0], dn_chg[j],corPeriod);
fcstVBE_up[j] = fcstVBE_up[j-1] * (1+(up_chg[j]*up_cor[j])); //이전값에 상관도와 변동률을 곱해서 계산
fcstVBE_dn[j] = fcstVBE_dn[j-1] * (1+(dn_chg[j]*dn_cor[j]));
}
VBEdn = fcstVBE_dn[N];
3.
지표식등에서 아래와 같이 함수 호출해 사용하시면 됩니다.
input : len0(21),len1(17),len2(13),len3(9),len4(5),len5(2),corPeriod(63);
plot1(VBEup(0,len0,len1,len2,len3,len4,len5,corPeriod),"상-5",RED); //5봉 뒤로 이동
plot2(VBEdn(0,len0,len1,len2,len3,len4,len5,corPeriod),"하-5",BLUE); //5봉 뒤로 이동
if LastBarOnChart then { //마지막봉에서 아래 5봉만 추가로 출력
plot3(VBEup(5,len0,len1,len2,len3,len4,len5,corPeriod),"상0",RED);
plot4(VBEup(4,len0,len1,len2,len3,len4,len5,corPeriod),"상-1",RED); //1봉 뒤로 이동
plot5(VBEup(3,len0,len1,len2,len3,len4,len5,corPeriod),"상-2",RED); //2봉 뒤로 이동
plot6(VBEup(2,len0,len1,len2,len3,len4,len5,corPeriod),"상-3",RED); //3봉 뒤로 이동
plot7(VBEup(1,len0,len1,len2,len3,len4,len5,corPeriod),"상-4",RED); //4봉 뒤로 이동
plot8(VBEdn(1,len0,len1,len2,len3,len4,len5,corPeriod),"하0",BLUE);
plot9(VBEdn(2,len0,len1,len2,len3,len4,len5,corPeriod),"하-1",BLUE); //1봉 뒤로 이동
plot10(VBEdn(3,len0,len1,len2,len3,len4,len5,corPeriod),"하-2",BLUE); //2봉 뒤로 이동
plot11(VBEdn(4,len0,len1,len2,len3,len4,len5,corPeriod),"하-3",BLUE); //3봉 뒤로 이동
plot12(VBEdn(5,len0,len1,len2,len3,len4,len5,corPeriod),"하-4",BLUE); //4봉 뒤로 이동
}
문2) 당일 매매손익이 50틱이상 손실이 나면 매매를 그만하려고합니다.
어떻게 시스템식을 작성해야 하나요?
누적 손익이 아닌 당일 손익에 대한 함수가 있나요?
문3) 당일 손실거래 회수에 대한 함수도 부탁드립니다.
3회 이상 손실 발생하면 매매를 그만하려 합니다.
도움 부탁드립니다.
다음글
이전글