커뮤니티

부탁드립니다

프로필 이미지
파생돌이
2025-10-28 01:33:08
99
글번호 227384
답변완료

수고하십니다 아래수식을 오류 없게 수정부탁드립니다 //※※==>내부함수의입력값 2개 필요 수정요망??? 오류부분
Inputs: PivotLength(10), TrendLength(50), ShowProfile(true), ColorUp(Blue), ColorDn(Red); Variables: i(0), j(0), k(0), PH(0), PL(0), HighestH(0), LowestL(0), TrendLine(0), ATRValue(0), IsTrendUp(false), PivotDetected(false), StartBar(0), // Volume Profile 관련 TopPrice(0), BotPrice(0), Levels(0), StepSize(0), MidPrice(0), // POC 관련 POCPrice(0), POCVolume(0), POCBar(0), // Drawing Objects TLRef(0), TextRef(0), POCLineRef(0), PivotTextRef(0), // 색상 CurrentColor(0), ProfileColor(0), // Pivot 라벨 위치 PivotY(0), // Volume Profile 바 너비 BarWidth(0); Arrays: VolumeBins[1000](0), VPLines[1000](0), VPStartBars[100](0), VPEndBars[100](0); // ATR 계산 ATRValue = ATR(200) * 0.1; // Pivot 감지 PH = 0; PL = 0; // Pivot High 감지 if CurrentBar > PivotLength * 2 then begin if High[PivotLength] == Highest(High, 2 * PivotLength + 1) then PH = High[PivotLength]; end; // Pivot Low 감지 if CurrentBar > PivotLength * 2 then begin if Low[PivotLength] == Lowest(Low, 2 * PivotLength + 1) then PL = Low[PivotLength]; end; // 트렌드 계산 HighestH = Highest(High, TrendLength); LowestL = Lowest(Low, TrendLength); TrendLine = (HighestH + LowestL) / 2; // 트렌드 방향 결정 if High == HighestH then IsTrendUp = true; if Low == LowestL then IsTrendUp = false; // 색상 설정 if IsTrendUp == false then CurrentColor = ColorUp; else CurrentColor = ColorDn; // Pivot 감지 PivotDetected = false; if IsTrendUp == false then begin if PH > 0 then PivotDetected = true; end else begin if PL > 0 then PivotDetected = true; end; // Volume Profile 계산 if CurrentBar - PivotLength - StartBar > PivotLength then begin if PivotDetected then begin // 이전 POC 라인 연장 if POCLineRef > 0 then begin TL_SetEnd(POCLineRef, Date[PivotLength], Time[PivotLength], POCPrice); end; StartBar = CurrentBar - PivotLength; // 경계 설정 TopPrice = High[PivotLength]; BotPrice = Low[PivotLength]; for i = 0 to PivotLength * 2 begin if High[i] > TopPrice then TopPrice = High[i]; if Low[i] < BotPrice then BotPrice = Low[i]; end; // 레벨 계산 if ATRValue > 0 and (TopPrice - BotPrice) > 0 then begin Levels = IntPortion((TopPrice - BotPrice) / ATRValue); if Levels < 1 then Levels = 1; if Levels > 999 then Levels = 999; StepSize = (TopPrice - BotPrice) / Levels; // Volume Bins 초기화 for k = 0 to Levels begin VolumeBins[k] = 0; end; // Volume 수집 for i = 0 to PivotLength * 2 begin for k = 0 to Levels begin MidPrice = BotPrice + StepSize * k + StepSize / 2; if AbsValue(MidPrice - Close[i]) <= StepSize * 2 then VolumeBins[k] = VolumeBins[k] + Volume[i]; end; end; // POC (Point of Control) 찾기 POCVolume = 0; POCPrice = 0; POCBar = 0; for k = 0 to Levels begin if VolumeBins[k] > POCVolume then begin POCVolume = VolumeBins[k]; MidPrice = BotPrice + StepSize * k + StepSize / 2; POCPrice = MidPrice; // POC 바 위치 계산 (Volume 비율에 따라) if POCVolume > 0 then POCBar = Round((VolumeBins[k] / POCVolume) * PivotLength); //※※==>내부함수의입력값 2개 필요 수정요망??? else POCBar = 0; end; end; // Volume Profile 시각화 (Profile이 켜져 있을 때만) if ShowProfile then begin // 이전 Volume Profile 라인 삭제 for k = 0 to Levels begin if VPLines[k] > 0 then begin TL_Delete(VPLines[k]); VPLines[k] = 0; end; end; // Volume Profile 히스토그램 그리기 for k = 0 to Levels begin if VolumeBins[k] > 0 then begin MidPrice = BotPrice + StepSize * k + StepSize / 2; // 바 너비 계산 (최대 Volume 대비 비율) if POCVolume > 0 then BarWidth = Round((VolumeBins[k] / POCVolume) * PivotLength); //※※==>내부함수의입력값 2개 필요 수정요망??? else BarWidth = 0; // Volume Profile 바 그리기 if BarWidth > 0 then begin VPLines[k] = TL_New( Date[PivotLength], Time[PivotLength], MidPrice, Date[PivotLength - BarWidth], Time[PivotLength - BarWidth], MidPrice ); TL_SetColor(VPLines[k], CurrentColor); TL_SetSize(VPLines[k], 3); end; end; end; // POC 라인 그리기 if POCPrice > 0 and POCBar > 0 then begin if POCLineRef > 0 then TL_Delete(POCLineRef); POCLineRef = TL_New( Date[PivotLength - POCBar], Time[PivotLength - POCBar], POCPrice, Date[PivotLength - POCBar - 15], Time[PivotLength - POCBar - 15], POCPrice ); TL_SetColor(POCLineRef, CurrentColor); TL_SetSize(POCLineRef, 2); TL_SetExtRight(POCLineRef, false); // POC 라벨 if TextRef > 0 then Text_Delete(TextRef); TextRef = Text_New( Date[PivotLength - POCBar], Time[PivotLength - POCBar], POCPrice, NumToStr(POCVolume, 0) ); Text_SetColor(TextRef, CurrentColor); end; // Pivot 마커 if PivotTextRef > 0 then Text_Delete(PivotTextRef); if IsTrendUp == false then begin // Pivot High PivotY = PH; PivotTextRef = Text_New( Date[PivotLength], Time[PivotLength], PivotY, "●" ); Text_SetColor(PivotTextRef, CurrentColor); Text_SetLocation(PivotTextRef, Date[PivotLength], Time[PivotLength], PivotY + StepSize); end else begin // Pivot Low PivotY = PL; PivotTextRef = Text_New( Date[PivotLength], Time[PivotLength], PivotY, "●" ); Text_SetColor(PivotTextRef, CurrentColor); Text_SetLocation(PivotTextRef, Date[PivotLength], Time[PivotLength], PivotY - StepSize); end; end; end; end; end; // POC 라인을 현재 바까지 계속 연장 if POCLineRef > 0 and POCPrice > 0 then begin TL_SetEnd(POCLineRef, Date, Time, POCPrice); end; // 트렌드 라인 플롯 Plot1(TrendLine, "Trend", CurrentColor, Def, 4); // POC 레벨 플롯 (Profile이 꺼져 있을 때) if ShowProfile == False and POCPrice > 0 then Plot2(POCPrice, "POC Level", CurrentColor, Def, 2); else NoPlot(2);

지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-10-28 12:27:47

안녕하세요. 예스스탁입니다. Inputs: PivotLength(10), TrendLength(50), ShowProfile(true), ColorUp(Blue), ColorDn(Red); Variables: i(0), j(0), k(0), PH(0), PL(0), HighestH(0), LowestL(0), TrendLine(0), ATRValue(0), IsTrendUp(false), PivotDetected(false), StartBar(0), // Volume Profile 관련 TopPrice(0), BotPrice(0), Levels(0), StepSize(0), MidPrice(0), // POC 관련 POCPrice(0), POCVolume(0), POCBar(0), // Drawing Objects TLRef(0), TextRef(0), POCLineRef(0), PivotTextRef(0), // 색상 CurrentColor(0), ProfileColor(0), // Pivot 라벨 위치 PivotY(0), // Volume Profile 바 너비 BarWidth(0); Arrays: VolumeBins[1000](0), VPLines[1000](0), VPStartBars[100](0), VPEndBars[100](0); // ATR 계산 ATRValue = ATR(200) * 0.1; // Pivot 감지 PH = 0; PL = 0; // Pivot High 감지 if CurrentBar > PivotLength * 2 then begin if High[PivotLength] == Highest(High, 2 * PivotLength + 1) then PH = High[PivotLength]; end; // Pivot Low 감지 if CurrentBar > PivotLength * 2 then begin if Low[PivotLength] == Lowest(Low, 2 * PivotLength + 1) then PL = Low[PivotLength]; end; // 트렌드 계산 HighestH = Highest(High, TrendLength); LowestL = Lowest(Low, TrendLength); TrendLine = (HighestH + LowestL) / 2; // 트렌드 방향 결정 if High == HighestH then IsTrendUp = true; if Low == LowestL then IsTrendUp = false; // 색상 설정 if IsTrendUp == false then CurrentColor = ColorUp; else CurrentColor = ColorDn; // Pivot 감지 PivotDetected = false; if IsTrendUp == false then begin if PH > 0 then PivotDetected = true; end else begin if PL > 0 then PivotDetected = true; end; // Volume Profile 계산 if CurrentBar - PivotLength - StartBar > PivotLength then begin if PivotDetected then begin // 이전 POC 라인 연장 if POCLineRef > 0 then begin TL_SetEnd(POCLineRef, Date[PivotLength], Time[PivotLength], POCPrice); end; StartBar = CurrentBar - PivotLength; // 경계 설정 TopPrice = High[PivotLength]; BotPrice = Low[PivotLength]; for i = 0 to PivotLength * 2 begin if High[i] > TopPrice then TopPrice = High[i]; if Low[i] < BotPrice then BotPrice = Low[i]; end; // 레벨 계산 if ATRValue > 0 and (TopPrice - BotPrice) > 0 then begin Levels = IntPortion((TopPrice - BotPrice) / ATRValue); if Levels < 1 then Levels = 1; if Levels > 999 then Levels = 999; StepSize = (TopPrice - BotPrice) / Levels; // Volume Bins 초기화 for k = 0 to Levels begin VolumeBins[k] = 0; end; // Volume 수집 for i = 0 to PivotLength * 2 begin for k = 0 to Levels begin MidPrice = BotPrice + StepSize * k + StepSize / 2; if AbsValue(MidPrice - Close[i]) <= StepSize * 2 then VolumeBins[k] = VolumeBins[k] + Volume[i]; end; end; // POC (Point of Control) 찾기 POCVolume = 0; POCPrice = 0; POCBar = 0; for k = 0 to Levels begin if VolumeBins[k] > POCVolume then begin POCVolume = VolumeBins[k]; MidPrice = BotPrice + StepSize * k + StepSize / 2; POCPrice = MidPrice; // POC 바 위치 계산 (Volume 비율에 따라) if POCVolume > 0 then POCBar = Round((VolumeBins[k] / POCVolume) * PivotLength,0); //※※==>내부함수의입력값 2개 필요 수정요망??? else POCBar = 0; end; end; // Volume Profile 시각화 (Profile이 켜져 있을 때만) if ShowProfile then begin // 이전 Volume Profile 라인 삭제 for k = 0 to Levels begin if VPLines[k] > 0 then begin TL_Delete(VPLines[k]); VPLines[k] = 0; end; end; // Volume Profile 히스토그램 그리기 for k = 0 to Levels begin if VolumeBins[k] > 0 then begin MidPrice = BotPrice + StepSize * k + StepSize / 2; // 바 너비 계산 (최대 Volume 대비 비율) if POCVolume > 0 then BarWidth = Round((VolumeBins[k] / POCVolume) * PivotLength,0); //※※==>내부함수의입력값 2개 필요 수정요망??? else BarWidth = 0; // Volume Profile 바 그리기 if BarWidth > 0 then begin VPLines[k] = TL_New( Date[PivotLength], Time[PivotLength], MidPrice, Date[PivotLength - BarWidth], Time[PivotLength - BarWidth], MidPrice ); TL_SetColor(VPLines[k], CurrentColor); TL_SetSize(VPLines[k], 3); end; end; end; // POC 라인 그리기 if POCPrice > 0 and POCBar > 0 then begin if POCLineRef > 0 then TL_Delete(POCLineRef); POCLineRef = TL_New( Date[PivotLength - POCBar], Time[PivotLength - POCBar], POCPrice, Date[PivotLength - POCBar - 15], Time[PivotLength - POCBar - 15], POCPrice ); TL_SetColor(POCLineRef, CurrentColor); TL_SetSize(POCLineRef, 2); TL_SetExtRight(POCLineRef, false); // POC 라벨 if TextRef > 0 then Text_Delete(TextRef); TextRef = Text_New( Date[PivotLength - POCBar], Time[PivotLength - POCBar], POCPrice, NumToStr(POCVolume, 0) ); Text_SetColor(TextRef, CurrentColor); end; // Pivot 마커 if PivotTextRef > 0 then Text_Delete(PivotTextRef); if IsTrendUp == false then begin // Pivot High PivotY = PH; PivotTextRef = Text_New( Date[PivotLength], Time[PivotLength], PivotY, "●" ); Text_SetColor(PivotTextRef, CurrentColor); Text_SetLocation(PivotTextRef, Date[PivotLength], Time[PivotLength], PivotY + StepSize); end else begin // Pivot Low PivotY = PL; PivotTextRef = Text_New( Date[PivotLength], Time[PivotLength], PivotY, "●" ); Text_SetColor(PivotTextRef, CurrentColor); Text_SetLocation(PivotTextRef, Date[PivotLength], Time[PivotLength], PivotY - StepSize); end; end; end; end; end; // POC 라인을 현재 바까지 계속 연장 if POCLineRef > 0 and POCPrice > 0 then begin TL_SetEnd(POCLineRef, Date, Time, POCPrice); end; // 트렌드 라인 플롯 Plot1(TrendLine, "Trend", CurrentColor, Def, 4); // POC 레벨 플롯 (Profile이 꺼져 있을 때) if ShowProfile == False and POCPrice > 0 then Plot2(POCPrice, "POC Level", CurrentColor, Def, 2); else NoPlot(2); 즐거운 하루되세요