커뮤니티

수식 수정 의뢰드립니다!

프로필 이미지
qha71
2021-10-23 14:18:13
541
글번호 153099
답변완료
안녕하세요! 아래 수식에 오타가 있는지 검증에서 에러가 발생을 합니다! 확인 좀 부탁드릴께요! 감사합니다! Input:length(10); Var:lastHi(0),lastLo(0),lastVertex(""),procBit(""), sBar(0),TL1(0),TL2(0),TL3(0), hiTLSlope(0),hiTLBeginBar(0),hiTLBeginVal(0),hiTLEndVal(0), loTLSlope(0),loTLBeginBar(0),loTLBeginVal(0),loTLEndVal(0); //ssssssssssssssssssssssssssssssssss Var:hiTLBeginBN(0),loTLBeginBN(0); //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 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,GREEN); End Else If PK1 < H Then Begin PK1 = H; pkBN1 = BarNumber; TL_SetEnd(TL1,Date,Time,PK1); End ; { High Trend Line } //ssssssssssssssssssssssssssssssssss // 이전 단계에서는 1번 고점만 변경되어도 아래 루틴을 탔는데 // 2번 고점이 변경되지 않았으면 불필요한 계산이므로 // 2번 고점이 바뀌었을 때만 아래 루틴을 수행하도록 조건을 추가 // price는 동일 값이 나올 수 있어 비교할 수 없으나 BarNumber는 유일한 값이므로 비교 가능하다 If pkBN2[1] <> pkBN2 Then Begin //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee hiTLEndVal = 0; hiTLSlope = 0; hiTLBeginVal = 0; hiTLBeginBar = 0; If PK2 < PK3 Then Begin hiTLSlope = (PK2 - PK3)/(pkBN2 - pkBN3); hiTLBeginVal = PK3; //ssssssssssssssssssssssssssssssssss // 2번 고점이 바뀌지 않았다면 y 절편과 기울기는 그대로이고 거리에 해당하는 hiTLBeginBar 값에 변동이 있다. // 2번 고점이 변경되지 않았을 때의 hiTLBeginBar를 계산하려면 시작점의 BarNumber를 알면 되므로 // 새로 추가한 hiTLBeginBN 변수에 고점의 BarNumber를 넘겨준다. hiTLBeginBN = pkBN3; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If PK2 < PK4 Then Begin hiTLSlope = (PK2 - PK4)/(pkBN2 - pkBN4); hiTLBeginVal = PK4; //ssssssssssssssssssssssssssssssssss hiTLBeginBN = pkBN4; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If PK2 < PK5 Then Begin hiTLSlope = (PK2 - PK5)/(pkBN2 - pkBN5); hiTLBeginVal = PK5; //ssssssssssssssssssssssssssssssssss hiTLBeginBN = pkBN5; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If PK2 < PK6 Then Begin hiTLSlope = (PK2 - PK6)/(pkBN2 - pkBN6); hiTLBeginVal = PK6; //ssssssssssssssssssssssssssssssssss hiTLBeginBN = pkBN6; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If PK2 < PK7 Then Begin hiTLSlope = (PK2 - PK7)/(pkBN2 - pkBN7); hiTLBeginVal = PK7; //ssssssssssssssssssssssssssssssssss hiTLBeginBN = pkBN7; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If PK2 < PK8 Then Begin hiTLSlope = (PK2 - PK8)/(pkBN2 - pkBN8); hiTLBeginVal = PK8; //ssssssssssssssssssssssssssssssssss hiTLBeginBN = pkBN8; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If PK2 < PK9 Then Begin hiTLSlope = (PK2 - PK9)/(pkBN2 - pkBN9); hiTLBeginVal = PK9; //ssssssssssssssssssssssssssssssssss hiTLBeginBN = pkBN9; End ; hiTLBeginBar = BarNumber - hiTLBeginBN; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee hiTLEndVal = hiTLSlope * hiTLBeginBar + hiTLBeginVal; If hiTLEndVal > 0 Then Begin TL2 = TL_New(Date[hiTLBeginBar],Time[hiTLBeginBar],hiTLBeginVal,Date,Time,hiTLEndVal); TL_SetSize(TL2,1); TL_SetColor(TL2,RED); End ; End //ssssssssssssssssssssssssssssssssss // 2번 고점이 변경되지 않았으나 고추세선의 값이 살아있다면(0으로 초기화되지 않았다면) Else If hiTLEndVal[1] > 0 Then Begin // 거리 = 현재 봉의 BarNumber - 시작점의 BarNumber hiTLEndVal = hiTLSlope * (BarNumber - hiTLBeginBN) + hiTLBeginVal; TL_SetEnd(TL2,Date,Time,hiTLEndVal); End ; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 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,GREEN); End Else If VL1 > L then Begin VL1 = L; vlBN1 = BarNumber; TL_SetEnd(TL1,Date,Time,VL1); End ; { Low Trend Line } //ssssssssssssssssssssssssssssssssss If vlBN2[1] <> vlBN2 Then Begin //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee loTLEndVal = 0; loTLSlope = 0; loTLBeginVal = 0; loTLBeginBar = 0; If VL2 > VL3 and VL3 > 0 Then Begin loTLSlope = (VL2 - VL3)/(vlBN2 - vlBN3); loTLBeginVal = VL3; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN3; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If VL2 > VL4 and VL4 > 0 Then Begin loTLSlope = (VL2 - VL4)/(vlBN2 - vlBN4); loTLBeginVal = VL4; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN4; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If VL2 > VL5 and VL5 > 0 Then Begin loTLSlope = (VL2 - VL5)/(vlBN2 - vlBN5); loTLBeginVal = VL5; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN5; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If VL2 > VL6 and VL6 > 0 Then Begin loTLSlope = (VL2 - VL6)/(vlBN2 - vlBN6); loTLBeginVal = VL6; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN6; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If VL2 > VL7 and VL7 > 0 Then Begin loTLSlope = (VL2 - VL7)/(vlBN2 - vlBN7); loTLBeginVal = VL7; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN7; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If VL2 > VL8 and VL8 > 0 Then Begin loTLSlope = (VL2 - VL8)/(vlBN2 - vlBN8); loTLBeginVal = VL8; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN8; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If VL2 > VL9 and VL9 > 0 Then Begin loTLSlope = (VL2 - VL9)/(vlBN2 - vlBN9); loTLBeginVal = VL9; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN9; End ; loTLBeginBar = BarNumber - loTLBeginBN; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee loTLEndVal = loTLSlope * loTLBeginBar + loTLBeginVal; If loTLEndVal > 0 Then Begin TL3 = TL_New(Date[loTLBeginBar],Time[loTLBeginBar],loTLBeginVal,Date,Time,loTLEndVal); TL_SetSize(TL3,1); TL_SetColor(TL3,BLUE); End ; End //ssssssssssssssssssssssssssssssssss Else If loTLEndVal[1] > 0 Then Begin loTLEndVal = loTLSlope * (BarNumber - loTLBeginBN) + loTLBeginVal; TL_SetEnd(TL3,Date,Time,loTLEndVal); End ; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee lastVertex = "Valley"; End ;
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2021-10-25 11:07:27

안녕하세요 예스스탁입니다. 올리신 식은 예스랭귀지 수식이 아닙니다. 저희문법에 맞춰 변경해 드립니다. Input:length(10); Var:lastHi(0),lastLo(0),lastVertex(""),procBit(""), sBar(0),TL1(0),TL2(0),TL3(0), hiTLSlope(0),hiTLBeginBar(0),hiTLBeginVal(0),hiTLEndVal(0), loTLSlope(0),loTLBeginBar(0),loTLBeginVal(0),loTLEndVal(0); //ssssssssssssssssssssssssssssssssss Var:hiTLBeginBN(0),loTLBeginBN(0); //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 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,GREEN); End Else If PK1 < H Then Begin PK1 = H; pkBN1 = Index; TL_SetEnd(TL1,Date,Time,PK1); End ; #{ High Trend Line } //ssssssssssssssssssssssssssssssssss // 이전 단계에서는 1번 고점만 변경되어도 아래 루틴을 탔는데 // 2번 고점이 변경되지 않았으면 불필요한 계산이므로 // 2번 고점이 바뀌었을 때만 아래 루틴을 수행하도록 조건을 추가 // price는 동일 값이 나올 수 있어 비교할 수 없으나 BarNumber는 유일한 값이므로 비교 가능하다 If pkBN2[1] <> pkBN2 Then Begin //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee hiTLEndVal = 0; hiTLSlope = 0; hiTLBeginVal = 0; hiTLBeginBar = 0; If PK2 < PK3 Then Begin hiTLSlope = (PK2 - PK3)/(pkBN2 - pkBN3); hiTLBeginVal = PK3; //ssssssssssssssssssssssssssssssssss // 2번 고점이 바뀌지 않았다면 y 절편과 기울기는 그대로이고 거리에 해당하는 hiTLBeginBar 값에 변동이 있다. // 2번 고점이 변경되지 않았을 때의 hiTLBeginBar를 계산하려면 시작점의 BarNumber를 알면 되므로 // 새로 추가한 hiTLBeginBN 변수에 고점의 BarNumber를 넘겨준다. hiTLBeginBN = pkBN3; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If PK2 < PK4 Then Begin hiTLSlope = (PK2 - PK4)/(pkBN2 - pkBN4); hiTLBeginVal = PK4; //ssssssssssssssssssssssssssssssssss hiTLBeginBN = pkBN4; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If PK2 < PK5 Then Begin hiTLSlope = (PK2 - PK5)/(pkBN2 - pkBN5); hiTLBeginVal = PK5; //ssssssssssssssssssssssssssssssssss hiTLBeginBN = pkBN5; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If PK2 < PK6 Then Begin hiTLSlope = (PK2 - PK6)/(pkBN2 - pkBN6); hiTLBeginVal = PK6; //ssssssssssssssssssssssssssssssssss hiTLBeginBN = pkBN6; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If PK2 < PK7 Then Begin hiTLSlope = (PK2 - PK7)/(pkBN2 - pkBN7); hiTLBeginVal = PK7; //ssssssssssssssssssssssssssssssssss hiTLBeginBN = pkBN7; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If PK2 < PK8 Then Begin hiTLSlope = (PK2 - PK8)/(pkBN2 - pkBN8); hiTLBeginVal = PK8; //ssssssssssssssssssssssssssssssssss hiTLBeginBN = pkBN8; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If PK2 < PK9 Then Begin hiTLSlope = (PK2 - PK9)/(pkBN2 - pkBN9); hiTLBeginVal = PK9; //ssssssssssssssssssssssssssssssssss hiTLBeginBN = pkBN9; End ; hiTLBeginBar = Index - hiTLBeginBN; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee hiTLEndVal = hiTLSlope * hiTLBeginBar + hiTLBeginVal; If hiTLEndVal > 0 Then Begin TL2 = TL_New(Date[hiTLBeginBar],Time[hiTLBeginBar],hiTLBeginVal,Date,Time,hiTLEndVal); TL_SetSize(TL2,1); TL_SetColor(TL2,RED); End ; End //ssssssssssssssssssssssssssssssssss // 2번 고점이 변경되지 않았으나 고추세선의 값이 살아있다면(0으로 초기화되지 않았다면) Else If hiTLEndVal[1] > 0 Then Begin // 거리 = 현재 봉의 BarNumber - 시작점의 BarNumber hiTLEndVal = hiTLSlope * (Index - hiTLBeginBN) + hiTLBeginVal; TL_SetEnd(TL2,Date,Time,hiTLEndVal); End ; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 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,GREEN); End Else If VL1 > L then Begin VL1 = L; vlBN1 = Index; TL_SetEnd(TL1,Date,Time,VL1); End ; #{ Low Trend Line } //ssssssssssssssssssssssssssssssssss If vlBN2[1] <> vlBN2 Then Begin //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee loTLEndVal = 0; loTLSlope = 0; loTLBeginVal = 0; loTLBeginBar = 0; If VL2 > VL3 and VL3 > 0 Then Begin loTLSlope = (VL2 - VL3)/(vlBN2 - vlBN3); loTLBeginVal = VL3; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN3; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If VL2 > VL4 and VL4 > 0 Then Begin loTLSlope = (VL2 - VL4)/(vlBN2 - vlBN4); loTLBeginVal = VL4; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN4; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If VL2 > VL5 and VL5 > 0 Then Begin loTLSlope = (VL2 - VL5)/(vlBN2 - vlBN5); loTLBeginVal = VL5; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN5; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If VL2 > VL6 and VL6 > 0 Then Begin loTLSlope = (VL2 - VL6)/(vlBN2 - vlBN6); loTLBeginVal = VL6; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN6; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If VL2 > VL7 and VL7 > 0 Then Begin loTLSlope = (VL2 - VL7)/(vlBN2 - vlBN7); loTLBeginVal = VL7; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN7; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If VL2 > VL8 and VL8 > 0 Then Begin loTLSlope = (VL2 - VL8)/(vlBN2 - vlBN8); loTLBeginVal = VL8; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN8; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If VL2 > VL9 and VL9 > 0 Then Begin loTLSlope = (VL2 - VL9)/(vlBN2 - vlBN9); loTLBeginVal = VL9; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN9; End ; loTLBeginBar = Index - loTLBeginBN; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee loTLEndVal = loTLSlope * loTLBeginBar + loTLBeginVal; If loTLEndVal > 0 Then Begin TL3 = TL_New(Date[loTLBeginBar],Time[loTLBeginBar],loTLBeginVal,Date,Time,loTLEndVal); TL_SetSize(TL3,1); TL_SetColor(TL3,BLUE); End ; End //ssssssssssssssssssssssssssssssssss Else If loTLEndVal[1] > 0 Then Begin loTLEndVal = loTLSlope * (Index - loTLBeginBN) + loTLBeginVal; TL_SetEnd(TL3,Date,Time,loTLEndVal); End ; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee lastVertex = "Valley"; End ; 즐거운 하루되세요 > qha71 님이 쓴 글입니다. > 제목 : 수식 수정 의뢰드립니다! > 안녕하세요! 아래 수식에 오타가 있는지 검증에서 에러가 발생을 합니다! 확인 좀 부탁드릴께요! 감사합니다! Input:length(10); Var:lastHi(0),lastLo(0),lastVertex(""),procBit(""), sBar(0),TL1(0),TL2(0),TL3(0), hiTLSlope(0),hiTLBeginBar(0),hiTLBeginVal(0),hiTLEndVal(0), loTLSlope(0),loTLBeginBar(0),loTLBeginVal(0),loTLEndVal(0); //ssssssssssssssssssssssssssssssssss Var:hiTLBeginBN(0),loTLBeginBN(0); //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 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,GREEN); End Else If PK1 < H Then Begin PK1 = H; pkBN1 = BarNumber; TL_SetEnd(TL1,Date,Time,PK1); End ; { High Trend Line } //ssssssssssssssssssssssssssssssssss // 이전 단계에서는 1번 고점만 변경되어도 아래 루틴을 탔는데 // 2번 고점이 변경되지 않았으면 불필요한 계산이므로 // 2번 고점이 바뀌었을 때만 아래 루틴을 수행하도록 조건을 추가 // price는 동일 값이 나올 수 있어 비교할 수 없으나 BarNumber는 유일한 값이므로 비교 가능하다 If pkBN2[1] <> pkBN2 Then Begin //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee hiTLEndVal = 0; hiTLSlope = 0; hiTLBeginVal = 0; hiTLBeginBar = 0; If PK2 < PK3 Then Begin hiTLSlope = (PK2 - PK3)/(pkBN2 - pkBN3); hiTLBeginVal = PK3; //ssssssssssssssssssssssssssssssssss // 2번 고점이 바뀌지 않았다면 y 절편과 기울기는 그대로이고 거리에 해당하는 hiTLBeginBar 값에 변동이 있다. // 2번 고점이 변경되지 않았을 때의 hiTLBeginBar를 계산하려면 시작점의 BarNumber를 알면 되므로 // 새로 추가한 hiTLBeginBN 변수에 고점의 BarNumber를 넘겨준다. hiTLBeginBN = pkBN3; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If PK2 < PK4 Then Begin hiTLSlope = (PK2 - PK4)/(pkBN2 - pkBN4); hiTLBeginVal = PK4; //ssssssssssssssssssssssssssssssssss hiTLBeginBN = pkBN4; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If PK2 < PK5 Then Begin hiTLSlope = (PK2 - PK5)/(pkBN2 - pkBN5); hiTLBeginVal = PK5; //ssssssssssssssssssssssssssssssssss hiTLBeginBN = pkBN5; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If PK2 < PK6 Then Begin hiTLSlope = (PK2 - PK6)/(pkBN2 - pkBN6); hiTLBeginVal = PK6; //ssssssssssssssssssssssssssssssssss hiTLBeginBN = pkBN6; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If PK2 < PK7 Then Begin hiTLSlope = (PK2 - PK7)/(pkBN2 - pkBN7); hiTLBeginVal = PK7; //ssssssssssssssssssssssssssssssssss hiTLBeginBN = pkBN7; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If PK2 < PK8 Then Begin hiTLSlope = (PK2 - PK8)/(pkBN2 - pkBN8); hiTLBeginVal = PK8; //ssssssssssssssssssssssssssssssssss hiTLBeginBN = pkBN8; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If PK2 < PK9 Then Begin hiTLSlope = (PK2 - PK9)/(pkBN2 - pkBN9); hiTLBeginVal = PK9; //ssssssssssssssssssssssssssssssssss hiTLBeginBN = pkBN9; End ; hiTLBeginBar = BarNumber - hiTLBeginBN; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee hiTLEndVal = hiTLSlope * hiTLBeginBar + hiTLBeginVal; If hiTLEndVal > 0 Then Begin TL2 = TL_New(Date[hiTLBeginBar],Time[hiTLBeginBar],hiTLBeginVal,Date,Time,hiTLEndVal); TL_SetSize(TL2,1); TL_SetColor(TL2,RED); End ; End //ssssssssssssssssssssssssssssssssss // 2번 고점이 변경되지 않았으나 고추세선의 값이 살아있다면(0으로 초기화되지 않았다면) Else If hiTLEndVal[1] > 0 Then Begin // 거리 = 현재 봉의 BarNumber - 시작점의 BarNumber hiTLEndVal = hiTLSlope * (BarNumber - hiTLBeginBN) + hiTLBeginVal; TL_SetEnd(TL2,Date,Time,hiTLEndVal); End ; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 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,GREEN); End Else If VL1 > L then Begin VL1 = L; vlBN1 = BarNumber; TL_SetEnd(TL1,Date,Time,VL1); End ; { Low Trend Line } //ssssssssssssssssssssssssssssssssss If vlBN2[1] <> vlBN2 Then Begin //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee loTLEndVal = 0; loTLSlope = 0; loTLBeginVal = 0; loTLBeginBar = 0; If VL2 > VL3 and VL3 > 0 Then Begin loTLSlope = (VL2 - VL3)/(vlBN2 - vlBN3); loTLBeginVal = VL3; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN3; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If VL2 > VL4 and VL4 > 0 Then Begin loTLSlope = (VL2 - VL4)/(vlBN2 - vlBN4); loTLBeginVal = VL4; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN4; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If VL2 > VL5 and VL5 > 0 Then Begin loTLSlope = (VL2 - VL5)/(vlBN2 - vlBN5); loTLBeginVal = VL5; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN5; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If VL2 > VL6 and VL6 > 0 Then Begin loTLSlope = (VL2 - VL6)/(vlBN2 - vlBN6); loTLBeginVal = VL6; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN6; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If VL2 > VL7 and VL7 > 0 Then Begin loTLSlope = (VL2 - VL7)/(vlBN2 - vlBN7); loTLBeginVal = VL7; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN7; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If VL2 > VL8 and VL8 > 0 Then Begin loTLSlope = (VL2 - VL8)/(vlBN2 - vlBN8); loTLBeginVal = VL8; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN8; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee End Else If VL2 > VL9 and VL9 > 0 Then Begin loTLSlope = (VL2 - VL9)/(vlBN2 - vlBN9); loTLBeginVal = VL9; //ssssssssssssssssssssssssssssssssss loTLBeginBN = vlBN9; End ; loTLBeginBar = BarNumber - loTLBeginBN; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee loTLEndVal = loTLSlope * loTLBeginBar + loTLBeginVal; If loTLEndVal > 0 Then Begin TL3 = TL_New(Date[loTLBeginBar],Time[loTLBeginBar],loTLBeginVal,Date,Time,loTLEndVal); TL_SetSize(TL3,1); TL_SetColor(TL3,BLUE); End ; End //ssssssssssssssssssssssssssssssssss Else If loTLEndVal[1] > 0 Then Begin loTLEndVal = loTLSlope * (BarNumber - loTLBeginBN) + loTLBeginVal; TL_SetEnd(TL3,Date,Time,loTLEndVal); End ; //eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee lastVertex = "Valley"; End ;