커뮤니티

수식확인 부탁드립니다

프로필 이미지
뎅이요
2019-07-02 15:55:48
230
글번호 129963
답변완료
아래 시스템은 파동상승 T==1 조건만족시 최종저가 (TL15,blue)에서 5틱 상승시 매수 진입 최종고가에서 5틱 하락시 매수청산 수식으로 작성한것입니다. 시스템 실행시(챠트상 지표의 blue, red 참조) 최종저가에서 5틱 이상 하여 (8 틱 10 틱 상승후) 진입 하는경우 파동 하락(T== -1)시 매수진입 하는 경우가 발생 합니다. 원인과 수정 가능하다면 수식의 수정 부탁 드립니다. input:length(20); Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""), TL1(0),Text1(0),TL2(0),TL3(0),TL4(0),TL5(0),TL12(0),TL13(0),TL14(0),TL15(0),T(0); Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# HH = IFF(0==1,C,H); LL = IFF(0==1,C,L); If Index == 0 Then { 고[1,1] = HH; 저[1,1] = LL; } Condition1 = Highest(HH,length) == HH and 최종고가 <> HH; Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then { If 저[1,1] > LL Then 처리구분 = "저점처리"; Else 처리구분 = "고점처리"; } Else If 최종꼭지점 == "고점" Then { If 고[1,1] < HH Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { T = 1; 최종고가 = HH; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = HH; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); If 1 == 1 Then { Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2)); Text_SetStyle(Text1, 0, 1); Text_SetColor(Text1,BLACK); } TL_SetSize(TL1,1); TL_SetColor(TL1,gray); } Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = HH; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 If 1 == 1 Then { Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)); } } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { T = -1; 최종저가 = LL; If 최종꼭지점 == "고점" then { For j = 10 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = LL; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); If 1 == 1 Then { Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 0, 0); Text_SetColor(Text1,BLACK); } TL_SetSize(TL1,1); TL_SetColor(TL1,gray); } Else If 저[1,1] > LL then { 저[1,1] = LL; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); If 1 == 1 Then { Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]); Text_SetString(Text1,NumToStr(저[1,1],2)); } } 최종꼭지점 = "저점"; } if T == -1 and T[1] != -1 Then{ TL2 = TL_New(고[2,3],고[2,4],고[2,1],sdate,stime,고[2,1]); TL_Delete(TL3); TL3 = TL_New(고[1,3],고[1,4],고[1,1],sdate,stime,고[1,1]); TL_SetExtRight(TL3,true); TL_SetSize(TL2,3); TL_SetColor(TL2,RED); TL_SetSize(TL3,3); TL_SetColor(TL3,RED); TL12 = TL_New(고[2,3],고[2,4],고[2,1],sdate,stime,고[2,1]); TL_Delete(TL13); TL13 = TL_New(고[1,3],고[1,4],고[1,1],sdate,stime,고[1,1]); TL_SetExtRight(TL13,true); TL_SetSize(TL12,1); TL_SetColor(TL12,RED); TL_SetSize(TL13,1); TL_SetColor(TL13,RED); } if T == 1 and T[1] != 1 Then{ TL4= TL_New(저[2,3],저[2,4],저[2,1],sdate,stime,저[2,1]); TL_Delete(TL5); TL5= TL_New(저[1,3],저[1,4],저[1,1],sdate,stime,저[1,1]); TL_SetExtRight(TL5,true); TL_SetSize(TL4,3); TL_SetColor(TL4,blue); TL_SetSize(TL5,3); TL_SetColor(TL5,blue); TL14= TL_New(저[2,3],저[2,4],저[2,1],sdate,stime,저[2,1]); TL_Delete(TL15); TL15= TL_New(저[1,3],저[1,4],저[1,1],sdate,stime,저[1,1]); TL_SetExtRight(TL15,true); TL_SetSize(TL14,1); TL_SetColor(TL14,blue); TL_SetSize(TL15,1); TL_SetColor(TL15,blue); } if T == 1 Then buy("b",AtStop,저[1,1]+PriceScale*5); if T == -1 Then ExitLong("bx",AtStop,고[1,1]-PriceScale*5);
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2019-07-03 09:20:16

안녕하세요 예스스탁입니다. 문의하신 내용은 가능하지 않습니다. 1 고점과 저점은 후행적으로 판단됩니다. 수식에서 plot이 아닌 추세선으로 지표를 표시되는 것은 plot은 현재봉 기준 과거봉에 선을 그릴수 없지만 추세선은 현재봉기준 과거의 지점을 연결해 그릴수 있어 해당 고점과 저점부터 선을 그릴수 있는것일 뿐입니다. 실제 고점과 저점을 최초 판단하는 봉은 고점과 저점에서 일정이상 하락이나 상승한 이후입니다. 아래 수식으로 T값 출력해 보시기 바랍니다. 2 수식에서 사용하는 atstop이나 atlimit은 현재봉 기준 if조건이 만족하면 값을 셋팅하고 다음봉의 시세와 비교합니다. 현재봉의 T값과 다음봉의 T값은 다를수 있습니다. 3 input:length(20); Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""), TL1(0),Text1(0),TL2(0),TL3(0),TL4(0),TL5(0),TL12(0),TL13(0),TL14(0),TL15(0),T(0); Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# HH = IFF(0==1,C,H); LL = IFF(0==1,C,L); If Index == 0 Then { 고[1,1] = HH; 저[1,1] = LL; } Condition1 = Highest(HH,length) == HH and 최종고가 <> HH; Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then { If 저[1,1] > LL Then 처리구분 = "저점처리"; Else 처리구분 = "고점처리"; } Else If 최종꼭지점 == "고점" Then { If 고[1,1] < HH Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { T = 1; 최종고가 = HH; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = HH; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); If 1 == 1 Then { Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2)); Text_SetStyle(Text1, 0, 1); Text_SetColor(Text1,BLACK); } TL_SetSize(TL1,1); TL_SetColor(TL1,gray); } Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = HH; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 If 1 == 1 Then { Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)); } } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { T = -1; 최종저가 = LL; If 최종꼭지점 == "고점" then { For j = 10 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = LL; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); If 1 == 1 Then { Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 0, 0); Text_SetColor(Text1,BLACK); } TL_SetSize(TL1,1); TL_SetColor(TL1,gray); } Else If 저[1,1] > LL then { 저[1,1] = LL; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); If 1 == 1 Then { Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]); Text_SetString(Text1,NumToStr(저[1,1],2)); } } 최종꼭지점 = "저점"; } if T == -1 and T[1] != -1 Then{ TL2 = TL_New(고[2,3],고[2,4],고[2,1],sdate,stime,고[2,1]); TL_Delete(TL3); TL3 = TL_New(고[1,3],고[1,4],고[1,1],sdate,stime,고[1,1]); TL_SetExtRight(TL3,true); TL_SetSize(TL2,3); TL_SetColor(TL2,RED); TL_SetSize(TL3,3); TL_SetColor(TL3,RED); TL12 = TL_New(고[2,3],고[2,4],고[2,1],sdate,stime,고[2,1]); TL_Delete(TL13); TL13 = TL_New(고[1,3],고[1,4],고[1,1],sdate,stime,고[1,1]); TL_SetExtRight(TL13,true); TL_SetSize(TL12,1); TL_SetColor(TL12,RED); TL_SetSize(TL13,1); TL_SetColor(TL13,RED); } if T == 1 and T[1] != 1 Then{ TL4= TL_New(저[2,3],저[2,4],저[2,1],sdate,stime,저[2,1]); TL_Delete(TL5); TL5= TL_New(저[1,3],저[1,4],저[1,1],sdate,stime,저[1,1]); TL_SetExtRight(TL5,true); TL_SetSize(TL4,3); TL_SetColor(TL4,blue); TL_SetSize(TL5,3); TL_SetColor(TL5,blue); TL14= TL_New(저[2,3],저[2,4],저[2,1],sdate,stime,저[2,1]); TL_Delete(TL15); TL15= TL_New(저[1,3],저[1,4],저[1,1],sdate,stime,저[1,1]); TL_SetExtRight(TL15,true); TL_SetSize(TL14,1); TL_SetColor(TL14,blue); TL_SetSize(TL15,1); TL_SetColor(TL15,blue); } plot1(T); 즐거운 하루되세요 > 뎅이요 님이 쓴 글입니다. > 제목 : 수식확인 부탁드립니다 > 아래 시스템은 파동상승 T==1 조건만족시 최종저가 (TL15,blue)에서 5틱 상승시 매수 진입 최종고가에서 5틱 하락시 매수청산 수식으로 작성한것입니다. 시스템 실행시(챠트상 지표의 blue, red 참조) 최종저가에서 5틱 이상 하여 (8 틱 10 틱 상승후) 진입 하는경우 파동 하락(T== -1)시 매수진입 하는 경우가 발생 합니다. 원인과 수정 가능하다면 수식의 수정 부탁 드립니다. input:length(20); Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""), TL1(0),Text1(0),TL2(0),TL3(0),TL4(0),TL5(0),TL12(0),TL13(0),TL14(0),TL15(0),T(0); Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# HH = IFF(0==1,C,H); LL = IFF(0==1,C,L); If Index == 0 Then { 고[1,1] = HH; 저[1,1] = LL; } Condition1 = Highest(HH,length) == HH and 최종고가 <> HH; Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then { If 저[1,1] > LL Then 처리구분 = "저점처리"; Else 처리구분 = "고점처리"; } Else If 최종꼭지점 == "고점" Then { If 고[1,1] < HH Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { T = 1; 최종고가 = HH; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = HH; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); If 1 == 1 Then { Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2)); Text_SetStyle(Text1, 0, 1); Text_SetColor(Text1,BLACK); } TL_SetSize(TL1,1); TL_SetColor(TL1,gray); } Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = HH; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 If 1 == 1 Then { Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)); } } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { T = -1; 최종저가 = LL; If 최종꼭지점 == "고점" then { For j = 10 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = LL; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); If 1 == 1 Then { Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 0, 0); Text_SetColor(Text1,BLACK); } TL_SetSize(TL1,1); TL_SetColor(TL1,gray); } Else If 저[1,1] > LL then { 저[1,1] = LL; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); If 1 == 1 Then { Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]); Text_SetString(Text1,NumToStr(저[1,1],2)); } } 최종꼭지점 = "저점"; } if T == -1 and T[1] != -1 Then{ TL2 = TL_New(고[2,3],고[2,4],고[2,1],sdate,stime,고[2,1]); TL_Delete(TL3); TL3 = TL_New(고[1,3],고[1,4],고[1,1],sdate,stime,고[1,1]); TL_SetExtRight(TL3,true); TL_SetSize(TL2,3); TL_SetColor(TL2,RED); TL_SetSize(TL3,3); TL_SetColor(TL3,RED); TL12 = TL_New(고[2,3],고[2,4],고[2,1],sdate,stime,고[2,1]); TL_Delete(TL13); TL13 = TL_New(고[1,3],고[1,4],고[1,1],sdate,stime,고[1,1]); TL_SetExtRight(TL13,true); TL_SetSize(TL12,1); TL_SetColor(TL12,RED); TL_SetSize(TL13,1); TL_SetColor(TL13,RED); } if T == 1 and T[1] != 1 Then{ TL4= TL_New(저[2,3],저[2,4],저[2,1],sdate,stime,저[2,1]); TL_Delete(TL5); TL5= TL_New(저[1,3],저[1,4],저[1,1],sdate,stime,저[1,1]); TL_SetExtRight(TL5,true); TL_SetSize(TL4,3); TL_SetColor(TL4,blue); TL_SetSize(TL5,3); TL_SetColor(TL5,blue); TL14= TL_New(저[2,3],저[2,4],저[2,1],sdate,stime,저[2,1]); TL_Delete(TL15); TL15= TL_New(저[1,3],저[1,4],저[1,1],sdate,stime,저[1,1]); TL_SetExtRight(TL15,true); TL_SetSize(TL14,1); TL_SetColor(TL14,blue); TL_SetSize(TL15,1); TL_SetColor(TL15,blue); } if T == 1 Then buy("b",AtStop,저[1,1]+PriceScale*5); if T == -1 Then ExitLong("bx",AtStop,고[1,1]-PriceScale*5);