답변완료
수식문의
수고많으십니다.
항상 감사드립니다.
그물망 차트를 이용하여 시스템을 만들어 보려합니다.
1. 매수진입
1-1 매수진입 조건
- 이동평균선(ex:단순 20)이 상승추세 일 것.
- 그물망 이평이 모두 상승추세 일 것.
- ADX지표값이 20 이상 일 것.
1-2 매수청산 조건
- 그물망 10개중 5개가 상승에서 하락으로 추세전환 일 것
2. 매도진입
1-1 매도진입 조건
- 단순 이동평균선(ex:단순 20)이 하락추세 일 것.
- 그물망 이평이 모두 하락 추세 일 것.
- ADX지표값이 20 이상 일 것.
1-2 매수청산 조건
- 그물망 10개중 5개가 하락에서 상승으로 추세전환 일 것
지표값은 모두 변경 가능하게 변수값으로 부탁드립니다.
* 첨부한 그림의 그물망은 아래의 수식을 이용한 것입니다
Input : Period(5),간격(1);
var : tx(0);
var1 = Ema(C,Period+간격*0);//5
var2 = Ema(C,Period+간격*1);
var3 = Ema(C,Period+간격*2);
var4 = Ema(C,Period+간격*3);
var5 = Ema(C,Period+간격*4);
var6 = Ema(C,Period+간격*5);//10
var7 = Ema(C,Period+간격*6);
var8 = Ema(C,Period+간격*7);
var9 = Ema(C,Period+간격*8);
var10 = Ema(C,Period+간격*9);
var11 = Ema(C,Period+간격*10);//15
var12 = Ema(C,Period+간격*11);
var13 = Ema(C,Period+간격*12);
var14 = Ema(C,Period+간격*13);
var15 = Ema(C,Period+간격*14);
var16 = Ema(C,Period+간격*15);
Plot1(var1,"지수이평0",IFf(var1>var1[1],RED,BLUE));//5
Plot2(var2,"지수이평1",IFf(var2>var2[1],RED,BLUE));
Plot3(var3,"지수이평2",IFf(var3>var3[1],RED,BLUE));
Plot4(var4,"지수이평3",IFf(var4>var4[1],RED,BLUE));
Plot5(var5,"지수이평4",IFf(var5>var5[1],RED,BLUE));
Plot6(var6,"지수이평5",IFf(var6>var6[1],RED,BLUE));//10
Plot7(var7,"지수이평6",IFf(var7>var7[1],RED,BLUE));
Plot8(var8,"지수이평7",IFf(var8>var8[1],RED,BLUE));
Plot9(var9,"지수이평8",IFf(var9>var9[1],RED,BLUE));
Plot10(var10,"지수이평9",IFf(var10>var10[1],RED,BLUE));
Plot11(var11,"지수이평10",IFf(var11>var11[1],RED,BLUE));//15
Plot12(var12,"지수이평11",IFf(var12>var12[1],RED,BLUE));
Plot13(var13,"지수이평12",IFf(var13>var13[1],RED,BLUE));
Plot14(var14,"지수이평13",IFf(var14>var14[1],RED,BLUE));
Plot15(var15,"지수이평14",IFf(var15>var15[1],RED,BLUE));
Plot16(var16,"지수이평15",IFf(var16>var16[1],RED,BLUE));//20
if CrossUp(C,var1) Then
{
tx = Text_New(sDate,sTime,H,"U");
Text_SetStyle(tx,3,1);
}
if CrossDown(c,var1) Then
{
tx = Text_New(sDate,sTime,H,"D");
Text_SetStyle(tx,3,1);
}
미리 감사드립니다
2025-06-29
226
글번호 192169
시스템
답변완료
수식 부탁드립니다
타주기 적용 부탁드립니다.
input : length(100);
var : trend(False),trend_value(nan),trend_color(0);
var : up_color(0),dn_color(0),atr_value(0);
var : alpha(0),ATRV(0);
var : sma_high(0),sma_low(0);
var : signal_up(False),signal_down(False);
up_color = Green;
dn_color = Red;
alpha = 1 / 200 ;
ATrV = IFf(IsNan(ATrV[1]) == true, ma(TrueRange,200) , alpha * TrueRange + (1 - alpha) * IFf(isnan(ATrV[1])==true,0,ATrV[1]));
atr_value = ma(ATrV, 200) * 0.8;
sma_high = ma(high, length) + atr_value;
sma_low = ma(low, length) - atr_value;
if CrossUp(close, sma_high) Then
trend = true;
if CrossDown(close, sma_low) Then
trend = false;
trend_value = IFf(trend, sma_low, sma_high);
trend_color = iff(trend , up_color , IFf(trend == False, dn_color, Black));
signal_up = trend != trend[1] and trend[1] == False;
signal_down = trend != trend[1] and trend[1] == true;
if trend == true Then
Plot1(trend_value,"trend true",trend_color);
Else
NoPlot(1);
if trend == False Then
Plot2(trend_value,"trend False",trend_color);
Else
NoPlot(2);
2025-06-29
243
글번호 192167
지표
답변완료
부틱드립니다
수고하십니다
예스로 부탁드립니다
// This Pine S cript™ code is subject to the terms of the Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © UAlgo
//@version=5
indicator('Log Regression Channel [UAlgo]',shorttitle = 'Log Regression Channel [UAlgo]', overlay = true, max_lines_count = 500)
source_input = input.source(close, title = "Source",group = "Log Regression Channel [UAlgo]")
length_input = input.int(100, title='Length',group = "Log Regression Channel [UAlgo]")
multiplier_input = input.int(2, title='Deviation Multiplier',group = "Log Regression Channel [UAlgo]")
label_color = input.color(color.red, title='Label Color',group = "Log Regression Channel [UAlgo]")
label_size_option = input.string(title='Label Size', defval='small', options=['small', 'normal', 'large', 'huge'],group = "Log Regression Channel [UAlgo]")
var float[] series_price = array.new_float(length_input)
var int[] series_time = array.new_int(length_input)
array.unshift(series_price, source_input)
array.pop(series_price)
array.unshift(series_time, bar_index)
array.pop(series_time)
var line[] reg_lines = array.new_line()
var line[] dev_up_lines = array.new_line()
var line[] dev_down_lines = array.new_line()
var label r_squared_label = label.new(x = na, y = na, style = label.style_label_upper_right, color = #00000000, textcolor = color.new(#FF1493, 0), size=size.large, textalign = text.align_right)
float[] dev_up_series = array.new_float()
float[] dev_down_series = array.new_float()
var int line_step = na
var int line_count = na
if barstate.isfirst
line_count := math.min(length_input, 250)
for i = 0 to line_count - 1
array.unshift(reg_lines, line.new(x1=na, y1=na, x2=na, y2=na, color=color.red, style=line.style_solid))
if length_input > 250
line_step := math.ceil(length_input / 250)
else
line_step := 1
for i = 0 to math.floor(line_count / 2) - 1
array.unshift(dev_up_lines, line.new(x1=na, y1=na, x2=na, y2=na, color=color.new(#00FFFF, 0), style=line.style_solid))
array.unshift(dev_down_lines, line.new(x1=na, y1=na, x2=na, y2=na, color=color.new(#00FF00, 0), style=line.style_solid))
if barstate.islast
int _length_price = array.size(series_price)
int _length_time = array.size(series_time)
float[] _log_price_array = array.new_float(_length_price)
float[] _log_time_array = array.new_float(_length_time)
for _index = 0 to _length_price - 1
array.set(_log_price_array, _index, math.log(array.get(series_price, _index)))
array.set(_log_time_array, _index, math.log(array.get(series_time, _index)))
float _total_log_time = array.sum(_log_time_array)
float _total_log_price = array.sum(_log_price_array)
float _total_log_time_price = 0.0
float _total_log_time_sq = 0.0
float _total_log_price_sq = 0.0
if _length_price == _length_time
for _index = 0 to _length_price - 1
float _log_time_val = nz(array.get(_log_time_array, _index))
float _log_price_val = nz(array.get(_log_price_array, _index))
_total_log_time_price := _total_log_time_price + _log_time_val * _log_price_val
_total_log_time_sq := _total_log_time_sq + math.pow(_log_time_val, 2)
_total_log_price_sq := _total_log_price_sq + math.pow(_log_price_val, 2)
_total_log_price_sq
float _intercept = (_total_log_price * _total_log_time_sq - _total_log_time * _total_log_time_price) / (_length_time * _total_log_time_sq - math.pow(_total_log_time, 2))
float _slope_coef = (_length_time * _total_log_time_price - _total_log_time * _total_log_price) / (_length_time * _total_log_time_sq - math.pow(_total_log_time, 2))
float[] _predictions_array = array.new_float()
for _index = 0 to _length_price - 1
float _predicted_val = _intercept + _slope_coef * array.get(_log_time_array, _index)
array.push(_predictions_array, _predicted_val)
_slope = (array.get(_predictions_array, 0) - array.get(_predictions_array, _length_price - 1)) / (array.get(_log_time_array, 0) - array.get(_log_time_array, _length_time - 1))
_mean_log_price = array.avg(_log_price_array)
float _sum_squared_residuals = 0.0
float _sum_squared_totals = 0.0
for _index = 0 to _length_price - 1
float _predicted = array.get(_predictions_array, _index)
float _log_price_val = array.get(_log_price_array, _index)
_sum_squared_residuals := _sum_squared_residuals + math.pow(_predicted - _log_price_val, 2)
_sum_squared_totals := _sum_squared_totals + math.pow(_mean_log_price - _log_price_val, 2)
_sum_squared_totals
_r_squared = 1 - _sum_squared_residuals / _sum_squared_totals
float _sum_squared_errors = 0
for _index = 0 to _length_price - 1
_sum_squared_errors += math.pow(array.get(_predictions_array, _index) - array.get(_log_price_array, _index), 2)
_std_dev = math.sqrt(_sum_squared_errors / _length_price)
for i = 0 to array.size(_predictions_array) - 1
array.push(dev_up_series, math.exp(array.get(_predictions_array, i) + multiplier_input * _std_dev))
array.push(dev_down_series, math.exp(array.get(_predictions_array, i) - multiplier_input * _std_dev))
for i = 0 to array.size(_predictions_array) - 2 - line_step by line_step
line.set_xy1(array.get(reg_lines, i / line_step), x=bar_index - i, y=math.exp(array.get(_predictions_array, i)))
line.set_xy2(array.get(reg_lines, i / line_step), x=bar_index - i - line_step, y=math.exp(array.get(_predictions_array, i + line_step)))
for i = 0 to array.size(dev_up_series) - 2 - line_step by line_step * 2
line.set_xy1(array.get(dev_up_lines, i / (line_step * 2)), x=bar_index - i, y=array.get(dev_up_series, i))
line.set_xy2(array.get(dev_up_lines, i / (line_step * 2)), x=bar_index - i - line_step, y=array.get(dev_up_series, i + line_step))
line.set_xy1(array.get(dev_down_lines, i / (line_step * 2)), x=bar_index - i, y=array.get(dev_down_series, i))
line.set_xy2(array.get(dev_down_lines, i / (line_step * 2)), x=bar_index - i - line_step, y=array.get(dev_down_series, i + line_step))
label.set_xy(r_squared_label, x = bar_index + 5, y = array.get(dev_down_series, 0))
label.set_text(r_squared_label, text = "R " + str.tostring(math.sqrt(_r_squared)))
label.set_textcolor(r_squared_label, label_color)
label.set_size(r_squared_label, label_size_option)
2025-06-28
250
글번호 192165
지표