커뮤니티
검색식에서 다운이 됩니다.
2012-01-26 23:55:49
267
글번호 46975
다음 식은 분봉에서 macd osc 그래프의 swing 저점과 고점을 판단해서
봉의 저점과 고점에 표시해 주는 검색식입니다.
그런데 swinghigh_idx = SwingHighBar(1, arr_macdosc, 10, 1, 30-1); 라인만
들어가면 다운이 되네요.
아래는 전문입니다. 확인 부탁 드리겠습니다.
Input : shortPeriod(12), longPeriod(26), Period(9);
Var : value(0) , macdosc(0), i(0);
Var : swinglow_idx(0), swinghigh_idx(0);
Var : swinglow_idx_prev(0), swinghigh_idx_prev(0);
array: arr_macdosc[41](0);
value = MACD(shortPeriod, longPeriod);
for i = 40 downto 1 {
arr_macdosc[i] = arr_macdosc[i-1];
}
arr_macdosc[0] = value-ema(value,Period);
swinglow_idx_prev = swinglow_idx;
swinghigh_idx_prev = swinghigh_idx;
/*
swinglow_idx = SwingLowBar(1,L,10,1,100);
swinghigh_idx = SwingHighBar(1,H,10,1,100);
MessageLog(
"swinglow_idx_prev=%.f, swinglow_idx=%.f, curr L=%.f, L[swinglow_idx]=%.f, L diff = %.f",
swinglow_idx_prev, swinglow_idx, L, L[swinglow_idx], L[swinglow_idx]-L
);
*/
if CurrentBar > 40 then {
swinglow_idx = SwingLowBar(1, arr_macdosc, 10, 1, 30-1);
if swinglow_idx > 0 then // <- channel bar 가 그려짐.
// if swinglow_idx_prev > swinglow_idx then
Plot4(L[swinglow_idx], "swinglow_idx");
swinghigh_idx = SwingHighBar(1, arr_macdosc, 10, 1, 30-1);
MessageLog( "CurrentBar=%.f H=%.f L=%.f", CurrentBar, swinghigh_idx, swinglow_idx );
}
/*
if swinglow_idx > 0 then // <- channel bar 가 그려짐.
// if swinglow_idx_prev > swinglow_idx then
Plot4(L[swinglow_idx], "swinglow_idx");
if swinghigh_idx > 0 then // <- channel bar 가 그려짐.
// if swinghigh_idx_prev > swinghigh_idx then
Plot1(H[swinghigh_idx], "swinghigh_idx");
*/
//Plot1(value, "MACD");
//Plot2(ema(value,Period), "MACDSignal");
/*
if macdosc > 0 then
plot3(macdosc * 2, "MACDOscillator", RED);
else
Plot3(macdosc * 2, "MACDOscillator", BLUE);
PlotBaseLine1(0, "기준선1");
*/
답변 1
예스스탁 예스스탁 답변
2012-01-27 14:18:53
안녕하세요
예스스탁입니다.
arr_macdosc 변수는 배열변수입니다.
arr_macdosc[0]과 같이 배열변수는 방번호를 꼭 지정하셔서
수식에서 사용하셔야 합니다.
arr_macdosc과 같이 방번호를 지정하지 않으시면
에러가 발생하게 됩니다.
수정한 식입니다.
Input : shortPeriod(12), longPeriod(26), Period(9);
Var : value(0) , macdosc(0), i(0);
Var : swinglow_idx(0), swinghigh_idx(0);
Var : swinglow_idx_prev(0), swinghigh_idx_prev(0);
array: arr_macdosc[41](0);
value = MACD(shortPeriod, longPeriod);
for i = 40 downto 1 {
arr_macdosc[i] = arr_macdosc[i-1];
}
arr_macdosc[0] = value-ema(value,Period);
swinglow_idx_prev = swinglow_idx;
swinghigh_idx_prev = swinghigh_idx;
/*
swinglow_idx = SwingLowBar(1,L,10,1,100);
swinghigh_idx = SwingHighBar(1,H,10,1,100);
MessageLog(
"swinglow_idx_prev=%.f, swinglow_idx=%.f, curr L=%.f, L[swinglow_idx]=%.f, L diff = %.f",
swinglow_idx_prev, swinglow_idx, L, L[swinglow_idx], L[swinglow_idx]-L
);
*/
if CurrentBar > 40 then {
swinglow_idx = SwingLowBar(1, arr_macdosc[0], 10, 1, 30-1);
if swinglow_idx > 0 then // <- channel bar 가 그려짐.
// if swinglow_idx_prev > swinglow_idx then
Plot4(L[swinglow_idx], "swinglow_idx");
swinghigh_idx = SwingHighBar(1, arr_macdosc[0], 10, 1, 30-1);
MessageLog( "CurrentBar=%.f H=%.f L=%.f", CurrentBar, swinghigh_idx, swinglow_idx );
}
/*
if swinglow_idx > 0 then // <- channel bar 가 그려짐.
// if swinglow_idx_prev > swinglow_idx then
Plot4(L[swinglow_idx], "swinglow_idx");
if swinghigh_idx > 0 then // <- channel bar 가 그려짐.
// if swinghigh_idx_prev > swinghigh_idx then
Plot1(H[swinghigh_idx], "swinghigh_idx");
*/
//Plot1(value, "MACD");
//Plot2(ema(value,Period), "MACDSignal");
/*
if macdosc > 0 then
plot3(macdosc * 2, "MACDOscillator", RED);
else
Plot3(macdosc * 2, "MACDOscillator", BLUE);
PlotBaseLine1(0, "기준선1");
*/
즐거운 하루되세요
> birdfire 님이 쓴 글입니다.
> 제목 : 검색식에서 다운이 됩니다.
> 다음 식은 분봉에서 macd osc 그래프의 swing 저점과 고점을 판단해서
봉의 저점과 고점에 표시해 주는 검색식입니다.
그런데 swinghigh_idx = SwingHighBar(1, arr_macdosc, 10, 1, 30-1); 라인만
들어가면 다운이 되네요.
아래는 전문입니다. 확인 부탁 드리겠습니다.
Input : shortPeriod(12), longPeriod(26), Period(9);
Var : value(0) , macdosc(0), i(0);
Var : swinglow_idx(0), swinghigh_idx(0);
Var : swinglow_idx_prev(0), swinghigh_idx_prev(0);
array: arr_macdosc[41](0);
value = MACD(shortPeriod, longPeriod);
for i = 40 downto 1 {
arr_macdosc[i] = arr_macdosc[i-1];
}
arr_macdosc[0] = value-ema(value,Period);
swinglow_idx_prev = swinglow_idx;
swinghigh_idx_prev = swinghigh_idx;
/*
swinglow_idx = SwingLowBar(1,L,10,1,100);
swinghigh_idx = SwingHighBar(1,H,10,1,100);
MessageLog(
"swinglow_idx_prev=%.f, swinglow_idx=%.f, curr L=%.f, L[swinglow_idx]=%.f, L diff = %.f",
swinglow_idx_prev, swinglow_idx, L, L[swinglow_idx], L[swinglow_idx]-L
);
*/
if CurrentBar > 40 then {
swinglow_idx = SwingLowBar(1, arr_macdosc, 10, 1, 30-1);
if swinglow_idx > 0 then // <- channel bar 가 그려짐.
// if swinglow_idx_prev > swinglow_idx then
Plot4(L[swinglow_idx], "swinglow_idx");
swinghigh_idx = SwingHighBar(1, arr_macdosc, 10, 1, 30-1);
MessageLog( "CurrentBar=%.f H=%.f L=%.f", CurrentBar, swinghigh_idx, swinglow_idx );
}
/*
if swinglow_idx > 0 then // <- channel bar 가 그려짐.
// if swinglow_idx_prev > swinglow_idx then
Plot4(L[swinglow_idx], "swinglow_idx");
if swinghigh_idx > 0 then // <- channel bar 가 그려짐.
// if swinghigh_idx_prev > swinghigh_idx then
Plot1(H[swinghigh_idx], "swinghigh_idx");
*/
//Plot1(value, "MACD");
//Plot2(ema(value,Period), "MACDSignal");
/*
if macdosc > 0 then
plot3(macdosc * 2, "MACDOscillator", RED);
else
Plot3(macdosc * 2, "MACDOscillator", BLUE);
PlotBaseLine1(0, "기준선1");
*/