예스스탁
예스스탁 답변
2024-07-11 14:43:11
> 여유로운투자 님이 쓴 글입니다.
> 제목 : 지표 계산 문의드립니다.
> var:n(2); // SwingHigh, SwingLow에서 좌우 날개에 해당하는 봉의 개수
var : 파동선두께(2) // 파동선의 두께. 0 ~ 5
;
var : dayH(0),dayL(0);
var : nowH(0),nowL(0);
var : strongH(0),strongL(0);
Var:j(0),jj(0),HH(0),LL(0),TL_H(0),TL_L(0),TL_L_1(0),TL_L_2(0),TL_L_3(0),TL_H_1(0),TL_H_2(0),TL_H_3(0),최종꼭지점(""),처리구분("");
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
var : t1(0),t2(0);
if Index==0 Then
ClearDebug;
파동선두께 = 1;
#==========================================#
HH = H; // IFF(조건식,참일 때 결과,거짓일 때 결과)
LL = L;
// SwingHigh 정의
Condition1 = Highest(HH,n)[n+1] <= HH[n] and HH[n] > Highest(HH,n);
// SwingLow 정의
Condition2 = Lowest (LL,n)[n+1] >= LL[n] and LL[n] < Lowest (LL,n);
처리구분 = "";
If Condition1 and Condition2 Then
// 긴 장대봉에서는 SwingHigh와 SwingLow가 동시에 나타날 수 있다.
{
If 최종꼭지점 == "저점" Then
{
If 저[1,1] > LL[n] Then 처리구분 = "저점처리";
Else 처리구분 = "고점처리";
}
Else If 최종꼭지점 == "고점" Then
{
If 고[1,1] < HH[n] Then 처리구분 = "고점처리";
Else 처리구분 = "저점처리";
}
}
Else If Condition1 and 저[1,1] < HH[n] Then 처리구분 = "고점처리";
// SwingHigh 조건이 돼도 저점보다 낮으면 가격이 계속 하락중이므로 무시한다.
Else If Condition2 and 고[1,1] > LL[n] Then 처리구분 = "저점처리";
// SwingLow 조건이 돼도 고점보다 높으면 가격이 계속 상승중이므로 무시한다.
//==========================================
If 처리구분 == "고점처리" Then
{
If 최종꼭지점 == "저점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4 // 2차원 배열이므로 For문안에 또 For문이 올 수 있다.
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = HH[n]; // 가격
고[1,2] = Index - n; // Index
고[1,3] = sDate[n]; // 날짜
고[1,4] = sTime[n]; // 시각
TL_H = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); // 신규 추세선 생성
TL_SetSize(TL_H,파동선두께);
TL_SetColor(TL_H,Red);
}
Else If 고[1,1] < HH[n] Then // 고점 다음에 다시 고점이 온 경우로 신규 고점이 더 높아야 의미가 있다.
{
고[1,1] = HH[n];
고[1,2] = Index - n;
고[1,3] = sDate[n];
고[1,4] = sTime[n];
TL_SetEnd(TL_H,고[1,3],고[1,4],고[1,1]);
// 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임
TL_SetSize(TL_H,파동선두께);
}
최종꼭지점 = "고점"; // 이전 꼭지점이 무엇인지 판단하기 쉽도록 변수에 상태를 저장
}
//==========================================
If 처리구분 == "저점처리" Then
{
If 최종꼭지점 == "고점" then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = LL[n];
저[1,2] = Index - n;
저[1,3] = sDate[n];
저[1,4] = sTime[n];
TL_L = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_H_3 = TL_H_2;
TL_H_2 = TL_H_1;
TL_H_1 = TL_H;
TL_SetSize(TL_L,파동선두께);
TL_SetColor(TL_L,Blue);
//var1 = NthHighest(1,strongL,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n];
//var2 = NthHighest(2,strongL,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n];
//var3 = NthHighest(3,strongL,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n];
Var13 = 고[1,2]-저[2,2]+1;
var14 = 저[1,2]-고[1,2]+n;
t1 = 고[1,2]-저[2,2]+1;
t2 = 저[1,2]-고[1,2]+n;
//*
MessageLog("%.2f %.2f %.2f %.f %.f %.f %.f %.f %.2f ",Asks/Bids,고[1,2]-저[2,2]+1,
저[1,2]-고[1,2]+n,sTime,
고[1,3],고[1,4],
저[2,3],저[2,4],
NthHighest(1,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]);
//*/
//var1 = NthHighest(1,Asks/Bids,Var13)[var14];
var2 = NthHighest(2,Asks/Bids,Var13)[var14];
var3 = NthHighest(3,Asks/Bids,Var13)[var14];
//var1 = NthHighest(1,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n];
//var2 = NthHighest(2,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n];
//var3 = NthHighest(3,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n];
MessageLog("%.2f %.2f %.2f %.f %.f %.f %.f %.f %.f %.f %.f %.f %.f %.f %.f %.f" ,var1,Var2,Var3,var11,Var12
,NthHighestBar(1,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n],
NthHighestBar(2,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]
,NthHighestBar(3,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]
,NthHighestBar(1,Asks/Bids,Var13)[var14]
,NthHighestBar(2,Asks/Bids,Var13)[var14]
,NthHighestBar(3,Asks/Bids,Var13)[var14]
,NthHighestBar(1,Asks/Bids,t1)[t2]
,NthHighestBar(2,Asks/Bids,t1)[t2]
,NthHighestBar(3,Asks/Bids,t1)[t2]
);
}
Else If 저[1,1] > LL[n] then
{
저[1,1] = LL[n];
저[1,2] = Index - n;
저[1,3] = sDate[n];
저[1,4] = sTime[n];
TL_SetEnd(TL_L,저[1,3],저[1,4],저[1,1]);
TL_SetSize(TL_L,파동선두께);
}
최종꼭지점 = "저점";
}
질문1
제룡전기 1분봉 1300봉 기준으로 해당지표를돌려보면 24년7월8일 9시59분에 결과값이 매우이상합니다.
,NthHighestBar(1,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n],
NthHighestBar(2,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]
,NthHighestBar(3,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]
와
,NthHighestBar(1,Asks/Bids,Var13)[var14]
,NthHighestBar(2,Asks/Bids,Var13)[var14]
,NthHighestBar(3,Asks/Bids,Var13)[var14]
와
,NthHighestBar(1,Asks/Bids,t1)[t2]
,NthHighestBar(2,Asks/Bids,t1)[t2]
,NthHighestBar(3,Asks/Bids,t1)[t2]
는 모두 같은 값이출력되어야하는데
16 17 15 로 출력되고
2 0 3
2 0 3 이렇게 출력됩니다.
매우이상합니다
이런식으로 되면 어떻게 수식을작성해야되는지막막합니다.
해당 구간에서는
,NthHighestBar(1,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n],
NthHighestBar(2,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]
,NthHighestBar(3,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]
결과값이 맞는걸로나오는데
이게 아니라 다른종목에서는 반대의 결과로
,NthHighestBar(1,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n],
NthHighestBar(2,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]
,NthHighestBar(3,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]
값이 틀리고
변수로 저장해서 한게 맞는케이스가 간혹나옵니다
디버깅하는데 한계가있는데 디버깅해주십시오
제가 잘못사용하는건지...
아님 프로그램에 버그가있는건지궁금합니다.
질문2
제룡전기 1분봉 1300봉 기준으로 해당지표를돌려보면 24년7월10일 9시9분에 결과값이 매우이상합니다.
0.0 1..7 1.#R 이렇게나오는데요
여기에는 이런 값이 나올수없을뿐더러 이렇게 1.#R로 계산이되는일은 없어야되는곳인데 이렇게 값이 완전다르거나 없는값으로 나오는경우도 많습니다.
확인 부탁드리빈다.