예스스탁
예스스탁 답변
2025-10-01 15:10:34.0
안녕하세요
예스스탁입니다.
B번식에 haO변수자체가 N/A입니다.
헤이킨아쉬 시가는 차트 첫봉과 그 이후로 구분하시면 됩니다.
IF Index == 0 THEN
haO = (O + C) / 2;
또한 B번의 PLOT6과 PLOT7은 상황에 따라 0아니면 종가가 저장되는데
0이 그려지면 Y축 스케일이 커지게 됩니다.
plot6,plot7은 종가가 저장될때만 표시되세 수정해 드립니다.
점그래프로 등으로 설정해서 보시기 바랍니다.
1. A
// === Heikin Ashi Candle ===
VAR : haO(0), haC(0), haH(0), haL(0);
// Heikin Ashi 종가
haC = (O + H + L + C) / 4;
// Heikin Ashi 시가 (재귀: 첫 봉 초기화)
IF Index == 0 THEN
haO = (O + C) / 2;
ELSE
haO = (haO[1] + haC[1]) / 2;
// HA 고가/저가
haH = MAXLIST(H, haO, haC);
haL = MINLIST(L, haO, haC);
// === 출력: Heikin Ashi 캔들 ===
PLOT1(haO); // Heikin Ashi Open
PLOT2(haH); // Heikin Ashi High
PLOT3(haL); // Heikin Ashi Low
PLOT4(haC); // Heikin Ashi Close
2. B
// === 입력 ===
INPUT : ShowArrows(1), ShowBaseline(1);
// === Heikin Ashi 캔들 계산 ===
VAR : haO(0), haC(0), haH(0), haL(0);
// HA Close
haC = (O + H + L + C) / 4;
// HA Open (시드 + 재귀) : CurrentBar 없이 [1] 체크로 처리
IF Index == 0 THEN
haO = (O + C) / 2;
ELSE
haO = (haO[1] + haC[1]) / 2;
// HA High / Low
haH = MAXLIST(H, haO, haC);
haL = MINLIST(L, haO, haC);
// === HA 캔들 출력 (메인 봉을 Heikin Ashi로 대체) ===
PLOT1(haO); // Open
PLOT2(haH); // High
PLOT3(haL); // Low
PLOT4(haC); // Close
// === 기준값 P (평라인) ===
VAR : P(0);
P = (haO + haC) / 2;
// === 상태/전환 판정 ===
VAR : isBull(False), isBear(False), upTrn(False), dnTrn(False);
isBull = haC >= haO;
isBear = haC < haO;
upTrn = isBull && !isBull[1]; // 양봉 시작
dnTrn = isBear && !isBear[1]; // 음봉 시작
// === 전환 시점의 P 값을 고정(계단 유지) ===
VAR : baseUp(0), baseDn(0);
// 최근 양봉 시작 시점의 P
IF upTrn THEN
baseUp = P;
ELSE
BEGIN
IF baseUp[1] == 0 THEN
baseUp = P; // 초기 시드
ELSE
baseUp = baseUp[1];
END;
// 최근 음봉 시작 시점의 P
IF dnTrn THEN
baseDn = P;
ELSE
BEGIN
IF baseDn[1] == 0 THEN
baseDn = P; // 초기 시드
ELSE
baseDn = baseDn[1];
END;
// === 최근 전환 방향 기억 (양봉=1, 음봉=0) ===
VAR : activeUp(0);
IF upTrn THEN
activeUp = 1;
ELSE
BEGIN
IF dnTrn THEN
activeUp = 0;
ELSE
activeUp = activeUp[1];
END;
// === 최종 기준선 선택 ===
VAR : BASELINE(0);
IF (baseUp[1] == 0) && (baseDn[1] == 0) THEN
BASELINE = P; // 전환 없을 때는 P로 시작
ELSE
BEGIN
IF activeUp == 1 THEN
BASELINE = baseUp;
ELSE
BASELINE = baseDn;
END;
// === 전환 화살표 시리즈 ===
VAR : sigUp(0), sigDn(0);
IF ShowArrows == 1 THEN
BEGIN
IF upTrn THEN
sigUp = C;
ELSE sigUp = 0;
IF dnTrn THEN
sigDn = C;
ELSE sigDn = 0;
END
ELSE
BEGIN
sigUp = 0;
sigDn = 0;
END;
// === 보조 출력 ===
// PLOT5: 기준선, PLOT6/7: 전환 화살표(▲/▼)
IF ShowBaseline == 1 THEN PLOT5(BASELINE);
if sigUp > 0 Then
PLOT6(sigUp);
Else
NoPlot(6);
if sigDn > 0 Then
PLOT7(sigDn);
Else
NoPlot(7);
즐거운 명절 되시기 바랍니다.
> 박두희 님이 쓴 글입니다.
> 제목 : 하이킨 아시 차트
> 안녕하세요.
봉캔들을 꽉 채우려고 하거든요
아래 수식 A,B에서 뭐가 잘 못 되었을까요?
A:
// === Heikin Ashi Candle ===
VAR : haO(0), haC(0), haH(0), haL(0);
// Heikin Ashi 종가
haC = (O + H + L + C) / 4;
// Heikin Ashi 시가 (재귀: 첫 봉 초기화)
IF CurrentBar == 1 THEN
haO = (O + C) / 2;
ELSE
haO = (haO[1] + haC[1]) / 2;
// HA 고가/저가
haH = MAXLIST(H, haO, haC);
haL = MINLIST(L, haO, haC);
// === 출력: Heikin Ashi 캔들 ===
PLOT1(haO); // Heikin Ashi Open
PLOT2(haH); // Heikin Ashi High
PLOT3(haL); // Heikin Ashi Low
PLOT4(haC); // Heikin Ashi Close
B:
// === 입력 ===
INPUT : ShowArrows(1), ShowBaseline(1);
// === Heikin Ashi 캔들 계산 ===
VAR : haO(0), haC(0), haH(0), haL(0);
// HA Close
haC = (O + H + L + C) / 4;
// HA Open (시드 + 재귀) : CurrentBar 없이 [1] 체크로 처리
IF haO[1] == 0 THEN
haO = (O + C) / 2;
ELSE
haO = (haO[1] + haC[1]) / 2;
// HA High / Low
haH = MAXLIST(H, haO, haC);
haL = MINLIST(L, haO, haC);
// === HA 캔들 출력 (메인 봉을 Heikin Ashi로 대체) ===
PLOT1(haO); // Open
PLOT2(haH); // High
PLOT3(haL); // Low
PLOT4(haC); // Close
// === 기준값 P (평라인) ===
VAR : P(0);
P = (haO + haC) / 2;
// === 상태/전환 판정 ===
VAR : isBull(False), isBear(False), upTrn(False), dnTrn(False);
isBull = haC >= haO;
isBear = haC < haO;
upTrn = isBull && !isBull[1]; // 양봉 시작
dnTrn = isBear && !isBear[1]; // 음봉 시작
// === 전환 시점의 P 값을 고정(계단 유지) ===
VAR : baseUp(0), baseDn(0);
// 최근 양봉 시작 시점의 P
IF upTrn THEN
baseUp = P;
ELSE
BEGIN
IF baseUp[1] == 0 THEN
baseUp = P; // 초기 시드
ELSE
baseUp = baseUp[1];
END;
// 최근 음봉 시작 시점의 P
IF dnTrn THEN
baseDn = P;
ELSE
BEGIN
IF baseDn[1] == 0 THEN
baseDn = P; // 초기 시드
ELSE
baseDn = baseDn[1];
END;
// === 최근 전환 방향 기억 (양봉=1, 음봉=0) ===
VAR : activeUp(0);
IF upTrn THEN
activeUp = 1;
ELSE
BEGIN
IF dnTrn THEN
activeUp = 0;
ELSE
activeUp = activeUp[1];
END;
// === 최종 기준선 선택 ===
VAR : BASELINE(0);
IF (baseUp[1] == 0) && (baseDn[1] == 0) THEN
BASELINE = P; // 전환 없을 때는 P로 시작
ELSE
BEGIN
IF activeUp == 1 THEN
BASELINE = baseUp;
ELSE
BASELINE = baseDn;
END;
// === 전환 화살표 시리즈 ===
VAR : sigUp(0), sigDn(0);
IF ShowArrows == 1 THEN
BEGIN
IF upTrn THEN
sigUp = C;
ELSE sigUp = 0;
IF dnTrn THEN
sigDn = C;
ELSE sigDn = 0;
END
ELSE
BEGIN
sigUp = 0;
sigDn = 0;
END;
// === 보조 출력 ===
// PLOT5: 기준선, PLOT6/7: 전환 화살표(▲/▼)
IF ShowBaseline == 1 THEN PLOT5(BASELINE);
PLOT6(sigUp);
PLOT7(sigDn);