커뮤니티

부탁드립니다

프로필 이미지
********
2009-11-23 11:28:08
1428
글번호 203163
답변완료
추세식 매매인데 저꾸 오류가 나네요 부탁드립니다 (시뮬레이션에서 오류:논리값이나 논리표현식이 와야합니다) input:n(4),미완성사용(False),RaffRegression(True),StdDeviation(False),StdError(False); Var:j(0),k(0),X(0),num(0),승수(2), sumXY(0),sumX(0),sumY(0),sumX²(0),sumY²(0), 기울기(0),절편(0),선형회귀선(0),회귀채널폭(0),표준편차(0),표준오차(0), 라프회귀상(0),라프회귀하(0),표준편차상(0),표준편차하(0), 표준오차상(0),표준오차하(0); Array:고[20](0),저[20](0),고Bar[20](0),저Bar[20](0); #=========================================================# # 초기처리 (Initialize Routine) #=========================================================# # index()와 마찬가지로 1봉이 바뀔 때마다 1씩 증가 #---------------------------------------------------------# for j = 1 to 19 { 고Bar[j] = 고Bar[j] + 1; 저Bar[j] = 저Bar[j]+ 1; } X = Index; #=========================================================# # 주처리 (Main Routine) 파동계산 #=========================================================# # 전고점(peak) 계산 #---------------------------------------------------------# //Highest(H,2)[3] <= H[2] and H[2] > Highest(H,2) if Highest(H,n)[n+1] <= H[n] and H[n] > Highest(H,n) then { if 미완성사용 == true then { for j = 18 downto 1 { 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; } 고[1] = H[n]; 고Bar[1] = n; if 저Bar[1] > 고Bar[2] then { for j = 18 downto 1 { 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; } k = n + 1; for j = n + 2 to 고Bar[2]-1 { if L[k] > L[j] then k = j; } 저[1] = L[k]; 저Bar[1] = k; } } if 미완성사용 == False then { if 고Bar[1] > 저Bar[1] then { for j = 18 downto 1 { 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; } } if 고Bar[1] > 저Bar[1] or 고[1] <= h[n] then { 고[1] = h[n]; 고Bar[1] = n; } } } #---------------------------------------------------------# # 전저점(Trough) 계산 #---------------------------------------------------------# //Lowest(L,2)[3] >= L[2] and L[2] < Lowest(L,2) if Lowest(L,n)[n+1] >= L[n] and L[n] < Lowest(L,n) then { if 미완성사용 == true then { for j = 18 downto 1 { 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; } 저[1] = L[n]; 저Bar[1] = n; if 고Bar[1] > 저Bar[2] then { for j = 18 downto 1 { 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; } k = n + 1; for j = n + 2 to 저Bar[2]-1 { if H[k] < H[j] then k = j; } 고[1] = H[k]; 고Bar[1] = k; } } if 미완성사용 == False then { if 저Bar[1] > 고Bar[1] then { for j = 18 downto 1 { 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; } } 저[1] = L[n]; 저Bar[1] = n; } } if 저Bar[1] == n or 고Bar[1] == n then { #==========================================================================# # 선형회귀방정식 # #==========================================================================# # nΣxy - (Σx)(Σy) # # 기울기 a = --------------------- # # nΣx²- (Σx)² # # # # = (n*sum(xy) - sum(x) * sum(y)) / (n*sum(x^2)-sum(x)^2) # # # # (Σy)(Σx²)-(Σx)(Σxy) # # 절편 b = --------------------------- # # nΣx²- (Σx)² # # # # = (sum(y)*sum(x^2) - sum(x)*sum(xy)) / (n*sum(x^2) - sum(x)^2) # #==========================================================================# if 저Bar[1] == n then num = 저Bar[2] - 저Bar[1] + 1; if 고Bar[1] == n then num = 고Bar[2] - 고Bar[1] + 1; sumXY = AccumN(X[n]*C[n],num); sumX = AccumN(X[n],num); sumY = AccumN(C[n],num); sumX²= AccumN(X[n]^2,num); sumY²= AccumN(C[n]^2,num); 기울기 = ((num * sumXY) - (sumX * sumY)) / (num * sumX²- sumX^2); 절편 = ((sumY * sumX²) - (sumX * sumXY)) / (num * sumX²- sumX^2); 회귀채널폭 = 0; for j = 0 to num - 1 { var1 = max(H[n+j]-(기울기*x[n+j]+절편),(기울기*x[n+j]+절편)-L[n+j]); if 회귀채널폭 < var1 then 회귀채널폭 = var1; } #==========================================================================# # 표준편차 공식 # #==========================================================================# # _________________ # # / nΣx²- (Σx)² # # STD = / ---------------- # # √ n(n-1) # # # # sqrt((n*sum(x^2)-sum(x)^2)/n*(n-1)) # #==========================================================================# 표준편차 = sqrt((num*sumY² - sumY^2)/(num*(num-1))); #==========================================================================# # 표준오차 공식 # #==========================================================================# # _______________________________________________________ # # / 1 [nΣxy - (Σx)(Σy)]² # # Sxy = / [ ------- ][nΣy²- (Σy)²- ----------------------- ] # # √ n(n-2) nΣx²- (Σx)² # # # # sqrt(1/(n*(n-2)))*(n*sum(y^2)-sum(y)^2-((n*sum(xy)-sum(x)*sum(y))^2/ # # (n*sum(x^2)-sum(x)^2))) # #==========================================================================# 표준오차 = sqrt((1/(num*(num-2)))*(num*sumY²-sumY^2- ((num*sumXY-sumX*sumY)^2)/(num*sumX²-sumX^2))); } 선형회귀선 = 기울기 * x + 절편; 라프회귀상 = 선형회귀선 + 회귀채널폭; 라프회귀하 = 선형회귀선 - 회귀채널폭; 표준편차상 = 선형회귀선 + (표준편차 * 승수); 표준편차하 = 선형회귀선 - (표준편차 * 승수); 표준오차상 = 선형회귀선 + (표준오차 * 승수); 표준오차하 = 선형회귀선 - (표준오차 * 승수); #=========================================================# # 시스템식 #=========================================================# if RaffRegression == True and 라프회귀상 > 0 and CrossUp(C,라프회귀상) then Buy("라프회귀상돌파"); if StdDeviation == True and 표준편차상 > 0 and CrossUp(C,표준편차상) then Buy("표준편차상돌파"); if StdError == True and 표준오차상 > 0 and CrossUp(C,표준오차상) then Buy("표준오차상돌파"); if RaffRegression == True and 라프회귀하 > 0 and CrossDown(C,라프회귀하) then Sell("라프회귀하돌파"); if StdDeviation == True and 표준편차하 > 0 and CrossDown(C,표준편차하) then Sell("표준편차하돌파"); if StdError == True and 표준오차하 > 0 and CrossDown(C,표준오차하) then Sell("표준오차하돌파");
예스트레이더 (iM증권)
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2009-11-23 16:15:38

안녕하세요 예스스탁입니다. 변수최적화는 수치형변수에 대해서만 최적화를 수행합니다. 외부변수에 논리형변수가 있으면 해당 에러 메세지가 출력됩니다. 아래와 같이 식을 작성하시면 true와 false값에 대해서도 최적화를 하실 수 있습니다. true는 1,false는 1이 아닌값을 넣어주시면 됩니다. input:n(4),미완성(0),RaffReg(1),SDeviation(0),StdEr(0); Var:j(0),k(0),X(0),num(0),승수(2), sumXY(0),sumX(0),sumY(0),sumX²(0),sumY²(0), 기울기(0),절편(0),선형회귀선(0),회귀채널폭(0),표준편차(0),표준오차(0), 라프회귀상(0),라프회귀하(0),표준편차상(0),표준편차하(0),미완성사용(False), 표준오차상(0),표준오차하(0),RaffRegression(false),StdDeviation(False),StdError(False); Array:고[20](0),저[20](0),고Bar[20](0),저Bar[20](0); if 미완성 == 1 Then 미완성사용 = true; Else 미완성사용 = false; if RaffReg == 1 Then RaffRegression = True; Else RaffRegression = false; if SDeviation == 1 Then StdDeviation = True; Else StdDeviation = false; if StdEr == 1 Then StdError = True; Else StdError = false; #=========================================================# # 초기처리 (Initialize Routine) #=========================================================# # index()와 마찬가지로 1봉이 바뀔 때마다 1씩 증가 #---------------------------------------------------------# for j = 1 to 19 { 고Bar[j] = 고Bar[j] + 1; 저Bar[j] = 저Bar[j]+ 1; } X = Index; #=========================================================# # 주처리 (Main Routine) 파동계산 #=========================================================# # 전고점(peak) 계산 #---------------------------------------------------------# //Highest(H,2)[3] <= H[2] and H[2] > Highest(H,2) if Highest(H,n)[n+1] <= H[n] and H[n] > Highest(H,n) then { if 미완성사용 == true then { for j = 18 downto 1 { 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; } 고[1] = H[n]; 고Bar[1] = n; if 저Bar[1] > 고Bar[2] then { for j = 18 downto 1 { 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; } k = n + 1; for j = n + 2 to 고Bar[2]-1 { if L[k] > L[j] then k = j; } 저[1] = L[k]; 저Bar[1] = k; } } if 미완성사용 == False then { if 고Bar[1] > 저Bar[1] then { for j = 18 downto 1 { 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; } } if 고Bar[1] > 저Bar[1] or 고[1] <= h[n] then { 고[1] = h[n]; 고Bar[1] = n; } } } #---------------------------------------------------------# # 전저점(Trough) 계산 #---------------------------------------------------------# //Lowest(L,2)[3] >= L[2] and L[2] < Lowest(L,2) if Lowest(L,n)[n+1] >= L[n] and L[n] < Lowest(L,n) then { if 미완성사용 == true then { for j = 18 downto 1 { 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; } 저[1] = L[n]; 저Bar[1] = n; if 고Bar[1] > 저Bar[2] then { for j = 18 downto 1 { 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; } k = n + 1; for j = n + 2 to 저Bar[2]-1 { if H[k] < H[j] then k = j; } 고[1] = H[k]; 고Bar[1] = k; } } if 미완성사용 == False then { if 저Bar[1] > 고Bar[1] then { for j = 18 downto 1 { 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; } } 저[1] = L[n]; 저Bar[1] = n; } } if 저Bar[1] == n or 고Bar[1] == n then { #==========================================================================# # 선형회귀방정식 # #==========================================================================# # nΣxy - (Σx)(Σy) # # 기울기 a = --------------------- # # nΣx²- (Σx)² # # # # = (n*sum(xy) - sum(x) * sum(y)) / (n*sum(x^2)-sum(x)^2) # # # # (Σy)(Σx²)-(Σx)(Σxy) # # 절편 b = --------------------------- # # nΣx²- (Σx)² # # # # = (sum(y)*sum(x^2) - sum(x)*sum(xy)) / (n*sum(x^2) - sum(x)^2) # #==========================================================================# if 저Bar[1] == n then num = 저Bar[2] - 저Bar[1] + 1; if 고Bar[1] == n then num = 고Bar[2] - 고Bar[1] + 1; sumXY = AccumN(X[n]*C[n],num); sumX = AccumN(X[n],num); sumY = AccumN(C[n],num); sumX²= AccumN(X[n]^2,num); sumY²= AccumN(C[n]^2,num); 기울기 = ((num * sumXY) - (sumX * sumY)) / (num * sumX²- sumX^2); 절편 = ((sumY * sumX²) - (sumX * sumXY)) / (num * sumX²- sumX^2); 회귀채널폭 = 0; for j = 0 to num - 1 { var1 = max(H[n+j]-(기울기*x[n+j]+절편),(기울기*x[n+j]+절편)-L[n+j]); if 회귀채널폭 < var1 then 회귀채널폭 = var1; } #==========================================================================# # 표준편차 공식 # #==========================================================================# # _________________ # # / nΣx²- (Σx)² # # STD = / ---------------- # # √ n(n-1) # # # # sqrt((n*sum(x^2)-sum(x)^2)/n*(n-1)) # #==========================================================================# 표준편차 = sqrt((num*sumY² - sumY^2)/(num*(num-1))); #==========================================================================# # 표준오차 공식 # #==========================================================================# # _______________________________________________________ # # / 1 [nΣxy - (Σx)(Σy)]² # # Sxy = / [ ------- ][nΣy²- (Σy)²- ----------------------- ] # # √ n(n-2) nΣx²- (Σx)² # # # # sqrt(1/(n*(n-2)))*(n*sum(y^2)-sum(y)^2-((n*sum(xy)-sum(x)*sum(y))^2/ # # (n*sum(x^2)-sum(x)^2))) # #==========================================================================# 표준오차 = sqrt((1/(num*(num-2)))*(num*sumY²-sumY^2- ((num*sumXY-sumX*sumY)^2)/(num*sumX²-sumX^2))); } 선형회귀선 = 기울기 * x + 절편; 라프회귀상 = 선형회귀선 + 회귀채널폭; 라프회귀하 = 선형회귀선 - 회귀채널폭; 표준편차상 = 선형회귀선 + (표준편차 * 승수); 표준편차하 = 선형회귀선 - (표준편차 * 승수); 표준오차상 = 선형회귀선 + (표준오차 * 승수); 표준오차하 = 선형회귀선 - (표준오차 * 승수); #=========================================================# # 시스템식 #=========================================================# if RaffRegression == True and 라프회귀상 > 0 and CrossUp(C,라프회귀상) then Buy("라프회귀상돌파"); if StdDeviation == True and 표준편차상 > 0 and CrossUp(C,표준편차상) then Buy("표준편차상돌파"); if StdError == True and 표준오차상 > 0 and CrossUp(C,표준오차상) then Buy("표준오차상돌파"); if RaffRegression == True and 라프회귀하 > 0 and CrossDown(C,라프회귀하) then Sell("라프회귀하돌파"); if StdDeviation == True and 표준편차하 > 0 and CrossDown(C,표준편차하) then Sell("표준편차하돌파"); if StdError == True and 표준오차하 > 0 and CrossDown(C,표준오차하) then Sell("표준오차하돌파"); 즐거운 하루되세요 > HI_lee3428 님이 쓴 글입니다. > 제목 : 부탁드립니다 > 추세식 매매인데 저꾸 오류가 나네요 부탁드립니다 (시뮬레이션에서 오류:논리값이나 논리표현식이 와야합니다) input:n(4),미완성사용(False),RaffRegression(True),StdDeviation(False),StdError(False); Var:j(0),k(0),X(0),num(0),승수(2), sumXY(0),sumX(0),sumY(0),sumX²(0),sumY²(0), 기울기(0),절편(0),선형회귀선(0),회귀채널폭(0),표준편차(0),표준오차(0), 라프회귀상(0),라프회귀하(0),표준편차상(0),표준편차하(0), 표준오차상(0),표준오차하(0); Array:고[20](0),저[20](0),고Bar[20](0),저Bar[20](0); #=========================================================# # 초기처리 (Initialize Routine) #=========================================================# # index()와 마찬가지로 1봉이 바뀔 때마다 1씩 증가 #---------------------------------------------------------# for j = 1 to 19 { 고Bar[j] = 고Bar[j] + 1; 저Bar[j] = 저Bar[j]+ 1; } X = Index; #=========================================================# # 주처리 (Main Routine) 파동계산 #=========================================================# # 전고점(peak) 계산 #---------------------------------------------------------# //Highest(H,2)[3] <= H[2] and H[2] > Highest(H,2) if Highest(H,n)[n+1] <= H[n] and H[n] > Highest(H,n) then { if 미완성사용 == true then { for j = 18 downto 1 { 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; } 고[1] = H[n]; 고Bar[1] = n; if 저Bar[1] > 고Bar[2] then { for j = 18 downto 1 { 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; } k = n + 1; for j = n + 2 to 고Bar[2]-1 { if L[k] > L[j] then k = j; } 저[1] = L[k]; 저Bar[1] = k; } } if 미완성사용 == False then { if 고Bar[1] > 저Bar[1] then { for j = 18 downto 1 { 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; } } if 고Bar[1] > 저Bar[1] or 고[1] <= h[n] then { 고[1] = h[n]; 고Bar[1] = n; } } } #---------------------------------------------------------# # 전저점(Trough) 계산 #---------------------------------------------------------# //Lowest(L,2)[3] >= L[2] and L[2] < Lowest(L,2) if Lowest(L,n)[n+1] >= L[n] and L[n] < Lowest(L,n) then { if 미완성사용 == true then { for j = 18 downto 1 { 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; } 저[1] = L[n]; 저Bar[1] = n; if 고Bar[1] > 저Bar[2] then { for j = 18 downto 1 { 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; } k = n + 1; for j = n + 2 to 저Bar[2]-1 { if H[k] < H[j] then k = j; } 고[1] = H[k]; 고Bar[1] = k; } } if 미완성사용 == False then { if 저Bar[1] > 고Bar[1] then { for j = 18 downto 1 { 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; } } 저[1] = L[n]; 저Bar[1] = n; } } if 저Bar[1] == n or 고Bar[1] == n then { #==========================================================================# # 선형회귀방정식 # #==========================================================================# # nΣxy - (Σx)(Σy) # # 기울기 a = --------------------- # # nΣx²- (Σx)² # # # # = (n*sum(xy) - sum(x) * sum(y)) / (n*sum(x^2)-sum(x)^2) # # # # (Σy)(Σx²)-(Σx)(Σxy) # # 절편 b = --------------------------- # # nΣx²- (Σx)² # # # # = (sum(y)*sum(x^2) - sum(x)*sum(xy)) / (n*sum(x^2) - sum(x)^2) # #==========================================================================# if 저Bar[1] == n then num = 저Bar[2] - 저Bar[1] + 1; if 고Bar[1] == n then num = 고Bar[2] - 고Bar[1] + 1; sumXY = AccumN(X[n]*C[n],num); sumX = AccumN(X[n],num); sumY = AccumN(C[n],num); sumX²= AccumN(X[n]^2,num); sumY²= AccumN(C[n]^2,num); 기울기 = ((num * sumXY) - (sumX * sumY)) / (num * sumX²- sumX^2); 절편 = ((sumY * sumX²) - (sumX * sumXY)) / (num * sumX²- sumX^2); 회귀채널폭 = 0; for j = 0 to num - 1 { var1 = max(H[n+j]-(기울기*x[n+j]+절편),(기울기*x[n+j]+절편)-L[n+j]); if 회귀채널폭 < var1 then 회귀채널폭 = var1; } #==========================================================================# # 표준편차 공식 # #==========================================================================# # _________________ # # / nΣx²- (Σx)² # # STD = / ---------------- # # √ n(n-1) # # # # sqrt((n*sum(x^2)-sum(x)^2)/n*(n-1)) # #==========================================================================# 표준편차 = sqrt((num*sumY² - sumY^2)/(num*(num-1))); #==========================================================================# # 표준오차 공식 # #==========================================================================# # _______________________________________________________ # # / 1 [nΣxy - (Σx)(Σy)]² # # Sxy = / [ ------- ][nΣy²- (Σy)²- ----------------------- ] # # √ n(n-2) nΣx²- (Σx)² # # # # sqrt(1/(n*(n-2)))*(n*sum(y^2)-sum(y)^2-((n*sum(xy)-sum(x)*sum(y))^2/ # # (n*sum(x^2)-sum(x)^2))) # #==========================================================================# 표준오차 = sqrt((1/(num*(num-2)))*(num*sumY²-sumY^2- ((num*sumXY-sumX*sumY)^2)/(num*sumX²-sumX^2))); } 선형회귀선 = 기울기 * x + 절편; 라프회귀상 = 선형회귀선 + 회귀채널폭; 라프회귀하 = 선형회귀선 - 회귀채널폭; 표준편차상 = 선형회귀선 + (표준편차 * 승수); 표준편차하 = 선형회귀선 - (표준편차 * 승수); 표준오차상 = 선형회귀선 + (표준오차 * 승수); 표준오차하 = 선형회귀선 - (표준오차 * 승수); #=========================================================# # 시스템식 #=========================================================# if RaffRegression == True and 라프회귀상 > 0 and CrossUp(C,라프회귀상) then Buy("라프회귀상돌파"); if StdDeviation == True and 표준편차상 > 0 and CrossUp(C,표준편차상) then Buy("표준편차상돌파"); if StdError == True and 표준오차상 > 0 and CrossUp(C,표준오차상) then Buy("표준오차상돌파"); if RaffRegression == True and 라프회귀하 > 0 and CrossDown(C,라프회귀하) then Sell("라프회귀하돌파"); if StdDeviation == True and 표준편차하 > 0 and CrossDown(C,표준편차하) then Sell("표준편차하돌파"); if StdError == True and 표준오차하 > 0 and CrossDown(C,표준오차하) then Sell("표준오차하돌파");