🛠 Техническая реализация (MT5 + Python)
// Буферы
double bufferOB[];
double volumeDelta[];
// Хендлы
int hVolumeDelta = iCustom(_Symbol, PERIOD_M1, "Volume_Delta");
int hTMA_M1 = iCustom(_Symbol, PERIOD_M1, "Extreme_TMA_Line", 8, 100, 1.5, 0.4, 0); // InpRedraw=No!
// ИИ-фильтр
bool CheckWithAI(double price, string signalType)
{
// Собираем контекст
double atrM5 = iATR(_Symbol, PERIOD_M5, 50, 0);
double maM5 = iMA(_Symbol, PERIOD_M5, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
double spread = SymbolInfoDouble(_Symbol, SYMBOL_SPREAD);
string trendM5 = (price > maM5) ? "bullish" : "bearish";
// Формируем JSON
string json = StringFormat(
"{\"symbol\":\"%s\",\"signal_type\":\"%s\",\"price\":%.5f,\"spread\":%.3f,\"ATR_M5\":%.3f,\"trend_M5\":\"%s\"}",
_Symbol, signalType, price, spread, atrM5, trendM5
);
// HTTP POST → ваш VPS с ИИ
string response = HTTPPost("
http://your-vps:8000/filter", json);
// Парсим ответ
string allow = StringSubstr(response, StringFind(response, "\"allow_trade\":")+15, 4);
double conf = StringToDouble( StringSubstr(response, StringFind(response, "\"confidence\":")+13, 4) );
return (allow == "true" && conf >= 0.75);
ИИ-сервер (Python, FastAPI + Llama.cpp или API)
from fastapi import FastAPI
from pydantic import BaseModel
import torch
from transformers import pipeline
app = FastAPI()
# Лёгкая модель (например, TinyLlama или Phi-3-mini-Q4)
classifier = pipeline("text-classification", model="cardiffnlp/twitter-roberta-base-sentiment-latest")
class SignalContext(BaseModel):
symbol: str
signal_type: str
price: float
spread: float
ATR_M5: float
trend_M5: str
@app.post("/filter")
def ai_filter(ctx: SignalContext):
# 1. Формируем промпт
prompt = f"""
XAUUSD M1 scalp signal: {ctx.signal_type} at {ctx.price}.
Spread: {ctx.spread:.3f}, ATR_M5: {ctx.ATR_M5:.2f}, M5 trend: {ctx.trend_M5}.
Is this a HIGH-PROBABILITY scalp setup for next 2-4 minutes?
Answer ONLY in JSON: {{"allow_trade": true/false, "confidence": 0.0-1.0, "reason": "..."}}
"""
# 2. Запрос к локальной LLM (через llama-cpp-python) или API
response = llm(prompt, max_tokens=100, stop=["\n"])
# 3. Парсим и валидируем
try:
result = json.loads(fix_json(response))
return result
except:
return {"allow_trade": False, "confidence": 0.0, "reason": "AI error"}
# → Запускается на VPS с 4+ GB RAM (CPU-only достаточно для tiny LLM)
}
Преимущества такой архитектуры
Нет перерисовки
Базовый сигнал — каузальный (M1), ИИ работает только с
уже сформировавшимися
данными

Низкая латентность
Ответ ИИ — <200 мс (достаточно для M1)
🛡
Защита от переобучения
ИИ не оптимизирует по прибыли — только фильтрует. Основа — статистически устойчивый скальп-алгоритм