커뮤니티

하이킨 아시 차트

프로필 이미지
박두희
2025-10-01 14:07:21.0
54
글번호 194446
답변완료
안녕하세요. 봉캔들을 꽉 채우려고 하거든요 아래 수식 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);
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

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);