답변완료
박스 캔들 꼬리
input : 타주기분(1);
var : S1(0),D1(0),TM(0),TF(0),box(0);
var : oo(0),hh(0),ll(0),TL1(0),TL2(0),clr(0),ii(0);
Plot1(c);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%타주기분;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or
(Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then
{
oo = O;
hh = H;
ll = L;
box = Box_New(sDate,sTime,oo,NextBarSdate,NextBarStime,c);
TL1 = TL_New(sDate,sTime,max(C,oo),sDate,sTime,hh);
TL2 = TL_New(sDate,sTime,min(C,oo),sDate,sTime,ll);
ii = 1;
}
Else
{
ii = ii +1;
if h > hh Then
hh = h;
if l < ll Then
ll = l;
var1 = Round(ii/2,1);
Box_SetEnd(box,sDate,sTime,C);
TL_SetBegin(TL1,sDate[var1],sTime[var1],max(c,oo));
TL_SetEnd(TL1,sDate[var1],sTime[var1],hh);
TL_SetBegin(TL2,sDate[var1],sTime[var1],min(c,oo));
TL_SetEnd(TL2,sDate[var1],sTime[var1],ll);
}
if C > oo Then
clr = Red;
else if C < oo Then
clr = Blue;
Else
clr = Green;
Box_SetColor(box,clr);
Box_SetSize(box,1);
Box_SetFill(box,true,255); #박스채움 투명도 설정 0(투명) ~ 255(불투명), 마지막 True 봉 뒤 배치
TL_SetStyle(TL1,5); # 윗꼬리 아랫꼬리 점선처리
TL_SetStyle(TL2,5); # 윗꼬리 아랫꼬리 점선처리
TL_SetColor(tl1,clr);
TL_SetColor(tl2,clr);
}
1), 윗꼬리 아랫꼬리를, equivolume 차트처럼 위 아래 끝까지 몸통과 동일 색의 박스로 연장 처리.
2), 수정한 1번 차트를, 봉 차트처럼 몸통 두께를 똑같이 하는 별도 수식. 감사합니다.
2023-05-04
1159
글번호 168700
지표
답변완료
수치표시좀 부탁 드립니다.
* 좋은 주말 됫십시요^^
* 아래 수식 에서 지그제그선이 나올때 수치가 나오게 수정 좀 부탁 드립니다.
마지막 선도 변하는 그대로 나오게 좀 부탁 드립니다.
<아래 수식>
input :Peodd(10),d색상두께(50),d두께c(1),긁씨크기d(10);
Var:상승색j(Red), 하락색j(LimE);
Var:JW(0),JWT(0),dTL5사각(0),dText1사각(0);
Var: h고11(0),h고12(0),h시간11(0),h시간12(0),H선TL1(0),H선TL(0),pvv(0),dTL(0),
h고21(0),h고22(0),h시간21(0),h시간22(0),hVlue11(0),hVlue12(0),
h고31(0),h고32(0),h시간31(0),h시간32(0);
Array:h고Val[20](0),L저val[20](0),h고Bar[20](0),L저Bar[20](0);
Array:Ldr[7](0),Ldfr[7](0);
var : Udbox(0),Udbox1(0);
Ldr[0] = 0;
Ldr[1] = 2;
Ldr[2] = 3.;
Ldr[3] = -1;
Ldr[4] = -2.;
Ldr[5] = 1;
Ldr[6] = 0.5;
For JW = 0 To 19
{
h고Bar[JW] = h고Bar[JW] + 1;
L저Bar[JW] = L저Bar[JW] + 1;
}
if crossup(c,highest(H,Peodd)[1]) Then
JWT = 1;
if CrossDown(c,Lowest(L,Peodd)[1]) Then
JWT = -1;
If JWT == -1 Then
{
If JWT[1] != -1 Then
{
For JW = 18 DownTo 0
{
L저val[JW+1] = L저val[JW];
L저Bar[JW+1] = L저Bar[JW];
//ZZ[j+1] = ZZ[j];
}
L저val[0] = L;
L저Bar[0] = 0;
//ZZ[0] = L;
h고11 = Date[h고Bar[0]];
h시간11 = stime[h고Bar[0]];
hVlue11 = h고Val[0];
h고12 = Date[L저Bar[0]];
h시간12 = stime[L저Bar[0]];
hVlue12 = L저val[0];
h고21 = Date[h고Bar[0]];
h시간21 = stime[h고Bar[0]];
h고22 = Date[0];
h시간22 = stime[0];
for JW = 0 to 6
{
Ldfr[JW] = L저val[1] + ((h고Val[0] - L저val[1]) * Ldr[JW]);
}
Box_SetEnd(Udbox,h고11,h시간11,hVlue11);
Udbox = box_new(h고11,h시간11,hVlue11,h고12,h시간12,hVlue12);
Box_SetColor(Udbox,하락색j);
Box_SetFill(Udbox,true,d색상두께);
dTL5사각 = TL_New(h고11,h시간11,hVlue11,h고12,h시간12,hVlue12);
TL_SetSize(dTL5사각,d두께c);
TL_SetColor(dTL5사각,Blue);
}
If L저val[0] > L Then
{
L저val[0] = L;
L저Bar[0] = 0;
//ZZ[0] = L;
h고12 = Date[L저Bar[0]];
h시간12 = stime[L저Bar[0]];
hVlue12 = L저val[0];
h고22 = Date[0];
h시간22 = stime[0];
// Box_SetEnd(Udbox,h고12,h시간12,hVlue12);
TL_SetEnd(dTL5사각,h고12,h시간12,hVlue12);
}
Box_SetEnd(Udbox,NextBarSdate,NextBarStime,hVlue12);
}
If JWT == 1 Then
{
If JWT[1] != 1 Then
{
For JW = 18 DownTo 0
{
h고Val[JW+1] = h고Val[JW];
h고Bar[JW+1] = h고Bar[JW];
//ZZ[j+1] = ZZ[j];
}
h고Val[0] = H;
h고Bar[0] = 0;
//ZZ[0] = H;
h고11 = Date[L저Bar[0]];
h시간11 = stime[L저Bar[0]];
hVlue11 = L저val[0];
h고12 = Date[h고Bar[0]];
h시간12 = stime[h고Bar[0]];
hVlue12 = h고Val[0];
h고31 = Date[L저Bar[0]];
h시간31 = stime[L저Bar[0]];
h고32 = Date[0];
h시간32 = stime[0];
for JW = 0 to 5
{
Ldfr[JW] = L저val[0] + ((h고Val[1] - L저val[0]) * Ldr[JW]);
}
Box_SetEnd(Udbox,h고11,h시간11,hVlue12);
Udbox = box_new(h고11,h시간11,hVlue11,h고12,h시간12,hVlue12);
Box_SetColor(Udbox,상승색j);
Box_SetFill(Udbox,true,d색상두께);
dTL5사각 = TL_New(h고11,h시간11,hVlue11,h고12,h시간12,hVlue12);
TL_SetSize(dTL5사각,d두께c);
TL_SetColor(dTL5사각,Red);
}
If h고Val[0] < H Then
{
h고Val[0] = H;
h고Bar[0] = 0;
//ZZ[0] = H;
h고12 = Date[h고Bar[0]];
h시간12 = stime[h고Bar[0]];
hVlue12 = h고Val[0];
h고32 = Date[0];
h시간32 = stime[0];
// Box_SetEnd(Udbox,h고12,h시간12,hVlue12);
TL_SetEnd(dTL5사각,h고12,h시간12,hVlue12);
}
Box_SetEnd(Udbox,NextBarSdate,NextBarStime,hVlue12);
}
고맙습니다. 좋은 주말 되십시요.
2023-05-04
1277
글번호 168698
강조
답변완료
수식도움 부탁드립니다.
수고하십니다.
아래수식을 이용한 예스챠트에서는 지표가 출렁거리는데,
그림 아래와 같이 해당타주기분의 종가완성봉 기준으로 지표가 출력되도록 수정부탁드립니다.(그림참조)
감사합니다.
//=================
input : 분(NumericSimple),useClose(NumericSimple),length(NumericSimple),mult(NumericSimple);
var : ATrv(0),longStop(0),longStopprev(0),shortStop(0),shortStopPrev(0);
var : dir(0),dir1(0);
var : truehighv(0),TrueLowv(0),hsatr(0) ;
var : xClose(0),xOpen(0),xHigh(0),xLow(0);
var : xClose1(0),xOpen1(0),xHigh1(0),xLow1(0);
var : S1(0),D1(0),TM(0),TF(0),cnt(0),ii(0);
var : sum(0),longStop1(0),shortStop1(0),hv(0),lv(0);
Array : TrueRangev[100](0),AccumValue[100](0);
Array : oo[100](0),hh[100](0),ll[100](0),cc[100](0),hsc[100](0);
////상위분
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
///
TF = TM%분;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and 분 > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and 분 > 1 and TM >= TM[1]+분) or
(Bdate == Bdate[1] and 분 == 1 and TM > TM[1]) Then
{
ii = ii +1;
For cnt = 99 DownTo 1
{
TrueRangev[cnt] = TrueRangev[cnt-1];
oo[cnt] = oo[cnt-1];
hh[cnt] = hh[cnt-1];
ll[cnt] = ll[cnt-1];
cc[cnt] = cc[cnt-1];
hsc[cnt] = hsc[cnt-1];
AccumValue[cnt] = AccumValue[cnt-1];
}
AccumValue[0] = AccumValue[0]+1;
oo[0] = o;
hh[0] = h;
ll[0] = l;
Xopen1 = xopen[1];
Xhigh1 = xhigh[1];
Xlow1 = xlow[1];
Xclose1 = xclose[1];
longStop1 = longStop[1];
ShortStop1 = shortStop[1];
dir1 = dir[1];
}
if hh[0] > 0 and h > hh[0] Then
hh[0] = h;
if ll[0] > 0 and l < ll[0] Then
ll[0] = l;
cc[0] = c;
if ii == 1 then
{
xOpen = oo[0];
xClose = (oo[0]+hh[0]+ll[0]+cc[0])/4;
xHigh = MaxList(hh[0], xOpen, xClose);
xLow = MinList(ll[0], xOpen,xClose);
}
else
{
xClose = (oo[0]+hh[0]+ll[0]+cc[0])/4;
xOpen = (xOpen1 + xClose1)/2 ;
xHigh = MaxList(hh[0], xOpen, xClose) ;
xLow = MinList(ll[0], xOpen, xClose) ;
}
hsc[0] = xclose ;
if ii > 1 Then
{
If xClose1 > xHigh then
TrueHighv = xClose1;
else
TrueHighv = xHigh;
If xClose1 < xLow then
TrueLowv = xClose1;
else
TrueLowv = xLow;
TrueRangev[0] = TrueHighv - TrueLowv;
}
if ii > 2 Then
{
if TrueRangev[length-1] > 0 Then
{
sum = 0;
For cnt = 0 to length-1
{
sum = sum + TrueRangev[cnt];
}
hsatr = sum/length;
}
atrv = mult * hsatr;
hv = 0;
lv = 0;
For cnt = 0 to length-1
{
if useClose == 1 Then
{
if hv == 0 or (hv > 0 and hsc[cnt] > hv) Then
hv = hsc[cnt];
if lv == 0 or (lv > 0 and hsc[cnt] < lv) Then
lv = hsc[cnt];
}
Else
{
if hv == 0 or (hv > 0 and hh[cnt] > hv) Then
hv = hh[cnt];
if lv == 0 or (lv > 0 and ll[cnt] < lv) Then
lv = ll[cnt];
}
}
longStop = hv - atrv;
longStopPrev = longStop1;
longStop = iff(hsc[1] > longStopPrev , max(longStop, longStopPrev) , longStop);
shortStop = lv + atrv;
shortStopPrev = shortStop1;
shortStop = iff(hsc[1] < shortStopPrev , min(shortStop, shortStopPrev) , shortStop);
dir = iff(hsc[0] > shortStopPrev , 1 ,iff(hsc[0] < longStopPrev , -1 , dir1));
}
}
//====================
2023-05-04
1605
글번호 168697
지표
답변완료
시스템식 요청드립니다.
전에 아래와 같이 질문을 남겼었는데 답변을 주셨는데 안되는 부분이 있어
다시 올려봅니다.
1번에 2번에 답변을 보면 이전 직전에 대한 청산이 있어야 처음 매수매도진입이
가능한 걸로 나오는데....
처음에 시스템을 적용했더니. 가장 처음에 청산이 없다보니
아예 매수매도 진입이 안되더라구요
가능한 방법이 있는지 확인 부탁드리겠습니다.
------------------------------------------------------------------------------
질문 1)
아래의 해당식에서 조건을 추가하고 싶은 내용이 있는데 확인 부탁 드리겠습니다.
if MarketPosition == 0 and CrossDown(C,var3) Then
buy("매수1");
위 식에서는 포지션 가지고 있는게 없고, 변수3을 종가가 하향 돌파하면 매수하는 식인데,
추가하고 싶은 조건은
청산한지 30분 후 부터 적용 입니다.
예를들어
오후 11시 20분에 '익절청산' 이 되었다면, 11시 50분 전까지는
변수3을 종가가 하향 돌파하면 매수되지 않다가 50분 이후부터
적용하게 되도록 부탁드립니다.
질문 2)
if MarketPosition == 0 and CrossDown(C,var3) Then
buy("매수1");
if MarketPosition == 0 and CrossUp(C,var1) Then
Sell("매도2");
위의 식처럼 진입식이 있고,
ExitLong("매수-손절",AtStop,AvgEntryPrice-100);
ExitShort("매도-손절",AtStop,AvgEntryPrice+100);
위의 식처럼 손절청산 식이 있습니다.
매수 진입 후 매수-손절 로 청산 되었다면 그 다음은 매도 포지션으로 진입하고 싶어서
진입식을 아래와 같이 수정했습니다.
if MarketPosition == 0 and CrossDown(C,var3)
and IsExitName("매도-손절",1) == true Then
buy("매수1");
이렇게 수정하였더니, 가장 처음 시스템 적용했을때, 앞에 청산이 없어서
적용이 안됩니다.ㅜ.ㅜ
어떻게 적용해야 할까요??
------------------------------------------------------------------------------
답변
----------------------------------------------------------------------------
1
if MarketPosition == 0 and CrossDown(C,var3) and
(TotalTrades == 0 or (TotalTrades == 1 and TimeToMinutes(sTime) >= TimeToMinutes(ExitTime(1))+30)) Then
buy("매수1");
2
if MarketPosition == 0 and CrossDown(C,var3) and
(TotalTrades == 0 or (TotalTrades >= 1 and IsExitName("매도-손절",1) == true)) Then
buy("매수1");
if MarketPosition == 0 and CrossUp(C,var1) and
(TotalTrades == 0 or (TotalTrades >= 1 and IsExitName("매수-손절",1) == true)) Then
Sell("매도2");
ExitLong("매수-손절",AtStop,AvgEntryPrice-100);
ExitShort("매도-손절",AtStop,AvgEntryPrice+100);
-----------------------------------------------------------------------------------
2023-05-04
1223
글번호 168694
시스템
답변완료
수식 문의
아래의 트뷰 지표를 변환하고 싶습니다.
안되는 부분이 있다면 설명해 주시면
다시 찾아 보겠습니다.
항상 감사드립니다.
overlay=true,max_bars_back=1000,max_lines_count=500,max_labels_count=500)
length = input.float(500,'Window Size',maxval=500,minval=0)
h = input.float(8.,'Bandwidth')
mult = input.float(3.)
src = input.source(close,'Source')
up_col = input.color(#39ff14,'Colors',inline='col')
dn_col = input.color(#ff1100,'',inline='col')
disclaimer = input(false, 'Hide Disclaimer')
//----
n = bar_index
var k = 2
var upper = array.new_line(0)
var lower = array.new_line(0)
lset(l,x1,y1,x2,y2,col)=>
line.set_xy1(l,x1,y1)
line.set_xy2(l,x2,y2)
line.set_color(l,col)
line.set_width(l,2)
if barstate.isfirst
for i = 0 to length/k-1
array.push(upper,line.new(na,na,na,na))
array.push(lower,line.new(na,na,na,na))
//----
line up = na
line dn = na
//----
cross_up = 0.
cross_dn = 0.
if barstate.islast
y = array.new_float(0)
sum_e = 0.
for i = 0 to length-1
sum = 0.
sumw = 0.
for j = 0 to length-1
w = math.exp(-(math.pow(i-j,2)/(h*h*2)))
sum += src[j]*w
sumw += w
y2 = sum/sumw
sum_e += math.abs(src[i] - y2)
array.push(y,y2)
mae = sum_e/length*mult
for i = 1 to length-1
y2 = array.get(y,i)
y1 = array.get(y,i-1)
up := array.get(upper,i/k)
dn := array.get(lower,i/k)
lset(up,n-i+1,y1 + mae,n-i,y2 + mae,up_col)
lset(dn,n-i+1,y1 - mae,n-i,y2 - mae,dn_col)
if src[i] > y1 + mae and src[i+1] < y1 + mae
label.new(n-i,src[i],'▼',color=#00000000,style=label.style_label_down,textcolor=dn_col,textalign=text.align_center)
if src[i] < y1 - mae and src[i+1] > y1 - mae
label.new(n-i,src[i],'▲',color=#00000000,style=label.style_label_up,textcolor=up_col,textalign=text.align_center)
cross_up := array.get(y,0) + mae
cross_dn := array.get(y,0) - mae
alertcondition(ta.crossover(src,cross_up),'Down','Down')
alertcondition(ta.crossunder(src,cross_dn),'Up','Up')
//----
var tb = table.new(position.top_right, 1, 1
, bgcolor = #35202b)
if barstate.isfirst and not disclaimer
table.cell(tb, 0, 0, 'Nadaraya-Watson Envelope [LUX] Repaints'
, text_size = size.small
, text_color = #cc2f3c)
2023-05-03
1336
글번호 168689
지표