커뮤니티

수식변환 요청드립니다.

프로필 이미지
오이도인
2020-03-02 13:48:18
490
글번호 136469
답변완료
수고하십니다. 귀사 홈페이지에서 복사한 아래 수식을 다음과 같이 변환 부탁 드립니다. 1] 오늘 검색하는 것이 아니고 "N일전에 검색"하는 경우로 변환 부탁드립니다. 2] 사용자함수로 바꿔주세요.. 3] 지표식으로도 변환 부탁합니다. 늘 감사드리고 있습니다. 수고하세요.. /* from 수식지왕 매수조건식을 종목검색조건으로 변경했습니다. 종목검색 속성에서 검색에 필요한 최소기간에 400정도로 지정하고 검색하시기 바랍니다.(종목검색에는 최대 500봉까지만 제공됩니다.) */ Input:length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1),shortPeriod(120),midPeriod(1), #ssssssssssssssssssssssssssssssssss 파동선두께(1),추세선두께(0),파동선색(GREEN),수치표시(0); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0),TL9(0),short(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# #ssssssssssssssssssssssssssssssssss Short = ma(C, midPeriod); 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; } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; } /* 고점추세선 */ 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]; 고ID = j; j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C AND Short > ma(C,shortPeriod) Then { find(1); } } #==========================================# 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; } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; } /* 저점추세선 */ 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]; 저ID = j; j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } 최종꼭지점 = "저점"; } #==========================================# If 처리구분 == "" Then { If Index - 고[1,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } } Else { 고추세최종 = 0; } If Index - 저[1,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } } Else { 저추세최종 = 0; } }
종목검색
답변 4
프로필 이미지

예스스탁 예스스탁 답변

2020-03-02 13:53:51

안녕하세요 예스스탁입니다. 사용자함수와 지표식이라고만 하시면 어떤 값을 리턴해야 할지 알수가 없습니다. 1번식만 답변드립니다. Input:n(3),length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1),shortPeriod(120),midPeriod(1), #ssssssssssssssssssssssssssssssssss 파동선두께(1),추세선두께(0),파동선색(GREEN),수치표시(0); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0),TL9(0),short(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0),Search(false); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# #ssssssssssssssssssssssssssssssssss Short = ma(C, midPeriod); If Index == 0 Then { 고[1,1] = C; 저[1,1] = C; } Search = false; #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; } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; } /* 고점추세선 */ 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]; 고ID = j; j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C AND Short > ma(C,shortPeriod) Then { search = true; } } #==========================================# 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; } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; } /* 저점추세선 */ 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]; 저ID = j; j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } 최종꼭지점 = "저점"; } #==========================================# If 처리구분 == "" Then { If Index - 고[1,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } } Else { 고추세최종 = 0; } If Index - 저[1,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } } Else { 저추세최종 = 0; } } if search[n] == true then find(1); 즐거운 하루되세요 > 오이도인 님이 쓴 글입니다. > 제목 : 수식변환 요청드립니다. > 수고하십니다. 귀사 홈페이지에서 복사한 아래 수식을 다음과 같이 변환 부탁 드립니다. 1] 오늘 검색하는 것이 아니고 "N일전에 검색"하는 경우로 변환 부탁드립니다. 2] 사용자함수로 바꿔주세요.. 3] 지표식으로도 변환 부탁합니다. 늘 감사드리고 있습니다. 수고하세요.. /* from 수식지왕 매수조건식을 종목검색조건으로 변경했습니다. 종목검색 속성에서 검색에 필요한 최소기간에 400정도로 지정하고 검색하시기 바랍니다.(종목검색에는 최대 500봉까지만 제공됩니다.) */ Input:length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1),shortPeriod(120),midPeriod(1), #ssssssssssssssssssssssssssssssssss 파동선두께(1),추세선두께(0),파동선색(GREEN),수치표시(0); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0),TL9(0),short(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# #ssssssssssssssssssssssssssssssssss Short = ma(C, midPeriod); 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; } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; } /* 고점추세선 */ 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]; 고ID = j; j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C AND Short > ma(C,shortPeriod) Then { find(1); } } #==========================================# 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; } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; } /* 저점추세선 */ 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]; 저ID = j; j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } 최종꼭지점 = "저점"; } #==========================================# If 처리구분 == "" Then { If Index - 고[1,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } } Else { 고추세최종 = 0; } If Index - 저[1,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } } Else { 저추세최종 = 0; } }
프로필 이미지

오이도인

2020-03-02 14:31:09

수고하십니다. 2]번 사용자함수는 기간값 "length"를 return하는 사용자함수를 부탁드립니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 수식변환 요청드립니다. > 안녕하세요 예스스탁입니다. 사용자함수와 지표식이라고만 하시면 어떤 값을 리턴해야 할지 알수가 없습니다. 1번식만 답변드립니다. Input:n(3),length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1),shortPeriod(120),midPeriod(1), #ssssssssssssssssssssssssssssssssss 파동선두께(1),추세선두께(0),파동선색(GREEN),수치표시(0); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0),TL9(0),short(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0),Search(false); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# #ssssssssssssssssssssssssssssssssss Short = ma(C, midPeriod); If Index == 0 Then { 고[1,1] = C; 저[1,1] = C; } Search = false; #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; } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; } /* 고점추세선 */ 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]; 고ID = j; j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C AND Short > ma(C,shortPeriod) Then { search = true; } } #==========================================# 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; } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; } /* 저점추세선 */ 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]; 저ID = j; j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } 최종꼭지점 = "저점"; } #==========================================# If 처리구분 == "" Then { If Index - 고[1,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } } Else { 고추세최종 = 0; } If Index - 저[1,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } } Else { 저추세최종 = 0; } } if search[n] == true then find(1); 즐거운 하루되세요 > 오이도인 님이 쓴 글입니다. > 제목 : 수식변환 요청드립니다. > 수고하십니다. 귀사 홈페이지에서 복사한 아래 수식을 다음과 같이 변환 부탁 드립니다. 1] 오늘 검색하는 것이 아니고 "N일전에 검색"하는 경우로 변환 부탁드립니다. 2] 사용자함수로 바꿔주세요.. 3] 지표식으로도 변환 부탁합니다. 늘 감사드리고 있습니다. 수고하세요.. /* from 수식지왕 매수조건식을 종목검색조건으로 변경했습니다. 종목검색 속성에서 검색에 필요한 최소기간에 400정도로 지정하고 검색하시기 바랍니다.(종목검색에는 최대 500봉까지만 제공됩니다.) */ Input:length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1),shortPeriod(120),midPeriod(1), #ssssssssssssssssssssssssssssssssss 파동선두께(1),추세선두께(0),파동선색(GREEN),수치표시(0); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0),TL9(0),short(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# #ssssssssssssssssssssssssssssssssss Short = ma(C, midPeriod); 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; } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; } /* 고점추세선 */ 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]; 고ID = j; j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C AND Short > ma(C,shortPeriod) Then { find(1); } } #==========================================# 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; } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; } /* 저점추세선 */ 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]; 저ID = j; j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } 최종꼭지점 = "저점"; } #==========================================# If 처리구분 == "" Then { If Index - 고[1,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } } Else { 고추세최종 = 0; } If Index - 저[1,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } } Else { 저추세최종 = 0; } }
프로필 이미지

예스스탁 예스스탁 답변

2020-03-02 14:40:29

안녕하세요 예스스탁입니다. length이 리턴이 종목검색을 하는 조건이 만족하면 외부변수로 지정 length를 리턴하신다는 의미이신지 잘 모르겠습니다. 위 내용으로 작성해 드립니다. 사용자함수명 : Avalue 반환값형 : 숫자형 함수식 : Input:n(Numeric),length(Numeric),추세선연장(Numeric),추세판단범위(Numeric),진입횟수제한(Numeric),shortPeriod(Numeric),midPeriod(Numeric), #ssssssssssssssssssssssssssssssssss 파동선두께(Numeric),추세선두께(Numeric),파동선색(Numeric),수치표시(Numeric); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0),TL9(0),short(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0),Search(false); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# #ssssssssssssssssssssssssssssssssss Short = ma(C, midPeriod); If Index == 0 Then { 고[1,1] = C; 저[1,1] = C; } Search = false; #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; } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; } /* 고점추세선 */ 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]; 고ID = j; j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C AND Short > ma(C,shortPeriod) Then { search = true; } } #==========================================# 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; } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; } /* 저점추세선 */ 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]; 저ID = j; j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } 최종꼭지점 = "저점"; } #==========================================# If 처리구분 == "" Then { If Index - 고[1,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } } Else { 고추세최종 = 0; } If Index - 저[1,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } } Else { 저추세최종 = 0; } } if search[n] == true then Avalue = Length; Else Avalue = 0; 즐거운 하루되세요 > 오이도인 님이 쓴 글입니다. > 제목 : Re : Re : 수식변환 요청드립니다. > 수고하십니다. 2]번 사용자함수는 기간값 "length"를 return하는 사용자함수를 부탁드립니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 수식변환 요청드립니다. > 안녕하세요 예스스탁입니다. 사용자함수와 지표식이라고만 하시면 어떤 값을 리턴해야 할지 알수가 없습니다. 1번식만 답변드립니다. Input:n(3),length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1),shortPeriod(120),midPeriod(1), #ssssssssssssssssssssssssssssssssss 파동선두께(1),추세선두께(0),파동선색(GREEN),수치표시(0); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0),TL9(0),short(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0),Search(false); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# #ssssssssssssssssssssssssssssssssss Short = ma(C, midPeriod); If Index == 0 Then { 고[1,1] = C; 저[1,1] = C; } Search = false; #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; } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; } /* 고점추세선 */ 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]; 고ID = j; j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C AND Short > ma(C,shortPeriod) Then { search = true; } } #==========================================# 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; } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; } /* 저점추세선 */ 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]; 저ID = j; j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } 최종꼭지점 = "저점"; } #==========================================# If 처리구분 == "" Then { If Index - 고[1,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } } Else { 고추세최종 = 0; } If Index - 저[1,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } } Else { 저추세최종 = 0; } } if search[n] == true then find(1); 즐거운 하루되세요 > 오이도인 님이 쓴 글입니다. > 제목 : 수식변환 요청드립니다. > 수고하십니다. 귀사 홈페이지에서 복사한 아래 수식을 다음과 같이 변환 부탁 드립니다. 1] 오늘 검색하는 것이 아니고 "N일전에 검색"하는 경우로 변환 부탁드립니다. 2] 사용자함수로 바꿔주세요.. 3] 지표식으로도 변환 부탁합니다. 늘 감사드리고 있습니다. 수고하세요.. /* from 수식지왕 매수조건식을 종목검색조건으로 변경했습니다. 종목검색 속성에서 검색에 필요한 최소기간에 400정도로 지정하고 검색하시기 바랍니다.(종목검색에는 최대 500봉까지만 제공됩니다.) */ Input:length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1),shortPeriod(120),midPeriod(1), #ssssssssssssssssssssssssssssssssss 파동선두께(1),추세선두께(0),파동선색(GREEN),수치표시(0); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0),TL9(0),short(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# #ssssssssssssssssssssssssssssssssss Short = ma(C, midPeriod); 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; } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; } /* 고점추세선 */ 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]; 고ID = j; j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C AND Short > ma(C,shortPeriod) Then { find(1); } } #==========================================# 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; } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; } /* 저점추세선 */ 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]; 저ID = j; j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } 최종꼭지점 = "저점"; } #==========================================# If 처리구분 == "" Then { If Index - 고[1,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } } Else { 고추세최종 = 0; } If Index - 저[1,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } } Else { 저추세최종 = 0; } }
프로필 이미지

오이도인

2020-03-02 16:15:12

아..미안합니다. 하락추세선을 상향 돌파하는 종목을 찾는 식이므로 그 식을 간단히 사용자 함수로 쓰려는겁니다. 그럼 "고추세최종"을 리턴하는 사용자함수가 맞는건가요..? 잘부탁합니다. ///// > 예스스탁 님이 쓴 글입니다. > 제목 : Re : Re : Re : 수식변환 요청드립니다. > 안녕하세요 예스스탁입니다. length이 리턴이 종목검색을 하는 조건이 만족하면 외부변수로 지정 length를 리턴하신다는 의미이신지 잘 모르겠습니다. 위 내용으로 작성해 드립니다. 사용자함수명 : Avalue 반환값형 : 숫자형 함수식 : Input:n(Numeric),length(Numeric),추세선연장(Numeric),추세판단범위(Numeric),진입횟수제한(Numeric),shortPeriod(Numeric),midPeriod(Numeric), #ssssssssssssssssssssssssssssssssss 파동선두께(Numeric),추세선두께(Numeric),파동선색(Numeric),수치표시(Numeric); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0),TL9(0),short(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0),Search(false); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# #ssssssssssssssssssssssssssssssssss Short = ma(C, midPeriod); If Index == 0 Then { 고[1,1] = C; 저[1,1] = C; } Search = false; #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; } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; } /* 고점추세선 */ 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]; 고ID = j; j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C AND Short > ma(C,shortPeriod) Then { search = true; } } #==========================================# 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; } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; } /* 저점추세선 */ 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]; 저ID = j; j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } 최종꼭지점 = "저점"; } #==========================================# If 처리구분 == "" Then { If Index - 고[1,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } } Else { 고추세최종 = 0; } If Index - 저[1,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } } Else { 저추세최종 = 0; } } if search[n] == true then Avalue = Length; Else Avalue = 0; 즐거운 하루되세요 > 오이도인 님이 쓴 글입니다. > 제목 : Re : Re : 수식변환 요청드립니다. > 수고하십니다. 2]번 사용자함수는 기간값 "length"를 return하는 사용자함수를 부탁드립니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 수식변환 요청드립니다. > 안녕하세요 예스스탁입니다. 사용자함수와 지표식이라고만 하시면 어떤 값을 리턴해야 할지 알수가 없습니다. 1번식만 답변드립니다. Input:n(3),length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1),shortPeriod(120),midPeriod(1), #ssssssssssssssssssssssssssssssssss 파동선두께(1),추세선두께(0),파동선색(GREEN),수치표시(0); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0),TL9(0),short(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0),Search(false); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# #ssssssssssssssssssssssssssssssssss Short = ma(C, midPeriod); If Index == 0 Then { 고[1,1] = C; 저[1,1] = C; } Search = false; #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; } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; } /* 고점추세선 */ 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]; 고ID = j; j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C AND Short > ma(C,shortPeriod) Then { search = true; } } #==========================================# 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; } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; } /* 저점추세선 */ 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]; 저ID = j; j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } 최종꼭지점 = "저점"; } #==========================================# If 처리구분 == "" Then { If Index - 고[1,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } } Else { 고추세최종 = 0; } If Index - 저[1,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } } Else { 저추세최종 = 0; } } if search[n] == true then find(1); 즐거운 하루되세요 > 오이도인 님이 쓴 글입니다. > 제목 : 수식변환 요청드립니다. > 수고하십니다. 귀사 홈페이지에서 복사한 아래 수식을 다음과 같이 변환 부탁 드립니다. 1] 오늘 검색하는 것이 아니고 "N일전에 검색"하는 경우로 변환 부탁드립니다. 2] 사용자함수로 바꿔주세요.. 3] 지표식으로도 변환 부탁합니다. 늘 감사드리고 있습니다. 수고하세요.. /* from 수식지왕 매수조건식을 종목검색조건으로 변경했습니다. 종목검색 속성에서 검색에 필요한 최소기간에 400정도로 지정하고 검색하시기 바랍니다.(종목검색에는 최대 500봉까지만 제공됩니다.) */ Input:length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1),shortPeriod(120),midPeriod(1), #ssssssssssssssssssssssssssssssssss 파동선두께(1),추세선두께(0),파동선색(GREEN),수치표시(0); #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0), TL1(0),TL2(0),TL3(0),Text1(0),TL9(0),short(0), 고추세최종(0),저추세최종(0),고ID(0),저ID(0); Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# #ssssssssssssssssssssssssssssssssss Short = ma(C, midPeriod); 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; } Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = C; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; } /* 고점추세선 */ 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]; 고ID = j; j = 100; } } } Else If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } 최종꼭지점 = "고점"; If 진입횟수 < 진입횟수제한 and 고추세최종 > 0 and 고추세최종 < C AND Short > ma(C,shortPeriod) Then { find(1); } } #==========================================# 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; } Else If 저[1,1] > C then { 저[1,1] = C; 저[1,3] = sDate; 저[1,4] = sTime; 저[1,2] = Index; } /* 저점추세선 */ 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]; 저ID = j; j = 100; } } } Else If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } 최종꼭지점 = "저점"; } #==========================================# If 처리구분 == "" Then { If Index - 고[1,2] <= 추세선연장 Then { If 고추세최종[1] > 0 Then { 고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1]; } } Else { 고추세최종 = 0; } If Index - 저[1,2] <= 추세선연장 Then { If 저추세최종[1] > 0 Then { 저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1]; } } Else { 저추세최종 = 0; } }