예스스탁
예스스탁 답변
2023-03-30 13:05:06
안녕하세요
예스스탁입니다.
Input:length(30),per(5);
Var:최종고가(0),최종저가(0),최종변곡점(""),처리구분(""),sBar(0),TL1(0),
고추세기울기(0),고추세봉개수(0),고추세시작(0),고추세시작IDX(0),고추세최종(0),
저추세기울기(0),저추세봉개수(0),저추세시작(0),저추세시작IDX(0),저추세최종(0);
Var:고1(0),고2(0),고3(0),고4(0),고5(0),고6(0),고7(0),고8(0),고9(0),고10(0),
저1(0),저2(0),저3(0),저4(0),저5(0),저6(0),저7(0),저8(0),저9(0),저10(0),
고1IDX(0),고2IDX(0),고3IDX(0),고4IDX(0),고5IDX(0),
고6IDX(0),고7IDX(0),고8IDX(0),고9IDX(0),고10IDX(0),
저1IDX(0),저2IDX(0),저3IDX(0),저4IDX(0),저5IDX(0),
저6IDX(0),저7IDX(0),저8IDX(0),저9IDX(0),저10IDX(0);
var : t(0),ii(0),tx1(0);
#==========================================#
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
{
고9 = 고8; 고9IDX = 고8IDX;
고8 = 고7; 고8IDX = 고7IDX;
고7 = 고6; 고7IDX = 고6IDX;
고6 = 고5; 고6IDX = 고5IDX;
고5 = 고4; 고5IDX = 고4IDX;
고4 = 고3; 고4IDX = 고3IDX;
고3 = 고2; 고3IDX = 고2IDX;
고2 = 고1; 고2IDX = 고1IDX;
고1 = C; 고1IDX = Index;
sBar = Index - 저1IDX; // 추세선 시작점의 위치, n봉전으로 표시
TL1 = TL_New(sDate[sBar],sTime[sBar],저1,sDate[0],sTime[0],고1);
TL_SetSize(TL1,1);
TL_SetColor(TL1,ReD);
tx1 = text_new(sDate[0],sTime[0],고1*(1+per/100),"●");
Text_SetStyle(tx1,2,1);
Text_SetColor(tx1,Red);
}
Else If 고1 < C Then // 1번 고점보다 높은 고가 출현
{
고1 = C; 고1IDX = Index;
TL_SetEnd(TL1,sDate[0],sTime[0],고1);
// 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임
Text_SetLocation(tx1,sDate[0],sTime[0],고1*(1+per/100));
}
/* 고점추세선 */
If 고2IDX[1] <> 고2IDX Then // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음
{
고추세최종 = 0; 고추세기울기 = 0; 고추세시작 = 0; 고추세봉개수 = 0;
If 고2 < 고3 Then
{
고추세기울기 = (고2 - 고3)/(고2IDX - 고3IDX);
고추세시작 = 고3;
고추세시작IDX = 고3IDX;
}
Else If 고2 < 고4 Then
{
고추세기울기 = (고2 - 고4)/(고2IDX - 고4IDX);
고추세시작 = 고4;
고추세시작IDX = 고4IDX;
}
Else If 고2 < 고5 Then
{
고추세기울기 = (고2 - 고5)/(고2IDX - 고5IDX);
고추세시작 = 고5;
고추세시작IDX = 고5IDX;
}
Else If 고2 < 고6 Then
{
고추세기울기 = (고2 - 고6)/(고2IDX - 고6IDX);
고추세시작 = 고6;
고추세시작IDX = 고6IDX;
}
Else If 고2 < 고7 Then
{
고추세기울기 = (고2 - 고7)/(고2IDX - 고7IDX);
고추세시작 = 고7;
고추세시작IDX = 고7IDX;
}
Else If 고2 < 고8 Then
{
고추세기울기 = (고2 - 고8)/(고2IDX - 고8IDX);
고추세시작 = 고8;
고추세시작IDX = 고8IDX;
}
Else If 고2 < 고9 Then
{
고추세기울기 = (고2 - 고9)/(고2IDX - 고9IDX);
고추세시작 = 고9;
고추세시작IDX = 고9IDX;
}
고추세봉개수 = Index - 고추세시작IDX;
고추세최종 = 고추세기울기 * 고추세봉개수 + 고추세시작;
}
Else If 고추세최종[1] > 0 Then
{
고추세최종 = 고추세기울기 * (Index - 고추세시작IDX) + 고추세시작;
}
If 저추세최종[1] > 0 Then
{
저추세최종 = 저추세기울기 * (Index - 저추세시작IDX) + 저추세시작;
}
최종변곡점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
최종저가 = C;
If 최종변곡점 == "고점" then
{
저9 = 저8; 저9IDX = 저8IDX;
저8 = 저7; 저8IDX = 저7IDX;
저7 = 저6; 저7IDX = 저6IDX;
저6 = 저5; 저6IDX = 저5IDX;
저5 = 저4; 저5IDX = 저4IDX;
저4 = 저3; 저4IDX = 저3IDX;
저3 = 저2; 저3IDX = 저2IDX;
저2 = 저1; 저2IDX = 저1IDX;
저1 = C; 저1IDX = Index;
sBar = Index - 고1IDX;
TL1 = TL_New(sDate[sBar],sTime[sBar],고1,sDate[0],sTime[0],저1);
TL_SetSize(TL1,1);
TL_SetColor(TL1,BluE);
tx1 = text_new(sDate[0],sTime[0],저1*(1-per/100),"●");
Text_SetStyle(tx1,2,0);
Text_SetColor(tx1,Blue);
}
Else If 저1 > C then
{
저1 = C; 저1IDX = Index;
TL_SetEnd(TL1,sDate[0],sTime[0],저1);
Text_SetLocation(TL1,sDate[0],sTime[0],저1*(1-per/100));
}
/* 저점추세선 */
If 저2IDX[1] <> 저2IDX Then
{
저추세최종 = 0; 저추세기울기 = 0; 저추세시작 = 0; 저추세봉개수 = 0;
If 저2 > 저3 and 저3 > 0 Then
{
저추세기울기 = (저2 - 저3)/(저2IDX - 저3IDX);
저추세시작 = 저3;
저추세시작IDX = 저3IDX;
}
Else If 저2 > 저4 and 저4 > 0 Then
{
저추세기울기 = (저2 - 저4)/(저2IDX - 저4IDX);
저추세시작 = 저4;
저추세시작IDX = 저4IDX;
}
Else If 저2 > 저5 and 저5 > 0 Then
{
저추세기울기 = (저2 - 저5)/(저2IDX - 저5IDX);
저추세시작 = 저5;
저추세시작IDX = 저5IDX;
}
Else If 저2 > 저6 and 저6 > 0 Then
{
저추세기울기 = (저2 - 저6)/(저2IDX - 저6IDX);
저추세시작 = 저6;
저추세시작IDX = 저6IDX;
}
Else If 저2 > 저7 and 저7 > 0 Then
{
저추세기울기 = (저2 - 저7)/(저2IDX - 저7IDX);
저추세시작 = 저7;
저추세시작IDX = 저7IDX;
}
Else If 저2 > 저8 and 저8 > 0 Then
{
저추세기울기 = (저2 - 저8)/(저2IDX - 저8IDX);
저추세시작 = 저8;
저추세시작IDX = 저8IDX;
}
Else If 저2 > 저9 and 저9 > 0 Then
{
저추세기울기 = (저2 - 저9)/(저2IDX - 저9IDX);
저추세시작 = 저9;
저추세시작IDX = 저9IDX;
}
저추세봉개수 = Index - 저추세시작IDX;
저추세최종 = 저추세기울기 * 저추세봉개수 + 저추세시작;
}
Else If 저추세최종[1] > 0 Then
{
저추세최종 = 저추세기울기 * (Index - 저추세시작IDX) + 저추세시작;
}
If 고추세최종[1] > 0 Then
{
고추세최종 = 고추세기울기 * (Index - 고추세시작IDX) + 고추세시작;
}
최종변곡점 = "저점";
}
즐거운 하루되세요
> 구호리 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 변곡점 상하 +/- 5% 위치에 점표시를 하고 싶습니다.
Input:length(30);
   Var:최종고가(0),최종저가(0),최종변곡점(""),처리구분(""),sBar(0),TL1(0),
        고추세기울기(0),고추세봉개수(0),고추세시작(0),고추세시작IDX(0),고추세최종(0),
        저추세기울기(0),저추세봉개수(0),저추세시작(0),저추세시작IDX(0),저추세최종(0);
    Var:고1(0),고2(0),고3(0),고4(0),고5(0),고6(0),고7(0),고8(0),고9(0),고10(0),
        저1(0),저2(0),저3(0),저4(0),저5(0),저6(0),저7(0),저8(0),저9(0),저10(0),
        고1IDX(0),고2IDX(0),고3IDX(0),고4IDX(0),고5IDX(0),
        고6IDX(0),고7IDX(0),고8IDX(0),고9IDX(0),고10IDX(0),
        저1IDX(0),저2IDX(0),저3IDX(0),저4IDX(0),저5IDX(0),
        저6IDX(0),저7IDX(0),저8IDX(0),저9IDX(0),저10IDX(0);
   var : t(0),ii(0),tx1(0);
#==========================================#
    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
       {
          고9 = 고8;    고9IDX = 고8IDX;
          고8 = 고7;    고8IDX = 고7IDX;
          고7 = 고6;    고7IDX = 고6IDX;
          고6 = 고5;    고6IDX = 고5IDX;
          고5 = 고4;    고5IDX = 고4IDX;
          고4 = 고3;    고4IDX = 고3IDX;
          고3 = 고2;    고3IDX = 고2IDX;
          고2 = 고1;    고2IDX = 고1IDX;
          고1 = C;      고1IDX = Index;
          sBar = Index - 저1IDX;  // 추세선 시작점의 위치, n봉전으로 표시
      TL1  = TL_New(sDate[sBar],sTime[sBar],저1,sDate[0],sTime[0],고1); 
          TL_SetSize(TL1,1);
          TL_SetColor(TL1,ReD);
              tx1 = text_new(sDate[0],sTime[0],고1+0.5,"●");
              Text_SetStyle(tx1,2,1);
              Text_SetColor(tx1,Red);
       }
       Else If 고1 < C Then                    // 1번 고점보다 높은 고가 출현
   {
          고1 = C;  고1IDX = Index;
          TL_SetEnd(TL1,sDate[0],sTime[0],고1);
          // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 
              Text_SetLocation(tx1,sDate[0],sTime[0],고1+0.5);
       }
    /* 고점추세선 */   
       If 고2IDX[1] <> 고2IDX Then  // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음
   {
          고추세최종 = 0; 고추세기울기 = 0; 고추세시작 = 0; 고추세봉개수 = 0;
          If 고2 < 고3 Then 
          {
             고추세기울기  = (고2 - 고3)/(고2IDX - 고3IDX);
             고추세시작    = 고3;
             고추세시작IDX = 고3IDX;
          }
          Else If 고2 < 고4 Then 
          {
             고추세기울기  = (고2 - 고4)/(고2IDX - 고4IDX);
             고추세시작    = 고4;
             고추세시작IDX = 고4IDX;
          }
          Else If 고2 < 고5 Then 
          {
             고추세기울기  = (고2 - 고5)/(고2IDX - 고5IDX);
             고추세시작    = 고5;
             고추세시작IDX = 고5IDX;
          }
          Else If 고2 < 고6 Then 
          {
             고추세기울기  = (고2 - 고6)/(고2IDX - 고6IDX);
             고추세시작    = 고6;
             고추세시작IDX = 고6IDX;
          }
          Else If 고2 < 고7 Then 
          {
             고추세기울기  = (고2 - 고7)/(고2IDX - 고7IDX);
             고추세시작    = 고7;
             고추세시작IDX = 고7IDX;
          }
          Else If 고2 < 고8 Then 
          {
             고추세기울기  = (고2 - 고8)/(고2IDX - 고8IDX);
             고추세시작    = 고8;
             고추세시작IDX = 고8IDX;
          }
          Else If 고2 < 고9 Then 
          {
             고추세기울기  = (고2 - 고9)/(고2IDX - 고9IDX);
             고추세시작    = 고9;
             고추세시작IDX = 고9IDX;
          }
          고추세봉개수 = Index - 고추세시작IDX;
          고추세최종   = 고추세기울기 * 고추세봉개수 + 고추세시작;
       }
       Else If 고추세최종[1] > 0 Then
       {
          고추세최종 = 고추세기울기 * (Index - 고추세시작IDX) + 고추세시작;
    
       }
       If 저추세최종[1] > 0 Then
       {
          저추세최종 = 저추세기울기 * (Index - 저추세시작IDX) + 저추세시작;
    
       }
       최종변곡점 = "고점";
    }
    #==========================================#
If 처리구분 == "저점처리" Then 
    {
       최종저가 = C;
       If 최종변곡점 == "고점" then 
       {
          저9 = 저8;    저9IDX = 저8IDX;
          저8 = 저7;    저8IDX = 저7IDX;
          저7 = 저6;    저7IDX = 저6IDX;
          저6 = 저5;    저6IDX = 저5IDX;
          저5 = 저4;    저5IDX = 저4IDX;
          저4 = 저3;    저4IDX = 저3IDX;
          저3 = 저2;    저3IDX = 저2IDX;
          저2 = 저1;    저2IDX = 저1IDX;
          저1 = C;      저1IDX = Index;
          sBar = Index - 고1IDX;
          TL1  = TL_New(sDate[sBar],sTime[sBar],고1,sDate[0],sTime[0],저1); 
          TL_SetSize(TL1,1);
          TL_SetColor(TL1,BluE);
              tx1 = text_new(sDate[0],sTime[0],저1-0.5,"●");
              Text_SetStyle(tx1,2,0);
              Text_SetColor(tx1,Blue);
       }
       Else If 저1 > C then 
       {
          저1 = C;      저1IDX = Index;
          TL_SetEnd(TL1,sDate[0],sTime[0],저1);
              Text_SetLocation(TL1,sDate[0],sTime[0],저1-0.5);
       }
    /* 저점추세선 */   
       If 저2IDX[1] <> 저2IDX Then
       {
          저추세최종 = 0; 저추세기울기 = 0; 저추세시작 = 0; 저추세봉개수 = 0;
     If 저2 > 저3 and 저3 > 0 Then  
          { 
             저추세기울기  = (저2 - 저3)/(저2IDX - 저3IDX); 
             저추세시작    = 저3; 
             저추세시작IDX = 저3IDX; 
          } 
          Else If 저2 > 저4 and 저4 > 0 Then  
          { 
             저추세기울기  = (저2 - 저4)/(저2IDX - 저4IDX); 
             저추세시작    = 저4; 
             저추세시작IDX = 저4IDX; 
          } 
          Else If 저2 > 저5 and 저5 > 0 Then  
          { 
             저추세기울기  = (저2 - 저5)/(저2IDX - 저5IDX); 
             저추세시작    = 저5; 
             저추세시작IDX = 저5IDX; 
          } 
          Else If 저2 > 저6 and 저6 > 0 Then  
          { 
             저추세기울기  = (저2 - 저6)/(저2IDX - 저6IDX); 
             저추세시작    = 저6; 
             저추세시작IDX = 저6IDX; 
          } 
          Else If 저2 > 저7 and 저7 > 0 Then  
          { 
             저추세기울기  = (저2 - 저7)/(저2IDX - 저7IDX); 
             저추세시작    = 저7; 
             저추세시작IDX = 저7IDX; 
          } 
          Else If 저2 > 저8 and 저8 > 0 Then  
          { 
             저추세기울기  = (저2 - 저8)/(저2IDX - 저8IDX); 
             저추세시작    = 저8; 
             저추세시작IDX = 저8IDX; 
          } 
          Else If 저2 > 저9 and 저9 > 0 Then  
          { 
             저추세기울기  = (저2 - 저9)/(저2IDX - 저9IDX); 
             저추세시작    = 저9; 
             저추세시작IDX = 저9IDX; 
          } 
          저추세봉개수 = Index - 저추세시작IDX; 
          저추세최종   = 저추세기울기 * 저추세봉개수 + 저추세시작;
       }
       Else If 저추세최종[1] > 0 Then
       {
          저추세최종 = 저추세기울기 * (Index - 저추세시작IDX) + 저추세시작; 
    
       }
       If 고추세최종[1] > 0 Then
       {
          고추세최종 = 고추세기울기 * (Index - 고추세시작IDX) + 고추세시작;
   
       }   
       최종변곡점 = "저점";
        
    }