커뮤니티
어디가 문제인지 봐주시면 감사하겟습니다
2019-09-30 02:34:08
152
글번호 132350
input : Period(260), N(1.7);
var : ii(0), UpperSum(0),UpperNum(0),LowerSum(0), LowerNum(0), upperLine(0),lowerLine(0),Ma(0) ;
If index >= Period - 1 then {
Var1 = ma(close, Period);
Var2 = close - Var1;
If Var2 >= 0 then {
Var3 = Var2; //upper
Var7 = 0; //lower //0//값 입력
Var4 = Var4 + Var3; //upper의 합
Var5 = Var5 + 1; //nPlus
}
If Var2 < 0 then {
Var7 = Var2; //lower
Var3 = 0; //upper //0//값 입력
Var8 = Var8 + Var7; //lower의 합
Var9 = Var9 + 1; //nMinus
}
If index >= Period - 1 then {
If index > Period - 1 then {
UpperSum = Var4 - Var4[Period];
UpperNum = Var5 - Var5[Period];
Var6 = UpperSum / UpperNum; //upperMean
}
Else
Var6 = Var4 / Var5; //upperMean
Var11 = 0;
For ii = index - Period + 1 To index {
If Var3[ii] <> 0 then {
Var11 = Var11 + (Var6 - Var3[ii]) ^ 2;
}
}
If index == Period - 1 then
Var11 = sqrt(Var11 / Var5); //upperstd
Else
Var11 = sqrt(Var11 / UpperNum); //upperstd
upperLine= Var1 + Var6 + (n* Var11);//////////////////////////////////
If index > Period - 1 then {
LowerSum = Var8 - Var8[ Period];
LowerNum = Var9 - Var9[ Period];
Var10 = LowerSum / LowerNum; //lowerMean
}
Else
Var10 = Var8 / Var9; //lowerMean
Var12 = 0;
For ii = index - Period + 1 To index {
If Var7[ii] <> 0 then {
Var12 = Var12 + (Var10 - Var7[ii]) ^ 2;
}
}
If index == Period - 1 then
Var12 = sqrt(Var12 / Var9); //upperstd
Else
Var12 = sqrt(Var12 / LowerNum); //upperstd
lowerLine= Var1 + Var10 - (n* Var12);////////////////////////////////////////////
}
}
Buy("매수",AtStop, upperLine);
Sell("매도",AtStop, lowerLine);
/////////////////////////////////////////////////////////////////////////////
차티스트님 블로그에 나온 박스지표를 매매식으로 살짝 전환해보았는데요 //////////////로 길게 표시해놓은 표준편차에 해당하는 var11,12 에 n으로 증폭시켜도 전혀 차이가 없네요
var11,12가 거의 0 이라는 얘기인데 어디가 문제일까요
답변 1
예스스탁 예스스탁 답변
2019-10-01 10:24:04
안녕하세요
예스스탁입니다.
랭귀지에서 가변적인 기간을 사용하면 최대 1024봉까지만 가능합니다.
수식안에 for문에서 차트 초반의 첫봉부터 Perirod봉까지의 값과 현재값을 비교하는데
차트의 봉수가 늘어나 1024봉이 넘어가면 값을 정상적으로 계산이 되지 않습니다.
차트 초반의 Period 갯수의 봉이 현재시점에서 1024가 넘지 않아야 합니다.
차트의 봉갯수를 1000개 정도로 줄여서 적용하셔야 합니다.
해결하기 위해 수식 수정을 여러차례 시도해 보았지만 특별히 우회할 방법이 없습니다.
즐거운 하루되세요
> 시고르시고르 님이 쓴 글입니다.
> 제목 : 어디가 문제인지 봐주시면 감사하겟습니다
> input : Period(260), N(1.7);
var : ii(0), UpperSum(0),UpperNum(0),LowerSum(0), LowerNum(0), upperLine(0),lowerLine(0),Ma(0) ;
If index >= Period - 1 then {
Var1 = ma(close, Period);
Var2 = close - Var1;
If Var2 >= 0 then {
Var3 = Var2; //upper
Var7 = 0; //lower //0//값 입력
Var4 = Var4 + Var3; //upper의 합
Var5 = Var5 + 1; //nPlus
}
If Var2 < 0 then {
Var7 = Var2; //lower
Var3 = 0; //upper //0//값 입력
Var8 = Var8 + Var7; //lower의 합
Var9 = Var9 + 1; //nMinus
}
If index >= Period - 1 then {
If index > Period - 1 then {
UpperSum = Var4 - Var4[Period];
UpperNum = Var5 - Var5[Period];
Var6 = UpperSum / UpperNum; //upperMean
}
Else
Var6 = Var4 / Var5; //upperMean
Var11 = 0;
For ii = index - Period + 1 To index {
If Var3[ii] <> 0 then {
Var11 = Var11 + (Var6 - Var3[ii]) ^ 2;
}
}
If index == Period - 1 then
Var11 = sqrt(Var11 / Var5); //upperstd
Else
Var11 = sqrt(Var11 / UpperNum); //upperstd
upperLine= Var1 + Var6 + (n* Var11);//////////////////////////////////
If index > Period - 1 then {
LowerSum = Var8 - Var8[ Period];
LowerNum = Var9 - Var9[ Period];
Var10 = LowerSum / LowerNum; //lowerMean
}
Else
Var10 = Var8 / Var9; //lowerMean
Var12 = 0;
For ii = index - Period + 1 To index {
If Var7[ii] <> 0 then {
Var12 = Var12 + (Var10 - Var7[ii]) ^ 2;
}
}
If index == Period - 1 then
Var12 = sqrt(Var12 / Var9); //upperstd
Else
Var12 = sqrt(Var12 / LowerNum); //upperstd
lowerLine= Var1 + Var10 - (n* Var12);////////////////////////////////////////////
}
}
Buy("매수",AtStop, upperLine);
Sell("매도",AtStop, lowerLine);
/////////////////////////////////////////////////////////////////////////////
차티스트님 블로그에 나온 박스지표를 매매식으로 살짝 전환해보았는데요 //////////////로 길게 표시해놓은 표준편차에 해당하는 var11,12 에 n으로 증폭시켜도 전혀 차이가 없네요
var11,12가 거의 0 이라는 얘기인데 어디가 문제일까요
다음글