답변완료
문의 드립니다
항상 도움을 주심에 깊이 감사드립니다
1 아래 수식에서 추세선의 두께를 좀더 두껍게 조정하거나
2,혹은 이선을 다른형태(즉 원이나 사각형그래프등)의 변형된 형태로 나타낼수는 없는지요?
3, 추세선이 진행중 추세전환에 의거 예비선(아래수식의 맨 아랫부분 수식에 해당되는선)이 발생후
일정한 갯수의 봉이 완성시 그 해당봉에 세로선이 발생토록 부탁드립니다
* 봉의 갯수와 세로선의 두께, 색상은 수정이 가능하도록 부탁드립니다
=======================================================================================
Var:Period(20),선두께(6.99),상승색(white), 하락색(white);
Var:j(0),T(0);
Var: date11(0),date12(0),time11(0),time12(0),TL1(0),TL(0),
date21(0),date22(0),time21(0),time22(0),
date31(0),date32(0),time31(0),time32(0),tx(0),tx1(0),tl4(0);
Array:HiVal[20](0),LoVal[20](0),HiBar[20](0),LoBar[20](0)/*,ZZ[20](0)*/;
Array:r[7](0),fr[7](0),TL2[7](0),TL3[7](0),TX2[7](0),TX3[7](0);
r[0] = 0;
r[1] = 2;
r[2] = 3.;
r[3] = -1;
r[4] = -2.;
r[5] = 1;
r[6] = 0.5;
For j = 0 To 19
{
HiBar[j] = HiBar[j] + 1;
LoBar[j] = LoBar[j] + 1;
}
if crossup(c,highest(H,Period)[1]) Then
T = 1;
if CrossDown(c,Lowest(L,Period)[1]) Then
T = -1;
If T == -1 Then
{
If T[1] != -1 Then
{
For j = 18 DownTo 0
{
LoVal[j+1] = LoVal[j];
LoBar[j+1] = LoBar[j];
//ZZ[j+1] = ZZ[j];
}
LoVal[0] = L;
LoBar[0] = 0;
//ZZ[0] = L;
date11 = date[HiBar[0]];
time11 = stime[HiBar[0]];
Value11 = HiVal[0];
date12 = date[LoBar[0]];
time12 = stime[LoBar[0]];
Value12 = LoVal[0];
TL_Delete(tl);
TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen);
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
TL_SetColor(TL1,상승색);
Tx = Text_New(date11,time11,Value11,"●");
#동그라미 색상, 빨강
Text_SetColor(Tx,RED);
Text_SetStyle(Tx,2,2);
Text_SetSize(tx,12);
//tx = Text_New(date11,time11,Value11,NumToStr(value11,2)+NewLine+NumToStr(value11,2)+NewLine);
//Text_SetStyle(tx,2,1);
date21 = date[HiBar[0]];
time21 = stime[HiBar[0]];
date22 = date[0];
time22 = stime[0];
for j = 0 to 6
{
fr[j] = LoVal[1] + ((HiVal[0] - LoVal[1]) * r[j]);
}
//TL2[0] = TL_New(date21,time21,fr[0],date22,time22,fr[0]);
//TL_SetColor(TL2[0],RED);
#TL2[1] = TL_New(date21,time21,fr[1],date22,time22,fr[1]);
#TL_SetColor(TL2[1],RED);
#TL_SetStyle(TL2[1], 3);
#TL2[2] = TL_New(date21,time21,fr[2],date22,time22,fr[2]);
#TL_SetColor(TL2[2],RED);
#TL_SetSize(TL2[2],1);
#TX2[2] = Text_New(date22,time22,fr[2],NumToStr(fr[2],2));
#Text_SetColor(Tx2[2],BWHITE);
#Text_SetStyle(TX2[2],1,1);
#TL2[3] = TL_New(date21,time21,fr[3],date22,time22,fr[3]);
#TL_SetColor(TL2[3],RED);
#TL_SetStyle(TL2[3], 3);
#TL2[4] = TL_New(date21,time21,fr[4],date22,time22,fr[4]);
#TL_SetColor(TL2[4],RED);
#TL_SetSize(TL2[4],1);
#TX2[4] = Text_New(date22,time22,fr[4],NumToStr(fr[4],2));
#Text_SetColor(Tx2[4],BWHITE);
#Text_SetStyle(TX2[4],1,0);
//TL2[5] = TL_New(date21,time21,fr[5],date22,time22,fr[5]);
//TL_SetColor(TL2[5],RED);
//TL2[6] = TL_New(date21,time21,fr[6],date22,time22,fr[6]);
//TL_SetColor(TL2[6],MAGENTA);
}
If LoVal[0] > L Then
{
LoVal[0] = L;
LoBar[0] = 0;
//ZZ[0] = L;
date12 = date[LoBar[0]];
time12 = stime[LoBar[0]];
Value12 = LoVal[0];
TL_SetEnd(TL1, date12,time12,Value12);
date22 = date[0];
time22 = stime[0];
//Tx = Text_New_Self(date12,time12,Value12,NumToStr(abs(value11-value12)/PriceScale,0)+" ");
#동그라미 색상, 빨강
//Text_SetColor(Tx,BLUE);
//Text_SetStyle(Tx,1,0);
TL_SetEnd(TL2[0],date22,time22,fr[0]);
TL_SetEnd(TL2[1],date22,time22,fr[1]);
TL_SetEnd(TL2[2],date22,time22,fr[2]);
Text_SetLocation(TX2[2],date22,time22,fr[2]);
TL_SetEnd(TL2[3],date22,time22,fr[3]);
TL_SetEnd(TL2[4],date22,time22,fr[4]);
Text_SetLocation(TX2[4],date22,time22,fr[4]);
TL_SetEnd(TL2[5],date22,time22,fr[5]);
TL_SetEnd(TL2[6],date22,time22,fr[6]);
TL_Delete(tl);
TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen);
}
}
If T == 1 Then
{
If T[1] != 1 Then
{
For j = 18 DownTo 0
{
HiVal[j+1] = HiVal[j];
HiBar[j+1] = HiBar[j];
//ZZ[j+1] = ZZ[j];
}
HiVal[0] = H;
HiBar[0] = 0;
//ZZ[0] = H;
date11 = date[LoBar[0]];
time11 = stime[LoBar[0]];
Value11 = LoVal[0];
date12 = date[HiBar[0]];
time12 = stime[HiBar[0]];
Value12 = HiVal[0];
TL_Delete(tl);
TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen);
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
TL_SetColor(TL1,하락색);
Tx1 = Text_New(date11,time11,Value11,"●");
#동그라미 색상, 파랑
Text_SetColor(Tx1,BLUE);
Text_SetStyle(Tx1,2,2);
Text_SetSize(tx1,12);
//tx = Text_New(date11,time11,Value11,NewLine+NumToStr(value11,2)+NewLine+NumToStr(value11,2));
//Text_SetStyle(tx,2,0);
date31 = date[LoBar[0]];
time31 = stime[LoBar[0]];
date32 = date[0];
time32 = stime[0];
for j = 0 to 5
{
fr[j] = LoVal[0] + ((HiVal[1] - LoVal[0]) * r[j]);
}
//TL3[0] = TL_New(date31,time31,fr[0],date32,time32,fr[0]);
//TL_SetColor(TL3[0],BLUE);
#TL3[1] = TL_New(date31,time31,fr[1],date32,time32,fr[1]);
#TL_SetColor(TL3[1],BLUE);
#TL_SetStyle(TL3[1], 3);
#TL3[2] = TL_New(date31,time31,fr[2],date32,time32,fr[2]);
#TL_SetColor(TL3[2],BLUE);
#TL_SetSize(TL3[2],1);
#TX3[2] = Text_New(date32,time32,fr[2],NumToStr(fr[2],2));
#Text_SetColor(Tx3[2],BWHITE);
#Text_SetStyle(TX3[2],1,1);
#TL3[3] = TL_New(date31,time31,fr[3],date32,time32,fr[3]);
#TL_SetColor(TL3[3],BLUE);
#TL_SetStyle(TL3[3], 3);
#TL3[4] = TL_New(date31,time31,fr[4],date32,time32,fr[4]);
#TL_SetColor(TL3[4],BLUE);
#TL_SetSize(TL3[4],1);
#TX3[4] = Text_New(date32,time32,fr[4],NumToStr(fr[4],2));
#Text_SetColor(Tx3[4],BWHITE);
#Text_SetStyle(TX3[4],1,0);
//TL3[5] = TL_New(date31,time31,fr[5],date32,time32,fr[5]);
//TL_SetColor(TL3[5],BLUE);
//TL3[6] = TL_New(date31,time31,fr[6],date32,time32,fr[6]);
//TL_SetColor(TL3[6],cyan);
}
If HiVal[0] < H Then
{
HiVal[0] = H;
HiBar[0] = 0;
//ZZ[0] = H;
date12 = date[HiBar[0]];
time12 = stime[HiBar[0]];
Value12 = HiVal[0];
TL_SetEnd(TL1, date12,time12,Value12);
date32 = date[0];
time32 = stime[0];
//Tx = Text_New_Self(date12,time12,Value12,NumToStr(abs(value11-value12)/PriceScale,0)+" ");
#동그라미 색상, 빨강
//Text_SetColor(Tx,RED);
//Text_SetStyle(Tx,1,1);
TL_SetEnd(TL3[0],date32,time32,fr[0]);
TL_SetEnd(TL3[1],date32,time32,fr[1]);
TL_SetEnd(TL3[2],date32,time32,fr[2]);
Text_SetLocation(TX3[2],date32,time32,fr[2]);
TL_SetEnd(TL3[3],date32,time32,fr[3]);
TL_SetEnd(TL3[4],date32,time32,fr[4]);
Text_SetLocation(TX3[4],date32,time32,fr[4]);
TL_SetEnd(TL3[5],date32,time32,fr[5]);
TL_SetEnd(TL3[6],date32,time32,fr[6]);
TL_Delete(tl);
TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen);
}
}
2020-05-25
2435
글번호 139190
지표
답변완료
부탁드립니다.
도움에 늘 감사 드립니다.
맨 마지막에 줄에
if maV[0] > 0 then plot5(maV[0],"MidLine");
의 실행식만 사용하고자 합니다.
계산에 필요 없는 array의 OO[50](0),HH[50](0)의 등등과 필요 없는 기타 수식을 메모리 부족과 관련하여 계산에서 제외하고자 하오니 부탁 드립니다.
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),
filename("renko3.txt"),printOK(False);
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 bdate != bdate[1] Then //break on session에 해당, 즉 일자가 바뀌면 새로 계산
{
gubun = 0; //방향을 초기화한다. 이후 형성되는 가격에 의해 방향이 계산
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];
if maV[0] > 0 then plot5(maV[0],"MidLine");
lowerLine[j] = lowerLine[j-1];
}
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 계산식 참조
//macd 계산 당시와 마찬가지로 sum 값이 있을 때만 처리
If sum > 0 Then
{
sum = sum + CC[0] - CC[length]; //이평선 계산 원리 그대로, 현재가를 더하고 n봉전 가격 뺌
trSum = trSum + TR[0] - TR[length]; //true range의 합을 계산
maV[0] = Sum / length; //n개의 종가 합을 n으로 나누어 이동평균 계산
atrV = trSum / length; //ATR 계산식 참조
upperLine[0] = maV[0] + atrV * NumATRs; //상단 밴드 계산
lowerLine[0] = maV[0] - atrV * NumATRs; //하단 밴드 계산
}
j = 0;
if printOK then print(filename,"1=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
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]);
If sum > 0 Then //계속 반복되는 공통 루틴이므로 if문 바깥으로 뺄까도 했으나
{
sum = sum + CC[0] - CC[length]; //더 복잡해지므로 copy & paste로 처리
trSum = trSum + TR[0] - TR[length];
maV[0] = Sum / length;
atrV = trSum / length;
upperLine[0] = maV[0] + atrV * NumATRs;
lowerLine[0] = maV[0] - atrV * NumATRs;
}
j = 0;
if printOK then print(filename,"2=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
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]);
If sum > 0 Then
{
sum = sum + CC[j] - CC[j+length];
trSum = trSum + TR[j] - TR[j+length];
maV[j] = Sum / length;
atrV = trSum / length;
upperLine[j] = maV[j] + atrV * NumATRs;
lowerLine[j] = maV[j] - atrV * NumATRs;
}
if printOK then print(filename,"3=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[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]);
If sum > 0 Then {
sum = sum + CC[j] - CC[j+length];
trSum = trSum + TR[j] - TR[j+length];
maV[j] = Sum / length;
atrV = trSum / length;
upperLine[j] = maV[j] + atrV * NumATRs;
lowerLine[j] = maV[j] - atrV * NumATRs;
}
if printOK then print(filename,
"4=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If (sdate != sdate[1] and nextbarStime >= 070000) or
(sdate == sdate[1] and nextbarStime >= 070000 and stime < 070000) 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]);
}
If sum > 0 Then {
sum = sum + CC[0] - CC[length];
trSum = trSum + TR[0] - TR[length];
maV[0] = Sum / length;
atrV = trSum / length;
upperLine[0] = maV[0] + atrV * NumATRs;
lowerLine[0] = maV[0] - atrV * NumATRs;
}
j = 0; //채널 값을 새로이 계산
if printOK then print(filename,
"5=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",
j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
if sum == 0 and CC[length] > 0 then {
for j = 0 to length - 1 {
sum = sum + CC[j];
trsum = trsum + max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
}
}
If OO[0] > 0 Then Plot1(OO[0],"OO"); //지표속성 -> 차트표시 -> 채우기 -> OO < CC 면 빨강 추가
If CC[0] > 0 Then Plot2(CC[0],"CC"); // OO > CC 면 파랑 추가
if upperLine[0] > 0 then plot3(upperLine[0],"UpperBand");
if lowerLine[0] > 0 then plot4(lowerLine[0],"LowerBand");
if maV[0] > 0 then plot5(maV[0],"MidLine");
2020-05-25
2513
글번호 139189
지표