답변완료
질문 있습니다.
질문의 핵심: 1분봉 이동평균선 색상 변경 시 딜레이 적용 방법 문의 (파란색 미표시 문제)안녕하세요.1분봉 차트에서 이동평균선의 방향에 따라 색상을 다르게 표시하고, 색상 변경 시 딜레이를 주고 싶습니다.현재 코드:input : P(120);var1 = ma(C,P);if var1 > var1[1] Then var2 = 1; if var1 < var1[1] Then var2 = -1; if var2 == 1 Then plot1(var1,"이평",RED,DEF,4);Else plot1(var1,"이평",BLUE,DEF,4);이 코드는 정상 작동하지만, 횡보 구간에서 빨강<->파랑이 너무 자주 바뀝니다.원하는 기능은 아래와 같습니다. 색상이 변경될 때 즉시 바꾸지 않고, 20분(20봉) 동안 새로운 방향이 유지되면 그때 색상을 변경하고 싶습니다.예를 들어서 파,빨 파,빨 들쑥날쑥 색이 변하는 것 대신 파에서 빨 변하는 상황이 오면 바로 변하지 않고 20분or20봉 딜레이 주면서 끝나면 빨이 맞다면 빨, 파 맞다면 계속 파 이렇게 하는 것입니다.시도한 코드:input : P(120), DelayBars(20);vars: var1(0), var2(0), NewSignal(0), PrevSignal(0), BarCounter(0), FirstRun(True);var1 = ma(C,P);If var1 > var1[1] Then NewSignal = 1Else If var1 < var1[1] Then NewSignal = -1Else NewSignal = PrevSignal;If FirstRun = True Then Begin var2 = NewSignal; PrevSignal = NewSignal; FirstRun = False;End;If NewSignal <> 0 and NewSignal <> var2 Then Begin BarCounter = BarCounter + 1; If BarCounter >= DelayBars Then Begin var2 = NewSignal; BarCounter = 0; End;EndElse Begin BarCounter = 0;End;PrevSignal = NewSignal;If var2 = 1 Then plot1(var1, "이평", RED, DEF, 4)Else plot1(var1, "이평", BLUE, DEF, 4);문제:위 코드를 실행하면 파란색이 전혀 표시되지 않고 빨간색만 표시됩니다. ㅠㅠ (첨부 이미지 참조)이동평균선이 하락할 때는 파란색으로 표시되어야 하는데, 색상 변경이 제대로 작동하지 않습니다.1분봉 환경에서 이동평균선 방향 변경 시 N봉 딜레이를 주는 올바른 방법을 알려주시면 감사하겠습니다.P.S. var2 변수의 초기값이나 방향 전환 로직에 문제가 있는 것 같은데, 어떻게 수정해야 파란색(하락)도 제대로 표시될까요???사용한 차트 환경차트: 1분봉이동평균: 120일원하는 딜레이: 20분 (20봉)감사합니다!
2025-10-30
105
글번호 227516
지표
답변완료
수식 문의
안녕하세요? 1. 분봉에서 사용할 daydiff(CC, n, per)이라는 사용자 함수를 원합니다. CC = C, Data2(C), ... 등이 될 수 있습니다. 물론 그들을 이리 저리 짬뽕으로 만들어진 녀석이 될 수도 있습니다. 이 함수는 abs(CC - CC[n]) 들의 평균인 ma(abs(CC - CC[n]) ,per)를 리턴 합니다. 날짜가 바뀔 때의 갭을 반영하지 않기 위해서 이 함수를 만듭니다!!! 예컨대 n=3이고, per = 5, CC = data2(C)인 경우, CC와 CC[3]이 모두 같은 날짜여야 합니다. 즉, 우리의 함수는 CC와 CC[n]이 나오는 날짜가 다르면 그냥 0 값을 리턴하고, 즉, dayindex가 2 이하면 계속 0을 리턴 dayindex가 3 이상이 되면 이때부터 진짜 값들을 리턴하는데, 이 때도dayindex가 3이면: CC-CC[3]을 리턴 dayindex가 4이면: ma( CC-CC[3],2)를 리턴 dayindex가 5이면: ma( CC-CC[3],3)를 리턴 dayindex가 6이면: ma( CC-CC[3],4)를 리턴 dayindex가 7 이상이면: 계속 오늘장이 끝날 때까지 주구장창 ma( CC-CC[3],5)를 리턴 예컨대 선물은 8시 45분부터 나오지만, 어떤 참조 데이터는 9시 부터 나오는데, 위의 dayindex는 이 경우 해당 참조 데이터가 나오는 시점을 카운트 하는게 맞지요? 말이 어려워지는데, 그러니까 abs(CC-CC[3]) 들의 평균을 구하고 싶은데, 이게 날짜가 변해서 갭이 왕창 생겨서 평균을 망치는 것을 피하는 것이 목표입니다. 2. 혹시 data2 등에서도 적용이 가능한, 분봉에서 사용할 일종의 Atr 함수를 dayatr(CC, per) 이란 이름으로 만들어 주시면 감사하겠습니다. 이 친구를 만들 때, 날짜가 바뀌어서 발생하는 갭들은 계산에서 제외하고 만들 수 있으면 정말 좋겠습니다. 보통 Atr 계산할 때, H,L,O,C 등이 사용되지만, 우리는 특별히 HLOC가 없다면 그냥 H=L=O=C 로 해서 비슷하게 만드시면 됩니다. 즉, 이 경우에는 말하자면 C-C[1] 들의 평균이면 될 것 같은데, 한가지 C와 C[1] 이 날짜가 달라지면, 이 녀석은 제외하고, 기존의 값을 계속 리턴하거나, 평균 구할 때, 그런 쌍은 제외하도록 하면 좋겠습니다. 감사합니다.
답변완료
수식문의 입니다.
#Data6 : 선물매수호가총건수#Data7 : 선물매도호가총건수var : TL1(0,data1),TL2(0,data1),TL3(0,data1),TL4(0,data1);var : diff(0,data1),hh(0,data1),ll(0,data1);var : TX1(0,data1),TX2(0,data1),TX3(0,data1),TX4(0,data1);diff = data6(c)-data7(c);if bdate != bdate[1] Then{ hh = diff; ll = diff; TL_Delete(TL1); TL_Delete(TL2); TL_Delete(TL3); TL_Delete(TL4); TL1 = TL_New(sdate,stime,H,NextBarSdate,NextBarStime,H); TL2 = TL_New(sdate,stime,L,NextBarSdate,NextBarStime,L); TL3 = TL_New(sdate,stime,H,Sdate,Stime,H); TL4 = TL_New(sdate,stime,L,Sdate,Stime,L); Text_Delete(TX1); Text_Delete(TX2); Text_Delete(TX3); Text_Delete(TX4); TX1 = Text_New(NextBarSdate,NextBarStime,TL_GetValue(TL1,sdate,stime),NumToStr(HH,0)); TX2 = Text_New(NextBarSdate,NextBarStime,TL_GetValue(TL2,sdate,stime),NumToStr(LL,0)); TX3 = Text_New(NextBarSdate,NextBarStime,TL_GetValue(TL3,sdate,stime),NumToStr(HH,2)); TX4 = Text_New(NextBarSdate,NextBarStime,TL_GetValue(TL4,sdate,stime),NumToStr(LL,2)); Text_SetStyle(TX1,0,0); Text_SetStyle(TX2,0,0); Text_SetStyle(TX3,0,0); Text_SetStyle(TX4,0,0);}else{ if diff > hh Then { hh = diff; TL_SetBegin(TL3,sdate,stime,TL_GetValue(TL1,sdate,stime)); TL_Setend(TL3,NextBarSdate,NextBarStime,TL_GetValue(TL1,sdate,stime)); TL_SetBegin(TL1,sdate,stime,h); TL_Setend(TL1,NextBarSdate,NextBarStime,h); Text_SetString(TX3,NumToStr(HH[1],0)); Text_SetString(TX1,NumToStr(HH,0)); } if diff < ll Then { ll = diff; TL_SetBegin(TL4,sdate,stime,TL_GetValue(TL2,sdate,stime)); TL_Setend(TL4,NextBarSdate,NextBarStime,TL_GetValue(TL2,sdate,stime)); TL_SetBegin(TL2,sdate,stime,l); TL_Setend(TL2,NextBarSdate,NextBarStime,l); Text_SetString(TX4,NumToStr(LL[1],0)); Text_SetString(TX2,NumToStr(LL,0)); }}TL_SetExtRight(TL1,true);TL_SetExtLeft(TL1,true);TL_SetExtRight(TL2,true);TL_SetExtLeft(TL2,true); TL_SetSize(TL1,2);TL_SetSize(TL2,2);TL_SetColor(TL1,RED);TL_SetColor(TL2,BLUE);TL_SetExtRight(TL3,true);TL_SetExtLeft(TL3,true);TL_SetExtRight(TL4,true);TL_SetExtLeft(TL4,true); TL_SetSize(TL3,2);TL_SetSize(TL4,2);TL_SetColor(TL3,MAGENTA);TL_SetColor(TL4,CYAN);Text_SetLocation(TX1,NextBarSdate,NextBarStime,TL_GetValue(TL1,sdate,stime));Text_SetLocation(TX2,NextBarSdate,NextBarStime,TL_GetValue(TL2,sdate,stime));Text_SetLocation(TX3,NextBarSdate,NextBarStime,TL_GetValue(TL3,sdate,stime));Text_SetLocation(TX4,NextBarSdate,NextBarStime,TL_GetValue(TL4,sdate,stime));plot1(hh,"최고건수차",RED);plot2(ll,"최저건수차",blue);여기에 최고 에 2줄 최저에 2줄 나오는데 사이를 색으로 채울수 있나요
box
2025-10-30
104
글번호 227501
지표
답변완료
수식작성 부탁 드립니다
아래의 수식에서 매수 기준에 1가지 더 추가하여 수식을 작성 부탁 드립니다 # 매수 If superTrend < data2(C) and data2 input : ntime(5),factor(3), AtrPeriod(10); 추가수식 data2 input : ntime(5),factor(5), AtrPeriod(20); 2개의 기준으로 매수 진입 하도록 수식 작성 부탁 드립니다.하루가 지난뒤 부터 챠트 시간이 다음날 0시부터 기록되어 나타납니다 정상 시간이 나타나도록 하는 방법을 알려 주세요. # Data1 Input : shortPeriod(5), longPeriod(20); value1 = ema(C, shortPeriod); value2 = ema(C, longPeriod); # Data2 input : ntime(5),factor(3), AtrPeriod(10); var : zS1(0,Data2),zD1(0,Data2),zTM(0,Data2),zTF(0,Data2),zHH(0,Data2),zLL(0,Data2),zC1(0,Data2); var : zsrc(0,Data2), AtrV(0,Data2),ATRv1(0,Data2),upperBand(0,Data2),lowerBand(0,Data2), prevLowerBand(0,Data2), prevUpperBand(0,Data2); var : prevSuperTrend(0,Data2), superTrend(0,Data2), direction(0,Data2),alpha(0,Data2),source(0,Data2); if data2(Bdate != Bdate[1]) Then { zS1 = data2(TimeToMinutes(stime)); zD1 = data2(sdate); } if zD1 > 0 then { if data2(sdate) == zD1 Then zTM = data2(TimeToMinutes(stime))-zS1; Else zTM = data2(TimeToMinutes(stime))+1440-zS1; zTF = zTM%ntime; if Bdate != Bdate[1] or (Bdate == Bdate[1] and ntime > 1 and zTF < zTF[1]) or (Bdate == Bdate[1] and ntime > 1 and zTM >= zTM[1]+ntime) or (Bdate == Bdate[1] and ntime == 1 and zTM > zTM[1]) Then { zHH = data2(H); zLL = data2(L); zC1 = data2(C[1]); ATRV1 = ATRV[1]; prevSuperTrend = superTrend[1]; prevLowerBand = lowerBand[1]; prevUpperBand = upperBand[1]; } if data2(H) > zHH Then zHH = data2(H); if data2(L) < zLL Then zLL = data2(L); zsrc = (zHH+zLL)/2; if zC1 > 0 Then { alpha = 1 / AtrPeriod ; source = max(zHH - zLL, abs(zHH - zC1), abs(zLL - zC1)); ATrV = alpha * source + (1 - alpha) * ATrV1; upperBand = zsrc + factor * AtrV; lowerBand = zsrc - factor * AtrV; if lowerBand > prevLowerBand or zC1 < prevLowerBand Then lowerBand = lowerBand; Else lowerBand = prevLowerBand; if upperBand < prevUpperBand or zC1 > prevUpperBand Then upperBand = upperBand; Else upperBand = prevUpperBand; if prevSuperTrend == prevUpperBand Then { if C > upperBand Then direction = -1; Else direction = 1; } Else { if C < lowerBand Then direction = 1; Else direction = -1; } if direction == -1 Then superTrend = lowerBand; Else superTrend = upperBand; } } # 매수 If superTrend < data2(C) and CrossUP(value1, value2) Then { Buy(); } # 매수청산 If CrossDown(value1, value2) Then { Exitlong(); }
2025-10-30
107
글번호 227494
시스템