답변완료
안녕하세요! 진입은 잘되는데 조건을 하나 추가하고싶습니다!
input:
lengthMA_MACD(34),
lengthSignal(9);
var:
src(0), hi(0), lo(0), mi(0),
ema1(0), ema2(0), ema_zlema(0),
md(0), sb(0), HISTO(0);
// 1) 기준값
src = (High + Low + Close) / 3;
// 2) ZLEMA 계산
ema1 = ema(src, lengthMA_MACD);
ema2 = ema(ema1, lengthMA_MACD);
ema_zlema = ema1 + (ema1 - ema2);
// 3) 고가/저가 평균 (Wilder SMMA)
hi = IFF(IsNaN(hi[1]),
ma(High, lengthMA_MACD),
(hi[1] * (lengthMA_MACD - 1) + High) / lengthMA_MACD);
lo = IFF(IsNaN(lo[1]),
ma(Low, lengthMA_MACD),
(lo[1] * (lengthMA_MACD - 1) + Low) / lengthMA_MACD);
mi = (hi + lo) / 2;
// 4) Kiwoom 스타일 MD 계산
md = IFF(ema_zlema > hi,
ema_zlema - hi,
IFF(ema_zlema < lo,
ema_zlema - lo,
0));
// 5) Signal & Histogram
sb = ma(md, lengthSignal);
HISTO = md - sb;
// 진입: 히스토그램이 0선 하향 돌파하고 절대값 ≥ 0.02일 때
if CrossDown(HISTO, 0) and AbsValue(HISTO) >= 0.02then
Sell("s");
// 청산: 숏 포지션 보유 중 히스토그램이 0선 상향 돌파하고 절대값 ≥ 0.02일 때
// → MarketPosition < 0 로 숏 보유 여부를 체크
if MarketPosition < 0 and CrossUp(HISTO, 0) and AbsValue(HISTO) >= 0.02then
ExitShort("sx");
안녕하세요 담당자님.
번거롭게 자꾸 질문드려 죄송합니다.
답변해주신 코딩을 조금 응용해서 히스토그램이 밑으로 0.02 이하일때 매도진입하고 0.02 이상일때 청산하고싶어 코딩했는데 코딩자체는 컴파일이 되나 진입횟수가 하나도 없네요..
히스토그램이 아래로 향하는거는 절대값이나 음수를 붙여야 하나요?
가능하시다면 전체코딩으로 한번 부탁드리겠습니다. 감사합니다!
2025-06-17
119
글번호 191828
시스템
답변완료
수식 수정 의뢰 드립니다.
안녕하세여!
아래 수식에 대한 함수값이 없다고 나오는데 어떻게 해결을 하면 될까요?
//@version=4
study(title=" New RSI ",shorttitle = "NRSI", format=format.price, precision=0, overlay=false)
//
DZbuy = 0.1
DZsell = 0.1
Period = 14
Lb = 60
red=#f887fa
green=color.rgb(10, 193, 254)
//
RSILine = rsi(close,Period)
jh = highest(RSILine, Lb)
jl = lowest(RSILine, Lb)
jc = (wma((jh-jl)*0.5,Period) + wma(jl,Period))
Hiline = jh - jc * DZbuy
Loline = jl + jc * DZsell
R = (4 * RSILine + 3 * RSILine[1] + 2 * RSILine[2] + RSILine[3] ) / 10
//
a=plot(R, title='R', color=color.white, linewidth=1, style=plot.style_line, transp=0)
b=plot(Hiline, title='Hiline', color=color.gray, linewidth=1, style=plot.style_line, transp=0)
c=plot(Loline, title='Loline', color=color.gray, linewidth=1, style=plot.style_line, transp=0)
plot(jc, title='Jc', color=#68158e, linewidth=2, style=plot.style_line, transp=50)
//
col_1 = R > Hiline ? red:na
col_2 = R < Loline ? green:na
//
fill(a, b, color=col_1,transp=0)
fill(a, c, color=col_2,transp=0)
2025-06-17
173
글번호 191824
지표
답변완료
부탁드립니다.
가장 굵은선(수식 매수3. 매도3선)을 뚫는 봉에 그림과 같은 세로의 색깔이 생기도록 수정 부탁드립니다.
동시에 봉에 20틱정도 길이의 3등분선(진하게 두께2정도)로 만들어 주시면 감사하겠습니다.
input : period1(10),multiplier1(3);
input : period2(20),multiplier2(2);
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", rgb(247, 75, 201), 0, 1);
NoPlot(2);
}
Else
{
Plot2(superTrend1,"매도1", Indigo, 0, 1);
NoPlot(1);
}
if C > superTrend2 Then
{
Plot3(superTrend2,"매수2", rgb(247, 75, 201), 0, 2);
NoPlot(4);
}
Else
{
Plot4(superTrend2,"매도2", Indigo, 0, 2);
NoPlot(3);
}
if C > superTrend3 Then
{
Plot5(superTrend3,"매수3", rgb(247, 75, 201), 0, 7);
NoPlot(6);
}
Else
{
Plot6(superTrend3,"매도3", Indigo, 0, 7);
NoPlot(5);
}
}
2025-06-18
179
글번호 191823
지표
답변완료
지표 수정 부탁드립니다.
안녕하세요. 항상 많은 도움 주셔서 감사합니다.
아래의 수식은 예스스탁을 통해 만든 수식인데요.
input에 원하는 분을 입력하면 해당 분차트 기준으로 값이 계산되어 선으로 표시되게 하는 수식입니다.
제가 원하는 것은 여러 개의 시간을 입력할 수 있도록 동일한 수식을 합치고 싶습니다.
예를 들어 5분, 10분, 15분, 30분, 60분, 120분, 240분을 하나의 수식에 모두 입력해서
하나의 수식으로 각 분차트에서 계산된 값들이 선으로 나타나게 하고 싶습니다.
아래의 수식을 참조하여 수정 부탁드립니다. 감사합니다.
input : 분(10),LENGTH(14);
var : S1(0),D1(0),TM(0),TF(0),cnt(0),DFact(0);
var : sum1(0),mav1(0),DPO(0),DPO1(0),DPO2(0);
var : T(0),HV(0),HH(0),LV(0),LL(0);
var : 매수선(0),매도선(0);
Array : C1[100](0),H1[100](0),L1[100](0);
DFact = (Length * 0.5) + 1;
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
{
for cnt = 99 downto 1
{
C1[cnt] = C1[cnt-1];
H1[cnt] = H1[cnt-1];
L1[cnt] = L1[cnt-1];
}
H1[0] = H;
L1[0] = L;
DPO1 = DPO[1];
DPO2 = DPO1[1];
if DPO1 > 0 and DPO2 <= 0 Then
{
T = 1;
HV = DPO1;
HH = H1[1];
매도선 = LL;
}
if DPO1 < 0 and DPO2 >= 0 Then
{
T = -1;
LV = DPO1;
LL = L1[1];
매수선 = HH;
}
if T == 1 Then
{
if DPO1 > HV Then
{
HV = DPO1;
HH = H1[1];
}
}
if T == -1 Then
{
if DPO1 < LV Then
{
LV = DPO1;
LL = L1[1];
}
}
}
C1[0] = C;
if H1[0] > 0 and H > H1[0] Then
H1[0] = H;
if L1[0] > 0 and L < L1[0] Then
L1[0] = L;
if C1[LENGTH-DFact] > 0 then
{
sum1 = 0;
for cnt = 0 to LENGTH-1
{
sum1 = sum1+C1[cnt+DFact];
}
mav1 = sum1/LENGTH;
DPO = C - mav1;
}
if 매수선 > 0 Then
Plot1(매수선,"매수선");
if 매도선 > 0 Then
Plot2(매도선,"매도선");
}
감사합니다.
2025-06-17
173
글번호 191819
지표