답변완료
수식변형 부탁드립니다
예스트레어더에서 사용할수 있게 수식 변형좀 해주시면 감사하겠습니다.
//
// @author LonesomeTheBlue
//
//@version=3
study("Higher High Lower Low Strategy", overlay =true)
lb = input(2, title="Left Bars", minval = 1)
rb = input(2, title="Right Bars", minval = 1)
showsupres = input(true, title="Show Support/Resistance")
changebarcol = input(true, title="Change Bar Color")
mb = lb + rb + 1
ph = iff(not na(high[mb]), iff(highestbars(high, mb) == -lb, high[lb], na), na) // Pivot High
pl = iff(not na(low[mb]), iff(lowestbars(low, mb) == -lb, low[lb], na), na) // Pivot Low
hl = na
hl := iff(ph, 1, iff(pl, -1, na)) // Trend direction
zz = na
zz := iff(ph, ph, iff(pl, pl, na)) // similar to zigzag but may have multiple highs/lows
zz :=iff(pl and hl == -1 and valuewhen(hl, hl, 1) == -1 and pl > valuewhen(zz, zz, 1), na, zz)
zz :=iff(ph and hl == 1 and valuewhen(hl, hl, 1) == 1 and ph < valuewhen(zz, zz, 1), na, zz)
hl := iff(hl==-1 and valuewhen(hl, hl, 1)==1 and zz > valuewhen(zz, zz, 1), na, hl)
hl := iff(hl==1 and valuewhen(hl, hl, 1)==-1 and zz < valuewhen(zz, zz, 1), na, hl)
zz := iff(na(hl), na, zz)
findprevious()=> // finds previous three points (b, c, d, e)
ehl = iff(hl==1, -1, 1)
loc1 = 0.0, loc2 = 0.0, loc3 = 0.0, loc4 = 0.0
xx = 0
for x=1 to 1000
if hl[x]==ehl and not na(zz[x])
loc1 := zz[x]
xx := x + 1
break
ehl := hl
for x=xx to 1000
if hl[x]==ehl and not na(zz[x])
loc2 := zz[x]
xx := x + 1
break
ehl := iff(hl==1, -1, 1)
for x=xx to 1000
if hl[x]==ehl and not na(zz[x])
loc3 := zz[x]
xx := x + 1
break
ehl := hl
for x=xx to 1000
if hl[x]==ehl and not na(zz[x])
loc4 := zz[x]
break
[loc1, loc2, loc3, loc4]
a = na, b = na, c = na, d = na, e = na
if not na(hl)
[loc1, loc2, loc3, loc4] = findprevious()
a := zz
b := loc1
c := loc2
d := loc3
e := loc4
_hh = zz and (a > b and a > c and c > b and c > d)
_ll = zz and (a < b and a < c and c < b and c < d)
_hl = zz and ((a >= c and (b > c and b > d and d > c and d > e)) or (a < b and a > c and b < d))
_lh = zz and ((a <= c and (b < c and b < d and d < c and d < e)) or (a > b and a < c and b > d))
plotshape(_hl, text="HL", title="Higher Low", style=shape.labelup, color=lime, textcolor=black, location=location.belowbar, transp=0, offset = -lb)
plotshape(_hh, text="HH", title="Higher High", style=shape.labeldown, color=lime, textcolor=black, location=location.abovebar, transp=0, offset = -lb)
plotshape(_ll, text="LL", title="Lower Low", style=shape.labelup, color=red, textcolor=white, location=location.belowbar, transp=0, offset = -lb)
plotshape(_lh, text="LH", title="Lower High", style=shape.labeldown, color=red, textcolor=white, location=location.abovebar, transp=0, offset = -lb)
res = na, sup = na
res := iff(_lh, zz, res[1])
sup := iff(_hl, zz, sup[1])
trend = na
trend := iff(close > res, 1, iff(close < sup, -1, nz(trend[1])))
res := iff((trend == 1 and _hh) or (trend == -1 and _lh), zz, res)
sup := iff((trend == 1 and _hl) or (trend == -1 and _ll), zz, sup)
plot(showsupres ? res : na, title="Resistance", color= na(res) ? na : red, linewidth=2, style=circles, offset = -lb)
plot(showsupres ? sup : na, title="Support", color= na(sup) ? na : blue, linewidth=2, style=circles, offset = -lb)
barcolor(color = iff(changebarcol, iff(trend == 1, blue, black), na))
2020-03-09
436
글번호 136688
지표
답변완료
확인 부탁드리겠습니다.
아래 내용은 제가 답변을 받은 내용입니다.
Data1 / Data2 / Data3 를 사용하는데
Data1과 Data2에 같은 지표(?)를 사용하지만
Data1과 Data2에 적용을 시키면 지표가 다르게 나옵니다.
Data2에 적용되는 지표도 Data1의 지표를 기준으로 적용되어 진입이 되는거 같습니다만,
이 부분을 수정해 주실 수 있을까요?
부탁드리겠습니다. 감사합니다.
Input:변동률(0.2),레벨(4),선두께(3),P(20),익절틱수(20),손절틱수(20);
Var:행(0,data1),열(0,data1),고점(1,data1),저점(-1,data1),신규(1,data1),연장(2,data1),연속(3,data1),삼선(4,data1),cnt(0,data1),
고라인기울기(0,data1),고라인시작(0,data1),고라인끝(0,data1),
저라인기울기(0,data1),저라인시작(0,data1),저라인끝(0,data1),
시작일(0,data1),시작시각(0,data1),V1(0,data1),val1(0,data1),val2(0,data1);
Array:고[10,44](0,data1),저[10,44](0,data1), // 열번호 : 1=가격,2=Index,3=sDate,4=sTime,11=가격,12=Index,13=sDate,14=sTime
최종상태[5](0,data1),처리구분[5](0,data1),TL[3](0,data1),TL1[2](0,data1),고0[10,4](0,data1),저0[10,4](0,data1),결과리턴[8](0,data1);
//=========================================================//
If 레벨 <= 4 Then
{
v1 = 레벨 * 10;
val1 = data1(ChgRateZigZag301(H,L,변동률,고,저,최종상태,처리구분));
If 최종상태[레벨] == 고점 Then {
If 처리구분[레벨] == 신규 Then
TL[2] = TL_New(저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
If 처리구분[레벨] == 연장 Then
TL_SetEnd(TL[2],고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
If 처리구분[레벨] == 연속 Then {
TL[1] = TL_New(고[2,v1 + 3],고[2,v1 + 4],고[2,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
TL[2] = TL_New(저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
}
If 처리구분[레벨] == 삼선 Then {
TL[0] = TL_New(저[2,v1 + 3],저[2,v1 + 4],저[2,v1 + 1],
고[2,v1 + 3],고[2,v1 + 4],고[2,v1 + 1]);
TL[1] = TL_New(고[2,v1 + 3],고[2,v1 + 4],고[2,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
TL[2] = TL_New(저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
}
}
If 최종상태[레벨] == 저점 Then {
If 처리구분[레벨] == 신규 Then
TL[2] = TL_New(고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
If 처리구분[레벨] == 연장 Then
TL_SetEnd(TL[2],저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
If 처리구분[레벨] == 연속 Then {
TL[1] = TL_New(저[2,v1 + 3],저[2,v1 + 4],저[2,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
TL[2] = TL_New(고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
}
If 처리구분[레벨] == 삼선 Then {
TL[0] = TL_New(고[2,v1 + 3],고[2,v1 + 4],고[2,v1 + 1],
저[2,v1 + 3],저[2,v1 + 4],저[2,v1 + 1]);
TL[1] = TL_New(저[2,v1 + 3],저[2,v1 + 4],저[2,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
TL[2] = TL_New(고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
}
}
} Else {
Alert("4레벨까지만 가능합니다!!");
}
//=========================================================//
cnt = cnt + 1;
If (처리구분[레벨] == 신규 or 처리구분[레벨] == 연속) Then {
For 행 = 1 To 10 {
For 열 = 1 To 4 { // 추세채널을 판단할 레벨만 사용자함수에 전달
고0[행,열] = 고[행,v1 + 열];
저0[행,열] = 저[행,v1 + 열];
}
}
val2 = data1(YHS_Channel(고0,저0,결과리턴));
If val2 == 1 Then { // 추세대가 형성되었다면
시작일 = 결과리턴[0];
시작시각 = 결과리턴[1];
고라인기울기 = 결과리턴[2];
고라인시작 = 결과리턴[3];
고라인끝 = 결과리턴[4];
저라인기울기 = 결과리턴[5];
저라인시작 = 결과리턴[6];
저라인끝 = 결과리턴[7];
If 고라인시작[1] == 고라인시작 and 고라인기울기[1] == 고라인기울기 Then { // 겹쳐 그리지 않도록
TL_SetEnd(TL1[0],sDate,sTime,고라인끝);
} Else {
TL1[0] = TL_New(시작일,시작시각,고라인시작,sDate,sTime,고라인끝);
TL_SetColor(TL1[0],IFF(고라인기울기<0,RED,BLUE));
TL_SetSize(TL1[0],선두께);
}
If 저라인시작[1] == 저라인시작 and 저라인기울기[1] == 저라인기울기 Then {
TL_SetEnd(TL1[1],sDate,sTime,저라인끝);
} Else {
TL1[1] = TL_New(시작일,시작시각,저라인시작,sDate,sTime,저라인끝);
TL_SetColor(TL1[1],IFF(고라인기울기<0,RED,BLUE));
TL_SetSize(TL1[1],선두께);
}
cnt = 0;
#Plot1(고라인끝,"고점추세선",IFF(고라인기울기<0,RED,BLUE));
#Plot2(저라인끝,"저점추세선",IFF(고라인기울기<0,RED,BLUE));
if max(고라인끝,저라인끝) >= data1(c) and data1(c) >= min(고라인끝,저라인끝) and
max(고라인끝,저라인끝) >= data2(c) and data2(c) >= min(고라인끝,저라인끝) and
data2(c> ma(C,P)) and
data3(C>C[1]) Then
buy();
}
}
If cnt > 0 and cnt < (레벨 + 1) * 20 Then {
고라인끝 = 고라인끝 + 고라인기울기;
저라인끝 = 저라인끝 + 저라인기울기;
#If 고라인끝 > 0 Then Plot1(고라인끝,"고점추세선",IFF(고라인기울기<0,RED,BLUE));
#If 저라인끝 > 0 Then Plot2(저라인끝,"저점추세선",IFF(고라인기울기<0,RED,BLUE));
if max(고라인끝,저라인끝) >= data1(c) and data1(c) >= min(고라인끝,저라인끝) and
max(고라인끝,저라인끝) >= data2(c) and data2(c) >= min(고라인끝,저라인끝) and
data2(c< ma(C,P)) and
data3(C<C[1]) Then
sell();
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);
SetStopLoss(PriceScale*손절틱수,PointStop);
2020-03-08
397
글번호 136685
시스템