예스스탁
예스스탁 답변
2025-04-18 16:16:13
안녕하세요
예스스탁입니다.
작성하신 수식에 중괄호 {}의 짝이 맞지 않아 수정했습니다.
또한 작성하신 내용에서는 반환값이 문자열입니다.
함수명 : _pine_sar
반환값형 : 문자열형
input: src(NumericSeries),start(Numeric),inc(Numeric),max1(Numeric),len(numeric);
var: src_high(0),src_low(0);
var: result(NaN);
var: maxMin(Nan);
var: acceleration(Nan);
var: isBelow(0),isFirstTrendBar(false);
src_high = src+1;
src_low = src-1;
if barindex <= len+2 Then
{
if src > src[1] Then
{
isBelow = 1;
maxMin = src_high;
result = src_low[1];
} else
{
isBelow = 0;
maxMin = src_low;
result = src_high[1];
}
isFirstTrendBar = true;
acceleration = start;
}
result = result + acceleration * (maxMin - result);
if isBelow==1 Then
{
if result > src_low Then
{
isFirstTrendBar = true;
isBelow = 0;
result = max(src_high, maxMin);
maxMin = src_low;
acceleration = start;
}
}
else
{
if result < src_high Then
{
isFirstTrendBar = true;
isBelow = 1;
result = min(src_low, maxMin);
maxMin = src_high;
acceleration = start;
}
}
if isFirstTrendBar==False Then
{
if isBelow==1 Then
{
if src_high > maxMin Then
{
maxMin = src_high;
acceleration = min(acceleration + inc, max1);
}
}
else
{
if src_low < maxMin Then
{
maxMin = src_low;
acceleration = min(acceleration + inc, max1);
}
}
}
if isBelow==1 Then
{
result = min(result, src_low[1]);
if barindex > 1 Then
{
result = min(result, src_low[2]);
}
}
else
{
result = max(result, src_high[1]);
if barindex > 1 Then
{
result = max(result, src_high[2]);
}
}
_pine_sar = numToStr(result,2) + ";" + numToStr(isBelow,0);
즐거운 하루되세요
> 고도산 님이 쓴 글입니다.
> 제목 : 사용자 함수 에러를 잡아주세요
> tradingview에서 parabolic RSI라는 지표를 YT로 변환중 _pine_sar라는 함수를 작성하는데
'문법에러, 잘못된 토큰,'<File End>'라는 에러를 만났는데 도대체 무슨 말인지 모르겠네요. 제가 작성한 함수는 다음과 같습니다.
input: src(NumericSeries),start(Numeric),inc(Numeric),max1(Numeric),len(numeric);
var: src_high(0),src_low(0);
var: result(NaN);
var: maxMin(Nan);
var: acceleration(Nan);
var: isBelow(0),isFirstTrendBar(false);
src_high = src+1;
src_low = src-1;
if barindex <= len+2 Then {
if src > src[1] Then {
isBelow = 1;
maxMin = src_high;
result = src_low[1];
} else {
isBelow = 0;
maxMin = src_low;
result = src_high[1];
}
isFirstTrendBar = true;
acceleration = start;
}
result = result + acceleration * (maxMin - result);
if isBelow==1 Then {
if result > src_low Then {
isFirstTrendBar = true;
isBelow = 0;
result = max(src_high, maxMin);
maxMin = src_low;
acceleration = start;
} else {
if result < src_high Then {
isFirstTrendBar = true;
isBelow = 1;
result = min(src_low, maxMin);
maxMin = src_high;
acceleration = start;
}
if isFirstTrendBar==False Then {
if isBelow==1 Then {
if src_high > maxMin Then {
maxMin = src_high;
acceleration = min(acceleration + inc, max1);
} else {
if src_low < maxMin Then {
maxMin = src_low;
acceleration = min(acceleration + inc, max1);
}
}
}
if isBelow==1 Then {
result = min(result, src_low[1]);
if barindex > 1 Then {
result = min(result, src_low[2]);
}
} else {
result = max(result, src_high[1]);
if barindex > 1 Then{
result = max(result, src_high[2]);
}
}
_pine_sar = numToStr(result,2) + ";" + numToStr(isBelow,0);