답변완료
부탁드립니다 항상 감사합니다
var : cnt(0);
Array: WO , WH , WL , WC ; // 배열 크기 및 초기값 지정
// 월요일이거나 차트 시작 지점인 경우 → 새로운 주 시작
if DayOfWeek(Date) = 1 or Index = 0 then
Begin
WO[0] = O; // 주 시가
WH[0] = H; // 주 고가 초기화
WL[0] = L; // 주 저가 초기화
// 과거 데이터 1칸씩 이동 (최신 → 뒤로 밀기)
For cnt = 49 downto 1
Begin
WO[cnt] = WO[cnt - 1];
WH[cnt] = WH[cnt - 1];
WL[cnt] = WL[cnt - 1];
WC[cnt] = WC[cnt - 1];
End;
End;
// 주중 고가 갱신
if WH[0] > 0 and H > WH[0] then
WH[0] = H;
// 주중 저가 갱신
if WL[0] > 0 and L < WL[0] then
WL[0] = L;
// 종가는 매일 갱신
WC[0] = C;
// 시각화 출력
if WO[0] > 0 then
Begin
Plot1(WO[0], "주봉시가");
Plot2(WH[0], "주봉고가");
Plot3(WL[0], "주봉저가");
Plot
2.Input: 표시여부(True), 박스표시(True), 선표시(True), 텍스트표시(True), 연장일수(5);
Var: cnt(0), vtl(0), BoxID(0), TxtID(0);
Array: WO, WH, WL, WC;
If (DayOfWeek(Date) = 1 Or Index = 0) And 표시여부 Then
Begin
WO[0] = O;
WH[0] = H;
WL[0] = L;
For cnt = 49 Downto 1
Begin
WO[cnt] = WO[cnt - 1];
WH[cnt] = WH[cnt - 1];
WL[cnt] = WL[cnt - 1];
WC[cnt] = WC[cnt - 1];
End;
End;
If WH[0] > 0 And H > WH[0] Then WH[0] = H;
If WL[0] > 0 And L < WL[0] Then WL[0] = L;
WC[0] = C;
If WO[0] > 0 And 표시여부 Then
Begin
If 선표시 Then
Begin
vtl = TL_New(Date, Time, WO[0], Date + 연장일수, WO[0]); TL_SetColor(vtl, Cyan);
vtl = TL_New(Date, Time, WH[0], Date + 연장일수, WH[0]); TL_SetColor(vtl, Red);
vtl = TL_New(Date, Time, WL[0], Date + 연장일수, WL[0]); TL_SetColor(vtl, Blue);
vtl = TL_New(Date, Time, WC[0], Date + 연장일수, WC[0]); TL_SetColor(vtl, Yellow);
End;
If 박스표시 Then
Begin
BoxID = Box_New(Date, Time, WH[0], Date + 연장일수, WL[0]);
Box_SetFillColor(BoxID, PaleGreen);
End;
If 텍스트표시 Then
Begin
TxtID = Text_New(Date, Time, WH[0] + 1, "주 고가: " + NumToStr(WH[0], 2));
Text_SetColor(TxtID, Red);
End;
End;
3.Input: 표시여부(True), 박스표시(True), 선표시(True), 텍스트표시(True), 연장일수(5);
Var: cnt(0), vtl(0), BoxID(0), TxtID(0);
Array: WO, WH, WL, WC;
If (DayOfWeek(Date) = 1 Or Index = 0) And 표시여부 Then
Begin
WO[0] = O;
WH[0] = H;
WL[0] = L;
For cnt = 49 Downto 1
Begin
WO[cnt] = WO[cnt - 1];
WH[cnt] = WH[cnt - 1];
WL[cnt] = WL[cnt - 1];
WC[cnt] = WC[cnt - 1];
End;
End;
If WH[0] > 0 And H > WH[0] Then WH[0] = H;
If WL[0] > 0 And L < WL[0] Then WL[0] = L;
WC[0] = C;
If WO[0] > 0 And 표시여부 Then
Begin
If 선표시 Then
Begin
vtl = TL_New(Date, Time, WO[0], Date + 연장일수, WO[0]); TL_SetColor(vtl, Cyan);
vtl = TL_New(Date, Time, WH[0], Date + 연장일수, WH[0]); TL_SetColor(vtl, Red);
vtl = TL_New(Date, Time, WL[0], Date + 연장일수, WL[0]); TL_SetColor(vtl, Blue);
vtl = TL_New(Date, Time, WC[0], Date + 연장일수, WC[0]); TL_SetColor(vtl, Yellow);
End;
If 박스표시 Then
Begin
BoxID = Box_New(Date, Time, WH[0], Date + 연장일수, WL[0]);
Box_SetFillColor(BoxID, PaleGreen);
End;
If 텍스트표시 Then
Begin
TxtID = Text_New(Date, Time, WH[0] + 1, "주 고가: " + NumToStr(WH[0], 2));
Text_SetColor(TxtID, Red);
End;
End;
오류수정 부탁드립니다
2025-05-16
218
글번호 190860
지표
답변완료
항상 감사한 마음입니다. 지표 변환 가능할까요
// This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
// https://creativecommons.org/licenses/by-nc-sa/4.0/
// © BigBeluga
//@version=6
indicator('Volumatic Variable Index Dynamic Average [BigBeluga]', 'Volumatic VIDYA [BigBeluga]', overlay = true, max_lines_count = 500, max_labels_count = 500)
// INPUTS ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
// Input parameters for length, momentum, and source data
int vidya_length = input.int(10, 'VIDYA Length') // Length of the VIDYA calculation
int vidya_momentum = input.int(20, 'VIDYA Momentum') // Momentum length for VIDYA
float band_distance = input.float(2, 'Distance factor for upper/lower bands', step = 0.1) // Distance factor for upper/lower bands
// Define pivot parameters
int pivot_left_bars = 3 // Left side pivot bars
int pivot_right_bars = pivot_left_bars // Right side pivot bars
float source = input.source(close, 'Source') // Source for VIDYA calculation
// Define colors for up and down trends
color up_trend_color = input(#17dfad, '+', group = 'Color', inline = 'c') // Color for uptrend
color down_trend_color = input(#dd326b, '-', group = 'Color', inline = 'c') // Color for downtrend
bool shadow = input.bool(true, 'Shadow', group = 'Color', inline = 'c')
// Initialize variables for line, volume, and trend state
var line pivot_line = na // Variable for storing line references
var float volume_value = na // Variable for storing volume data
float smoothed_value = na // Smoothing variable for VIDYA trend levels
var bool is_trend_up = false // Boolean variable for tracking trend direction
// Initialize arrays for storing line and volume information
var array<line> liquidity_lines_low = array.new<line>(500) // Array for storing lines for lows
var array<line> liquidity_lines_high = array.new<line>(500) // Array for storing lines for highs
var float up_trend_volume = na // Volume accumulated during uptrend
var float down_trend_volume = na // Volume accumulated during downtrend
// }
// FUNCTIONS―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
// Define VIDYA (Variable Index Dynamic Average) function
vidya_calc(src, vidya_length, vidya_momentum) =>
float momentum = ta.change(src)
float sum_pos_momentum = math.sum(momentum >= 0 ? momentum : 0.0, vidya_momentum)
float sum_neg_momentum = math.sum(momentum >= 0 ? 0.0 : -momentum, vidya_momentum)
float abs_cmo = math.abs(100 * (sum_pos_momentum - sum_neg_momentum) / (sum_pos_momentum + sum_neg_momentum))
float alpha = 2 / (vidya_length + 1)
var float vidya_value = 0.0
vidya_value := alpha * abs_cmo / 100 * src + (1 - alpha * abs_cmo / 100) * nz(vidya_value[1])
ta.sma(vidya_value, 15)
// Method to extend lines and add labels for liquidity levels
method extend_liquidity_lines(array<line> line_array, float price_level, bool is_cross, volume_val) =>
if line_array.size() > 0 and last_bar_index - bar_index < 5000
for i = 0 to line_array.size() - 1 by 1
if i < line_array.size()
line liquidity_line = line_array.get(i)
float current_line_level = line.get_y2(liquidity_line)
bool price_cross = is_cross ? price_level < current_line_level and price_level[1] >= current_line_level : price_level > current_line_level and price_level[1] <= current_line_level
bool is_short_line = bar_index - line.get_x1(liquidity_line) < 50
if price_cross and is_short_line
line.set_x2(liquidity_line, bar_index)
line_array.remove(i)
// Add volume label to the liquidity zone
label.new(bar_index - 1, price_level[1], str.tostring(volume_val, format.volume), color = color.rgb(0, 0, 0, 99), style = is_cross ? label.style_label_lower_left : label.style_label_upper_left, textcolor = chart.fg_color, size = size.small)
// Add a circle label to represent liquidity zone
label.new(bar_index - 1, price_level[1], text = '◉', color = #00000003, textcolor = is_cross ? down_trend_color : up_trend_color, style = label.style_label_center, size = size.normal)
// }
// CALCULATIONS――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
// Calculate the Average True Range (ATR)
float atr_value = ta.atr(200) // ATR calculation with length of 200
// Calculate the VIDYA (Variable Index Dynamic Average)
vidya_value = vidya_calc(source, vidya_length, vidya_momentum)
// Calculate upper and lower bands based on VIDYA and ATR
float upper_band = vidya_value + atr_value * band_distance
float lower_band = vidya_value - atr_value * band_distance
// Detect trend direction using crossovers of source with bands
if ta.crossover(source, upper_band)
is_trend_up := true
is_trend_up
if ta.crossunder(source, lower_band)
is_trend_up := false
is_trend_up
// Set trend-based smoothing variable
if is_trend_up
smoothed_value := lower_band
smoothed_value
if not is_trend_up
smoothed_value := upper_band
smoothed_value
if ta.change(is_trend_up)
smoothed_value := na
smoothed_value
// Calculate pivot highs and lows for price action
bool pivot_high = not na(ta.pivothigh(pivot_left_bars, pivot_right_bars))
bool pivot_low = not na(ta.pivotlow(close, pivot_left_bars, pivot_right_bars))
// Create and store lines for pivot lows (support zones)
if low[pivot_right_bars] > smoothed_value and pivot_low
pivot_line := line.new(bar_index[pivot_right_bars], low[pivot_right_bars], bar_index[pivot_right_bars] + 5, low[pivot_right_bars], color = color.new(up_trend_color, 50))
liquidity_lines_low.push(pivot_line)
volume_value := math.sum(volume, pivot_right_bars + pivot_left_bars) / (pivot_right_bars + pivot_left_bars)
volume_value
// Create and store lines for pivot highs (resistance zones)
if high[pivot_right_bars] < smoothed_value and pivot_high
pivot_line := line.new(bar_index[pivot_right_bars], high[pivot_right_bars], bar_index[pivot_right_bars] + 5, high[pivot_right_bars], color = color.new(down_trend_color, 50))
liquidity_lines_high.push(pivot_line)
volume_value := math.sum(-volume, pivot_right_bars + pivot_left_bars) / (pivot_right_bars + pivot_left_bars)
volume_value
// Extend lines to track price movements
liquidity_lines_high.extend_liquidity_lines(smoothed_value, true, volume_value)
liquidity_lines_low.extend_liquidity_lines(smoothed_value, false, volume_value)
// Detect changes in the trend direction
bool trend_cross_up = not is_trend_up[1] and is_trend_up
bool trend_cross_down = not is_trend_up and is_trend_up[1]
// Reset volume counters when trend changes
if ta.change(trend_cross_up) or ta.change(trend_cross_down)
up_trend_volume := 0
down_trend_volume := 0
down_trend_volume
// Accumulate volume during trends
if not(ta.change(trend_cross_up) or ta.change(trend_cross_down))
up_trend_volume := up_trend_volume + (close > open ? volume : 0)
down_trend_volume := down_trend_volume + (close < open ? volume : 0)
down_trend_volume
// Calculate average volume
float avg_volume_delta = (up_trend_volume + down_trend_volume) / 2
// Determine the color of the trend
color trend_color = is_trend_up ? up_trend_color : not is_trend_up ? down_trend_color : chart.fg_color
// Calculate delta volume percentage
string delta_volume = str.tostring((up_trend_volume - down_trend_volume) / avg_volume_delta * 100, format.percent) == 'NaN%' ? '0%' : str.tostring((up_trend_volume - down_trend_volume) / avg_volume_delta * 100, format.percent)
// }
// PLOT ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
// Display labels for volume and trend statistics on the last bar
if barstate.islast
label.delete(label.new(bar_index, smoothed_value, 'Buy: ' + str.tostring(up_trend_volume, format.volume) + '₩n Sell: ' + str.tostring(down_trend_volume, format.volume) + '₩nDelta Volume: ' + delta_volume, color = color.new(trend_color, 90), style = is_trend_up ? label.style_label_upper_left : label.style_label_lower_left, textcolor = chart.fg_color)[1])
label.delete(label.new(bar_index, smoothed_value, text = '✪', color = #00000003, textcolor = trend_color, style = label.style_label_center, size = size.large)[1])
// Plot the VIDYA trend line
p1 = plot(smoothed_value, color = trend_color, linewidth = 2, style = plot.style_linebr)
p2 = plot(hl2, display = display.none)
// Fill between the plot and the VIDYA line
fill(p1, p2, smoothed_value, hl2, color.new(trend_color, shadow ? 80 : 100), na)
// Plot trend change markers (up and down arrows)
plotshape(series = trend_cross_up[1] ? smoothed_value[0] : na, title = 'Trend Up', style = shape.labelup, location = location.absolute, color = color.new(up_trend_color, 50), text = '▲', textcolor = chart.fg_color)
plotshape(series = trend_cross_down[1] ? smoothed_value[0] : na, title = 'Trend Down', style = shape.labeldown, location = location.absolute, color = color.new(down_trend_color, 50), text = '▼', textcolor = chart.fg_color)
// }
2025-05-16
325
글번호 190859
지표
답변완료
오류
작성해주신 코드2개 전부다 차트에 적용이 되질않습니다
1.
input: 기준배율(1.8), 익절비율(1.01), 손절비율(0.995),
진입선색(cyan), 익절선색(green), 손절선색(red);
var:
기준거래량(0), 중심선(0), 제곱합(0), 분산(0), 표준편차(0), BB상단(0),
ma5(0), ma20(0),
진입가(0), 익절선(0), 손절선(0),
신호발생(false), 매도출력(false),
ID_진입선(0), ID_익절선(0), ID_손절선(0), ID_txt(0);
// === 기준 계산 ===
기준거래량 = ma(volume, 20);
중심선 = ma(Close, 20);
제곱합 = ma(Close * Close, 20);
분산 = 제곱합 - 중심선 * 중심선;
표준편차 = SquareRoot(분산);
BB상단 = 중심선 + 표준편차 * 2;
ma5 = ma(Close, 5);
ma20 = ma(Close, 20);
// === 매수 신호 ===
if (신호발생 == false) and
(volume > 기준거래량 * 기준배율) and
(Close > BB상단) and
(Close > Open) and
((Close - Open) > (High - Low) * 0.6) and
(ma5 > ma20) then
begin
// 기존 선 삭제
TL_Delete(ID_진입선);
TL_Delete(ID_익절선);
TL_Delete(ID_손절선);
진입가 = Close;
익절선 = 진입가 * 익절비율;
손절선 = 진입가 * 손절비율;
// 진입선
ID_진입선 = TL_New(sdate, stime, 진입가,NextBarSdate,NextBarStime,진입가);
TL_SetColor(ID_진입선, 진입선색);
TL_SetSize(ID_진입선, 2);
// 익절선
ID_익절선 = TL_New(sdate, stime, 익절선, NextBarSdate, NextBarStime, 익절선);
TL_SetColor(ID_익절선, 익절선색);
TL_SetSize(ID_익절선, 2);
// 손절선
ID_손절선 = TL_New(sdate, stime, 손절선, NextBarSdate, NextBarStime, 손절선);
TL_SetColor(ID_손절선, 손절선색);
TL_SetSize(ID_손절선, 2);
신호발생 = true;
매도출력 = false;
end;
// === 매도 신호 ===
if (신호발생 == true) and (매도출력 == false) then
begin
if (Close >= 익절선) or (Close <= 손절선) then
begin
ID_txt = Text_New(date, time, High, "SELL");
Text_SetColor(ID_txt, red);
매도출력 = true;
end;
TL_SetEnd(ID_진입선,sDate,sTime,진입가);
TL_SetEnd(ID_익절선,sDate,sTime,익절선);
TL_SetEnd(ID_손절선,sDate,sTime,손절선);
end;
// === 상태 초기화 ===
if (매도출력 == true) and
((Close > 익절선) or (Close < 손절선)) then
begin
신호발생 = false;
매도출력 = false;
end;
2.
Input: 기준배율(1.8), 익절비율(1.02), 손절비율(0.98);
Var: 기준거래량(0), 진입가(0), 익절가(0), 손절가(0),
진입중(false), 매도완료(false), 승수(0), 총수(0), 승률(0);
// --- 거래 조건 ---
기준거래량 = Average(volume, 20);
If 진입중 == false and 매도완료 == false Then
Begin
If volume > 기준거래량 and
Close > BollBandUp(20, 2) and
Close > Open and
(Close - Open) > (High - Low) * 0.6 Then
Begin
진입가 = Close;
익절가 = 진입가 * 익절비율;
손절가 = 진입가 * 손절비율;
진입중 = true;
총수 = 총수+1;
Text_New(date, time, Close, "BUY");
End;
End;
// --- 청산 조건 ---
If 진입중 == true and 매도완료 == false Then
Begin
If Close >= 익절가 or Close <= 손절가 Then
Begin
If Close >= 익절가 Then
승수 = 승수+ 1;
Text_New(date, time, Close, "SELL");
매도완료 = true;
End;
End;
// --- 상태 초기화 ---
If 매도완료 == true and (Close > 익절가or Close < 손절가) Then
Begin
진입중 = false;
매도완료 = false;
End;
// --- 승률 계산 ---
If 총수 > 0 Then
승률 = 승수 / 총수 * 100.0;
Plot1(승률, "승률");
2025-05-16
211
글번호 190858
지표