Repository navigation
Expand file tree
/
Copy path_test_patrones.py
More file actions
115 lines (101 loc) · 4.25 KB
/
Copy path_test_patrones.py
File metadata and controls
115 lines (101 loc) · 4.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# Test de detección de patrones con datos sintéticos controlados
import sys
sys.path.insert(0, '.')
import os
os.chdir(r'C:\Users\ELGAMERO\Desktop\PythonProject5')
import numpy as np
import pandas as pd
from patrones_velas import DetectorVelasPro
print("=" * 70)
print("TEST DE DETECCION DE PATRONES DE VELAS")
print("=" * 70)
detector = DetectorVelasPro()
# Test 1: MARTILLO perfecto
# Vela: open=100, low=95, high=101, close=100.5
# Cuerpo=0.5, sombra_inferior=5, sombra_superior=0.5
print("\n[TEST 1] Martillo perfecto")
v = (100, 101, 95, 100.5)
cuerpo, rango, ss, si, _ = detector._dim(*v)
print(f" Vela {v} -> cuerpo={cuerpo}, rango={rango}, ss={ss}, si={si}")
print(f" Es martillo: {detector._p_martillo(v)}")
print(f" Es doji: {detector._p_doji(v)}")
print(f" Es hombre colgado: {detector._p_hombre_colgado(v)}")
# Test 2: DOJI perfecto
print("\n[TEST 2] Doji perfecto")
v = (100, 102, 98, 100.01)
cuerpo, rango, ss, si, _ = detector._dim(*v)
print(f" Vela {v} -> cuerpo={cuerpo}, rango={rango}, ss={ss}, si={si}")
print(f" Es doji: {detector._p_doji(v)}")
print(f" Es doji piernas largas: {detector._p_doji_piernas_largas(v)}")
print(f" Es libélula doji: {detector._p_libelula_doji(v)}")
print(f" Es lapida doji: {detector._p_lapida_doji(v)}")
# Test 3: ENVOLVENTE ALCISTA
print("\n[TEST 3] Envolvente Alcista (Bullish Engulfing)")
v1 = (105, 106, 100, 101) # vela bajista
v2 = (100, 110, 99, 108) # vela alcista que envuelve
print(f" v1 (bajista) {v1}")
print(f" v2 (alcista) {v2}")
print(f" Es envolvente alcista: {detector._p_envolvente_alcista(v1, v2)}")
# Test 4: ESTRELLA FUGAZ
print("\n[TEST 4] Estrella Fugaz (Shooting Star)")
v = (100, 105, 99.5, 100.5) # cuerpo=0.5, ss=4.5
print(f" Vela {v}")
print(f" Es estrella fugaz: {detector._p_estrella_fugaz(v)}")
# Test 5: MARUBOZU BLANCO
print("\n[TEST 5] Marubozu Blanco")
v = (100, 110, 100, 110) # sin sombras, todo cuerpo
print(f" Vela {v}")
print(f" Es marubozu blanco: {detector._p_marubozu_blanco(v)}")
# Test 6: TRES SOLDADOS BLANCOS
print("\n[TEST 6] Tres Soldados Blancos")
v1 = (100, 102, 99, 101.5)
v2 = (101, 103, 100.5, 102.5)
v3 = (102, 104, 101.5, 103.5)
print(f" v1 {v1}, v2 {v2}, v3 {v3}")
print(f" Es tres soldados: {detector._p_tres_soldados_blancos(v1, v2, v3)}")
# Test 7: HARAMI ALCISTA
print("\n[TEST 7] Harami Alcista")
v1 = (105, 106, 100, 101) # vela bajista grande
v2 = (101.5, 103, 101, 102) # vela alcista pequeña dentro
print(f" v1 (bajista grande) {v1}")
print(f" v2 (alcista pequeña) {v2}")
print(f" Es harami alcista: {detector._p_harami_alcista(v1, v2)}")
# Test 8: Análisis de DataFrame completo
print("\n[TEST 8] Análisis de DataFrame con patrón claro")
n = 50
np.random.seed(123)
# Construir serie con tendencia alcista
closes = np.cumsum(np.random.randn(n) * 0.5) + 100
df = pd.DataFrame({
'open': closes + np.random.randn(n) * 0.3,
'high': closes + np.abs(np.random.randn(n)) * 0.5,
'low': closes - np.abs(np.random.randn(n)) * 0.5,
'close': closes,
'volume': np.random.rand(n) * 1000,
})
# Forzar un martillo en la última vela
df.iloc[-1, df.columns.get_loc('open')] = 100
df.iloc[-1, df.columns.get_loc('high')] = 100.2
df.iloc[-1, df.columns.get_loc('low')] = 95
df.iloc[-1, df.columns.get_loc('close')] = 99.8
resultado = detector.analizar_velas(df)
print(f" Patrones alcistas: {resultado['patrones_alcistas']}")
print(f" Patrones bajistas: {resultado['patrones_bajistas']}")
print(f" Patrones neutrales: {resultado['patrones_neutrales']}")
print(f" Dirección consenso: {resultado['direccion_consenso']}")
print(f" Fuerza: {resultado['fuerza_total']}")
print(f" Tendencia: {resultado['tendencia']}")
print(f" Soportes: {resultado['soportes']}")
print(f" Resistencias: {resultado['resistencias']}")
# Test 9: Análisis con red neuronal completa
print("\n[TEST 9] Análisis completo con red neuronal")
from motor_analisis_avanzado import NeuralAnalysisEngine
engine = NeuralAnalysisEngine(input_features_dim=60)
analisis = engine.analyze(df, simbolo='EURUSD', broker=None, usar_multitimeframe=False)
print(f" Señal: {analisis['signal']}")
print(f" Prob CALL: {analisis['prob_compra']:.2%}")
print(f" Prob PUT: {analisis['prob_venta']:.2%}")
print(f" Confianza NN: {analisis['confianza_nn']:.2%}")
print("\n" + "=" * 70)
print("TESTS COMPLETADOS")
print("=" * 70)