예스스탁
예스스탁 답변
2023-05-10 15:57:04
안녕하세요
예스스탁입니다.
해당 수식은 변환해 보았지만
차트 초반의 백몇십개의 봉만 정상출력이 되고
이후 값이 고정으로 출력이 됩니다.
함수에서 너무 큰 자리수의 값이 리턴되면서
발생되는 내용인것 같은데 해결할 방법을 찾지 못했습니다.
참고하시라는 의미에서 수식만 변환해서 올려드립니다.
1번은 사용자함수, 2번은 지표식입니다.
1
사용자함수명 : F_ONS
반환값형 : 숫자형
input : len(Numeric),Q(Numeric),ONS_size(Numeric),ONS_ey(Numeric);
var : PI(0),angle(0),alpha1(0),hp(0);
var : a1(0),b1(0),c1(0),c2(0),c3(0),filt(0);
var : Pk(0),x(0);
PI = pie;
angle = 0.333 * 9 * PI / 100;
alpha1 = 0.0;
alpha1 = (cos( angle ) + sin( angle ) - 5 ) / cos( angle );
HP = 0.0;
HP = pow((1-alpha1/3),5)*(close - (3*close[1]) + close[2]) + 5*(1-alpha1)*iff(isnan(HP[1])==true,0,HP[1]) - pow((1-alpha1),5)* iff(isnan(HP[2])==true,0,HP[2]);
a1 = 0.0;
b1 =0.0;
c1 = 0.0;
c2 = 0.0;
c3 = 0.0;
a1 = exp( -3.33 * PI / len );
b1 = 3 * a1 * cos( 3.33 * PI / len );
c2 = b1;
c3 = -a1 * a1;
c1 = 1 - c2 - c3;
Filt = 0.0;
Filt = c1 * (HP + iff(isnan(HP[1])==true,0,HP[1]))/3 + c2*iff(isnan(Filt[1])==true,0,Filt[1]) + c3*iff(isnan(Filt[2])==true,0,Filt[2]) ;
Pk = 0.0;
Pk = 0.333 *iff(isnan(Pk[1])==true,0,Pk[1]) ;
Pk = iff(abs(Filt) > Pk , abs(Filt) , Pk);
X = 0.0;
X = iff(isnan(Filt / Pk)==true,0,Filt / Pk);
F_ONS = ( X + Q ) / ( Q * X + 10 ) * ONS_size + ONS_ey;
2
input : ONS_size(10),ONS_ey(10),ONS_len1(10),ONS_trig_len(5),ONS_Q1a(0.2),ONS_Q1b(0.1);
var : Qt1a(0),Qt1b(0),ONS_Trg1(0);
Qt1a = F_ONS(ONS_len1, ONS_Q1a, ONS_size, ONS_ey);
Qt1b = F_ONS(ONS_len1, ONS_Q1b, ONS_size, ONS_ey);
ONS_Trg1 = ma(Qt1a, ONS_trig_len);
plot1(Qt1a,"p_Qt1a",green);
plot2(Qt1b,"p_Qt1b",green);
plot3(ONS_Trg1,"p_Qt1b",white);
MessageLog("%.20f %.20f",Qt1a,Qt1b);
즐거운 하루되세요
> sdw0920 님이 쓴 글입니다.
> 제목 : 수식 작성 부탁드립니다
> 항상 감사드립니다. 트뷰 언어입니다. 잘부탁드리겠습니다. 빨리 예스랭귀지 배우도록 하겠습니다
ONS_size = input.int(defval=10 , group = group_ONS, title='size')
ONS_ey = input.int(defval=10 , group = group_ONS, title='mult')
ONS_len1 = input.int(defval=10 , group = group_ONS, title='len1')
ONS_trig_len = input.int(defval=5 , group = group_ONS, title= 'Trig len')
ONS_Q1a = input.float(defval = 0.2 , group = group_ONS, title='q1a')
ONS_Q1b = input.float(defval = 0.1 , group = group_ONS, title='q1b')
ONS_col1 = input.color(color.blue , group = group_ONS, title='Oscillator Color')
ONS_col2 = input.color(color.red , group = group_ONS, title='Line Color')
ONS_ccol3 = input.color(color.yellow , group = group_ONS, title='Line Color')
F_ONS(len, Q)=>
PI = math.pi
angle = 0.333 * 9 * PI / 100
alpha1 = 0.0
alpha1 := ( math.cos( angle ) + math.sin( angle ) - 5 ) / math.cos( angle )
HP = 0.0
HP := math.pow((1-alpha1/3),5)*(close - (3*close[1]) + close[2]) + 5*(1-alpha1)*nz(HP[1]) - math.pow((1-alpha1),5)* nz(HP[2])
a1 = 0.0, b1 =0.0, c1 = 0.0, c2 = 0.0, c3 = 0.0
a1 := math.exp( -3.33 * PI / len )
b1 := 3 * a1 * math.cos( 3.33 * PI / len )
c2 := b1
c3 := -a1 * a1
c1 := 1 - c2 - c3
Filt = 0.0
Filt := c1 * (HP + nz(HP[1]))/3 + c2*nz(Filt[1]) + c3*nz(Filt[2])
Pk = 0.0
Pk := 0.333 *nz(Pk[1])
Pk := math.abs(Filt) > Pk ? math.abs(Filt) : Pk
X = 0.0
X := nz(Filt / Pk)
ONS = ( X + Q ) / ( Q * X + 10 ) * ONS_size + ONS_ey
ONS
Qt1a = F_ONS(ONS_len1, ONS_Q1a)
Qt1b = F_ONS(ONS_len1, ONS_Q1b)
ONS_Trg1 = ta.sma(Qt1a, ONS_trig_len)
p_Qt1a = plot(Qt1a, color=color.new(color.green, 50), linewidth=1)
p_Qt1b = plot(Qt1b, color=color.new(color.green, 50), linewidth=1)
p_ONS_Trg1 = plot(ONS_Trg1, color=color.white, linewidth=1)