커뮤니티
수식 변환 의뢰 드려요!
2018-03-13 19:20:01
276
글번호 117356
아래 수식은 멀티챠트용 수식들 입니다!
예스용으로 변환 부탁드릴께요!
감사합니다!
Input:length(10),ClsPxUseBit(0),inRange(10),waveLineSize(2),displPRC(1);
Var:j(0),jj(0),jjj(0),HH(0),LL(0),lastHi(0),lastLo(0),lastVertex(""),procBit(""),
TL1(0),TL2(0);
Array:PK[50,4](0),VL[50,4](0), // 1:가격, 2:봉번호, 3:날짜, 4:시각
​ basePK[5](0),baseVL[5](0); // 0:사용 안함, 1:가격, 2:봉번호, 3:날짜, 4:시각
// 피보나치 라인을 계산하기 위해 기준이 되는 고점과 저점의 정보
//==========================================
HH = IFF(ClsPxUseBit = 1,C,H);
LL = IFF(ClsPxUseBit = 1,C,L);
If CurrentBar = 1 Then Begin
PK[1,1] = HH;
VL[1,1] = LL;
End ;
Condition1 = Highest(HH,length) = HH and lastHi <> HH;
Condition2 = Lowest (LL,length) = LL and lastLo <> LL;
procBit = "";
If Condition1 and Condition2 Then Begin
If lastVertex = "Valley" Then procBit = "Peak"
Else procBit = "Valley";
End
Else If Condition1 Then procBit = "Peak"
Else If Condition2 Then procBit = "Valley";
//==========================================
If procBit = "Peak" Then Begin
lastHi = HH;
If lastVertex = "Valley" Then Begin
For j = 50 DownTo 2 Begin
For jj = 1 To 4 Begin
PK[j,jj] = PK[j-1,jj];
End ;
End ;
PK[1,1] = HH;
PK[1,2] = BarNumber;
PK[1,3] = Date;
PK[1,4] = Time;
TL1 = TL_New(VL[1,3],VL[1,4],VL[1,1],PK[1,3],PK[1,4],PK[1,1]);
TL_SetSize(TL1,waveLineSize);
TL_SetColor(TL1,RED);
​// 주어진 범위내에서 가장 높은 고점을 찾는다
basePK[1] = 0;
For j = 1 To inRange Begin // 주어진 범위내에서
If basePK[1] < PK[j,1] Then Begin // 기준고점보다 높은 고점이 나오면
For jjj = 1 To 4 Begin
basePK[jjj] = PK[j,jjj]; // 1번열부터 4번열까지의 기준고점의 내용을 갱신
End ;
End ;
End ;
End
Else If PK[1,1] < HH Then Begin
PK[1,1] = HH;
PK[1,2] = BarNumber;
PK[1,3] = Date;
PK[1,4] = Time;
TL_SetEnd(TL1,PK[1,3],PK[1,4],PK[1,1]);
End ;
lastVertex = "Peak";
End ;
//==========================================
If procBit = "Valley" Then Begin
lastLo = LL;
If lastVertex = "Peak" then Begin
For j = 50 DownTo 2 Begin
For jj = 1 To 4 Begin
VL[j,jj] = VL[j-1,jj];
End ;
End ;
VL[1,1] = LL;
VL[1,2] = BarNumber;
VL[1,3] = Date;
VL[1,4] = Time;
TL1 = TL_New(PK[1,3],PK[1,4],PK[1,1],VL[1,3],VL[1,4],VL[1,1]);
TL_SetSize(TL1,waveLineSize);
TL_SetColor(TL1,BLUE);
​// 주어진 범위 내에서 가장 낮은 저점을 찾는다.
baseVL[1] = 0;
For j = 1 To inRange Begin // 주어진 범위 내에서
If baseVL[1] > VL[j,1] or baseVL[1] = 0 Then Begin // 기준저점보다 낮거나 기준저가 0이면
For jjj = 1 To 4 Begin
baseVL[jjj] = VL[j,jjj]; // 기준저점의 내용을 갱신
End ;
End ;
End ;
End
Else If VL[1,1] > LL then Begin
VL[1,1] = LL;
VL[1,2] = BarNumber;
VL[1,3] = Date;
VL[1,4] = Time;
TL_SetEnd(TL1,VL[1,3],VL[1,4],VL[1,1]);
End ;
lastVertex = "Valley";
End ;
//==========================================
​Array: fr[7,4](0); // 1:비율, 2:가격, 3:추세선 ID, 4:텍스트 ID
// 피보나치 수열 값을 저장할 배열변수 선언
​If CurrentBar = 1 Then Begin
​// 계산에 필요한 최대봉개수(Maximum Bars Back)를 설정하게 되는데 최대봉개수 이전의 봉에서는 계산 결과가 안 나오고
// 최대봉개수 이상의 봉이 생긴 이후에 계산 값이 나온다.
// 그래서 Maximum Bars Back가 20으로 설정되어 있으면 21번째 봉부터 CurrentBar가 1이 된다.
// 한번 설정해 놓으면 바뀔 일이 없으므로 CurrentBar가 1일 때만 아래 블럭안의 작업을 수행하도록 한다.
fr[1,1] = 0;
fr[2,1] = 0.236;
fr[3,1] = 0.382;
fr[4,1] = 0.50;
fr[5,1] = 0.618;
fr[6,1] = 0.764;
fr[7,1] = 1;
End ;
If basePK[1] > 0 and baseVL[1] > 0 Then Begin // 기준고, 기준저 값이 있는 경우
If baseVL[2][1] <> baseVL[2] or basePK[2][1] <> basePK[2] Then Begin
​// 기준저의 봉 번호가 바뀌었거나(기준저가 바뀜) 기준고의 봉 번호가 바뀌었다면(기준고 변동)
If TL2 > 0 Then TL_Delete(TL2);
​// TL2는 기준고와 기준저를 잇는 추세선이며, 0보다 크다면 이미 추세선이 있다는 의미이므로 삭제하고 새로 그린다.
TL2 = TL_New(baseVL[3],baseVL[4],baseVL[1],basePK[3],basePK[4],basePK[1]);
TL_SetSize(TL2,4);
TL_SetColor(TL2,Magenta); // 색깔은 개인 취향에 맞게 수정
If baseVL[2] < basePK[2] Then Begin
​// 기준저점의 봉번호보다 기준고점의 봉번호가 크다면 기준고점이 뒤에 나타난 것이므로 기준파동은 상승파동이 된다.
for j = 1 to 7 Begin
If fr[j,3] > 0 Then TL_Delete(fr[j,3]);
// 3번째 열을 추세선ID로 사용하겠다고 했으니 값이 0보다 크면 기존 추세선을 삭제
fr[j,2] = basePK[1] - ((basePK[1] - baseVL[1]) * fr[j,1]);
// 2번째 열은 피보나치 비율이 곱해진 가격​
fr[j,3] = TL_New(baseVL[3],baseVL[4],fr[j,2],Date,Time,fr[j,2]);
​ // 다시 3번째 열에 추세선의 ID를 저장
If displPRC = 1 Then Begin
If fr[j,4] > 0 Then Text_Delete(fr[j,4]);
// 4번째열은 텍스트ID. ​
fr[j,4] = Text_New(baseVL[3],baseVL[4],fr[j,2],"(" + NumToStr(fr[j,1]*100,1) + "%) " + NumToStr(fr[j,2],2));
Text_SetStyle(fr[j,4], 1, 2);
Text_SetColor(fr[j,4],black);
End ;
End ;
End
Else If basePK[2] < baseVL[2] Then Begin
for j = 1 to 7 Begin
If fr[j,3] > 0 Then TL_Delete(fr[j,3]);
fr[j,2] = baseVL[1] + ((basePK[1] - baseVL[1]) * fr[j,1]);
fr[j,3] = TL_New(basePK[3],basePK[4],fr[j,2],Date,Time,fr[j,2]);
If displPRC = 1 Then Begin
If fr[j,4] > 0 Then Text_Delete(fr[j,4]);
fr[j,4] = Text_New(basePK[3],basePK[4],fr[j,2],"(" + NumToStr(fr[j,1]*100,1) + "%) " + NumToStr(fr[j,2],2));
Text_SetStyle(fr[j,4], 1, 2);
Text_SetColor(fr[j,4],black);
End ;
End ;
End ;
End
Else Begin
​// 기준고와 기준저의 변동이 없다면 기준 파동선은 그대로 두고 피보나치 되돌림만 연장한다.
for j = 1 to 7 Begin
TL_SetEnd(fr[j,3],Date,Time,fr[j,2]);
End ;
End ;
End ;
-----------------------------------------------------------------------------------
input:Length(10);
Var:sBar(0),subTL1(0);
Var:subLastHi(0),subLastLo(0),subLastVertex(""),subProcBit("");
Var:subPK1(0),subPK2(0),subPK3(0),subPK4(0),subPK5(0),subPK6(0),subPK7(0),subPK8(0),subPK9(0),subPK10(0),
subVL1(0),subVL2(0),subVL3(0),subVL4(0),subVL5(0),subVL6(0),subVL7(0),subVL8(0),subVL9(0),subVL10(0),
subPkBN1(0),subPkBN2(0),subPkBN3(0),subPkBN4(0),subPkBN5(0),
subPkBN6(0),subPkBN7(0),subPkBN8(0),subPkBN9(0),subPkBN10(0),
subVlBN1(0),subVlBN2(0),subVlBN3(0),subVlBN4(0),subVlBN5(0),
subVlBN6(0),subVlBN7(0),subVlBN8(0),subVlBN9(0),subVlBN10(0);
Var: var0(0),var1(0),var2(0),var3(0);
//==========================================
value1 = RSI( C, Length ) ;
{value1 = Stochastic( H, L, C, Length, 3, 3, 1, var0, var1, var2, var3 ) ;}
plot1(value1);
condition3 = Highest(Value1,length) = Value1 and subLastHi <> Value1;
condition4 = Lowest (value1,length) = value1 and subLastLo <> value1;
subProcBit = "";
If Condition3 and Condition4 Then Begin
If subLastVertex = "Valley" Then Begin
If subVL1 > value1 Then SubProcBit = "Valley"
Else SubProcBit = "Peak";
End
Else If subLastVertex = "Peak" Then Begin
If subPK1 < value1 Then subProcBit = "Peak"
Else subProcBit = "Valley";
End;
End
Else If Condition3 Then subProcBit = "Peak"
Else If condition4 Then subProcBit = "Valley";
//==========================================
If subProcBit = "Peak" Then Begin
subLastHi = H;
If subLastVertex = "Valley" Then Begin
subPK9 = subPK8; subpkBN9 = subpkBN8;
subPK8 = subPK7; subpkBN8 = subpkBN7;
subPK7 = subPK6; subpkBN7 = subpkBN6;
subPK6 = subPK5; subpkBN6 = subpkBN5;
subPK5 = subPK4; subpkBN5 = subpkBN4;
subPK4 = subPK3; subpkBN4 = subpkBN3;
subPK3 = subPK2; subpkBN3 = subpkBN2;
subPK2 = subPK1; subpkBN2 = subpkBN1;
subPK1 = value1; subpkBN1 = BarNumber;
sBar = BarNumber - subvlBN1;
subTL1 = tl_new_self(Date[sBar],Time[sBar],subVL1,Date,Time,subPK1);
TL_SetSize(subTL1,2);
TL_SetColor(subTL1,RED);
End
Else If subPK1 < value1 Then Begin
subPK1 = value1; subpkBN1 = BarNumber;
TL_SetEnd(subTL1,Date,Time,subPK1);
End ;
sublastVertex = "Peak";
End ;
//==========================================
If subprocBit = "Valley" Then Begin
sublastLo = value1;
If sublastVertex = "Peak" then Begin
subVL9 = subVL8; subvlBN9 = subvlBN8;
subVL8 = subVL7; subvlBN8 = subvlBN7;
subVL7 = subVL6; subvlBN7 = subvlBN6;
subVL6 = subVL5; subvlBN6 = subvlBN5;
subVL5 = subVL4; subvlBN5 = subvlBN4;
subVL4 = subVL3; subvlBN4 = subvlBN3;
subVL3 = subVL2; subvlBN3 = subvlBN2;
subVL2 = subVL1; subvlBN2 = subvlBN1;
subVL1 = value1; subvlBN1 = BarNumber;
sBar = BarNumber - subpkBN1;
subTL1 = tl_new_self(Date[sBar],Time[sBar],subPK1,Date,Time,subVL1);
TL_SetSize(subTL1,2);
TL_SetColor(subTL1,BLUE);
End
Else If subVL1 > value1 then Begin
subVL1 = value1; subvlBN1 = BarNumber;
TL_SetEnd(subTL1,Date,Time,subVL1);
End ;
sublastVertex = "Valley";
End ;
------------------------------------------------------------------------------------
Indicator Name : HiLoZZTrendLine_RSI
Input:length(10);
Var:lastHi(0),lastLo(0),lastVertex(""),procBit("");
Var:sBar(0),TL1(0);
Var:PK1(0),PK2(0),PK3(0),PK4(0),PK5(0),PK6(0),PK7(0),PK8(0),PK9(0),PK10(0),
VL1(0),VL2(0),VL3(0),VL4(0),VL5(0),VL6(0),VL7(0),VL8(0),VL9(0),VL10(0),
pkBN1(0),pkBN2(0),pkBN3(0),pkBN4(0),pkBN5(0),
pkBN6(0),pkBN7(0),pkBN8(0),pkBN9(0),pkBN10(0),
vlBN1(0),vlBN2(0),vlBN3(0),vlBN4(0),vlBN5(0),
vlBN6(0),vlBN7(0),vlBN8(0),vlBN9(0),vlBN10(0);
//==========================================
Condition1 = Highest(H,length) = H and lastHi <> H;
Condition2 = Lowest (L,length) = L and lastLo <> L;
procBit = "";
If Condition1 and Condition2 Then Begin
If lastVertex = "Valley" Then Begin
If VL1 > L Then procBit = "Valley"
Else procBit = "Peak";
End
Else If lastVertex = "Peak" Then Begin
If PK1 < H Then procBit = "Peak"
Else procBit = "Valley";
End;
End
Else If Condition1 Then procBit = "Peak"
Else If Condition2 Then procBit = "Valley";
//==========================================
If procBit = "Peak" Then Begin
lastHi = H;
If lastVertex = "Valley" Then Begin
PK9 = PK8; pkBN9 = pkBN8;
PK8 = PK7; pkBN8 = pkBN7;
PK7 = PK6; pkBN7 = pkBN6;
PK6 = PK5; pkBN6 = pkBN5;
PK5 = PK4; pkBN5 = pkBN4;
PK4 = PK3; pkBN4 = pkBN3;
PK3 = PK2; pkBN3 = pkBN2;
PK2 = PK1; pkBN2 = pkBN1;
PK1 = H; pkBN1 = BarNumber;
sBar = BarNumber - vlBN1;
TL1 = TL_New(Date[sBar],Time[sBar],VL1,Date,Time,PK1);
TL_SetSize(TL1,2);
TL_SetColor(TL1,RED);
End
Else If PK1 < H Then Begin
PK1 = H; pkBN1 = BarNumber;
TL_SetEnd(TL1,Date,Time,PK1);
End ;
lastVertex = "Peak";
End ;
//==========================================
If procBit = "Valley" Then Begin
lastLo = L;
If lastVertex = "Peak" then Begin
VL9 = VL8; vlBN9 = vlBN8;
VL8 = VL7; vlBN8 = vlBN7;
VL7 = VL6; vlBN7 = vlBN6;
VL6 = VL5; vlBN6 = vlBN5;
VL5 = VL4; vlBN5 = vlBN4;
VL4 = VL3; vlBN4 = vlBN3;
VL3 = VL2; vlBN3 = vlBN2;
VL2 = VL1; vlBN2 = vlBN1;
VL1 = L; vlBN1 = BarNumber;
sBar = BarNumber - pkBN1;
TL1 = TL_New(Date[sBar],Time[sBar],PK1,Date,Time,VL1);
TL_SetSize(TL1,2);
TL_SetColor(TL1,BLUE);
End
Else If VL1 > L then Begin
VL1 = L; vlBN1 = BarNumber;
TL_SetEnd(TL1,Date,Time,VL1);
End ;
lastVertex = "Valley";
End ;
//==========================================
Var:subTL1(0);
Var:subLastHi(0),subLastLo(0),subLastVertex(""),subProcBit("");
Var:subPK1(0),subPK2(0),subPK3(0),subPK4(0),subPK5(0),subPK6(0),subPK7(0),subPK8(0),subPK9(0),subPK10(0),
subVL1(0),subVL2(0),subVL3(0),subVL4(0),subVL5(0),subVL6(0),subVL7(0),subVL8(0),subVL9(0),subVL10(0),
subPkBN1(0),subPkBN2(0),subPkBN3(0),subPkBN4(0),subPkBN5(0),
subPkBN6(0),subPkBN7(0),subPkBN8(0),subPkBN9(0),subPkBN10(0),
subVlBN1(0),subVlBN2(0),subVlBN3(0),subVlBN4(0),subVlBN5(0),
subVlBN6(0),subVlBN7(0),subVlBN8(0),subVlBN9(0),subVlBN10(0);
Var: var0(0),var1(0),var2(0),var3(0);
//==========================================
value1 = RSI( C, Length ) ;
plot1(value1);
condition3 = Highest(Value1,length) = Value1 and subLastHi <> Value1;
condition4 = Lowest (value1,length) = value1 and subLastLo <> value1;
subProcBit = "";
If Condition3 and Condition4 Then Begin
If subLastVertex = "Valley" Then Begin
If subVL1 > value1 Then SubProcBit = "Valley"
Else SubProcBit = "Peak";
End
Else If subLastVertex = "Peak" Then Begin
If subPK1 < value1 Then subProcBit = "Peak"
Else subProcBit = "Valley";
End;
End
Else If Condition3 Then subProcBit = "Peak"
Else If condition4 Then subProcBit = "Valley";
//==========================================
If subProcBit = "Peak" Then Begin
subLastHi = H;
If subLastVertex = "Valley" Then Begin
subPK9 = subPK8; subpkBN9 = subpkBN8;
subPK8 = subPK7; subpkBN8 = subpkBN7;
subPK7 = subPK6; subpkBN7 = subpkBN6;
subPK6 = subPK5; subpkBN6 = subpkBN5;
subPK5 = subPK4; subpkBN5 = subpkBN4;
subPK4 = subPK3; subpkBN4 = subpkBN3;
subPK3 = subPK2; subpkBN3 = subpkBN2;
subPK2 = subPK1; subpkBN2 = subpkBN1;
subPK1 = value1; subpkBN1 = BarNumber;
sBar = BarNumber - subvlBN1;
subTL1 = tl_new_self(Date[sBar],Time[sBar],subVL1,Date,Time,subPK1);
TL_SetSize(subTL1,2);
TL_SetColor(subTL1,RED);
End
Else If subPK1 < value1 Then Begin
subPK1 = value1; subpkBN1 = BarNumber;
TL_SetEnd(subTL1,Date,Time,subPK1);
End ;
sublastVertex = "Peak";
End ;
//==========================================
If subprocBit = "Valley" Then Begin
sublastLo = value1;
If sublastVertex = "Peak" then Begin
subVL9 = subVL8; subvlBN9 = subvlBN8;
subVL8 = subVL7; subvlBN8 = subvlBN7;
subVL7 = subVL6; subvlBN7 = subvlBN6;
subVL6 = subVL5; subvlBN6 = subvlBN5;
subVL5 = subVL4; subvlBN5 = subvlBN4;
subVL4 = subVL3; subvlBN4 = subvlBN3;
subVL3 = subVL2; subvlBN3 = subvlBN2;
subVL2 = subVL1; subvlBN2 = subvlBN1;
subVL1 = value1; subvlBN1 = BarNumber;
sBar = BarNumber - subpkBN1;
subTL1 = tl_new_self(Date[sBar],Time[sBar],subPK1,Date,Time,subVL1);
TL_SetSize(subTL1,2);
TL_SetColor(subTL1,BLUE);
End
Else If subVL1 > value1 then Begin
subVL1 = value1; subvlBN1 = BarNumber;
TL_SetEnd(subTL1,Date,Time,subVL1);
End ;
sublastVertex = "Valley";
End ;
//==========================================
var:TL2(0),subTL2(0);
if VL2 > VL1 and subVL2 < subVL1 then begin
TL2 = tl_new_bn(vlBN2,VL2,vlBN1,VL1);
TL_SetSize(TL2,2);
TL_SetColor(TL2,BLACK);
subTL2 = tl_new_self_bn(subVlBN2,subVL2,subVlBN1,subVL1);
TL_SetSize(subTL2,2);
TL_SetColor(subTL2,BLACK);
end;
---------------------------------------------------------------------------------
Indicator Name : HiLoZZTrendLine_Stochastics
Input:length(10);
Var:lastHi(0),lastLo(0),lastVertex(""),procBit("");
Var:sBar(0),TL1(0);
Var:PK1(0),PK2(0),PK3(0),PK4(0),PK5(0),PK6(0),PK7(0),PK8(0),PK9(0),PK10(0),
VL1(0),VL2(0),VL3(0),VL4(0),VL5(0),VL6(0),VL7(0),VL8(0),VL9(0),VL10(0),
pkBN1(0),pkBN2(0),pkBN3(0),pkBN4(0),pkBN5(0),
pkBN6(0),pkBN7(0),pkBN8(0),pkBN9(0),pkBN10(0),
vlBN1(0),vlBN2(0),vlBN3(0),vlBN4(0),vlBN5(0),
vlBN6(0),vlBN7(0),vlBN8(0),vlBN9(0),vlBN10(0);
//==========================================
Condition1 = Highest(H,length) = H and lastHi <> H;
Condition2 = Lowest (L,length) = L and lastLo <> L;
procBit = "";
If Condition1 and Condition2 Then Begin
If lastVertex = "Valley" Then Begin
If VL1 > L Then procBit = "Valley"
Else procBit = "Peak";
End
Else If lastVertex = "Peak" Then Begin
If PK1 < H Then procBit = "Peak"
Else procBit = "Valley";
End;
End
Else If Condition1 Then procBit = "Peak"
Else If Condition2 Then procBit = "Valley";
//==========================================
If procBit = "Peak" Then Begin
lastHi = H;
If lastVertex = "Valley" Then Begin
PK9 = PK8; pkBN9 = pkBN8;
PK8 = PK7; pkBN8 = pkBN7;
PK7 = PK6; pkBN7 = pkBN6;
PK6 = PK5; pkBN6 = pkBN5;
PK5 = PK4; pkBN5 = pkBN4;
PK4 = PK3; pkBN4 = pkBN3;
PK3 = PK2; pkBN3 = pkBN2;
PK2 = PK1; pkBN2 = pkBN1;
PK1 = H; pkBN1 = BarNumber;
sBar = BarNumber - vlBN1;
TL1 = TL_New(Date[sBar],Time[sBar],VL1,Date,Time,PK1);
TL_SetSize(TL1,2);
TL_SetColor(TL1,RED);
End
Else If PK1 < H Then Begin
PK1 = H; pkBN1 = BarNumber;
TL_SetEnd(TL1,Date,Time,PK1);
End ;
lastVertex = "Peak";
End ;
//==========================================
If procBit = "Valley" Then Begin
lastLo = L;
If lastVertex = "Peak" then Begin
VL9 = VL8; vlBN9 = vlBN8;
VL8 = VL7; vlBN8 = vlBN7;
VL7 = VL6; vlBN7 = vlBN6;
VL6 = VL5; vlBN6 = vlBN5;
VL5 = VL4; vlBN5 = vlBN4;
VL4 = VL3; vlBN4 = vlBN3;
VL3 = VL2; vlBN3 = vlBN2;
VL2 = VL1; vlBN2 = vlBN1;
VL1 = L; vlBN1 = BarNumber;
sBar = BarNumber - pkBN1;
TL1 = TL_New(Date[sBar],Time[sBar],PK1,Date,Time,VL1);
TL_SetSize(TL1,2);
TL_SetColor(TL1,BLUE);
End
Else If VL1 > L then Begin
VL1 = L; vlBN1 = BarNumber;
TL_SetEnd(TL1,Date,Time,VL1);
End ;
lastVertex = "Valley";
End ;
//==========================================
Var:subTL1(0);
Var:subLastHi(0),subLastLo(0),subLastVertex(""),subProcBit("");
Var:subPK1(0),subPK2(0),subPK3(0),subPK4(0),subPK5(0),subPK6(0),subPK7(0),subPK8(0),subPK9(0),subPK10(0),
subVL1(0),subVL2(0),subVL3(0),subVL4(0),subVL5(0),subVL6(0),subVL7(0),subVL8(0),subVL9(0),subVL10(0),
subPkBN1(0),subPkBN2(0),subPkBN3(0),subPkBN4(0),subPkBN5(0),
subPkBN6(0),subPkBN7(0),subPkBN8(0),subPkBN9(0),subPkBN10(0),
subVlBN1(0),subVlBN2(0),subVlBN3(0),subVlBN4(0),subVlBN5(0),
subVlBN6(0),subVlBN7(0),subVlBN8(0),subVlBN9(0),subVlBN10(0);
Var: var0(0),var1(0),var2(0),var3(0);
//==========================================
value2 = Stochastic( H, L, C, Length, 3, 3, 1, var0, var1, var2, var3 ) ;
value1 = var2;
plot1(value1);
condition3 = Highest(Value1,length) = Value1 and subLastHi <> Value1;
condition4 = Lowest (value1,length) = value1 and subLastLo <> value1;
subProcBit = "";
If Condition3 and Condition4 Then Begin
If subLastVertex = "Valley" Then Begin
If subVL1 > value1 Then SubProcBit = "Valley"
Else SubProcBit = "Peak";
End
Else If subLastVertex = "Peak" Then Begin
If subPK1 < value1 Then subProcBit = "Peak"
Else subProcBit = "Valley";
End;
End
Else If Condition3 Then subProcBit = "Peak"
Else If condition4 Then subProcBit = "Valley";
//==========================================
If subProcBit = "Peak" Then Begin
subLastHi = H;
If subLastVertex = "Valley" Then Begin
subPK9 = subPK8; subpkBN9 = subpkBN8;
subPK8 = subPK7; subpkBN8 = subpkBN7;
subPK7 = subPK6; subpkBN7 = subpkBN6;
subPK6 = subPK5; subpkBN6 = subpkBN5;
subPK5 = subPK4; subpkBN5 = subpkBN4;
subPK4 = subPK3; subpkBN4 = subpkBN3;
subPK3 = subPK2; subpkBN3 = subpkBN2;
subPK2 = subPK1; subpkBN2 = subpkBN1;
subPK1 = value1; subpkBN1 = BarNumber;
sBar = BarNumber - subvlBN1;
subTL1 = tl_new_self(Date[sBar],Time[sBar],subVL1,Date,Time,subPK1);
TL_SetSize(subTL1,2);
TL_SetColor(subTL1,RED);
End
Else If subPK1 < value1 Then Begin
subPK1 = value1; subpkBN1 = BarNumber;
TL_SetEnd(subTL1,Date,Time,subPK1);
End ;
sublastVertex = "Peak";
End ;
//==========================================
If subprocBit = "Valley" Then Begin
sublastLo = value1;
If sublastVertex = "Peak" then Begin
subVL9 = subVL8; subvlBN9 = subvlBN8;
subVL8 = subVL7; subvlBN8 = subvlBN7;
subVL7 = subVL6; subvlBN7 = subvlBN6;
subVL6 = subVL5; subvlBN6 = subvlBN5;
subVL5 = subVL4; subvlBN5 = subvlBN4;
subVL4 = subVL3; subvlBN4 = subvlBN3;
subVL3 = subVL2; subvlBN3 = subvlBN2;
subVL2 = subVL1; subvlBN2 = subvlBN1;
subVL1 = value1; subvlBN1 = BarNumber;
sBar = BarNumber - subpkBN1;
subTL1 = tl_new_self(Date[sBar],Time[sBar],subPK1,Date,Time,subVL1);
TL_SetSize(subTL1,2);
TL_SetColor(subTL1,BLUE);
End
Else If subVL1 > value1 then Begin
subVL1 = value1; subvlBN1 = BarNumber;
TL_SetEnd(subTL1,Date,Time,subVL1);
End ;
sublastVertex = "Valley";
End ;
//==========================================
var:TL2(0),subTL2(0);
if VL2 > VL1 and subVL2 < subVL1 then begin
TL2 = tl_new_bn(vlBN2,VL2,vlBN1,VL1);
TL_SetSize(TL2,2);
TL_SetColor(TL2,BLACK);
subTL2 = tl_new_self_bn(subVlBN2,subVL2,subVlBN1,subVL1);
TL_SetSize(subTL2,2);
TL_SetColor(subTL2,BLACK);
end;
답변 1
예스스탁 예스스탁 답변
2018-03-14 10:03:06
안녕하세요
예스스탁입니다.
1.
Input:length(10),ClsPxUseBit(0),inRange(10),waveLineSize(2),displPRC(1);
Var:j(0),jj(0),jjj(0),HH(0),LL(0),lastHi(0),lastLo(0),lastVertex(""),procBit(""),
TL1(0),TL2(0);
Array:PK[50,4](0),VL[50,4](0), // 1:가격, 2:봉번호, 3:날짜, 4:시각
basePK[5](0),baseVL[5](0); // 0:사용 안함, 1:가격, 2:봉번호, 3:날짜, 4:시각?
// 피보나치 라인을 계산하기 위해 기준이 되는 고점과 저점의 정보
//==========================================
HH = IFF(ClsPxUseBit == 1,C,H);
LL = IFF(ClsPxUseBit == 1,C,L);
If CurrentBar == 1 Then Begin
PK[1,1] = HH;
VL[1,1] = LL;
End ;
Condition1 = Highest(HH,length) == HH and lastHi <> HH;
Condition2 = Lowest (LL,length) == LL and lastLo <> LL;
procBit = "";
If Condition1 and Condition2 Then Begin
If lastVertex == "Valley" Then procBit = "Peak";
Else procBit = "Valley";
End
Else If Condition1 Then procBit = "Peak";
Else If Condition2 Then procBit = "Valley";
//==========================================
If procBit == "Peak" Then Begin
lastHi = HH;
If lastVertex == "Valley" Then Begin
For j = 50 DownTo 2 Begin
For jj = 1 To 4 Begin
PK[j,jj] = PK[j-1,jj];
End ;
End ;
PK[1,1] = HH;
PK[1,2] = index;
PK[1,3] = Date;
PK[1,4] = Time;
TL1 = TL_New(VL[1,3],VL[1,4],VL[1,1],PK[1,3],PK[1,4],PK[1,1]);
TL_SetSize(TL1,waveLineSize);
TL_SetColor(TL1,RED);
// 주어진 범위내에서 가장 높은 고점을 찾는다
basePK[1] = 0;
For j = 1 To inRange Begin // 주어진 범위내에서
If basePK[1] < PK[j,1] Then Begin // 기준고점보다 높은 고점이 나오면
For jjj = 1 To 4 Begin
basePK[jjj] = PK[j,jjj]; // 1번열부터 4번열까지의 기준고점의 내용을 갱신
End ;
End ;
End ;
End
Else If PK[1,1] < HH Then Begin
PK[1,1] = HH;
PK[1,2] = index;
PK[1,3] = Date;
PK[1,4] = Time;
TL_SetEnd(TL1,PK[1,3],PK[1,4],PK[1,1]);
End ;
lastVertex = "Peak";
End ;
//==========================================
If procBit == "Valley" Then Begin
lastLo = LL;
If lastVertex == "Peak" then Begin
For j = 50 DownTo 2 Begin
For jj = 1 To 4 Begin
VL[j,jj] = VL[j-1,jj];
End ;
End ;
VL[1,1] = LL;
VL[1,2] = index;
VL[1,3] = Date;
VL[1,4] = Time;
TL1 = TL_New(PK[1,3],PK[1,4],PK[1,1],VL[1,3],VL[1,4],VL[1,1]);
TL_SetSize(TL1,waveLineSize);
TL_SetColor(TL1,BLUE);
// 주어진 범위 내에서 가장 낮은 저점을 찾는다.
baseVL[1] = 0;
For j = 1 To inRange Begin // 주어진 범위 내에서
If baseVL[1] > VL[j,1] or baseVL[1] == 0 Then Begin // 기준저점보다 낮거나 기준저가 0이면
For jjj = 1 To 4 Begin
baseVL[jjj] = VL[j,jjj]; // 기준저점의 내용을 갱신
End ;
End ;
End ;
End
Else If VL[1,1] > LL then Begin
VL[1,1] = LL;
VL[1,2] = index;
VL[1,3] = Date;
VL[1,4] = Time;
TL_SetEnd(TL1,VL[1,3],VL[1,4],VL[1,1]);
End ;
lastVertex = "Valley";
End ;
//==========================================
Array: fr[7,4](0); // 1:비율, 2:가격, 3:추세선 ID, 4:텍스트 ID
// 피보나치 수열 값을 저장할 배열변수 선언
If CurrentBar == 1 Then Begin
// 계산에 필요한 최대봉개수(Maximum Bars Back)를 설정하게 되는데 최대봉개수 이전의 봉에서는 계산 결과가 안 나오고
// 최대봉개수 이상의 봉이 생긴 이후에 계산 값이 나온다.
// 그래서 Maximum Bars Back가 20으로 설정되어 있으면 21번째 봉부터 CurrentBar가 1이 된다.
// 한번 설정해 놓으면 바뀔 일이 없으므로 CurrentBar가 1일 때만 아래 블럭안의 작업을 수행하도록 한다.
fr[1,1] = 0;
fr[2,1] = 0.236;
fr[3,1] = 0.382;
fr[4,1] = 0.50;
fr[5,1] = 0.618;
fr[6,1] = 0.764;
fr[7,1] = 1;
End ;
If basePK[1] > 0 and baseVL[1] > 0 Then Begin // 기준고, 기준저 값이 있는 경우
If baseVL[2][1] <> baseVL[2] or basePK[2][1] <> basePK[2] Then Begin
// 기준저의 봉 번호가 바뀌었거나(기준저가 바뀜) 기준고의 봉 번호가 바뀌었다면(기준고 변동)
If TL2 > 0 Then TL_Delete(TL2);
// TL2는 기준고와 기준저를 잇는 추세선이며, 0보다 크다면 이미 추세선이 있다는 의미이므로 삭제하고 새로 그린다.
TL2 = TL_New(baseVL[3],baseVL[4],baseVL[1],basePK[3],basePK[4],basePK[1]);
TL_SetSize(TL2,4);
TL_SetColor(TL2,Magenta); // 색깔은 개인 취향에 맞게 수정
If baseVL[2] < basePK[2] Then Begin
// 기준저점의 봉번호보다 기준고점의 봉번호가 크다면 기준고점이 뒤에 나타난 것이므로 기준파동은 상승파동이 된다.
for j = 1 to 7 Begin
If fr[j,3] > 0 Then TL_Delete(fr[j,3]);
// 3번째 열을 추세선ID로 사용하겠다고 했으니 값이 0보다 크면 기존 추세선을 삭제
fr[j,2] = basePK[1] - ((basePK[1] - baseVL[1]) * fr[j,1]);
// 2번째 열은 피보나치 비율이 곱해진 가격?
fr[j,3] = TL_New(baseVL[3],baseVL[4],fr[j,2],Date,Time,fr[j,2]);
// 다시 3번째 열에 추세선의 ID를 저장
If displPRC == 1 Then Begin
If fr[j,4] > 0 Then Text_Delete(fr[j,4]);
// 4번째열은 텍스트ID. ?
fr[j,4] = Text_New(baseVL[3],baseVL[4],fr[j,2],"(" + NumToStr(fr[j,1]*100,1) + "%) " + NumToStr(fr[j,2],2));
Text_SetStyle(fr[j,4], 1, 2);
Text_SetColor(fr[j,4],black);
End ;
End ;
End
Else If basePK[2] < baseVL[2] Then Begin
for j = 1 to 7 Begin
If fr[j,3] > 0 Then TL_Delete(fr[j,3]);
fr[j,2] = baseVL[1] + ((basePK[1] - baseVL[1]) * fr[j,1]);
fr[j,3] = TL_New(basePK[3],basePK[4],fr[j,2],Date,Time,fr[j,2]);
If displPRC == 1 Then Begin
If fr[j,4] > 0 Then Text_Delete(fr[j,4]);
fr[j,4] = Text_New(basePK[3],basePK[4],fr[j,2],"(" + NumToStr(fr[j,1]*100,1) + "%) " + NumToStr(fr[j,2],2));
Text_SetStyle(fr[j,4], 1, 2);
Text_SetColor(fr[j,4],black);
End ;
End ;
End ;
End
Else Begin
// 기준고와 기준저의 변동이 없다면 기준 파동선은 그대로 두고 피보나치 되돌림만 연장한다.
for j = 1 to 7 Begin
TL_SetEnd(fr[j,3],Date,Time,fr[j,2]);
End ;
End ;
End ;
2
두번째 식은 지표에 추세선을 그리는 부분인데
예스랭귀지에서는 현재 지표에는 추세선을 그릴수 없어
수식변경이 가능하지 않습니다.
3
Input:length(10);
Var:lastHi(0),lastLo(0),lastVertex(""),procBit("");
Var:sBar(0),TL1(0);
Var:PK1(0),PK2(0),PK3(0),PK4(0),PK5(0),PK6(0),PK7(0),PK8(0),PK9(0),PK10(0),
VL1(0),VL2(0),VL3(0),VL4(0),VL5(0),VL6(0),VL7(0),VL8(0),VL9(0),VL10(0),
pkBN1(0),pkBN2(0),pkBN3(0),pkBN4(0),pkBN5(0),
pkBN6(0),pkBN7(0),pkBN8(0),pkBN9(0),pkBN10(0),
vlBN1(0),vlBN2(0),vlBN3(0),vlBN4(0),vlBN5(0),
vlBN6(0),vlBN7(0),vlBN8(0),vlBN9(0),vlBN10(0);
//==========================================
Condition1 = Highest(H,length) == H and lastHi <> H;
Condition2 = Lowest (L,length) == L and lastLo <> L;
procBit = "";
If Condition1 and Condition2 Then Begin
If lastVertex == "Valley" Then Begin
If VL1 > L Then procBit = "Valley";
Else procBit = "Peak";
End
Else If lastVertex == "Peak" Then Begin
If PK1 < H Then procBit = "Peak" ;
Else procBit = "Valley";
End;
End
Else If Condition1 Then procBit = "Peak";
Else If Condition2 Then procBit = "Valley";
//==========================================
If procBit == "Peak" Then Begin
lastHi = H;
If lastVertex == "Valley" Then Begin
PK9 = PK8; pkBN9 = pkBN8;
PK8 = PK7; pkBN8 = pkBN7;
PK7 = PK6; pkBN7 = pkBN6;
PK6 = PK5; pkBN6 = pkBN5;
PK5 = PK4; pkBN5 = pkBN4;
PK4 = PK3; pkBN4 = pkBN3;
PK3 = PK2; pkBN3 = pkBN2;
PK2 = PK1; pkBN2 = pkBN1;
PK1 = H; pkBN1 = index;
sBar = index - vlBN1;
TL1 = TL_New(Date[sBar],Time[sBar],VL1,Date,Time,PK1);
TL_SetSize(TL1,2);
TL_SetColor(TL1,RED);
End
Else If PK1 < H Then Begin
PK1 = H; pkBN1 = index;
TL_SetEnd(TL1,Date,Time,PK1);
End ;
lastVertex = "Peak";
End ;
//==========================================
If procBit == "Valley" Then Begin
lastLo = L;
If lastVertex == "Peak" then Begin
VL9 = VL8; vlBN9 = vlBN8;
VL8 = VL7; vlBN8 = vlBN7;
VL7 = VL6; vlBN7 = vlBN6;
VL6 = VL5; vlBN6 = vlBN5;
VL5 = VL4; vlBN5 = vlBN4;
VL4 = VL3; vlBN4 = vlBN3;
VL3 = VL2; vlBN3 = vlBN2;
VL2 = VL1; vlBN2 = vlBN1;
VL1 = L; vlBN1 = index;
sBar = index - pkBN1;
TL1 = TL_New(Date[sBar],Time[sBar],PK1,Date,Time,VL1);
TL_SetSize(TL1,2);
TL_SetColor(TL1,BLUE);
End
Else If VL1 > L then Begin
VL1 = L; vlBN1 = index;
TL_SetEnd(TL1,Date,Time,VL1);
End ;
lastVertex = "Valley";
End ;
4
2번과 같이 지표에 그리는 부분이라 구현되지 않습니다.
5
Input:length(10);
Var:lastHi(0),lastLo(0),lastVertex(""),procBit("");
Var:sBar(0),TL1(0);
Var:PK1(0),PK2(0),PK3(0),PK4(0),PK5(0),PK6(0),PK7(0),PK8(0),PK9(0),PK10(0),
VL1(0),VL2(0),VL3(0),VL4(0),VL5(0),VL6(0),VL7(0),VL8(0),VL9(0),VL10(0),
pkBN1(0),pkBN2(0),pkBN3(0),pkBN4(0),pkBN5(0),
pkBN6(0),pkBN7(0),pkBN8(0),pkBN9(0),pkBN10(0),
vlBN1(0),vlBN2(0),vlBN3(0),vlBN4(0),vlBN5(0),
vlBN6(0),vlBN7(0),vlBN8(0),vlBN9(0),vlBN10(0);
//==========================================
Condition1 = Highest(H,length) == H and lastHi <> H;
Condition2 = Lowest (L,length) == L and lastLo <> L;
procBit = "";
If Condition1 and Condition2 Then Begin
If lastVertex == "Valley" Then Begin
If VL1 > L Then procBit = "Valley";
Else procBit = "Peak";
End
Else If lastVertex == "Peak" Then Begin
If PK1 < H Then procBit = "Peak";
Else procBit = "Valley";
End;
End
Else If Condition1 Then procBit = "Peak";
Else If Condition2 Then procBit = "Valley";
//==========================================
If procBit == "Peak" Then Begin
lastHi = H;
If lastVertex == "Valley" Then Begin
PK9 = PK8; pkBN9 = pkBN8;
PK8 = PK7; pkBN8 = pkBN7;
PK7 = PK6; pkBN7 = pkBN6;
PK6 = PK5; pkBN6 = pkBN5;
PK5 = PK4; pkBN5 = pkBN4;
PK4 = PK3; pkBN4 = pkBN3;
PK3 = PK2; pkBN3 = pkBN2;
PK2 = PK1; pkBN2 = pkBN1;
PK1 = H; pkBN1 = index;
sBar = index - vlBN1;
TL1 = TL_New(Date[sBar],Time[sBar],VL1,Date,Time,PK1);
TL_SetSize(TL1,2);
TL_SetColor(TL1,RED);
End
Else If PK1 < H Then Begin
PK1 = H; pkBN1 = index;
TL_SetEnd(TL1,Date,Time,PK1);
End ;
lastVertex = "Peak";
End ;
//==========================================
If procBit == "Valley" Then Begin
lastLo = L;
If lastVertex == "Peak" then Begin
VL9 = VL8; vlBN9 = vlBN8;
VL8 = VL7; vlBN8 = vlBN7;
VL7 = VL6; vlBN7 = vlBN6;
VL6 = VL5; vlBN6 = vlBN5;
VL5 = VL4; vlBN5 = vlBN4;
VL4 = VL3; vlBN4 = vlBN3;
VL3 = VL2; vlBN3 = vlBN2;
VL2 = VL1; vlBN2 = vlBN1;
VL1 = L; vlBN1 = index;
sBar = index - pkBN1;
TL1 = TL_New(Date[sBar],Time[sBar],PK1,Date,Time,VL1);
TL_SetSize(TL1,2);
TL_SetColor(TL1,BLUE);
End
Else If VL1 > L then Begin
VL1 = L; vlBN1 = index;
TL_SetEnd(TL1,Date,Time,VL1);
End ;
lastVertex = "Valley";
End ;
6
2번과 같이 지표에 그리는 부분이라 구현되지 않습니다.
즐거운 하루되세요
> qha71 님이 쓴 글입니다.
> 제목 : 수식 변환 의뢰 드려요!
> 아래 수식은 멀티챠트용 수식들 입니다!
예스용으로 변환 부탁드릴께요!
감사합니다!
Input:length(10),ClsPxUseBit(0),inRange(10),waveLineSize(2),displPRC(1);
Var:j(0),jj(0),jjj(0),HH(0),LL(0),lastHi(0),lastLo(0),lastVertex(""),procBit(""),
TL1(0),TL2(0);
Array:PK[50,4](0),VL[50,4](0), // 1:가격, 2:봉번호, 3:날짜, 4:시각
​ basePK[5](0),baseVL[5](0); // 0:사용 안함, 1:가격, 2:봉번호, 3:날짜, 4:시각
// 피보나치 라인을 계산하기 위해 기준이 되는 고점과 저점의 정보
//==========================================
HH = IFF(ClsPxUseBit = 1,C,H);
LL = IFF(ClsPxUseBit = 1,C,L);
If CurrentBar = 1 Then Begin
PK[1,1] = HH;
VL[1,1] = LL;
End ;
Condition1 = Highest(HH,length) = HH and lastHi <> HH;
Condition2 = Lowest (LL,length) = LL and lastLo <> LL;
procBit = "";
If Condition1 and Condition2 Then Begin
If lastVertex = "Valley" Then procBit = "Peak"
Else procBit = "Valley";
End
Else If Condition1 Then procBit = "Peak"
Else If Condition2 Then procBit = "Valley";
//==========================================
If procBit = "Peak" Then Begin
lastHi = HH;
If lastVertex = "Valley" Then Begin
For j = 50 DownTo 2 Begin
For jj = 1 To 4 Begin
PK[j,jj] = PK[j-1,jj];
End ;
End ;
PK[1,1] = HH;
PK[1,2] = BarNumber;
PK[1,3] = Date;
PK[1,4] = Time;
TL1 = TL_New(VL[1,3],VL[1,4],VL[1,1],PK[1,3],PK[1,4],PK[1,1]);
TL_SetSize(TL1,waveLineSize);
TL_SetColor(TL1,RED);
​// 주어진 범위내에서 가장 높은 고점을 찾는다
basePK[1] = 0;
For j = 1 To inRange Begin // 주어진 범위내에서
If basePK[1] < PK[j,1] Then Begin // 기준고점보다 높은 고점이 나오면
For jjj = 1 To 4 Begin
basePK[jjj] = PK[j,jjj]; // 1번열부터 4번열까지의 기준고점의 내용을 갱신
End ;
End ;
End ;
End
Else If PK[1,1] < HH Then Begin
PK[1,1] = HH;
PK[1,2] = BarNumber;
PK[1,3] = Date;
PK[1,4] = Time;
TL_SetEnd(TL1,PK[1,3],PK[1,4],PK[1,1]);
End ;
lastVertex = "Peak";
End ;
//==========================================
If procBit = "Valley" Then Begin
lastLo = LL;
If lastVertex = "Peak" then Begin
For j = 50 DownTo 2 Begin
For jj = 1 To 4 Begin
VL[j,jj] = VL[j-1,jj];
End ;
End ;
VL[1,1] = LL;
VL[1,2] = BarNumber;
VL[1,3] = Date;
VL[1,4] = Time;
TL1 = TL_New(PK[1,3],PK[1,4],PK[1,1],VL[1,3],VL[1,4],VL[1,1]);
TL_SetSize(TL1,waveLineSize);
TL_SetColor(TL1,BLUE);
​// 주어진 범위 내에서 가장 낮은 저점을 찾는다.
baseVL[1] = 0;
For j = 1 To inRange Begin // 주어진 범위 내에서
If baseVL[1] > VL[j,1] or baseVL[1] = 0 Then Begin // 기준저점보다 낮거나 기준저가 0이면
For jjj = 1 To 4 Begin
baseVL[jjj] = VL[j,jjj]; // 기준저점의 내용을 갱신
End ;
End ;
End ;
End
Else If VL[1,1] > LL then Begin
VL[1,1] = LL;
VL[1,2] = BarNumber;
VL[1,3] = Date;
VL[1,4] = Time;
TL_SetEnd(TL1,VL[1,3],VL[1,4],VL[1,1]);
End ;
lastVertex = "Valley";
End ;
//==========================================
​Array: fr[7,4](0); // 1:비율, 2:가격, 3:추세선 ID, 4:텍스트 ID
// 피보나치 수열 값을 저장할 배열변수 선언
​If CurrentBar = 1 Then Begin
​// 계산에 필요한 최대봉개수(Maximum Bars Back)를 설정하게 되는데 최대봉개수 이전의 봉에서는 계산 결과가 안 나오고
// 최대봉개수 이상의 봉이 생긴 이후에 계산 값이 나온다.
// 그래서 Maximum Bars Back가 20으로 설정되어 있으면 21번째 봉부터 CurrentBar가 1이 된다.
// 한번 설정해 놓으면 바뀔 일이 없으므로 CurrentBar가 1일 때만 아래 블럭안의 작업을 수행하도록 한다.
fr[1,1] = 0;
fr[2,1] = 0.236;
fr[3,1] = 0.382;
fr[4,1] = 0.50;
fr[5,1] = 0.618;
fr[6,1] = 0.764;
fr[7,1] = 1;
End ;
If basePK[1] > 0 and baseVL[1] > 0 Then Begin // 기준고, 기준저 값이 있는 경우
If baseVL[2][1] <> baseVL[2] or basePK[2][1] <> basePK[2] Then Begin
​// 기준저의 봉 번호가 바뀌었거나(기준저가 바뀜) 기준고의 봉 번호가 바뀌었다면(기준고 변동)
If TL2 > 0 Then TL_Delete(TL2);
​// TL2는 기준고와 기준저를 잇는 추세선이며, 0보다 크다면 이미 추세선이 있다는 의미이므로 삭제하고 새로 그린다.
TL2 = TL_New(baseVL[3],baseVL[4],baseVL[1],basePK[3],basePK[4],basePK[1]);
TL_SetSize(TL2,4);
TL_SetColor(TL2,Magenta); // 색깔은 개인 취향에 맞게 수정
If baseVL[2] < basePK[2] Then Begin
​// 기준저점의 봉번호보다 기준고점의 봉번호가 크다면 기준고점이 뒤에 나타난 것이므로 기준파동은 상승파동이 된다.
for j = 1 to 7 Begin
If fr[j,3] > 0 Then TL_Delete(fr[j,3]);
// 3번째 열을 추세선ID로 사용하겠다고 했으니 값이 0보다 크면 기존 추세선을 삭제
fr[j,2] = basePK[1] - ((basePK[1] - baseVL[1]) * fr[j,1]);
// 2번째 열은 피보나치 비율이 곱해진 가격​
fr[j,3] = TL_New(baseVL[3],baseVL[4],fr[j,2],Date,Time,fr[j,2]);
​ // 다시 3번째 열에 추세선의 ID를 저장
If displPRC = 1 Then Begin
If fr[j,4] > 0 Then Text_Delete(fr[j,4]);
// 4번째열은 텍스트ID. ​
fr[j,4] = Text_New(baseVL[3],baseVL[4],fr[j,2],"(" + NumToStr(fr[j,1]*100,1) + "%) " + NumToStr(fr[j,2],2));
Text_SetStyle(fr[j,4], 1, 2);
Text_SetColor(fr[j,4],black);
End ;
End ;
End
Else If basePK[2] < baseVL[2] Then Begin
for j = 1 to 7 Begin
If fr[j,3] > 0 Then TL_Delete(fr[j,3]);
fr[j,2] = baseVL[1] + ((basePK[1] - baseVL[1]) * fr[j,1]);
fr[j,3] = TL_New(basePK[3],basePK[4],fr[j,2],Date,Time,fr[j,2]);
If displPRC = 1 Then Begin
If fr[j,4] > 0 Then Text_Delete(fr[j,4]);
fr[j,4] = Text_New(basePK[3],basePK[4],fr[j,2],"(" + NumToStr(fr[j,1]*100,1) + "%) " + NumToStr(fr[j,2],2));
Text_SetStyle(fr[j,4], 1, 2);
Text_SetColor(fr[j,4],black);
End ;
End ;
End ;
End
Else Begin
​// 기준고와 기준저의 변동이 없다면 기준 파동선은 그대로 두고 피보나치 되돌림만 연장한다.
for j = 1 to 7 Begin
TL_SetEnd(fr[j,3],Date,Time,fr[j,2]);
End ;
End ;
End ;
-----------------------------------------------------------------------------------
input:Length(10);
Var:sBar(0),subTL1(0);
Var:subLastHi(0),subLastLo(0),subLastVertex(""),subProcBit("");
Var:subPK1(0),subPK2(0),subPK3(0),subPK4(0),subPK5(0),subPK6(0),subPK7(0),subPK8(0),subPK9(0),subPK10(0),
subVL1(0),subVL2(0),subVL3(0),subVL4(0),subVL5(0),subVL6(0),subVL7(0),subVL8(0),subVL9(0),subVL10(0),
subPkBN1(0),subPkBN2(0),subPkBN3(0),subPkBN4(0),subPkBN5(0),
subPkBN6(0),subPkBN7(0),subPkBN8(0),subPkBN9(0),subPkBN10(0),
subVlBN1(0),subVlBN2(0),subVlBN3(0),subVlBN4(0),subVlBN5(0),
subVlBN6(0),subVlBN7(0),subVlBN8(0),subVlBN9(0),subVlBN10(0);
Var: var0(0),var1(0),var2(0),var3(0);
//==========================================
value1 = RSI( C, Length ) ;
{value1 = Stochastic( H, L, C, Length, 3, 3, 1, var0, var1, var2, var3 ) ;}
plot1(value1);
condition3 = Highest(Value1,length) = Value1 and subLastHi <> Value1;
condition4 = Lowest (value1,length) = value1 and subLastLo <> value1;
subProcBit = "";
If Condition3 and Condition4 Then Begin
If subLastVertex = "Valley" Then Begin
If subVL1 > value1 Then SubProcBit = "Valley"
Else SubProcBit = "Peak";
End
Else If subLastVertex = "Peak" Then Begin
If subPK1 < value1 Then subProcBit = "Peak"
Else subProcBit = "Valley";
End;
End
Else If Condition3 Then subProcBit = "Peak"
Else If condition4 Then subProcBit = "Valley";
//==========================================
If subProcBit = "Peak" Then Begin
subLastHi = H;
If subLastVertex = "Valley" Then Begin
subPK9 = subPK8; subpkBN9 = subpkBN8;
subPK8 = subPK7; subpkBN8 = subpkBN7;
subPK7 = subPK6; subpkBN7 = subpkBN6;
subPK6 = subPK5; subpkBN6 = subpkBN5;
subPK5 = subPK4; subpkBN5 = subpkBN4;
subPK4 = subPK3; subpkBN4 = subpkBN3;
subPK3 = subPK2; subpkBN3 = subpkBN2;
subPK2 = subPK1; subpkBN2 = subpkBN1;
subPK1 = value1; subpkBN1 = BarNumber;
sBar = BarNumber - subvlBN1;
subTL1 = tl_new_self(Date[sBar],Time[sBar],subVL1,Date,Time,subPK1);
TL_SetSize(subTL1,2);
TL_SetColor(subTL1,RED);
End
Else If subPK1 < value1 Then Begin
subPK1 = value1; subpkBN1 = BarNumber;
TL_SetEnd(subTL1,Date,Time,subPK1);
End ;
sublastVertex = "Peak";
End ;
//==========================================
If subprocBit = "Valley" Then Begin
sublastLo = value1;
If sublastVertex = "Peak" then Begin
subVL9 = subVL8; subvlBN9 = subvlBN8;
subVL8 = subVL7; subvlBN8 = subvlBN7;
subVL7 = subVL6; subvlBN7 = subvlBN6;
subVL6 = subVL5; subvlBN6 = subvlBN5;
subVL5 = subVL4; subvlBN5 = subvlBN4;
subVL4 = subVL3; subvlBN4 = subvlBN3;
subVL3 = subVL2; subvlBN3 = subvlBN2;
subVL2 = subVL1; subvlBN2 = subvlBN1;
subVL1 = value1; subvlBN1 = BarNumber;
sBar = BarNumber - subpkBN1;
subTL1 = tl_new_self(Date[sBar],Time[sBar],subPK1,Date,Time,subVL1);
TL_SetSize(subTL1,2);
TL_SetColor(subTL1,BLUE);
End
Else If subVL1 > value1 then Begin
subVL1 = value1; subvlBN1 = BarNumber;
TL_SetEnd(subTL1,Date,Time,subVL1);
End ;
sublastVertex = "Valley";
End ;
------------------------------------------------------------------------------------
Indicator Name : HiLoZZTrendLine_RSI
Input:length(10);
Var:lastHi(0),lastLo(0),lastVertex(""),procBit("");
Var:sBar(0),TL1(0);
Var:PK1(0),PK2(0),PK3(0),PK4(0),PK5(0),PK6(0),PK7(0),PK8(0),PK9(0),PK10(0),
VL1(0),VL2(0),VL3(0),VL4(0),VL5(0),VL6(0),VL7(0),VL8(0),VL9(0),VL10(0),
pkBN1(0),pkBN2(0),pkBN3(0),pkBN4(0),pkBN5(0),
pkBN6(0),pkBN7(0),pkBN8(0),pkBN9(0),pkBN10(0),
vlBN1(0),vlBN2(0),vlBN3(0),vlBN4(0),vlBN5(0),
vlBN6(0),vlBN7(0),vlBN8(0),vlBN9(0),vlBN10(0);
//==========================================
Condition1 = Highest(H,length) = H and lastHi <> H;
Condition2 = Lowest (L,length) = L and lastLo <> L;
procBit = "";
If Condition1 and Condition2 Then Begin
If lastVertex = "Valley" Then Begin
If VL1 > L Then procBit = "Valley"
Else procBit = "Peak";
End
Else If lastVertex = "Peak" Then Begin
If PK1 < H Then procBit = "Peak"
Else procBit = "Valley";
End;
End
Else If Condition1 Then procBit = "Peak"
Else If Condition2 Then procBit = "Valley";
//==========================================
If procBit = "Peak" Then Begin
lastHi = H;
If lastVertex = "Valley" Then Begin
PK9 = PK8; pkBN9 = pkBN8;
PK8 = PK7; pkBN8 = pkBN7;
PK7 = PK6; pkBN7 = pkBN6;
PK6 = PK5; pkBN6 = pkBN5;
PK5 = PK4; pkBN5 = pkBN4;
PK4 = PK3; pkBN4 = pkBN3;
PK3 = PK2; pkBN3 = pkBN2;
PK2 = PK1; pkBN2 = pkBN1;
PK1 = H; pkBN1 = BarNumber;
sBar = BarNumber - vlBN1;
TL1 = TL_New(Date[sBar],Time[sBar],VL1,Date,Time,PK1);
TL_SetSize(TL1,2);
TL_SetColor(TL1,RED);
End
Else If PK1 < H Then Begin
PK1 = H; pkBN1 = BarNumber;
TL_SetEnd(TL1,Date,Time,PK1);
End ;
lastVertex = "Peak";
End ;
//==========================================
If procBit = "Valley" Then Begin
lastLo = L;
If lastVertex = "Peak" then Begin
VL9 = VL8; vlBN9 = vlBN8;
VL8 = VL7; vlBN8 = vlBN7;
VL7 = VL6; vlBN7 = vlBN6;
VL6 = VL5; vlBN6 = vlBN5;
VL5 = VL4; vlBN5 = vlBN4;
VL4 = VL3; vlBN4 = vlBN3;
VL3 = VL2; vlBN3 = vlBN2;
VL2 = VL1; vlBN2 = vlBN1;
VL1 = L; vlBN1 = BarNumber;
sBar = BarNumber - pkBN1;
TL1 = TL_New(Date[sBar],Time[sBar],PK1,Date,Time,VL1);
TL_SetSize(TL1,2);
TL_SetColor(TL1,BLUE);
End
Else If VL1 > L then Begin
VL1 = L; vlBN1 = BarNumber;
TL_SetEnd(TL1,Date,Time,VL1);
End ;
lastVertex = "Valley";
End ;
//==========================================
Var:subTL1(0);
Var:subLastHi(0),subLastLo(0),subLastVertex(""),subProcBit("");
Var:subPK1(0),subPK2(0),subPK3(0),subPK4(0),subPK5(0),subPK6(0),subPK7(0),subPK8(0),subPK9(0),subPK10(0),
subVL1(0),subVL2(0),subVL3(0),subVL4(0),subVL5(0),subVL6(0),subVL7(0),subVL8(0),subVL9(0),subVL10(0),
subPkBN1(0),subPkBN2(0),subPkBN3(0),subPkBN4(0),subPkBN5(0),
subPkBN6(0),subPkBN7(0),subPkBN8(0),subPkBN9(0),subPkBN10(0),
subVlBN1(0),subVlBN2(0),subVlBN3(0),subVlBN4(0),subVlBN5(0),
subVlBN6(0),subVlBN7(0),subVlBN8(0),subVlBN9(0),subVlBN10(0);
Var: var0(0),var1(0),var2(0),var3(0);
//==========================================
value1 = RSI( C, Length ) ;
plot1(value1);
condition3 = Highest(Value1,length) = Value1 and subLastHi <> Value1;
condition4 = Lowest (value1,length) = value1 and subLastLo <> value1;
subProcBit = "";
If Condition3 and Condition4 Then Begin
If subLastVertex = "Valley" Then Begin
If subVL1 > value1 Then SubProcBit = "Valley"
Else SubProcBit = "Peak";
End
Else If subLastVertex = "Peak" Then Begin
If subPK1 < value1 Then subProcBit = "Peak"
Else subProcBit = "Valley";
End;
End
Else If Condition3 Then subProcBit = "Peak"
Else If condition4 Then subProcBit = "Valley";
//==========================================
If subProcBit = "Peak" Then Begin
subLastHi = H;
If subLastVertex = "Valley" Then Begin
subPK9 = subPK8; subpkBN9 = subpkBN8;
subPK8 = subPK7; subpkBN8 = subpkBN7;
subPK7 = subPK6; subpkBN7 = subpkBN6;
subPK6 = subPK5; subpkBN6 = subpkBN5;
subPK5 = subPK4; subpkBN5 = subpkBN4;
subPK4 = subPK3; subpkBN4 = subpkBN3;
subPK3 = subPK2; subpkBN3 = subpkBN2;
subPK2 = subPK1; subpkBN2 = subpkBN1;
subPK1 = value1; subpkBN1 = BarNumber;
sBar = BarNumber - subvlBN1;
subTL1 = tl_new_self(Date[sBar],Time[sBar],subVL1,Date,Time,subPK1);
TL_SetSize(subTL1,2);
TL_SetColor(subTL1,RED);
End
Else If subPK1 < value1 Then Begin
subPK1 = value1; subpkBN1 = BarNumber;
TL_SetEnd(subTL1,Date,Time,subPK1);
End ;
sublastVertex = "Peak";
End ;
//==========================================
If subprocBit = "Valley" Then Begin
sublastLo = value1;
If sublastVertex = "Peak" then Begin
subVL9 = subVL8; subvlBN9 = subvlBN8;
subVL8 = subVL7; subvlBN8 = subvlBN7;
subVL7 = subVL6; subvlBN7 = subvlBN6;
subVL6 = subVL5; subvlBN6 = subvlBN5;
subVL5 = subVL4; subvlBN5 = subvlBN4;
subVL4 = subVL3; subvlBN4 = subvlBN3;
subVL3 = subVL2; subvlBN3 = subvlBN2;
subVL2 = subVL1; subvlBN2 = subvlBN1;
subVL1 = value1; subvlBN1 = BarNumber;
sBar = BarNumber - subpkBN1;
subTL1 = tl_new_self(Date[sBar],Time[sBar],subPK1,Date,Time,subVL1);
TL_SetSize(subTL1,2);
TL_SetColor(subTL1,BLUE);
End
Else If subVL1 > value1 then Begin
subVL1 = value1; subvlBN1 = BarNumber;
TL_SetEnd(subTL1,Date,Time,subVL1);
End ;
sublastVertex = "Valley";
End ;
//==========================================
var:TL2(0),subTL2(0);
if VL2 > VL1 and subVL2 < subVL1 then begin
TL2 = tl_new_bn(vlBN2,VL2,vlBN1,VL1);
TL_SetSize(TL2,2);
TL_SetColor(TL2,BLACK);
subTL2 = tl_new_self_bn(subVlBN2,subVL2,subVlBN1,subVL1);
TL_SetSize(subTL2,2);
TL_SetColor(subTL2,BLACK);
end;
---------------------------------------------------------------------------------
Indicator Name : HiLoZZTrendLine_Stochastics
Input:length(10);
Var:lastHi(0),lastLo(0),lastVertex(""),procBit("");
Var:sBar(0),TL1(0);
Var:PK1(0),PK2(0),PK3(0),PK4(0),PK5(0),PK6(0),PK7(0),PK8(0),PK9(0),PK10(0),
VL1(0),VL2(0),VL3(0),VL4(0),VL5(0),VL6(0),VL7(0),VL8(0),VL9(0),VL10(0),
pkBN1(0),pkBN2(0),pkBN3(0),pkBN4(0),pkBN5(0),
pkBN6(0),pkBN7(0),pkBN8(0),pkBN9(0),pkBN10(0),
vlBN1(0),vlBN2(0),vlBN3(0),vlBN4(0),vlBN5(0),
vlBN6(0),vlBN7(0),vlBN8(0),vlBN9(0),vlBN10(0);
//==========================================
Condition1 = Highest(H,length) = H and lastHi <> H;
Condition2 = Lowest (L,length) = L and lastLo <> L;
procBit = "";
If Condition1 and Condition2 Then Begin
If lastVertex = "Valley" Then Begin
If VL1 > L Then procBit = "Valley"
Else procBit = "Peak";
End
Else If lastVertex = "Peak" Then Begin
If PK1 < H Then procBit = "Peak"
Else procBit = "Valley";
End;
End
Else If Condition1 Then procBit = "Peak"
Else If Condition2 Then procBit = "Valley";
//==========================================
If procBit = "Peak" Then Begin
lastHi = H;
If lastVertex = "Valley" Then Begin
PK9 = PK8; pkBN9 = pkBN8;
PK8 = PK7; pkBN8 = pkBN7;
PK7 = PK6; pkBN7 = pkBN6;
PK6 = PK5; pkBN6 = pkBN5;
PK5 = PK4; pkBN5 = pkBN4;
PK4 = PK3; pkBN4 = pkBN3;
PK3 = PK2; pkBN3 = pkBN2;
PK2 = PK1; pkBN2 = pkBN1;
PK1 = H; pkBN1 = BarNumber;
sBar = BarNumber - vlBN1;
TL1 = TL_New(Date[sBar],Time[sBar],VL1,Date,Time,PK1);
TL_SetSize(TL1,2);
TL_SetColor(TL1,RED);
End
Else If PK1 < H Then Begin
PK1 = H; pkBN1 = BarNumber;
TL_SetEnd(TL1,Date,Time,PK1);
End ;
lastVertex = "Peak";
End ;
//==========================================
If procBit = "Valley" Then Begin
lastLo = L;
If lastVertex = "Peak" then Begin
VL9 = VL8; vlBN9 = vlBN8;
VL8 = VL7; vlBN8 = vlBN7;
VL7 = VL6; vlBN7 = vlBN6;
VL6 = VL5; vlBN6 = vlBN5;
VL5 = VL4; vlBN5 = vlBN4;
VL4 = VL3; vlBN4 = vlBN3;
VL3 = VL2; vlBN3 = vlBN2;
VL2 = VL1; vlBN2 = vlBN1;
VL1 = L; vlBN1 = BarNumber;
sBar = BarNumber - pkBN1;
TL1 = TL_New(Date[sBar],Time[sBar],PK1,Date,Time,VL1);
TL_SetSize(TL1,2);
TL_SetColor(TL1,BLUE);
End
Else If VL1 > L then Begin
VL1 = L; vlBN1 = BarNumber;
TL_SetEnd(TL1,Date,Time,VL1);
End ;
lastVertex = "Valley";
End ;
//==========================================
Var:subTL1(0);
Var:subLastHi(0),subLastLo(0),subLastVertex(""),subProcBit("");
Var:subPK1(0),subPK2(0),subPK3(0),subPK4(0),subPK5(0),subPK6(0),subPK7(0),subPK8(0),subPK9(0),subPK10(0),
subVL1(0),subVL2(0),subVL3(0),subVL4(0),subVL5(0),subVL6(0),subVL7(0),subVL8(0),subVL9(0),subVL10(0),
subPkBN1(0),subPkBN2(0),subPkBN3(0),subPkBN4(0),subPkBN5(0),
subPkBN6(0),subPkBN7(0),subPkBN8(0),subPkBN9(0),subPkBN10(0),
subVlBN1(0),subVlBN2(0),subVlBN3(0),subVlBN4(0),subVlBN5(0),
subVlBN6(0),subVlBN7(0),subVlBN8(0),subVlBN9(0),subVlBN10(0);
Var: var0(0),var1(0),var2(0),var3(0);
//==========================================
value2 = Stochastic( H, L, C, Length, 3, 3, 1, var0, var1, var2, var3 ) ;
value1 = var2;
plot1(value1);
condition3 = Highest(Value1,length) = Value1 and subLastHi <> Value1;
condition4 = Lowest (value1,length) = value1 and subLastLo <> value1;
subProcBit = "";
If Condition3 and Condition4 Then Begin
If subLastVertex = "Valley" Then Begin
If subVL1 > value1 Then SubProcBit = "Valley"
Else SubProcBit = "Peak";
End
Else If subLastVertex = "Peak" Then Begin
If subPK1 < value1 Then subProcBit = "Peak"
Else subProcBit = "Valley";
End;
End
Else If Condition3 Then subProcBit = "Peak"
Else If condition4 Then subProcBit = "Valley";
//==========================================
If subProcBit = "Peak" Then Begin
subLastHi = H;
If subLastVertex = "Valley" Then Begin
subPK9 = subPK8; subpkBN9 = subpkBN8;
subPK8 = subPK7; subpkBN8 = subpkBN7;
subPK7 = subPK6; subpkBN7 = subpkBN6;
subPK6 = subPK5; subpkBN6 = subpkBN5;
subPK5 = subPK4; subpkBN5 = subpkBN4;
subPK4 = subPK3; subpkBN4 = subpkBN3;
subPK3 = subPK2; subpkBN3 = subpkBN2;
subPK2 = subPK1; subpkBN2 = subpkBN1;
subPK1 = value1; subpkBN1 = BarNumber;
sBar = BarNumber - subvlBN1;
subTL1 = tl_new_self(Date[sBar],Time[sBar],subVL1,Date,Time,subPK1);
TL_SetSize(subTL1,2);
TL_SetColor(subTL1,RED);
End
Else If subPK1 < value1 Then Begin
subPK1 = value1; subpkBN1 = BarNumber;
TL_SetEnd(subTL1,Date,Time,subPK1);
End ;
sublastVertex = "Peak";
End ;
//==========================================
If subprocBit = "Valley" Then Begin
sublastLo = value1;
If sublastVertex = "Peak" then Begin
subVL9 = subVL8; subvlBN9 = subvlBN8;
subVL8 = subVL7; subvlBN8 = subvlBN7;
subVL7 = subVL6; subvlBN7 = subvlBN6;
subVL6 = subVL5; subvlBN6 = subvlBN5;
subVL5 = subVL4; subvlBN5 = subvlBN4;
subVL4 = subVL3; subvlBN4 = subvlBN3;
subVL3 = subVL2; subvlBN3 = subvlBN2;
subVL2 = subVL1; subvlBN2 = subvlBN1;
subVL1 = value1; subvlBN1 = BarNumber;
sBar = BarNumber - subpkBN1;
subTL1 = tl_new_self(Date[sBar],Time[sBar],subPK1,Date,Time,subVL1);
TL_SetSize(subTL1,2);
TL_SetColor(subTL1,BLUE);
End
Else If subVL1 > value1 then Begin
subVL1 = value1; subvlBN1 = BarNumber;
TL_SetEnd(subTL1,Date,Time,subVL1);
End ;
sublastVertex = "Valley";
End ;
//==========================================
var:TL2(0),subTL2(0);
if VL2 > VL1 and subVL2 < subVL1 then begin
TL2 = tl_new_bn(vlBN2,VL2,vlBN1,VL1);
TL_SetSize(TL2,2);
TL_SetColor(TL2,BLACK);
subTL2 = tl_new_self_bn(subVlBN2,subVL2,subVlBN1,subVL1);
TL_SetSize(subTL2,2);
TL_SetColor(subTL2,BLACK);
end;