커뮤니티

함수 문의드립니다

프로필 이미지
능률
2020-11-28 22:24:42
906
글번호 144257
답변완료
시그널메이커에서 사용중인 전략을 예스트레이더로 사용하려고 하는데 없는 함수가 있어서 사용자 함수로 등록하였는데 출력값이 시그널 메이커와 일치하지 않아서 문의드립니다. 사용하려는 함수는 선형회귀선에서 각도를 출력하는 함수로 아래와 같습니다. LinearRegAngle( price, period ) //////////////////////////////////////사용자함수 등록내용 Inputs : Price( NumericSeries ), Period( NumericSimple ); Vars : ii( 0 ), X( 0 ), Xsum( 0 ), Ysum( 0 ), XYSum( 0 ), Xsquare_sum( 0 ), Gradient( 0 ); Xsum = 0; Ysum = 0; XYsum = 0; Xsquare_sum = 0; For ii = 0 to Period - 1 step 1 Begin X = Period - 1 - ii; Xsum = Xsum + X; Ysum = Ysum + Price[ii]; XYsum = XYSum + X * Price[ii]; Xsquare_sum = Xsquare_sum + Square(X); End; If Period > 1 && (Period * Xsquare_sum - Square(Xsum)) > 0 Then Begin Gradient = (Period * XYsum - Xsum * Ysum)/(Period * Xsquare_sum - Square(Xsum)); LinearRegAngle = Arctangent(Gradient); End; //////////////////////////////////////끝 이렇게 등록후 지표 등록 후 띄우면 //////////////////////////////////////지표시작 Inputs : lpp(20), hpp(20); Vars : v1(0), v2(0); v1=LinearRegAngle(L,lpp); Plot1(v1,"L"); v2=LinearRegAngle(H,hpp); Plot2(v2,"H"); //////////////////////////////////////지표끝 예스트레이더에서는 지표는 출력되지만 수치가 각도값으로 나오지 않고 -1에서 1사이의 값으로 나옵니다. 함수부분은 시그널메이커에서 그대로 가져왔고 각도값으로 출력이 됩니다. (최대 두자리수값으로 표현됨) 기존에 최적화한 값이 있어서 전략수정없이 성과분석 및 매매하기 원합니다. 무엇이 문제인지 해결가능한지 문의드립니다
사용자 함수
답변 3
프로필 이미지

예스스탁 예스스탁 답변

2020-11-30 15:25:58

안녕하세요 예스스탁입니다. 시그널메이커의 LinearRegAngle 의 함수식 원본을 올려주시기 바랍니다. 즐거운 하루되세요 > 능률 님이 쓴 글입니다. > 제목 : 함수 문의드립니다 > 시그널메이커에서 사용중인 전략을 예스트레이더로 사용하려고 하는데 없는 함수가 있어서 사용자 함수로 등록하였는데 출력값이 시그널 메이커와 일치하지 않아서 문의드립니다. 사용하려는 함수는 선형회귀선에서 각도를 출력하는 함수로 아래와 같습니다. LinearRegAngle( price, period ) //////////////////////////////////////사용자함수 등록내용 Inputs : Price( NumericSeries ), Period( NumericSimple ); Vars : ii( 0 ), X( 0 ), Xsum( 0 ), Ysum( 0 ), XYSum( 0 ), Xsquare_sum( 0 ), Gradient( 0 ); Xsum = 0; Ysum = 0; XYsum = 0; Xsquare_sum = 0; For ii = 0 to Period - 1 step 1 Begin X = Period - 1 - ii; Xsum = Xsum + X; Ysum = Ysum + Price[ii]; XYsum = XYSum + X * Price[ii]; Xsquare_sum = Xsquare_sum + Square(X); End; If Period > 1 && (Period * Xsquare_sum - Square(Xsum)) > 0 Then Begin Gradient = (Period * XYsum - Xsum * Ysum)/(Period * Xsquare_sum - Square(Xsum)); LinearRegAngle = Arctangent(Gradient); End; //////////////////////////////////////끝 이렇게 등록후 지표 등록 후 띄우면 //////////////////////////////////////지표시작 Inputs : lpp(20), hpp(20); Vars : v1(0), v2(0); v1=LinearRegAngle(L,lpp); Plot1(v1,"L"); v2=LinearRegAngle(H,hpp); Plot2(v2,"H"); //////////////////////////////////////지표끝 예스트레이더에서는 지표는 출력되지만 수치가 각도값으로 나오지 않고 -1에서 1사이의 값으로 나옵니다. 함수부분은 시그널메이커에서 그대로 가져왔고 각도값으로 출력이 됩니다. (최대 두자리수값으로 표현됨) 기존에 최적화한 값이 있어서 전략수정없이 성과분석 및 매매하기 원합니다. 무엇이 문제인지 해결가능한지 문의드립니다
프로필 이미지

능률

2020-12-01 01:32:45

아래 원본입니다. //////////////////////////////////////////// Params : Price( NumSeries ), Period( NumSimple ); Vars : ii( 0 ), X( 0 ), Xsum( 0 ), Ysum( 0 ), XYSum( 0 ), Xsquare_sum( 0 ), Gradient( 0 ); Xsum = 0; Ysum = 0; XYsum = 0; Xsquare_sum = 0; For ii = 0 to Period - 1 step 1 Begin X = Period - 1 - ii; Xsum = Xsum + X; Ysum = Ysum + Price[ii]; XYsum = XYSum + X * Price[ii]; Xsquare_sum = Xsquare_sum + Square(X); End; If Period > 1 && (Period * Xsquare_sum - Square(Xsum)) > 0 Then Begin Gradient = (Period * XYsum - Xsum * Ysum)/(Period * Xsquare_sum - Square(Xsum)); LinearRegAngle = Arctangent(Gradient); End;
프로필 이미지

예스스탁 예스스탁 답변

2020-12-01 10:01:31

안녕하세요 예스스탁입니다. 올려주신 함수식 살펴보았지만 기존에 변환해서 작성하신 함수식이 맞습니다. 해당 함수에서 리턴되는 값을 엑셀에 아크탄젠트 함수로도 계산해 보았는데 첨부된 엑셀과 같이 예스랭귀지와 엑셀의 값이 동일합니다. 함수식이 아닌 작성하신 지표식에서 값계산에 누락된 부분이 있는 것 같습니다. 아크탄젠트 값을 도단위로 나타내려면 구해진 값에 180/PI를 곱해야 합니다. Inputs : lpp(20), hpp(20); Vars : v1(0), v2(0); v1=LinearRegAngle(L,lpp); Plot1(v1*180/Pie(),"L"); v2=LinearRegAngle(H,hpp); Plot2(v2*180/Pie(),"H"); 즐거운 하루되세요 > 능률 님이 쓴 글입니다. > 제목 : Re : Re : 함수 문의드립니다 > 아래 원본입니다. //////////////////////////////////////////// Params : Price( NumSeries ), Period( NumSimple ); Vars : ii( 0 ), X( 0 ), Xsum( 0 ), Ysum( 0 ), XYSum( 0 ), Xsquare_sum( 0 ), Gradient( 0 ); Xsum = 0; Ysum = 0; XYsum = 0; Xsquare_sum = 0; For ii = 0 to Period - 1 step 1 Begin X = Period - 1 - ii; Xsum = Xsum + X; Ysum = Ysum + Price[ii]; XYsum = XYSum + X * Price[ii]; Xsquare_sum = Xsquare_sum + Square(X); End; If Period > 1 && (Period * Xsquare_sum - Square(Xsum)) > 0 Then Begin Gradient = (Period * XYsum - Xsum * Ysum)/(Period * Xsquare_sum - Square(Xsum)); LinearRegAngle = Arctangent(Gradient); End;