커뮤니티
질문드립니다.
2019-01-11 00:27:14
247
글번호 125137
1. 현재 고가(value99)가 형성된 전일값이 그 다음날에도 이어지네요.
사진과 같이 당일초기화되어 O자로 표시되는 당일 첫파동에만 표시되게 하고싶습니다.
2. 위 수정된 식이 data2의 고가값을 data1상에 출력할 수 있게 설정하고 싶습니다.
3. 아래 atr청산식입니다. data2에서 고가와 -atr값으로 산정해 exitlong신호를 내고싶습니다.
if MarketPosition() == 1 then
{
exitlong("CHDR Exit",Atstop,highest(H,barssinceentry)-ATR(ATRperiod)*ATRS);
}
//
1과 2의 식입니다. 감사합니다.
Input:barCnt(10);
Var:j(0),turnPntBit(""),TL1(0),TL2(0);
Array:valArr[10](0),barArr[10](0),turnPntArr[10]("");
var : count1(0),count2(0), idx(0);
if bdate != bdate[1] Then
{
Condition99 = false;
count1 = 0;
count2 = 0;
Value1 = 0;
Value2 = 0;
}
For j = 0 To 9
{
barArr[j] = barArr[j] + 1;
}
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);
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 turnPntBit <> "" 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 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 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 bdate != bdate[1] Then{
value99 = 0;
}
If turnPntArr[1][1] <> turnPntArr[1][0] Then
{
if Condition99 == false and turnPntBit == "Hi" Then
{
Condition99 = true;
value99 = valArr[1];
}
}
Else
{
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
}
}
}
/////////////////////////고가 형성 계산종료////////////////////////////
Plot1(value99,"고가");
- 1. 루멘스_고가.png (0.04 MB)
답변 1
예스스탁 예스스탁 답변
2019-01-11 09:50:17
안녕하세요
예스스탁입니다.
1
고점이 사후적으로 판단되는 부분인데 현재수식은 고점을 최초 판단하는 봉이 기준입니다.
날짜가 변경되면 value99는 0이고 고점의 날짜가 오늘인 경우에만 값을 저장하게 변경했습니다.
다만 올려주신 수식에서 value99는 단순 값을 저장하기 위함입니다.
날자가 변경되면 0이고 오늘 값을 저장하면 해당 값으로 그리게 됩니다.
일반 plot은 일반 선그래프일때 이전에 출력된 값을 지울수는 없습니다.
그러므로 condition99가 만족할때만 그리게 작성하고
속성에서 일자그래프나 점그래프로 설정하고 보셔야 합니다.
이전에 답변드린 추세선으로 그리는 내용도 수정해 1-2로 같이 올려드립니다.
1-1
Input:barCnt(10);
Var:j(0),turnPntBit(""),TL1(0),TL2(0);
Array:valArr[10](0),barArr[10](0),turnPntArr[10]("");
var : count1(0),count2(0), idx(0);
if bdate != bdate[1] Then
{
Condition99 = false;
count1 = 0;
count2 = 0;
Value1 = 0;
Value2 = 0;
value99 = 0;
}
For j = 0 To 9
{
barArr[j] = barArr[j] + 1;
}
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);
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 turnPntBit <> "" 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 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 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 turnPntArr[1][1] <> turnPntArr[1][0] Then
{
if Condition99 == false and turnPntBit == "Hi" and sDate[barArr[1]] == sdate Then
{
Condition99 = true;
value99 = valArr[1];
}
}
Else
{
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
}
}
}
/////////////////////////고가 형성 계산종료////////////////////////////
if Condition99 == true then
Plot1(value99,"고가");
1-2
Input:barCnt(10);
Var:j(0),turnPntBit(""),TL1(0),TL2(0);
Array:valArr[10](0),barArr[10](0),turnPntArr[10]("");
if bdate != bdate[1] Then
{
Condition99 = false;
TL_Delete(TL2);
}
// 봉이 새로 생겼으므로 봉개수 관리하는 변수들의 봉개수 값 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 Condition99 == false and turnPntBit == "Hi" and sDate[barArr[1]] == sdate Then
{
TL_Delete(TL2);
TL2 = TL_New(sDate[barArr[1]],sTime[barArr[1]],valArr[1],sdate,stime,valArr[1]);
TL_SetExtRight(TL2,true);
Condition99 = true;
value99 = valArr[1];
}
}
Else
{
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
}
}
}
TL_SetSize(TL1,2);
TL_SetColor(TL1,BLACK);
2
해당식 조건충족하면 날자와 봉갯수를 저장해서 사용하는대
data2로 변경해서 해당 값을 저장해서 그리면 내용이 data1에는 저장된 날짜와 시간이 봉이 없을수 있어
출력지점이 상이하게 됩니다. 추세선으로 출력되는 식은 따로 마춰 드리기 어렵습니다.
기존의 올려주신 식은 단순히 value99값만 이용하므로 해당 수식만 변경해 드립니다.,
Input:barCnt(10);
Var:j(0,data2),turnPntBit("",data2),TL1(0,data2),TL2(0,data2);
var : cond1(false,data2),cond2(false,data2),cond99(false,data2),Val1(0,data2),Val2(0,data2),Val99(0,data2);
Array:valArr[10](0,data2),barArr[10](0,data2),turnPntArr[10]("",data2);
var : count1(0,data2),count2(0,data2), idx(0,data2);
if data2(bdate != bdate[1]) Then
{
Cond99 = false;
count1 = 0;
count2 = 0;
Val1 = 0;
Val2 = 0;
Val99 = 0;
}
For j = 0 To 9
{
barArr[j] = barArr[j] + 1;
}
Cond1 = data2(Highest(H,barCnt)[barCnt+1] <= H[barCnt] and H[barCnt] > Highest(H,barCnt));
Cond2 = data2(Lowest(L,barCnt)[barCnt+1] >= L[barCnt] and L[barCnt] < Lowest(L,barCnt));
turnPntBit = "";
If Cond1 and Cond2 Then
{
If data2(Max(valArr[1],valArr[2]) < H[barCnt] and Min(valArr[1],valArr[2]) > L[barCnt]) Then
turnPntBit = "HiLo";
Else If data2(Max(valArr[1],valArr[2]) < H[barCnt]) Then turnPntBit = "Hi";
Else If data2(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 Cond1 Then turnPntBit = "Hi";
Else If Cond2 Then turnPntBit = "Lo";
If turnPntBit <> "" Then
{
If turnPntBit == "HiLo" Then
{
valArr[1] = data2(IFF(turnPntArr[1] == "Hi",H[barCnt],L[barCnt]));
barArr[1] = barCnt;
If turnPntArr[1] == "Hi" Then
turnPntBit = "Lo";
Else
turnPntBit = "Hi";
}
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 data2(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] = data2(IFF(turnPntBit == "Hi",H[barCnt],L[barCnt]));
barArr[1] = barCnt;
turnPntArr[1] = turnPntBit;
If turnPntArr[1][1] <> turnPntArr[1][0] Then
{
if data2(Cond99 == false and turnPntBit == "Hi" and sDate[barArr[1]] == sdate) Then
{
Cond99 = true;
Val99 = valArr[1];
}
}
}
}
/////////////////////////고가 형성 계산종료////////////////////////////
if Cond99 == true then
Plot1(Val99,"고가");
3
참조데이터로 변경하면 봉완성시로만 가능합니다.
var : H2(0,data1);
H2 = data2(H);
if MarketPosition() == 1 and data2(L) <= highest(H2,barssinceentry)-data2(ATR(ATRperiod)*ATRS) then
{
exitlong("CHDR Exit");
}
즐거운 하루되세요
> stockric 님이 쓴 글입니다.
> 제목 : 질문드립니다.
> 1. 현재 고가(value99)가 형성된 전일값이 그 다음날에도 이어지네요.
사진과 같이 당일초기화되어 O자로 표시되는 당일 첫파동에만 표시되게 하고싶습니다.
2. 위 수정된 식이 data2의 고가값을 data1상에 출력할 수 있게 설정하고 싶습니다.
3. 아래 atr청산식입니다. data2에서 고가와 -atr값으로 산정해 exitlong신호를 내고싶습니다.
if MarketPosition() == 1 then
{
exitlong("CHDR Exit",Atstop,highest(H,barssinceentry)-ATR(ATRperiod)*ATRS);
}
//
1과 2의 식입니다. 감사합니다.
Input:barCnt(10);
Var:j(0),turnPntBit(""),TL1(0),TL2(0);
Array:valArr[10](0),barArr[10](0),turnPntArr[10]("");
var : count1(0),count2(0), idx(0);
if bdate != bdate[1] Then
{
Condition99 = false;
count1 = 0;
count2 = 0;
Value1 = 0;
Value2 = 0;
}
For j = 0 To 9
{
barArr[j] = barArr[j] + 1;
}
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);
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 turnPntBit <> "" 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 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 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 bdate != bdate[1] Then{
value99 = 0;
}
If turnPntArr[1][1] <> turnPntArr[1][0] Then
{
if Condition99 == false and turnPntBit == "Hi" Then
{
Condition99 = true;
value99 = valArr[1];
}
}
Else
{
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
}
}
}
/////////////////////////고가 형성 계산종료////////////////////////////
Plot1(value99,"고가");