예스스탁
예스스탁 답변
2024-09-05 10:59:28
안녕하세요
예스스탁입니다.
input:renkoSize(0.5),length(10),NumATRs(1.5);
var:j(0),k(0),renkoCnt(0),gubun(0),Sum(0),trSum(0),atrV(0),time1(0);
array:OO[50](0),HH[50](0),LL[50](0),CC[50](0),
TR[50](0), //True Range
upperLine[50](0), //상단채널
lowerLine[50](0), //하단채널
maV[50](0); //이평선
If index == 0 or bdate != bdate[1] Then //break on session에 해당, 즉 일자가 바뀌면 새로 계산
{
gubun = 0; //방향을 초기화한다. 이후 형성되는 가격에 의해 방향이 계산
For j = 49 DownTo 0 //금일 시가봉을 신규 추가
{
OO[j] = 0;
HH[j] = 0;
LL[j] = 0;
CC[j] = 0;
TR[j] = 0;
maV[j] = 0;
upperLine[j] = 0;
lowerLine[j] = 0;
}
OO[0] = C; //분봉의 종가를 기반으로 계산하기 때문에 당일 시초가 아니다
HH[0] = C;
LL[0] = C;
CC[0] = C;
}
Else
{
If gubun == 0 and CC[0] > 0 Then //일 첫봉이 완성되지 않은 시점
{
If OO[0] - renkoSize >= C Then
{
gubun = -1; //하락 방향
CC[0] = OO[0] - renkoSize; //음봉
HH[0] = OO[0];
LL[0] = CC[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]); //true range 계산식 참조
j = 0;
}
Else If OO[0] + renkoSize <= C Then
{
gubun = 1; //상승 방향
CC[0] = OO[0] + renkoSize; //양봉
HH[0] = CC[0];
LL[0] = OO[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
j = 0;
}
}
If LL[0] - renkoSize >= C Then
{
gubun = -1;
renkoCnt = Int(Round((LL[0]-C)/renkoSize,9));
if renkoCnt > 49 then
renkoCnt = 49;
For j = 49 DownTo renkoCnt
{
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
TR[j] = TR[j-renkoCnt];
maV[j] = maV[j-renkoCnt];
upperLine[j] = upperLine[j-renkoCnt];
lowerLine[j] = lowerLine[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0
{
OO[j] = LL[j+1];
CC[j] = LL[j+1] - renkoSize;
HH[j] = OO[j];
LL[j] = CC[j];
TR[j] = max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
}
}
Else If HH[0] + renkoSize <= C Then
{
gubun = 1;
renkoCnt = Int(Round((C-HH[0])/renkoSize,9));
if renkoCnt > 49 then
renkoCnt = 49;
For j = 49 DownTo renkoCnt
{
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
TR[j] = TR[j-renkoCnt];
maV[j] = maV[j-renkoCnt];
upperLine[j] = upperLine[j-renkoCnt];
lowerLine[j] = lowerLine[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0
{
OO[j] = HH[j+1];
CC[j] = HH[j+1] + renkoSize;
HH[j] = CC[j];
LL[j] = OO[j];
TR[j] = max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
}
}
Else If NextBarSdate > sdate Then //당일 종가봉에서
{
For j = 49 DownTo 1
{
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
TR[j] = TR[j-1];
maV[j] = maV[j-1];
upperLine[j] = upperLine[j-1];
lowerLine[j] = lowerLine[j-1];
}
If LL[1] > C Then //종가가 이전 봉보다 아래 형성
{
OO[0] = LL[1];
CC[0] = C;
HH[0] = OO[0];
LL[0] = CC[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
}
Else If HH[1] < C Then //종가가 이전 봉보다 위에 형성
{
OO[0] = HH[1];
CC[0] = C;
HH[0] = CC[0];
LL[0] = OO[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
}
Else //종가가 이전 봉의 중간에 형성
{
OO[0] = C;
CC[0] = C;
HH[0] = C;
LL[0] = C;
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
}
j = 0; //채널 값을 새로이 계산
}
}
if CC[length] > 0 then
{
sum = 0;
trSum = 0;
for j = 0 to length - 1
{
sum = sum + CC[j];
trsum = trsum + max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
}
maV[0] = Sum / length;
atrV = trSum / length;
upperLine[0] = maV[0] + atrV * NumATRs;
lowerLine[0] = maV[0] - atrV * NumATRs;
}
If OO[0] > 0 Then Plot1(OO[0],"OO",iff(OO[0] > CC[0],BLACK,MAGENTA)); //지표속성 -> 차트표시 -> 채우기 -> OO < CC 면 빨강 추가
If CC[0] > 0 Then Plot2(CC[0],"CC"); // OO > CC 면 파랑 추가
if upperLine[0] > 0 then
plot3(upperLine[0],"UpperBand");
Else
NoPlot(3);
if lowerLine[0] > 0 then
plot4(lowerLine[0],"LowerBand");
Else
NoPlot(4);
if maV[0] > 0 then
plot5(maV[0],"MidLine");
Else
NoPlot(5);
즐거운 하루되세요
> 러블리 님이 쓴 글입니다.
> 제목 : 문의드립니다
> 렌코차트식 당일용 부탁합니다
어제 수치에 영향받지 않게.. 당일용으로 쓸수있는 렌코차트식..
감사합니다