커뮤니티

수정식 의뢰드려요!

프로필 이미지
qha71
2018-05-17 14:49:29
163
글번호 118962
답변완료
안녕하세요! 아래 시스템식을 수정을 부탁드려요! 수식에서 추세선과 신호를 각각 따로 분리해 주시길 부탁드립니다! 그리고 첨부파일은 시스템식 의뢰 입니다! 최대한 이해가 가시게끔 정리해 보았습니다! 부탁드려요! 감사합니다! ------------------------------------------------------------------------------------- Input:length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1), #ssssssssssssssssssssssssssssssssss 파동선두께(1),추세선두께(0),파동선색(YELLOW),수치표시(0); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# #ssssssssssssssssssssssssssssssssss If Index == 0 Then { 고[1,1] = C; 저[1,1] = C; } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Condition1 = Highest(C,length) == C and 최종고가 <> C; Condition2 = Lowest (C,length) == C and 최종저가 <> C; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then 처리구분 = "고점처리"; // 저 - 고 순으로 처리 Else 처리구분 = "저점처리"; // 고 - 저 순으로 처리 } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = C; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 1 Then { Text1 = Text_New(sDate,sTime,고[1,1],NumToStr(고[1,1],2)); Text_SetStyle(Text1, 2, 1); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 #ssssssssssssssssssssssssssssssssss If 수치표시 == 1 Then { Text_SetLocation(Text1,sDate,sTime,고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 고점추세선 */ If 고[2,2][1] <> 고[2,2] Then // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음 { 고추세최종 = 0; For j = 3 To 추세판단범위 { If 고[2,1] < 고[j,1] Then { 고추세최종 = (고[2,1] - 고[j,1])/(고[2,2] - 고[j,2]) * (Index - 고[j,2]) + 고[j,1]; TL2 = TL_New(고[j,3],고[j,4],고[j,1],sDate,sTime,고추세최종); 고ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL2,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL2,RED); j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C Then { Buy(); } } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = C; If 최종꼭지점 == "고점" then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = C; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 1 Then { Text1 = Text_New(sDate,sTime,저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 2, 0); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 1 Then { Text_SetLocation(Text1,sDate,sTime,저[1,1]); Text_SetString(Text1,NumToStr(저[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 저점추세선 */ If 저[2,2][1] <> 저[2,2] Then { 저추세최종 = 0; For j = 3 To 추세판단범위 { If 저[2,1] > 저[j,1] and 저[j,1] > 0 Then { 저추세최종 = (저[2,1] - 저[j,1])/(저[2,2] - 저[j,2]) * (Index - 저[j,2]) + 저[j,1]; TL3 = TL_New(저[j,3],저[j,4],저[j,1],sDate,sTime,저추세최종); 저ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL3,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL3,Blue); j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } 최종꼭지점 = "저점"; If 진입횟수 < 진입횟수제한 and 저추세최종 > 0 and 저추세최종 > C Then { Sell(); } } #==========================================# If 처리구분 == "" Then { If Index - 고[1,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } } Else { 고추세최종 = 0; } If Index - 저[1,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } } Else { 저추세최종 = 0; } If MarketPosition > 0 and TL2[1] == TL2 and 고추세최종 > 0 and 고추세최종[1] <= C[1] and 고추세최종 > C Then ExitLong(); If MarketPosition < 0 and TL3[1] == TL3 and 저추세최종 > 0 and 저추세최종[1] >= C[1] and 저추세최종 < C Then ExitShort(); } If ((최종꼭지점 == "고점" and MarketPosition == 1) or (최종꼭지점 == "저점" and MarketPosition == -1)) and MarketPosition[1] != MarketPosition Then { 진입횟수 = 진입횟수 + 1; }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2018-05-17 14:11:25

안녕하세요 예스스탁입니다. 1. Input:length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1), #ssssssssssssssssssssssssssssssssss 파동선두께(1),추세선두께(0),파동선색(YELLOW),수치표시(0); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# #ssssssssssssssssssssssssssssssssss If Index == 0 Then { 고[1,1] = C; 저[1,1] = C; } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Condition1 = Highest(C,length) == C and 최종고가 <> C; Condition2 = Lowest (C,length) == C and 최종저가 <> C; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then 처리구분 = "고점처리"; // 저 - 고 순으로 처리 Else 처리구분 = "저점처리"; // 고 - 저 순으로 처리 } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = C; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 1 Then { Text1 = Text_New(sDate,sTime,고[1,1],NumToStr(고[1,1],2)); Text_SetStyle(Text1, 2, 1); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 #ssssssssssssssssssssssssssssssssss If 수치표시 == 1 Then { Text_SetLocation(Text1,sDate,sTime,고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 고점추세선 */ If 고[2,2][1] <> 고[2,2] Then // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음 { 고추세최종 = 0; For j = 3 To 추세판단범위 { If 고[2,1] < 고[j,1] Then { 고추세최종 = (고[2,1] - 고[j,1])/(고[2,2] - 고[j,2]) * (Index - 고[j,2]) + 고[j,1]; TL2 = TL_New(고[j,3],고[j,4],고[j,1],sDate,sTime,고추세최종); 고ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL2,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL2,RED); j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = C; If 최종꼭지점 == "고점" then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = C; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 1 Then { Text1 = Text_New(sDate,sTime,저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 2, 0); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 1 Then { Text_SetLocation(Text1,sDate,sTime,저[1,1]); Text_SetString(Text1,NumToStr(저[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 저점추세선 */ If 저[2,2][1] <> 저[2,2] Then { 저추세최종 = 0; For j = 3 To 추세판단범위 { If 저[2,1] > 저[j,1] and 저[j,1] > 0 Then { 저추세최종 = (저[2,1] - 저[j,1])/(저[2,2] - 저[j,2]) * (Index - 저[j,2]) + 저[j,1]; TL3 = TL_New(저[j,3],저[j,4],저[j,1],sDate,sTime,저추세최종); 저ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL3,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL3,Blue); j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } 최종꼭지점 = "저점"; } #==========================================# If 처리구분 == "" Then { If Index - 고[1,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } } Else { 고추세최종 = 0; } If Index - 저[1,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } } Else { 저추세최종 = 0; } } 2 Input:length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1), #ssssssssssssssssssssssssssssssssss 파동선두께(1),추세선두께(0),파동선색(YELLOW),수치표시(0); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# #ssssssssssssssssssssssssssssssssss If Index == 0 Then { 고[1,1] = C; 저[1,1] = C; } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Condition1 = Highest(C,length) == C and 최종고가 <> C; Condition2 = Lowest (C,length) == C and 최종저가 <> C; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then 처리구분 = "고점처리"; // 저 - 고 순으로 처리 Else 처리구분 = "저점처리"; // 고 - 저 순으로 처리 } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = C; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; //TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 1 Then { Text1 = Text_New(sDate,sTime,고[1,1],NumToStr(고[1,1],2)); Text_SetStyle(Text1, 2, 1); } //TL_SetSize(TL1,파동선두께); //TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; //TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 #ssssssssssssssssssssssssssssssssss If 수치표시 == 1 Then { Text_SetLocation(Text1,sDate,sTime,고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 고점추세선 */ If 고[2,2][1] <> 고[2,2] Then // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음 { 고추세최종 = 0; For j = 3 To 추세판단범위 { If 고[2,1] < 고[j,1] Then { 고추세최종 = (고[2,1] - 고[j,1])/(고[2,2] - 고[j,2]) * (Index - 고[j,2]) + 고[j,1]; //TL2 = TL_New(고[j,3],고[j,4],고[j,1],sDate,sTime,고추세최종); 고ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL2,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL2,RED); j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; //TL_SetEnd(TL2,sDate,sTime,고추세최종); } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; //TL_SetEnd(TL3,sDate,sTime,저추세최종); } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C Then { Buy(); } } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = C; If 최종꼭지점 == "고점" then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = C; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; //TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 1 Then { Text1 = Text_New(sDate,sTime,저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 2, 0); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; //TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 1 Then { Text_SetLocation(Text1,sDate,sTime,저[1,1]); Text_SetString(Text1,NumToStr(저[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 저점추세선 */ If 저[2,2][1] <> 저[2,2] Then { 저추세최종 = 0; For j = 3 To 추세판단범위 { If 저[2,1] > 저[j,1] and 저[j,1] > 0 Then { 저추세최종 = (저[2,1] - 저[j,1])/(저[2,2] - 저[j,2]) * (Index - 저[j,2]) + 저[j,1]; TL3 = TL_New(저[j,3],저[j,4],저[j,1],sDate,sTime,저추세최종); 저ID = j; #ssssssssssssssssssssssssssssssssss //TL_SetSize(TL3,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee //TL_SetColor(TL3,Blue); j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; //TL_SetEnd(TL3,sDate,sTime,저추세최종); } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; //TL_SetEnd(TL2,sDate,sTime,고추세최종); } 최종꼭지점 = "저점"; If 진입횟수 < 진입횟수제한 and 저추세최종 > 0 and 저추세최종 > C Then { Sell(); } } #==========================================# If 처리구분 == "" Then { If Index - 고[1,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; //TL_SetEnd(TL2,sDate,sTime,고추세최종); } } Else { 고추세최종 = 0; } If Index - 저[1,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; //TL_SetEnd(TL3,sDate,sTime,저추세최종); } } Else { 저추세최종 = 0; } If MarketPosition > 0 and TL2[1] == TL2 and 고추세최종 > 0 and 고추세최종[1] <= C[1] and 고추세최종 > C Then ExitLong(); If MarketPosition < 0 and TL3[1] == TL3 and 저추세최종 > 0 and 저추세최종[1] >= C[1] and 저추세최종 < C Then ExitShort(); } If ((최종꼭지점 == "고점" and MarketPosition == 1) or (최종꼭지점 == "저점" and MarketPosition == -1)) and MarketPosition[1] != MarketPosition Then { 진입횟수 = 진입횟수 + 1; } 3 바닥과 천정에 대한 정의가 없어 스윙함수로 대체해 작성해 드립니다. input : P(5),left(3),right(3); var : mav(0),t(0); mav = ma(C,P); if T <= 0 and SwingHigh(1,mav,Left,right,left+right+1) != -1 Then{ T = 1; var1 = mav[right]; var11 = var1[1]; } if T >= 0 and Swinglow(1,mav,Left,right,left+right+1) != -1 Then{ T = -1; var2 = mav[right]; var22 = var2[1]; } if T == 1 and var1 >= var11 and L > mav Then buy("매수"); if T == -1 and var2 <= var22 and H < mav Then sell("매도"); var : pp(0),tx(0); if MarketPosition == 1 Then { pp = Floor((highest(H,BarsSinceEntry)-EntryPrice)/(PriceScale*10)); if pp > pp[1] Then { tx = Text_New(sdate,stime,H+PriceScale*1,NumToStr(pp*10,0)+"틱"); Text_SetStyle(tx,2,2); Text_SetColor(tx,YELLOW); } } if MarketPosition == -1 Then { pp = Floor((EntryPrice-lowest(L,BarsSinceEntry))/(PriceScale*10)); if pp > pp[1] Then { tx = Text_New(sdate,stime,L-PriceScale*1,NumToStr(pp*10,0)+"틱"); Text_SetStyle(tx,2,2); Text_SetColor(tx,YELLOW); } } if bdate != bdate[1] then { value88 = sdate[1]; value99 = stime[1]; TL_Delete(value1); TL_Delete(value2); TL_Delete(value3); TL_Delete(value4); value1 = TL_New(value88,value99,DayHigh(1),sdate,stime,DayHigh(1)); value2 = TL_New(value88,value99,DayLow(1),sdate,stime,DayLow(1)); value3 = TL_New(value88,value99,DayClose(1),sdate,stime,DayClose(1)); value4 = TL_New(value88,value99,DayOpen(0),sdate,stime,Dayopen(0)); TL_SetExtRight(value1,true); TL_SetExtRight(value2,true); TL_SetExtRight(value3,true); TL_SetExtRight(value4,true); } TL_Delete(value5); value5 = TL_New(value88,value99,(DayHigh(0)+DayLow(0))/2,sdate,stime,(DayHigh(0)+DayLow(0))/2); TL_SetExtRight(value5,true); 즐거운 하루되세요 > qha71 님이 쓴 글입니다. > 제목 : 수정식 의뢰드려요! > 안녕하세요! 아래 시스템식을 수정을 부탁드려요! 수식에서 추세선과 신호를 각각 따로 분리해 주시길 부탁드립니다! 그리고 첨부파일은 시스템식 의뢰 입니다! 최대한 이해가 가시게끔 정리해 보았습니다! 부탁드려요! 감사합니다! ------------------------------------------------------------------------------------- Input:length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1), #ssssssssssssssssssssssssssssssssss 파동선두께(1),추세선두께(0),파동선색(YELLOW),수치표시(0); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# #ssssssssssssssssssssssssssssssssss If Index == 0 Then { 고[1,1] = C; 저[1,1] = C; } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Condition1 = Highest(C,length) == C and 최종고가 <> C; Condition2 = Lowest (C,length) == C and 최종저가 <> C; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then 처리구분 = "고점처리"; // 저 - 고 순으로 처리 Else 처리구분 = "저점처리"; // 고 - 저 순으로 처리 } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = C; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 1 Then { Text1 = Text_New(sDate,sTime,고[1,1],NumToStr(고[1,1],2)); Text_SetStyle(Text1, 2, 1); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 #ssssssssssssssssssssssssssssssssss If 수치표시 == 1 Then { Text_SetLocation(Text1,sDate,sTime,고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 고점추세선 */ If 고[2,2][1] <> 고[2,2] Then // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음 { 고추세최종 = 0; For j = 3 To 추세판단범위 { If 고[2,1] < 고[j,1] Then { 고추세최종 = (고[2,1] - 고[j,1])/(고[2,2] - 고[j,2]) * (Index - 고[j,2]) + 고[j,1]; TL2 = TL_New(고[j,3],고[j,4],고[j,1],sDate,sTime,고추세최종); 고ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL2,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL2,RED); j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C Then { Buy(); } } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = C; If 최종꼭지점 == "고점" then { 진입횟수 = 0; For j = 100 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = C; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 1 Then { Text1 = Text_New(sDate,sTime,저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 2, 0); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,파동선색); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); #ssssssssssssssssssssssssssssssssss If 수치표시 == 1 Then { Text_SetLocation(Text1,sDate,sTime,저[1,1]); Text_SetString(Text1,NumToStr(저[1,1],2)); } #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee } /* 저점추세선 */ If 저[2,2][1] <> 저[2,2] Then { 저추세최종 = 0; For j = 3 To 추세판단범위 { If 저[2,1] > 저[j,1] and 저[j,1] > 0 Then { 저추세최종 = (저[2,1] - 저[j,1])/(저[2,2] - 저[j,2]) * (Index - 저[j,2]) + 저[j,1]; TL3 = TL_New(저[j,3],저[j,4],저[j,1],sDate,sTime,저추세최종); 저ID = j; #ssssssssssssssssssssssssssssssssss TL_SetSize(TL3,추세선두께); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee TL_SetColor(TL3,Blue); j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } 최종꼭지점 = "저점"; If 진입횟수 < 진입횟수제한 and 저추세최종 > 0 and 저추세최종 > C Then { Sell(); } } #==========================================# If 처리구분 == "" Then { If Index - 고[1,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; TL_SetEnd(TL2,sDate,sTime,고추세최종); } } Else { 고추세최종 = 0; } If Index - 저[1,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; TL_SetEnd(TL3,sDate,sTime,저추세최종); } } Else { 저추세최종 = 0; } If MarketPosition > 0 and TL2[1] == TL2 and 고추세최종 > 0 and 고추세최종[1] <= C[1] and 고추세최종 > C Then ExitLong(); If MarketPosition < 0 and TL3[1] == TL3 and 저추세최종 > 0 and 저추세최종[1] >= C[1] and 저추세최종 < C Then ExitShort(); } If ((최종꼭지점 == "고점" and MarketPosition == 1) or (최종꼭지점 == "저점" and MarketPosition == -1)) and MarketPosition[1] != MarketPosition Then { 진입횟수 = 진입횟수 + 1; }