tungman commited on
Commit
4bd6312
·
verified ·
1 Parent(s): 32945d9

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +80 -0
  2. requirements.txt +8 -0
app.py ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import numpy as np
3
+ import pandas as pd
4
+ import gradio as gr
5
+ import joblib
6
+ from model.ConvGRUTransformerHL import ConvGRUTransformerHL_Attn # โมเดลของมึง
7
+
8
+ # ===== Config =====
9
+ LOOKBACK = 3
10
+ FOLDS = [1,2,3]
11
+ MODEL_DIR = "models" # ปรับ path ตามจริง
12
+
13
+ # ===== Load scalers =====
14
+ scalers = {}
15
+ for fold in FOLDS:
16
+ scalers[fold] = {
17
+ "price": joblib.load(f"{MODEL_DIR}/scaler_fold{fold}/scaler_price.pkl"),
18
+ "adx": joblib.load(f"{MODEL_DIR}/scaler_fold{fold}/scaler_adx.pkl"),
19
+ "atr": joblib.load(f"{MODEL_DIR}/scaler_fold{fold}/scaler_atr.pkl"),
20
+ "tick": joblib.load(f"{MODEL_DIR}/scaler_fold{fold}/scaler_tick_volume.pkl"),
21
+ "target_high": joblib.load(f"{MODEL_DIR}/scaler_fold{fold}/scaler_target_high.pkl"),
22
+ "target_low": joblib.load(f"{MODEL_DIR}/scaler_fold{fold}/scaler_target_low.pkl"),
23
+ }
24
+
25
+ # ===== Load models =====
26
+ models = {}
27
+ for fold in FOLDS:
28
+ checkpoint = torch.load(f"{MODEL_DIR}/EURUSDm_transformer_finetuned_fold_{fold}_01.pth", map_location="cpu")
29
+ model = ConvGRUTransformerHL_Attn(input_dim=10, seq_len=LOOKBACK, kernel_size=LOOKBACK, output_steps=1)
30
+ model.load_state_dict(checkpoint["model_state_dict"])
31
+ model.eval()
32
+ models[fold] = model
33
+
34
+ # ===== Prediction function =====
35
+ def predict_signal(open_, high_, low_, close_, tick_volume, adx, atr, hour, weekday, month):
36
+ df = pd.DataFrame([{
37
+ 'open': open_, 'high': high_, 'low': low_, 'close': close_,
38
+ 'tick_volume': tick_volume, 'adx': adx, 'atr': atr,
39
+ 'hour': hour, 'weekday': weekday, 'month': month
40
+ }])
41
+
42
+ # เตรียม X_scaled
43
+ pred_high_list = []
44
+ pred_low_list = []
45
+
46
+ for fold in FOLDS:
47
+ s = scalers[fold]
48
+ price_scaled = s["price"].transform(df[['open','high','low','close']].values)
49
+ adx_scaled = s["adx"].transform(df[['adx']].values)
50
+ atr_scaled = s["atr"].transform(df[['atr']].values)
51
+ tick_scaled = s["tick"].transform(df[['tick_volume']].values)
52
+ time_data = df[['hour','weekday','month']].values
53
+
54
+ X_scaled = np.concatenate([price_scaled, adx_scaled, atr_scaled, tick_scaled, time_data], axis=1)
55
+ X_tensor = torch.tensor(X_scaled, dtype=torch.float32).unsqueeze(0) # (1, seq_len, features)
56
+
57
+ # Predict
58
+ with torch.no_grad():
59
+ pred_high, pred_low = models[fold](X_tensor)
60
+
61
+ # Inverse transform
62
+ pred_high_np = s["target_high"].inverse_transform(pred_high.numpy())
63
+ pred_low_np = s["target_low"].inverse_transform(pred_low.numpy())
64
+
65
+ pred_high_list.append(pred_high_np[0][0])
66
+ pred_low_list.append(pred_low_np[0][0])
67
+
68
+ # เอาค่าเฉลี่ย folds
69
+ return float(np.mean(pred_high_list)), float(np.mean(pred_low_list))
70
+
71
+ # ===== Gradio UI =====
72
+ iface = gr.Interface(
73
+ fn=predict_signal,
74
+ inputs=["number","number","number","number","number","number","number","number","number","number"], # 10 features
75
+ outputs=["number","number"],
76
+ title="AI Trading Signals",
77
+ description="Enter latest OHLC + tick + adx + atr + hour + weekday + month to get predicted High/Low"
78
+ )
79
+
80
+ iface.launch()
requirements.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ os
2
+ joblib
3
+ torch
4
+ sys
5
+ numpy
6
+ pandas
7
+ MetaTrader5
8
+ tqdm