답변완료
문의드립니다
안녕하세요 수고하십니다
아래수식은 예전에 만들어 주신 일명 지그재그 지표입니다
수식가공하고십습니다 검색식으로요
예를들기위해서 가 나 다 로 설명하겠습니다
가 첫번재 저점 = 저점조건 = 5-1-5에서 가운데 저가가 좌측 5봉과 우측 5봉 저가보다 낮다
나 = 고점조건 = 5-1-5에서 가운데 고가가 좌측 5봉과 우측 5봉 고가보다 높다
다 두번재 저점 = 저점조건 = 5-1-5에서 가운데 저가가 좌측 5봉과 우측 5봉 저가보다 낮다
조건입니다 나에 고저 과 다의 저점을 빼기한 값을 가의 저가에 더하기한 값이
기준입니다 기준가에 현재가가 2%근접하면 검색되는식 입니다
미리감사드립니다
Input:barCnt(5);
Var:j(0),turnPntBit(""),TL1(0),TL2(0),TL3(0),T(0);
Array:valArr[10](0),barArr[10](0),turnPntArr[10]("");
// 봉이 새로 생겼으므로 봉개수 관리하는 변수들의 봉개수 값 1씩 증가
For j = 0 To 9 {
barArr[j] = barArr[j] + 1;
}
// 고점조건 = 5-1-5에서 가운데 고가가 좌측 5봉과 우측 5봉 고가보다 높다
// 저점조건 = 5-1-5에서 가운데 저가가 좌측 5봉과 우측 5봉 저가보다 낮다
Condition1 = Highest(H,barCnt)[barCnt+1] <= H[barCnt] and H[barCnt] > Highest(H,barCnt);
Condition2 = Lowest(L,barCnt)[barCnt+1] >= L[barCnt] and L[barCnt] < Lowest(L,barCnt);
// 전환점구분 null값으로 초기화;
// if 고점조건, 저점조건 동시 만족시 then
// if 이전 고점,저점 범위를 모두 벗어났을 때
// 전환점구분 = 고저점;
// else if 이전 고점을 갱신했다면 전환점구분 = 고점;
// else if 이전 저점을 갱신했다면 전환점구분 = 저점;
// else if 전환점배열의 현재(배열상 1번째)값이 고점이면 전환점구분 = 저점;
// else if 전환점배열의 현재 값이 저점이면 전환점구분 = 고점;
// else if 고점조건 만족하면 전환점구분 = 고점;
// else if 저점조건 만족하면 전환전구분 = 저점;
turnPntBit = "";
If Condition1 and Condition2 Then {
If Max(valArr[1],valArr[2]) < H[barCnt] and Min(valArr[1],valArr[2]) > L[barCnt] Then
turnPntBit = "HiLo";
Else If Max(valArr[1],valArr[2]) < H[barCnt] Then turnPntBit = "Hi";
Else If Min(valArr[1],valArr[2]) > L[barCnt] Then turnPntBit = "Lo";
Else 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 전환점구분에 값이 있을 때만 아래 실행, 없으면 통과
If turnPntBit <> "" Then
{
// if 전환점구분이 고저점이면 then
// 이전 파동은 연장시키고 아래에서 새로이 파동선을 추가토록 한다.
If turnPntBit == "HiLo" Then
{
valArr[1] = IFF(turnPntArr[1] == "Hi",H[barCnt],L[barCnt]);
barArr[1] = barCnt;
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
If turnPntArr[1] == "Hi" Then
turnPntBit = "Lo";
Else
turnPntBit = "Hi";
}
// if 신규 전환점구분이 현재(전환점배열 1번째)와 다르면 then
// 배열값들을 이전값으로 Move;
If turnPntBit <> turnPntArr[1] Then
{
for j = 8 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[barCnt]) or
(turnPntBit == "Lo" and valArr[1] > L[barCnt]))) Then {
// 값 배열에는 고점 또는 저점을 대입;
// 봉개수 배열에는 입력변수의 봉개수 대입;
// 전환점 배열에 전환점구분값을 대입;
valArr[1] = IFF(turnPntBit == "Hi",H[barCnt],L[barCnt]);
barArr[1] = barCnt;
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] == "Hi" Then{//and valArr[1] > valArr[3] Then{
var1 = valArr[2]-abs(valArr[1]-valArr[3]);
var2 = blue;
}
if turnPntArr[1][0] == "Lo" Then{//and valArr[1] < valArr[3] Then{
var1 = valArr[2]+abs(valArr[1]-valArr[3]);//;-PriceScale;
var2 = red;
}
TL2 = TL_New(sDate[barArr[2]],sTime[barArr[2]],var1,sDate[barArr[1]],sTime[barArr[1]],var1);
TL_SetColor(tl2,var2);
}
Else
{
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
}
}
}
TL_SetSize(TL1,1);
TL_SetColor(TL1,GREEN);
2021-01-26
1398
글번호 145825
검색
답변완료
수식 부탁드립니다
수고하십니다
아래와 같이 수식을 작성했는데 신호가 정확이 나오지 않고 10분 ~ 20분 빠르거나 늦거나
아니면 거르는 경우도 있어 잘못 작성 되었는지 확인 좀 부탁 드리겠습니다
항목 6개중 4개가 AND 되면 신호가 나오도록 하는 의도입니다
감사합니다
Input : period(2),p(0);
Input : af11(0.015),AFMAX11(0.2),af21(0.015),AFMAX21(0.2),af31(0.015),AFMAX31(0.2);
Input : af41(0.015),AFMAX41(0.2),af51(0.015),AFMAX51(0.2),af61(0.015),AFMAX61(0.2);
Var :v11(0,data1),v21(0,data1),v31(0,data1),v41(0,data1),v51(0,data1),v61(0,data1);
v21 = data2(csar(af21,AFMAX21));
v31 = data3(csar(af31,AFMAX31));
v41 = Data4(csar(af41,AFMAX41));
v51 = Data5(csar(af51,AFMAX51));
v61 = Data6(csar(af61,AFMAX61));
if ( Data1(C > v11) and Data2(C > v21) and Data3(C > v31) and Data4(C > v41) ) or
( Data1(C > v11) and Data2(C > v21) and Data3(C > v31) and Data5(C > v51) ) or
( Data1(C > v11) and Data2(C > v21) and Data3(C > v31) and Data6(C > v61) ) or
( Data1(C > v11) and Data3(C > v31) and Data4(C > v41) and Data5(C > v51) ) or
( Data1(C > v11) and Data3(C > v31) and Data4(C > v41) and Data6(C > v61) ) or
( Data2(C > v21) and Data3(C > v31) and Data4(C > v41) and Data5(C > v51) ) or
( Data2(C > v21) and Data3(C > v31) and Data4(C > v41) and Data6(C > v61) ) or
( Data2(C > v21) and Data4(C > v41) and Data5(C > v51) and Data6(C > v61) ) or
( Data3(C > v31) and Data4(C > v41) and Data5(C > v51) and Data6(C > v61) ) Then
buy("매수");
if ( Data1(C < v11) and Data2(C < v21) and Data3(C < v31) and Data4(C < v41) ) or
( Data1(C < v11) and Data2(C < v21) and Data3(C < v31) and Data5(C < v51) ) or
( Data1(C < v11) and Data2(C < v21) and Data3(C < v31) and Data6(C < v61) ) or
( Data1(C < v11) and Data3(C < v31) and Data4(C < v41) and Data5(C < v51) ) or
( Data1(C < v11) and Data3(C < v31) and Data4(C < v41) and Data6(C < v61) ) or
( Data2(C < v21) and Data3(C < v31) and Data4(C < v41) and Data5(C < v51) ) or
( Data2(C < v21) and Data3(C < v31) and Data4(C < v41) and Data6(C < v61) ) or
( Data2(C < v21) and Data4(C < v41) and Data5(C < v51) and Data6(C < v61) ) or
( Data3(C < v31) and Data4(C < v41) and Data5(C < v51) and Data6(C < v61) ) Then
SELL("매도");
2021-01-26
982
글번호 145823
시스템
답변완료
C 라는 데이터가 헷갈립니다. (종가)
제가 2010년1월1부터 현재까지 종가들을 취합해서
추세선을 그리려고 합니다.
그런데 C[1]이라는 값은 시뮬레이션 차트에 그려진 봉들중에 오른쪽에서 2번째로 있는
봉의 종가값으로 알고있는데요.
그래서 제가 진짜 C[1]의 값이 오른쪽 2번째 종가값이 맞는지 확인을 하려고 코드를 작성했습니다.
var : abc(0),t(""),a(0);
abc = C[1];
t = NumToStr(abc,0);
a = Text_New(20210111,110000,80000, t);
Text_SetSize(a,40);
위 코드에 대해 설명을 드리자면,
2021년 1월 11일 11시 80000원 좌표에 C[1]의 값을 출력하는 코드입니다.
보시다시피 어떤 숫자들이 겹쳐서 출력되는걸 보실 수 있습니다.
그렇다는 것은 C[1]이 앞서 가정했던 오른쪽 2번째 종가값이 아니고 어떤 값들의 집합인 것 같은데요. 이게 제 수준에선 이해가 안되서요. 제가 분명히 지금 어딘가에서부터 이해가 안되고 있는 것 같아요. 도와주시면 감사하겠습니다
2021-01-26
1092
글번호 145813
지표
답변완료
디버깅하면 모든시간에 대해서 변수가 출력되버립니다.
var : a("안녕");
Text_New(20210111,110000,80000,a);
MessageLog("%s",a);
이런 코드가 있는데요. 제가 생각하기에
디버그를 하면 출력값이
안녕 이라고 1개만 나와야할텐데,
300개의 바에 대해서 각 시간마다 안녕이라고 출력되버립니다.
그렇다는 것은
질문: 제가 a라는 변수를 선언했지만 사실상 a는 동일한 값이 300개가 있는 배열으로 정의된건가요? 300개의 공간이 있는 배열인건가요??
2021-01-26
933
글번호 145808
지표