커뮤니티

시스템식 부탁드립니다.

프로필 이미지
양치기
2015-08-30 22:00:22
165
글번호 89924
답변완료
항상 도움주셔서 감사합니다. 첨부파일 보시고 시스템식 작성 부탁드립니다. 감사합니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2015-08-31 13:57:35

안녕하세요 예스스탁입니다. 해당식이 한번 변곡점이 나오면 해당 점을 시작점으로 해서 이후 새로운 고가나 저가가 바랭하면 계속 갱신해서 그립니다. 신호가 나온봉이 실시간일때는 2개의 추세선값이 다르지만 이후 갱신되서 값이 서로 같아질수도 있습니다. 아래수식에 메세지로그로 매봉 2개 추세선의 현재값을 출력하게 했습니다. 신호가 나온봉에서 2개의 추세선이 겹쳐있다면 해당 값 참고해서 보시면 됩니다. Input:length(12); Var:j(0),lastHiVal(0),lastLoVal(0),turnPntBit(""),TL1(0); Array:valArr[20](0),barArr[20](0),turnPntArr[20](""); // 봉이 새로 생겼으므로 봉개수 관리하는 변수들의 봉개수 값 1씩 증가 For j = 0 To 19 { barArr[j] = barArr[j] + 1; } // 고점조건 = 현재 봉의 고가가 기간최고가이면서 최고가 갱신되었을 때; // 저점조건 = 현재 봉의 저가가 기간최저가이면서 최저가 갱신되었을 때; // 고점,저점조건 만족시 현재 봉의 고[저]가를 변수에 저장 Condition1 = Highest(H,length) == H and lastHiVal <> H; Condition2 = Lowest(L,length) == L and lastLoVal <> L; If Condition1 Then lastHiVal = H; If Condition2 Then lastLoVal = L; // 전환점구분 null값으로 초기화; // if 고점조건, 저점조건 동시 만족시 { // if 전환점배열의 현재(배열상 1번째)값이 고점이면 전환점구분 = 저점; // else if 전환점배열의 현재 값이 저점이면 전환점구분 = 고점; // else if 고점조건 만족하면 전환점구분 = 고점; // else if 저점조건 만족하면 전환점구분 = 저점; turnPntBit = ""; If Condition1 and Condition2 Then { If turnPntArr[1] == "Hi" Then turnPntBit = "Lo"; Else If turnPntArr[1] == "Lo" Then turnPntBit = "Hi"; } Else If Condition1 Then turnPntBit = "Hi"; Else If Condition2 Then turnPntBit = "Lo"; // if 전환점구분에 값이 있을 때만 then 아래 실행, 없으면 통과 // if 신규 전환점구분이 현재(전환점배열 1번째)와 다르면 then // 배열값들을 이전값으로 Move; If turnPntBit == "Hi" or turnPntBit == "Lo" Then { If turnPntBit <> turnPntArr[1] Then { for j = 18 downto 1 { valArr[j+1] = valArr[j]; barArr[j+1] = barArr[j]; turnPntArr[j+1] = turnPntArr[j]; } } // if 전환점구분이 바뀌었거나 또는 // (전환점구분은 안바뀌었는데 // (이전 고점보다 높은 고점이 발생했거나 또는 // 이전 저점보다 낮은 저점이 발생했으면)) then If turnPntBit <> turnPntArr[1] or (turnPntBit == turnPntArr[1] and ((turnPntBit == "Hi" and valArr[1] < H) or (turnPntBit == "Lo" and valArr[1] > L))) Then { // 값 배열에는 고점 또는 저점을 대입; // 봉개수 배열에는 0값 대입; // 전환점 배열에 전환점구분값을 대입; valArr[1] = IFF(turnPntBit == "Hi",H,L); barArr[1] = 0; turnPntArr[1] = turnPntBit; // if 이전봉대비 전환점구분이 바뀌었다면 추세선 새로 그리고; // else 전환점구분이 안바뀌었으면 값만 바뀐거므로 추세선 연장; If turnPntArr[1][1] <> turnPntArr[1][0] Then { TL1 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],sDate[barArr[1]],sTime[barArr[1]],valArr[1]); if turnPntArr[1][0] == "Lo" Then{ var1 = 1; var2 = valArr[2]; } Else{ var1 = -1; var3 = valArr[2]; } } Else TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]); } } TL_SetSize(TL1,4); TL_SetColor(TL1,GREEN); Input:length2(6); Var:j2(0),lastHiVal2(0),lastLoVal2(0),turnPntBit2(""),TL12(0); Array:valArr2[20](0),barArr2[20](0),turnPntArr2[20](""); // 봉이 새로 생겼으므로 봉개수 관리하는 변수들의 봉개수 값 1씩 증가 For j2 = 0 To 19 { barArr2[j2] = barArr2[j2] + 1; } // 고점조건 = 현재 봉의 고가가 기간최고가이면서 최고가 갱신되었을 때; // 저점조건 = 현재 봉의 저가가 기간최저가이면서 최저가 갱신되었을 때; // 고점,저점조건 만족시 현재 봉의 고[저]가를 변수에 저장 Condition12 = Highest(H,length2) == H and lastHiVal2 <> H; Condition22 = Lowest(L,length2) == L and lastLoVal2 <> L; If Condition12 Then lastHiVal2 = H; If Condition22 Then lastLoVal2 = L; // 전환점구분 null값으로 초기화; // if 고점조건, 저점조건 동시 만족시 { // if 전환점배열의 현재(배열상 1번째)값이 고점이면 전환점구분 = 저점; // else if 전환점배열의 현재 값이 저점이면 전환점구분 = 고점; // else if 고점조건 만족하면 전환점구분 = 고점; // else if 저점조건 만족하면 전환점구분 = 저점; turnPntBit2 = ""; If Condition12 and Condition22 Then { If turnPntArr2[1] == "Hi" Then turnPntBit2 = "Lo"; Else If turnPntArr2[1] == "Lo" Then turnPntBit2 = "Hi"; } Else If Condition12 Then turnPntBit2 = "Hi"; Else If Condition22 Then turnPntBit2 = "Lo"; // if 전환점구분에 값이 있을 때만 then 아래 실행, 없으면 통과 // if 신규 전환점구분이 현재(전환점배열 1번째)와 다르면 then // 배열값들을 이전값으로 Move; If turnPntBit2 == "Hi" or turnPntBit2 == "Lo" Then { If turnPntBit2 <> turnPntArr2[1] Then { for j2 = 18 downto 1 { valArr2[j2+1] = valArr2[j2]; barArr2[j2+1] = barArr2[j2]; turnPntArr2[j2+1] = turnPntArr2[j2]; } } // if 전환점구분이 바뀌었거나 또는 // (전환점구분은 안바뀌었는데 // (이전 고점보다 높은 고점이 발생했거나 또는 // 이전 저점보다 낮은 저점이 발생했으면)) then If turnPntBit2 <> turnPntArr2[1] or (turnPntBit2 == turnPntArr2[1] and ((turnPntBit2 == "Hi" and valArr2[1] < H) or (turnPntBit2 == "Lo" and valArr2[1] > L))) Then { // 값 배열에는 고점 또는 저점을 대입; // 봉개수 배열에는 0값 대입; // 전환점 배열에 전환점구분값을 대입; valArr2[1] = IFF(turnPntBit2 == "Hi",H,L); barArr2[1] = 0; turnPntArr2[1] = turnPntBit2; // if 이전봉대비 전환점구분이 바뀌었다면 추세선 새로 그리고; // else 전환점구분이 안바뀌었으면 값만 바뀐거므로 추세선 연장; If turnPntArr2[1][1] <> turnPntArr2[1][0] Then { TL12 = TL_New(sDate[barArr2[2]],sTime[barArr2[2]],valArr2[2],sDate[barArr2[1]],sTime[barArr2[1]],valArr2[1]); if turnPntArr2[1][0] == "Lo" Then{ var12 = 1; var22 = valArr2[2]; } Else{ var12 = -1; var32 = valArr2[2]; } } Else TL_SetEnd(TL12,sDate[barArr2[1]],sTime[barArr2[1]],valArr2[1]); } } TL_SetSize(TL12,4); TL_SetColor(TL12,Yellow); if turnPntArr[1][0] == "Hi" and turnPntArr2[1][0] == "Hi" And TL_GetBeginDate(TL1) == TL_GetBeginDate(TL12) and TL_GetBeginTime(TL1) == TL_GetBeginTime(TL12) And TL_GetBeginVal(TL1) == TL_GetBeginVal(TL12) And TL_GetValue(TL1,sdate,stime) != TL_GetValue(TL12,sdate,stime) Then buy(); if turnPntArr[1][0] == "Lo" and turnPntArr2[1][0] == "Lo" And TL_GetBeginDate(TL1) == TL_GetBeginDate(TL12) and TL_GetBeginTime(TL1) == TL_GetBeginTime(TL12) And TL_GetBeginVal(TL1) == TL_GetBeginVal(TL12) And TL_GetValue(TL1,sdate,stime) != TL_GetValue(TL12,sdate,stime) Then sell(); MessageLog("%.2f %.2f",TL_GetValue(TL1,sdate,stime),TL_GetValue(TL12,sdate,stime) ); 즐거운 하루되세요 > 양치기 님이 쓴 글입니다. > 제목 : 시스템식 부탁드립니다. > 항상 도움주셔서 감사합니다. 첨부파일 보시고 시스템식 작성 부탁드립니다. 감사합니다.