답변완료
수식 검증 좀 부탁드립니다!
청산이 잘 안됩니다. 수식 검증 좀 부탁드립니다!!
// 진입 전략: 이평선 기준, long은 이평 크로스 업, short은 초단기로만
Var: aa(0), bb(0);
Input: ss(3), sss(4); //진입변수
Var: yyy(1); //진입수량
aa = Average(close, ss); // 단기 이평선
bb = Average(close, ss*sss); // 장기 이평선
if CrossUp(aa,bb[1]) Then Buy ("매수", AtMarket,Def,yyy); // 단기 이평선이 장기 이평선을 골든크로스 시 롱 진입
input: SL(10), PT(10);
SetStopTrailing(SL,PT,PercentStop);
input: ShortHoldDay(2), SL_time(10);
if MarketPosition <0 and BarsSinceEntry > ShortholdDay Then {
ExitLong("EL_time",AtMarket);
ExitShort("ES_time",AtMarket);}
if SL_time > 0 Then SetStopLoss ((SL_time/BigPointValue),PointStop);
2025-05-19
231
글번호 190976
시스템
답변완료
답변주신 내용중 공부상 질문
안녕하세요 아래에 같이 지난 요청에 수식을 작성해주셨는데요.
input : N(1);
var : x(0),y(0);
Array : VV[2,20](0),box[20](0);
For x = 19 DownTo 1
{
VV[0,x] = VV[0,x-1];
VV[1,x] = VV[1,x-1];
}
VV[0,0] = v;
VV[1,0] = Index;
var1 = Sort2DArray(VV,2,20,1);
For x = 0 to N-1
{
Box_Delete(box[x]);
var1 = H[index-vv[1,x]];
var2 = L[index-vv[1,x]];
box[x] = Box_New(sDate[index-vv[1,x]],sTime[index-vv[1,x]],var1,NextBarSdate,NextBarStime,var2);
Box_SetColor(box[x],Red);
Box_SetFill(box[x],true);
}
위 코드에서
var1 = Sort2DArray(VV,2,20,1); 부분과 for문 내부에서
var1 = H[index-vv[1,x]]; 를 사용하는 부분이 공부하는데 조금 어렵습니다.
동일한 변수명을 재사용한것과 배열을 정렬해서 배열이 아닌 변수에 값을 넘기는것이
이해가 잘 되지 않는 부분입니다.
공부를 위해서 설명과 코드에 자세한 주석을 달아주시길 부탁드립니다!!
항상 답변 감사드립니다.
2025-05-19
194
글번호 190974
지표
답변완료
항상 감사합니다 지표 변환 부탁드립니다
// INPUTS ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
tf = input.timeframe("D")
color_up = input.color(color.rgb(229, 148, 27), "", inline = "color")
color_dn = input.color(color.rgb(30, 142, 234), "", inline = "color")
var array_vals = array.new<float>()
var count = 0
// }
// CALCULATIONS――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
convert_tf(tf)=>
time_in = timeframe.in_seconds(tf) / 60 / 60
time_in >= 24 ? tf : time_in >= 1 ? str.tostring(time_in) + "h" : tf + "m"
current_tf_min = timeframe.in_seconds("")/60
user_tf_min = timeframe.in_seconds(tf)/60
bars_amount = int(user_tf_min / current_tf_min)
tf_change = timeframe.change(tf)
if tf_change
label.new(bar_index, array_vals.max(), str.tostring(array_vals.max(), "#,###.###"), style = label.style_label_left, color = color(na), textcolor = chart.fg_color)
label.new(bar_index, array_vals.min(), str.tostring(array_vals.min(), "#,###.###"), style = label.style_label_left, color = color(na), textcolor = chart.fg_color)
array_vals.clear()
count := 0
if not tf_change
count +=1
array_vals.push(high)
array_vals.push(low)
max = array_vals.max()
min = array_vals.min()
tf_trend = array_vals.avg()
color tf_col = tf_trend > tf_trend[1] ? color_up : color_dn
color time_color = color.from_gradient(count, 0, bars_amount, color.new(tf_col, 0), color.new(tf_col, 100))
// }
// PLOT ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
plotshape(tf_change[1] ? tf_trend : na, "", shape.circle, location.absolute, color.new(chart.fg_color, 30), size = size.tiny)
plot(tf_trend, "HTF Trend", color = tf_change ? color(na) : tf_col, style = plot.style_linebr, linewidth = 1)
plot(tf_trend, "HTF Trend", color = tf_change ? color(na) : time_color, style = plot.style_linebr, linewidth = 5)
plot(max != max[1] ? na : max, "High Level", color = bar_index % 2 == 0 ? chart.fg_color : color(na), style = plot.style_steplinebr)
plot(min != min[1] ? na : min, "Low Level", color = bar_index % 2 == 0 ? chart.fg_color : color(na), style = plot.style_steplinebr)
bgcolor(tf_change ? color.new(chart.fg_color, 85) : na)
if barstate.islast
l1 = label.new(bar_index, array_vals.max(), str.tostring(array_vals.max(), "#,###.###"), style = label.style_label_left, color = color(na), textcolor = chart.fg_color)
l2 = label.new(bar_index, array_vals.min(), str.tostring(array_vals.min(), "#,###.###"), style = label.style_label_left, color = color(na), textcolor = chart.fg_color)
label.delete(l1[1])
label.delete(l2[1])
dash = table.new(position.top_right, 10, 10)
dash.cell(0, 0, "Timeframe: ", text_color = chart.fg_color)
dash.cell(1,0, convert_tf(tf), text_color = chart.fg_color)
dash.cell(0, 1, "Trend: ", text_color = chart.fg_color)
dash.cell(1, 1, tf_trend > tf_trend[1] ? "🢁" : "🢃", text_color = tf_col)
// }
2025-05-19
250
글번호 190973
지표
답변완료
문의드립니다
안녕하세요 관리자님
아래 지표는 관리자님이 보내주신 지표인데요
실거래에서 사용준비중입니다
다름이 아니오라
아래 지표에서
muliplier1~3을 하나는 2
muliplier1~3을 하나는 3
으로 하여 지표를 겹치면 첨부한 그림과 같이 선이 각각 2개씩 나오텐데요
이를 하나의 지표로 만들어서 선과 선 사이에 색깔을 입힐려고 합니다
수정하려고 했는데 못하겠어요ㅜㅜ 도와주세요
-아 래-
input : period1(10),multiplier1(3);
input : period2(20),multiplier2(3);
input : period3(30),multiplier3(3);
var : src(0);
var : AtrV1(0),upperBand1(0),lowerBand1(0), prevLowerBand1(0), prevUpperBand1(0);
var : prevSuperTrend1(0), superTrend1(C), direction1(0),alpha1(0),source1(0);
var : AtrV2(0),upperBand2(0),lowerBand2(0), prevLowerBand2(0), prevUpperBand2(0);
var : prevSuperTrend2(0), superTrend2(C), direction2(0),alpha2(0),source2(0);
var : AtrV3(0),upperBand3(0),lowerBand3(0), prevLowerBand3(0), prevUpperBand3(0);
var : prevSuperTrend3(0), superTrend3(C), direction3(0),alpha3(0),source3(0);
src = (H+L)/2;
if CurrentBar > 1 Then
{
alpha1 = 1 / period1;
source1 = max(high - low, abs(high - close[1]), abs(low - close[1]));
ATrV1 = alpha1 * source1 + (1 - alpha1) * ATrV1[1]; //지수가중이평방식
//ATrV = ma(source,AtrPeriod); //단순이평방식
upperBand1 = src + multiplier1 * AtrV1;
lowerBand1 = src - multiplier1 * AtrV1;
prevLowerBand1 = lowerBand1[1];
prevUpperBand1 = upperBand1[1];
if lowerBand1 > prevLowerBand1 or close[1] < prevLowerBand1 Then
lowerBand1 = lowerBand1;
Else
lowerBand1 = prevLowerBand1;
if upperBand1 < prevUpperBand1 or close[1] > prevUpperBand1 Then
upperBand1 = upperBand1;
Else
upperBand1 = prevUpperBand1;
if C > UpperBand1 Then
direction1 = 1;
if C < LowerBand1 Then
direction1 = -1;
if direction1 == 1 Then
supertrend1 = lowerband1;
Else
supertrend1 = upperband1;
alpha2 = 1 / period2;
source2 = max(high - low, abs(high - close[1]), abs(low - close[1]));
ATrV2 = alpha2 * source2 + (1 - alpha2) * ATrV2[1]; //지수가중이평방식
//ATrV = ma(source,AtrPeriod); //단순이평방식
upperBand2 = src + multiplier2 * AtrV2;
lowerBand2 = src - multiplier2 * AtrV2;
prevLowerBand2 = lowerBand2[1];
prevUpperBand2 = upperBand2[1];
if lowerBand2 > prevLowerBand2 or close[1] < prevLowerBand2 Then
lowerBand2 = lowerBand2;
Else
lowerBand2 = prevLowerBand2;
if upperBand2 < prevUpperBand2 or close[1] > prevUpperBand2 Then
upperBand2 = upperBand2;
Else
upperBand2 = prevUpperBand2;
if C > UpperBand2 Then
direction2 = 1;
if C < LowerBand2 Then
direction2 = -1;
if direction2 == 1 Then
supertrend2 = lowerband2;
Else
supertrend2 = upperband2;
alpha3 = 1 / period3;
source3 = max(high - low, abs(high - close[1]), abs(low - close[1]));
ATrV3 = alpha3 * source3 + (1 - alpha3) * ATrV3[1]; //지수가중이평방식
//ATrV = ma(source,AtrPeriod); //단순이평방식
upperBand3 = src + multiplier3 * AtrV3;
lowerBand3 = src - multiplier3 * AtrV3;
prevLowerBand3 = lowerBand3[1];
prevUpperBand3 = upperBand3[1];
if lowerBand3 > prevLowerBand3 or close[1] < prevLowerBand3 Then
lowerBand3 = lowerBand3;
Else
lowerBand3 = prevLowerBand3;
if upperBand3 < prevUpperBand3 or close[1] > prevUpperBand3 Then
upperBand3 = upperBand3;
Else
upperBand3 = prevUpperBand3;
if C > UpperBand3 Then
direction3 = 1;
if C < LowerBand3 Then
direction3 = -1;
if direction3 == 1 Then
supertrend3 = lowerband3;
Else
supertrend3 = upperband3;
if C > superTrend1 Then
{
Plot1(superTrend1,"매수1", Yellow, 0, 1);
NoPlot(2);
}
Else
{
Plot2(superTrend1,"매도1", Indigo, 0, 1);
NoPlot(1);
}
}
2025-05-19
265
글번호 190971
지표
답변완료
질문 부탁드립니다
지난 답변 적용하면서 궁금한 사항 몇 가지가 있어서 여쭤보고 싶습니다
질문1)
tl_getvalue 관련인데요
식에서 var22 가 의미하는건, 현재봉 시작점에서의 추세선 값을 의미하는게 맞지 않나요?~
아래 식에서 (분봉에서 보고있을때)
tttl1[0] 의 끝점을 sd[0],st[0] 이나 sd[1],sd[1] 와 같이 가장 최근만족봉과 가까운 지점으로 설정했을때는
var22 의 값 (Var22=TL_GetValue(tttl1[0],sDate,sTime);) 이 제대로 나오는데
끝점을 sd[5],st[5] (시작점은 이보다 더 과거) 처럼 더 과거의 시점으로 했을때는 var22 값에 오차가 생기는 현상이 발생합니다. 즉 var22 값과 현재봉 시작점에서의 추세선 값을 비교해봤을때 간극이 생깁니다.
혹시 조건 if 문에서 and (d1 == 0 or (d1 > 0 and dd >= d1+5)) 이 부분과 관련이 있는 현상일까요?? 아니면 분봉에서 적용한것과 관련이 있을까요?
질문2)
추세선간의 crossup 관련 이해가 어려운 부분이 있습니다
crossup(h,ma(c,20))이
"한봉전의 h값이 한봉전 ma 값보다는 작고, 현재 h가 ma 보다 크다" 라는 의미처럼
CrossUp(TL_GetValue(tttl1[1],sDate,sTime),TL_GetValue(tttl1[0],sDate,sTime))
이 의미하는건,
이전 조건만족봉 위치에서의 tttl1[1] 이 tttl1[0] 보다 작고,
현재 만족봉에서의 tttl1[1] 이 tttl1[0] 보다 크다라는 의미로 이해하는게 맞나요?
즉 현재만족봉 시점에서 봤을때
tttl1[2] < tttl1[1] 이고 tttl1[1] > tttl1[0] 이라는 의미가 되는건가요? 아니면 단순히 현재만족봉기준 한봉전과 비교하는건가요??
해석을 도와주셨으면 합니다
그리고
Var22=TL_GetValue(tttl1[0],sDate,sTime);
if CrossUp(TL_GetValue(tttl1[1],sDate,sTime),TL_GetValue(tttl1[0],sDate,sTime)) Then
var11 = TL_GetValue(tttl1[0],sDate,sTime);
이렇게 작성했을때 crossup 조건이 만족했을때 var11 에는 어떤 값이 들어가게 되며 var22 와는 어떻게 달라지는건지도 해석이 궁금합니다.
감사합니다
아래는 수식입니다
var : cnt(0), sum1(0), sumi1(0),summ(0),tt(0),hh(0),ll(0),tl(0),tl1(0),n(0),ae(0);
var: sum2(0),sumi2(0),count(0),sumaa(0),sumai(0),avgaa(0);
var : t(0),StartBarIndex(0),dd(0),d1(0),d2(0),e1(0),e2(0);
Array : ii[50](0),aa[50](0),cc[50](0),ee[50](0),ttl[30](0),txtt[40](0),
tttl1[40](0),tttl2[40](0),sd[45](0),st[45](0),ad[50](0),at[50](0);
if Bdate != Bdate[1] Then
{
DD = DD+1;
}
if (h>l*1.08)
and (d1 == 0 or (d1 > 0 and dd >= d1+5)) Then
{
d1 = dd;
hh = h;
var1 = Index;
Var2 = var1[1];
Var3 = Var2[1];
sum1=0; sumi1=0; sum2=0; sumi2=0;
tl=TL_NEW(sDate,sTime,100,sDate,sTime,999999);
TL_SetSize(tl,0);
TL_SetColor(tl,Gray);
For cnt = 1 to (var1-Var2)
{
sum1=sum1+l[cnt];
sumi1=sumi1+1;
}
value1=sum1/sumi1;
For cnt = 49 DownTo 1
{
aa[cnt] = aa[cnt-1];
sd[cnt] =sd[cnt-1];
st[cnt] =st[cnt-1];
txtt[cnt] = txtt[cnt-1];
tttl1[cnt]=tttl1[cnt-1];
tttl2[cnt]=tttl2[cnt-1];
}
aa[0] = value1;
sd[0] = sDate;
st[0] = sTime;
TL_SetExtRight( tttl1[3],False);
tttl1[0] = TL_New(sd[5],st[5],aa[5],sd[3],st[3],aa[3]);
TL_SetDrawMode( tttl1[0],0);
TL_Delete( tttl1[3]);
TL_SetExtRight( tttl1[0],true);
TL_SetColor(tttl1[0],Black);
TL_SetColor(tttl1[3],Green);
TL_SetSize( tttl1[0],0);
TL_SetSize( tttl1[3],1);
Var22=TL_GetValue(tttl1[0],sDate,sTime);
if CrossUp(TL_GetValue(tttl1[1],sDate,sTime),TL_GetValue(tttl1[0],sDate,sTime)) Then
var11 = TL_GetValue(tttl1[0],sDate,sTime);
txtt[0]=text_new(sd[0],st[0],aa[0],NumToStr(Var22,0)+" "+
NumToStr((aa[0]-aa[1])/aa[1]*100,0)+"%");
Text_SetSize(txtt[0],15);
Text_SetBold(txtt[0],1);
Text_SetStyle(txtt[0], 0, 0);
}
if aa[0] >0 then Plot11(aa[0],"average",Cyan,Def,1);
2025-05-20
208
글번호 190964
지표