예스스탁
예스스탁 답변
2025-03-26 17:46:07
안녕하세요
예스스탁입니다.
1
ShortDownTrendLineID = TL_New(Date[StartShortDownTrendBar], Time[StartShortDownTrendBar], High[StartShortDownTrendBar],
Date[LastShortDownTrendBar], Time[LastShortDownTrendBar], High[LastShortDownTrendBar]);
작성하신 수식에서 StartShortDownTrendBar, LastShortDownTrendBar 변수가 값이 음수입니다.
예스랭귀지에서 이전봉 지정은 양수로 지정하셔야 합니다. [1]이면 1봉전,[2]는 2봉전입니다.
[-1]과 같이 음수로 지정하면 값이 nan이 됩니다.
위 문장에 해당 변수를 절대값 처리하면 첨부된 그림과 같이 선이 표시됩니다.
2
StartShortDownTrendBar, LastShortDownTrendBar가 조건만족후 경과 한 봉수이면
StartShortDownTrendBar = StartShortDownTrendBar + 1;
LastShortDownTrendBar = LastShortDownTrendBar + 1;
1씩 더하게 작성하셔야 합니다.
3
function getTotalCandles Numeric
// 캔들 갯수를 저장할 변수 선언
var: candleCount(0);
candleCount=Index+1;
getTotalCandles=candleCount;
Endfunction
var: totalCandles(0), getTotalCandles(0);
totalCandles = getTotalCandles();
// 하락 추세선 (단기)
Inputs:
ChartCandles(500),
ShortPeriod(60),
ShortUpColor(Red), // 단기 상승 추세선 색상: 붉은색
ShortDownColor(Blue), // 단기 하락 추세선 색상: 파란색
ShortLineWidth(2);
var: Candle_Condition(0), ShortDayCount(0), HighestShortDay(0), N2HighestShortDay(0),
ShortUpTrendLineID(0), ShortDownTrendLineID(0),
StartShortDownTrendBar(0), LastShortDownTrendBar(0),
HighestShortDownTrendBar(0), LowestShortDownTrendBar(0),
N2HighestShortDownTrendBar(0), N2LowestShortDownTrendBar(0),
StartShortDownTrendPrice(0), LastShortDownTrendPrice(0),
N2HighestShortDownTrendPrice(0), N2LowestShortDownTrendPrice(0),
HighestShortDownTrendPrice(0), LowestShortDownTrendPrice(0),
N2HighestShortSearchDay(0);
Candle_Condition = ChartCandles - ShortPeriod;
If totalCandles >= Candle_Condition Then
{
ShortDayCount = totalCandles - Candle_Condition;
If totalCandles == ChartCandles Then
{
StartShortDownTrendPrice = Highest(High, ShortPeriod);
For HighestShortDay = ShortPeriod - 1 DownTo 1
{
If High[HighestShortDay] == StartShortDownTrendPrice Then
{
StartShortDownTrendBar = HighestShortDay;
N2HighestShortSearchDay = HighestShortDay - 1;
}
}
N2HighestShortDownTrendPrice = Highest(High, N2HighestShortSearchDay);
LastShortDownTrendPrice = N2HighestShortDownTrendPrice;
For N2HighestShortDay = N2HighestShortSearchDay DownTo 1
{
If High[N2HighestShortDay] == N2HighestShortDownTrendPrice Then
{
N2HighestShortDownTrendBar = ChartCandles - N2HighestShortDay;
LastShortDownTrendBar = N2HighestShortDay;
}
}
}
If ShortDownTrendLineID > 0 Then
{
TL_Delete(ShortDownTrendLineID);
}
StartShortDownTrendBar = StartShortDownTrendBar - 1;
LastShortDownTrendBar = LastShortDownTrendBar - 1;
//StartShortDownTrendBar = 23;
//LastShortDownTrendBar = 7;
MessageLog("**고점일=%.f, **고점가격=%.f", StartShortDownTrendBar, StartShortDownTrendPrice);
MessageLog("다음 고점일=%.f, **다음 고점가격=%.f", LastShortDownTrendBar, LastShortDownTrendPrice);
ShortDownTrendLineID = TL_New(Date[abs(StartShortDownTrendBar)], Time[abs(StartShortDownTrendBar)], High[abs(StartShortDownTrendBar)],
Date[abs(LastShortDownTrendBar)], Time[abs(LastShortDownTrendBar)], High[abs(LastShortDownTrendBar)]);
TL_SetColor(ShortDownTrendLineID, ShortDownColor);
TL_SetSize(ShortDownTrendLineID, ShortLineWidth);
TL_SetExtRight(ShortDownTrendLineID, True);
}
즐거운 하루되세요
> 주식킹 님이 쓴 글입니다.
> 제목 : TL_New()함수 내용 확인 부탁드립니다.
> TL_New()함수로 추세선을 그리는 지표수식을
아래와 같이 작성 하였는데 추세선이 그려지지
않습니다.
시작일과 종료일, 그리고 가격을 수식으로
추출하여 TL_New()함수에 적용 하였습니다.
MessageLog()함수로 데이터가 올바른지 확인해
보았는데 이상한 점은 발견하지 못했습니다.
그래서, 아래 내용중 주석처리된 부분과 같이
강제로 시작일과 종료일을 숫자로 대입하여
실행을 하면 정상적으로 추세선이 그려 집니다.
무엇이 문제인지 확인 부탁 드립니다.
--------------------------------------------
// 캔들의 전체 갯수를 리턴하는 함수
function getTotalCandles Numeric
// 캔들 갯수를 저장할 변수 선언
var: candleCount(0);
candleCount=Index+1;
getTotalCandles=candleCount;
Endfunction
var: totalCandles(0), getTotalCandles(0);
totalCandles=getTotalCandles();
// 하락 추세선 (단기)
Inputs:
ChartCandles(500),
ShortPeriod(60),
ShortUpColor(Red), // 단기 상승 추세선 색상: 붉은색
ShortDownColor(Blue), // 단기 하락 추세선 색상: 파란색
ShortLineWidth(2);
var: Candle_Condition(0), ShortDayCount(0), HighestShortDay(0), N2HighestShortDay(0),
ShortUpTrendLineID(0), ShortDownTrendLineID(0),
StartShortDownTrendBar(0), LastShortDownTrendBar(0),
HighestShortDownTrendBar(0), LowestShortDownTrendBar(0),
N2HighestShortDownTrendBar(0), N2LowestShortDownTrendBar(0),
StartShortDownTrendPrice(0), LastShortDownTrendPrice(0),
N2HighestShortDownTrendPrice(0), N2LowestShortDownTrendPrice(0),
HighestShortDownTrendPrice(0), LowestShortDownTrendPrice(0),
N2HighestShortSearchDay(0);
Candle_Condition = ChartCandles - ShortPeriod;
If totalCandles >= Candle_Condition Then {
ShortDayCount = totalCandles - Candle_Condition;
If totalCandles == ChartCandles Then {
StartShortDownTrendPrice = Highest(High, ShortPeriod);
For HighestShortDay = ShortPeriod - 1 DownTo 1 {
If High[HighestShortDay] == StartShortDownTrendPrice Then {
StartShortDownTrendBar = HighestShortDay;
N2HighestShortSearchDay = HighestShortDay - 1;
}
}
N2HighestShortDownTrendPrice = Highest(High, N2HighestShortSearchDay);
LastShortDownTrendPrice = N2HighestShortDownTrendPrice;
For N2HighestShortDay = N2HighestShortSearchDay DownTo 1 {
If High[N2HighestShortDay] == N2HighestShortDownTrendPrice Then {
N2HighestShortDownTrendBar = ChartCandles - N2HighestShortDay;
LastShortDownTrendBar = N2HighestShortDay;
}
}
}
If ShortDownTrendLineID > 0 Then {
TL_Delete(ShortDownTrendLineID);
}
StartShortDownTrendBar = StartShortDownTrendBar - 1;
LastShortDownTrendBar = LastShortDownTrendBar - 1;
//StartShortDownTrendBar = 23;
//LastShortDownTrendBar = 7;
MessageLog("**고점일=%.f, **고점가격=%.f", StartShortDownTrendBar, StartShortDownTrendPrice);
MessageLog("다음 고점일=%.f, **다음 고점가격=%.f", LastShortDownTrendBar, LastShortDownTrendPrice);
ShortDownTrendLineID = TL_New(Date[StartShortDownTrendBar], Time[StartShortDownTrendBar], High[StartShortDownTrendBar], Date[LastShortDownTrendBar], Time[LastShortDownTrendBar], High[LastShortDownTrendBar]);
TL_SetColor(ShortDownTrendLineID, ShortDownColor);
TL_SetSize(ShortDownTrendLineID, ShortLineWidth);
TL_SetExtRight(ShortDownTrendLineID, True);
}
이미 양수이기때문에 절대값으로 변환해도 차이가 없습니다.
메세지로그에서 값을 찍어봐도 양수로 나옵니다.
혼란을 줄이기 위해 불필요한 구문은 모두 삭제 하였습니다.
심플하게 코딩을 바꿨으니 아래 내용으로 무엇이
잘못되었는지 다시 한번 확인 부탁 드립니다.
------------------------------------------
// 캔들의 전체 갯수를 리턴하는 함수
function getTotalCandles Numeric
// 캔들 갯수를 저장할 변수 선언
var: candleCount(0);
candleCount=Index+1;
getTotalCandles=candleCount;
Endfunction
var: totalCandles(0), getTotalCandles(0);
totalCandles=getTotalCandles();
// 하락 추세선 (단기)
Inputs:
ChartCandles(500),
ShortPeriod(60),
ShortDownColor(Blue), // 단기 하락 추세선 색상: 파란색
ShortLineWidth(2);
var: Candle_Condition(0), ShortDownTrendLineID(0),
StartShortDownTrendBar(0), LastShortDownTrendBar(0),
StartShortDownTrendPrice(0), LastShortDownTrendPrice(0);
Candle_Condition = ChartCandles - ShortPeriod;
If totalCandles >= Candle_Condition Then {
If totalCandles == ChartCandles Then {
StartShortDownTrendBar = NthHighestBar(1, High, ShortPeriod);
LastShortDownTrendBar = NthHighestBar(2, High, ShortPeriod);
StartShortDownTrendPrice = NthHighest(1, High, ShortPeriod);
LastShortDownTrendPrice = NthHighest(2, High, ShortPeriod);
}
If ShortDownTrendLineID > 0 Then {
TL_Delete(ShortDownTrendLineID);
}
//StartShortDownTrendBar = StartShortDownTrendBar;
//LastShortDownTrendBar = LastShortDownTrendBar;
//이미 양수이기때문에 절대값으로 변환해도 차이가 없습니다.
//메세지로그에서 값을 찍어봐도 양수로 나옵니다.
//혼란을 줄이기 위해 불필요한 구문은 모두 삭제 하였습니다.
StartShortDownTrendBar = Abs(StartShortDownTrendBar);
LastShortDownTrendBar = Abs(LastShortDownTrendBar);
MessageLog("**고점일=%.f, **고점가격=%.f", StartShortDownTrendBar, StartShortDownTrendPrice);
MessageLog("다음 고점일=%.f, **다음 고점가격=%.f", LastShortDownTrendBar, LastShortDownTrendPrice);
ShortDownTrendLineID = TL_New_Self(Date[StartShortDownTrendBar], Time[StartShortDownTrendBar], High[StartShortDownTrendBar], Date[LastShortDownTrendBar], Time[LastShortDownTrendBar], High[LastShortDownTrendBar]);
TL_SetColor(ShortDownTrendLineID, ShortDownColor);
TL_SetSize(ShortDownTrendLineID, ShortLineWidth);
TL_SetExtRight(ShortDownTrendLineID, True);
}