CONVERSION INDICADOR TRADINGVIEW:Árbol de Decisión
Forums › ProRealTime foro Español › Soporte ProBuilder › CONVERSION INDICADOR TRADINGVIEW:Árbol de Decisión
- This topic has 4 replies, 2 voices, and was last updated 4 months ago by Iván.
-
-
08/06/2024 at 12:51 PM #236167
¿Qué es un Árbol de Decisión?
Un árbol de decisión es una herramienta de modelado predictivo que se utiliza en estadísticas, minería de datos y aprendizaje automático. Se llama “árbol” porque su estructura se asemeja a un árbol con ramas. Aquí tienes una explicación básica:
- Nodos: Cada nodo del árbol representa una pregunta o condición sobre los datos.
- Ramas: Cada rama representa una posible respuesta o resultado de la pregunta.
- Hojas: Las hojas son los nodos finales que representan la decisión o clasificación final.
¿Cómo Funciona?
- Inicio: Comienza en el nodo raíz (la primera pregunta).
- Decisiones: En cada nodo, se hace una pregunta y se sigue la rama correspondiente según la respuesta.
- Resultado: Se continúa hasta llegar a una hoja, que da la decisión final.
¿Qué Hace el Código Anterior?
El código anterior crea un indicador en TradingView que utiliza un árbol de decisión para generar señales de compra y venta basadas en varios indicadores técnicos (RSI, MACD, medias móviles) y los caminos de decisión generados por la librería
FunctionDecisionTree
.Desglose del Código:
- Importar Librería: Importa la librería
FunctionDecisionTree
que contiene la función para generar caminos de decisión. - Parámetros de Entrada: Define los parámetros de entrada como la profundidad del árbol, el número de caminos y el número de pesos.
- Inicialización de Pesos: Crea un array de pesos que se utilizarán en el árbol de decisión.
- Generación de Caminos de Decisión: Utiliza la función
decision_tree
para generar caminos de decisión basados en los pesos y la profundidad especificada. - Indicadores Técnicos: Calcula varios indicadores técnicos como las medias móviles, RSI y MACD.
- Generar Señales: Genera señales de compra y venta basadas en los caminos de decisión y los indicadores técnicos.
- Plotear Señales: Muestra las señales de compra y venta en el gráfico con flechas hacia arriba (BUY) y hacia abajo (SELL).
08/06/2024 at 12:53 PM #236168FunctionDecisionTree123456789101112131415161718192021222324252627282930313233343536373839404142434445// © RicardoSantos//@version=5// @description Method to generate decision tree based on weights.library(title='FunctionDecisionTree')// @function Method to generate decision tree based on weights.// @param weights float array, weights for decision consideration.// @param depth int, depth of the tree.// @returns int arrayexport decision_tree(float[] weights, int depth) => //{int _size_w = array.size(id=weights)//int[] _path = array.new_int(size=0, initial_value=0)int _sumweights = math.ceil(array.sum(id=weights))if _size_w > 0 and depth > 0 and _sumweights == 1for _d = 1 to depth by 1for _w = 0 to 999 by 1int _select_weight_index = int(math.random(max=_size_w))float _rng = math.random(max=1.0)float _weight = array.get(id=weights, index=_select_weight_index)if _weight >= _rngarray.push(id=_path, value=_select_weight_index)break_path//{ usage:// Input Parameters:int depth = input.int(defval=1, minval=1)int paths = input.int(defval=2, minval=1)int number_of_weights = input.int(defval=2, minval=1)// Array to contain weights, sum of array values must be 1.var float[] node_weights = array.new_float(size=number_of_weights, initial_value=0)if barstate.isfirstfloat _weight = 1.0 / number_of_weightsfor _i=1 to number_of_weightsarray.set(node_weights, _i-1, _weight)string t = ''for _p = 1 to paths by 1_path = decision_tree(node_weights, depth)t := t + '\nPath ' + str.tostring(_p, '#') + ': ' + str.tostring(_path)tvar label la = label.new(bar_index, 0.0, t)//{ remarks://}}}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657//@version=5indicator("Decision Tree Indicator with Technical Indicators and Signals", overlay=true)// Importar la libreríaimport RicardoSantos/FunctionDecisionTree/1 as dt// Parámetros de entradadepth = input.int(defval=3, minval=1, title="Depth of the Tree")paths = input.int(defval=2, minval=1, title="Number of Paths")number_of_weights = input.int(defval=2, minval=1, title="Number of Weights")// Array para contener los pesos, la suma de los valores del array debe ser 1.var float[] node_weights = array.new_float(size=number_of_weights, initial_value=0)if barstate.isfirstfloat _weight = 1.0 / number_of_weightsfor _i=0 to number_of_weights - 1array.set(node_weights, _i, _weight)// Generar caminos de decisiónstring t = ''var int[] decision_paths = naif barstate.islastdecision_paths := array.new_int(0)for _p = 1 to paths by 1_path = dt.decision_tree(node_weights, depth)for val in _patharray.push(decision_paths, val)t := t + '\nPath ' + str.tostring(_p, '#') + ': ' + str.tostring(_path)// Mostrar los caminos en el gráficovar label la = naif barstate.islastla := label.new(bar_index, na, t, color=color.blue, textcolor=color.white, style=label.style_label_down, size=size.small)label.set_xy(la, bar_index, high)// Indicadores técnicossma_short = ta.sma(close, 14)sma_long = ta.sma(close, 50)rsi = ta.rsi(close, 14)[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)// Plotear indicadores técnicosplot(sma_short, color=color.green, title="SMA 14")plot(sma_long, color=color.red, title="SMA 50")hline(70, "RSI Overbought", color=color.red)hline(30, "RSI Oversold", color=color.green)plot(rsi, color=color.blue, title="RSI")plot(macdLine, color=color.orange, title="MACD Line")plot(signalLine, color=color.purple, title="Signal Line")// Generar señales de compra y venta basadas en indicadores técnicos y caminos de decisiónbuy_signal = (not na(decision_paths)) and (array.size(decision_paths) > 0) and (array.get(decision_paths, 0) == 1) and (rsi < 30) and (macdLine > signalLine) and (sma_short > sma_long)sell_signal = (not na(decision_paths)) and (array.size(decision_paths) > 0) and (array.get(decision_paths, 0) == 0) and (rsi > 70) and (macdLine < signalLine) and (sma_short < sma_long)// Plotear señales de compra y ventaplotshape(series=buy_signal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY")plotshape(series=sell_signal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL")08/06/2024 at 12:57 PM #23616908/06/2024 at 10:24 PM #236186Decision Tree Indicator1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374// Function Decision Tree Indicator with Technical Indicators and Signals// Input ParametersDepthOfTree = 3NumberOfPaths = 2NumberOfWeights = 2// Array to contain weights, sum of array values must be 1.NodeWeights = []for i = 1 to NumberOfWeights doNodeWeights[i] = 1.0 / NumberOfWeightsnext// Function to generate decision tree based on weightsdecisionTree = []sizeW = 0sumWeights = 0if arraySize(NodeWeights) > 0 and DepthOfTree > 0 thensizeW = arraySize(NodeWeights)sumWeights = round(arraySum(NodeWeights))if sumWeights == 1 thenfor d = 1 to DepthOfTree dofor w = 0 to 999 doselectWeightIndex = round(random * (sizeW - 1)) + 1rng = randomweight = NodeWeights[selectWeightIndex]if weight >= rng thendecisionTree[size(decisionTree)+1] = selectWeightIndexbreakendifnextnextendifendif// Generate decision pathsDecisionPaths = []pathStr = ""for p = 1 to NumberOfPaths dopath = decisionTreefor val = 1 to size(path) doDecisionPaths[size(DecisionPaths)+1] = path[val]nextpathStr = pathStr + "\nPath " + p + ": " + arrayToString(path)next// Technical IndicatorsSmaShort = Average[14](Close)SmaLong = Average[50](Close)Rsi = RSI[14](Close)MacdLine = MACDLine[12, 26, 9](Close)SignalLine = Signal[12, 26, 9](Close)// Generate Buy and Sell signals based on technical indicators and decision pathsBuySignal = 0SellSignal = 0if size(DecisionPaths) > 0 thenif DecisionPaths[1] == 1 and Rsi < 30 and MacdLine > SignalLine and SmaShort > SmaLong thenBuySignal = 1endifif DecisionPaths[1] == 0 and Rsi > 70 and MacdLine < SignalLine and SmaShort < SmaLong thenSellSignal = 1endifendif// Plot Buy and Sell signalsif BuySignal thenDRAWARROWUP(BarIndex, Low, "BUY", "", Plain, Green)endifif SellSignal thenDRAWARROWDOWN(BarIndex, High, "SELL", "", Plain, Red)endif// Plot Technical IndicatorsRETURN SmaShort AS "SMA 14", SmaLong AS "SMA 50"He intentado la traducción pero aún contiene varios errores…Espero que los foreros puedan corregirlo y mejorarlo.
08/08/2024 at 12:01 PM #236263Sería una cosa así:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859// Inicialización de los parámetros de entradaDepth = 3Paths = 3NumberOfWeights = 5// Inicialización del array de pesosWeight = 1.0 / NumberOfWeightsSumNodeWeights = 0FOR i = 0 TO NumberOfWeights - 1 DO$NodeWeights[i] = WeightSumNodeWeights = SumNodeWeights + WeightNEXT// Generación de los caminosFOR p = 0 TO Paths - 1 DOSizeW = NumberOfWeightsSumWeights = CEIL(SumNodeWeights)IF SizeW > 0 AND Depth > 0 AND SumWeights = 1 THENFOR d = 1 TO Depth DOFOUND = 0FOR w = 0 TO 999 DOSelectWeightIndex = ROUND(Random (0,SizeW))Rng = Random(0,1)Weight = $NodeWeights[SelectWeightIndex]IF Weight >= Rng THEN$Paths[p] = SelectWeightIndexFOUND = 1BREAKENDIFNEXTIF FOUND = 0 THENENDIFNEXTENDIFNEXT//Mostrar el resultado de path de la última vela en el gráficoif islastbarupdate thenfor i=0 to lastset($paths) dopath=$paths[i]drawtext("path#i#: #path#",barindex+10,low-i*averagetruerange[14](close))nextendif// Indicadores técnicosSMAShort = Average[14](Close)SMALong = Average[50](Close)myMACDLine = MACDLine[12,26,9](Close)SignalLine = MACDSignal[12,26,9](Close)// Generar señales de compra y venta basadas en indicadores técnicos y caminos de decisiónBuySignal = ($Paths[0]>0 AND (myMACDLine > SignalLine) AND (SMAShort > SMALong))SellSignal = ($Paths[0]=0 AND (myMACDLine < SignalLine) AND (SMAShort < SMALong))// Plotear señales de compra y ventaIF BuySignal THENDrawArrowUp(BarIndex, Low)elsiF SellSignal THENDrawArrowDown(BarIndex, High)ENDIFreturn1 user thanked author for this post.
-
AuthorPosts
Find exclusive trading pro-tools on