English 中文 Español Deutsch 日本語 Português
preview
Анализ сентимента (рыночных настроений) и глубокое обучение для торговли советником и тестирование на истории с помощью Python

Анализ сентимента (рыночных настроений) и глубокое обучение для торговли советником и тестирование на истории с помощью Python

MetaTrader 5Примеры |
909 14
Javier Santiago Gaston De Iriarte Cabrera
Javier Santiago Gaston De Iriarte Cabrera

Введение

Интеграция глубокого обучения и анализа сентимента с торговыми стратегиями в MetaTrader 5 (MQL5) представляет собой серьезный шаг вперед в алготрейдинге. В глубокое обучение (подвид машинного обучения) входят многослойные нейросети, способные обучаться и делать прогнозы на основе обширных и сложных наборов данных. Анализ сентимента (настроений), с другой стороны, это метод обработки естественного языка (NLP), применяемый для определения настроения или эмоционального тона текста. Используя эти технологии, трейдеры могут совершенствовать процессы принятия решений и улучшать результаты торговли.

Для этой статьи интегрируем Python в MQL5 с помощью динамической библиотеки shell32.dll, которая выполняет нужные нам задачи для Windows. Установив Python и запустив его с помощью shell32.dll, мы сможем запустить скрипты на языке Python из советника (EA), написанного на MQL5. Есть два скрипта на Python: один для запуска обученной модели ONNX из TensorFlow, а другой использует библиотеки для извлечения новостей из Интернета, чтения заголовков и количественной оценки настроений в СМИ с помощью ИИ. Это одно из возможных решений, но есть много способов и различных источников получения информации о настроениях по акциям или символу. После получения модели и настроений рынка, если оба значения согласуются, советник исполнит ордер.

Сможем ли мы провести тест на Python для понимания результатов объединения анализа сентимента и глубокого обучения? Ответ — да, поэтому продолжим изучать код.


Тестирование анализа сентимента на истории с помощью глубокого обучения на Python

Для тестирования этой стратегии на истории используем следующие библиотеки. В качестве отправной точки использую другую свою статью. Хотя здесь я тоже представлю необходимые пояснения.

Воспользуемся следующими библиотеками:

import ccxt
import pandas as pd
import numpy as np
import onnx
import onnxruntime as ort
import matplotlib.pyplot as plt
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score, mean_absolute_percentage_error
from sklearn.model_selection import TimeSeriesSplit
from sklearn.preprocessing import MinMaxScaler
import requests
from datetime import datetime, timedelta
import nltk
from nltk.sentiment import SentimentIntensityAnalyzer
from newsapi import NewsApiClient

Прежде всего убедимся, что пакет nltk обновлен.

nltk.download('vader_lexicon')

Пакет nltk (Natural Language Toolkit) — библиотека для работы с данными (текстом) на естественном языке. Он обеспечивает простые в использование интерфейсы для более чем 50 языковых корпусов и лексических ресурсов, таких как WordNet, а также набор библиотек обработки текстов для классификации, токенизации, морфологического поиска, разметки, синтаксического анализа и семантического обоснования, а также оболочки для готовых библиотек NLP.

Читателям нужно адаптировать тестирование написанного а Python скрипта на исторических данных, указав, где получать данные, новости и информацию для моделей ONNX.

Воспользуемся следующим кодом для получения анализа настроений:

def get_news_sentiment(symbol, api_key, date):
    try:
        newsapi = NewsApiClient(api_key=api_key)
        
        # Obtener noticias relacionadas con el símbolo para la fecha específica
        end_date = date + timedelta(days=1)
        articles = newsapi.get_everything(q=symbol,
                                          from_param=date.strftime('%Y-%m-%d'),
                                          to=end_date.strftime('%Y-%m-%d'),
                                          language='en',
                                          sort_by='relevancy',
                                          page_size=10)
        
        sia = SentimentIntensityAnalyzer()
        
        sentiments = []
        for article in articles['articles']:
            text = article.get('title', '')
            if article.get('description'):
                text += ' ' + article['description']
            
            if text:
                sentiment = sia.polarity_scores(text)
                sentiments.append(sentiment['compound'])
        
        avg_sentiment = np.mean(sentiments) if sentiments else 0
        return avg_sentiment
    except Exception as e:
        print(f"Error al obtener el sentimiento para {symbol} en la fecha {date}: {e}")
        return 0

Для тестирования на истории воспользуемся в качестве фида новостным API, который позволяет бесплатно получать новости за 1 месяц. При необходимости большего функционала можно приобрести подписку.

Оставшуюся часть кода нужно будет получить прогнозы из модели ONNX для предсказания цен следующего закрытия. Просто сравним настроения с прогнозами глубокого обучения и, если результаты обоих будут одинаковыми, создадим ордер. Получается:

investment_df = comparison_df.copy()
investment_df['price_direction'] = np.where(investment_df['prediction'].shift(-1) > investment_df['prediction'], 1, -1)
investment_df['sentiment_direction'] = np.where(investment_df['sentiment'] > 0, 1, -1)
investment_df['position'] = np.where(investment_df['price_direction'] == investment_df['sentiment_direction'], investment_df['price_direction'], 0)
investment_df['strategy_returns'] = investment_df['position'] * (investment_df['actual'].shift(-1) - investment_df['actual']) / investment_df['actual']
investment_df['buy_and_hold_returns'] = (investment_df['actual'].shift(-1) - investment_df['actual']) / investment_df['actual']

Сначала код создает копию `comparison_df` и называет ее `investment_df`. Затем он добавляет новый столбец под названием `price_direction`, принимающий значение 1, если следующий прогноз выше текущего, и -1, если нет. После этого он добавляет еще один столбец — под названием `sentiment_direction`, принимающий значение 1, если настроение положительное и -1, если отрицательное. Затем он добавляет столбец под названием `position`, который принимает значение `price_direction`, если оно совпадает с `sentiment_direction`, и 0, если нет. Код вычисляет `strategy_returns` умножением `position` на относительное изменение фактических значений от одной строки к другой. Наконец, он вычисляет значение `buy_and_hold_returns` как относительное изменение фактических значений от одной строки к другой без учета позиций.

Результаты тестирования на истории выглядят так:

Datos normalizados guardados en 'binance_data_normalized.csv'
Sentimientos diarios guardados en 'daily_sentiments.csv'
Predicciones y sentimiento guardados en 'predicted_data_with_sentiment.csv'
Mean Absolute Error (MAE): 30.66908467315391
Root Mean Squared Error (RMSE): 36.99641752814565
R-squared (R2): 0.9257591918098058
Mean Absolute Percentage Error (MAPE): 0.00870572230484879
Gráfica guardada como 'ETH_USDT_price_prediction.png'
Gráfica de residuales guardada como 'ETH_USDT_residuals.png'
Correlation between actual and predicted prices: 0.9752007459642241
Gráfica de estrategia de inversión guardada como 'ETH_USDT_investment_strategy.png'
Gráfica de drawdown guardada como 'ETH_USDT_drawdown.png'
Sharpe Ratio: 9.41431958149606
Sortino Ratio: 11800588386323879936.0000
Número de rendimientos totales: 28
Número de rendimientos en exceso: 28
Número de rendimientos negativos: 19
Media de rendimientos en exceso: 0.005037
Desviación estándar de rendimientos negativos: 0.000000
Sortino Ratio: nan
Beta: 0.33875104783408166
Alpha: 0.006981197358213854
Cross-Validation MAE: 1270.7809910146143 ± 527.5746657573876
SMA Mean Absolute Error (MAE): 344.3737716856061
SMA Mean Absolute Error (MAE): 344.3737716856061
SMA Root Mean Squared Error (RMSE): 483.0396130996611
SMA R-squared (R2): 0.5813550203375846
Gráfica de predicción SMA guardada como 'ETH_USDT_sma_price_prediction.png'
Gráfica de precio, predicción y sentimiento guardada como 'ETH_USDT_price_prediction_sentiment.png'
Gráfica de drawdown guardada como 'ETH_USDT_drawdown.png'
Maximum Drawdown: 0.00%

Как показывают результаты, существует явная корреляция между прогнозируемыми и реальными ценами. R2 — показатель, позволяющий оценить качество прогнозов модели, — тоже выглядит неплохо. Коэффициент Шарпа выше 5, что отлично, коэффициент Сортино тоже высок. На графиках представлены и другие результаты.

График сравнения стратегии и удержания выглядит так:

Стратегия и удержание

Другие графики, такие как сравнение прогнозируемой цены с фактической

сравнение прогнозируемой цены с фактической

и фактическая цена, прогнозируемая цена и настроения

Прогноз цен и настроения

Результаты показывают, что эта стратегия очень прибыльна, поэтому воспользуемся таким аргументом для создания EA.

У этого EA должно быть два скрипта на Python, которые выполняют анализ настроений, и модель глубокого обучения, и все они должны объединяться для работы в советнике.


Модель ONNX

Используем те же код для сбора данных, обучение и модель ONNX, которые были в предыдущей статье. Поэтому перейду к обсуждению кода на Python для анализа настроений.


Анализ настроений с помощью Python

Воспользуемся библиотеками `requests` и `TextBlob` для извлечения новостей Форекс и выполнения анализа настроений, а также библиотекой `csv` для чтения и записи данных. Кроме того, будут использоваться библиотеки `datetime` и `time`.

import requests
from textblob import TextBlob
import csv
from datetime import datetime
import time
from time import sleep

Смысл скрипта в том, чтобы после запуска задержаться на несколько секунд (для обеспечения корректной работы следующей части скрипта). Вторая часть скрипта считывает ключ API, который мы хотим использовать. В данном случае воспользуемся Marketaux API, предлагающим ряд бесплатных новостей и бесплатных вызовов. Есть и другие варианты, такие как News API, Alpha Vantage или Finhub, некоторые из которых платные, но предоставляют больше новостей, включая исторические, что позволяет тестировать стратегию на истории в MT5. Как упоминалось ранее, мы пока воспользуемся Marketaux, поскольку у него есть бесплатный API для получения дневных новостей. Для использования других источников нам понадобится адаптировать код.

Вот пример возможной структуры скрипта:

Вот функция для считывания ключа API из входа EA:

api_file_path = 'C:/Users/jsgas/AppData/Roaming/MetaQuotes/Terminal/24F345EB9F291441AFE537834F9D8A19/MQL5/Files/Files/api.txt'
print(api_file_path)

def read_api_from_file():
    try:
        with open(api_file_path, 'r', encoding='utf-16') as file:
            raw_data = file.read()
            print(f"Raw data from file: {repr(raw_data)}")  # Print raw data
            api = raw_data.strip()  # Lee el contenido y elimina espacios en blanco adicionales
            api = api.replace('\ufeff', '')  # Remove BOM character if present
            print(f"API after stripping whitespace: {api}")
            time.sleep(5)
            return api
    except FileNotFoundError:
        print(f"El archivo {api_file_path} no existe.")
        time.sleep(5)
        return None




# Configuración de la API de Marketaux
api=read_api_from_file()
MARKETAUX_API_KEY = api

Перед чтением новостей нам нужно знать, что читать, для чего мы прочитаем этот скрипт на языке Python из созданного советником текстового файла так, чтобы скрипт на Python знал, что читать или какой символ изучать и о чем получать нновости, а также какой ключ API введен в EA и какое сегодня число, чтобы модель была готова и новости поступали за эту дату.

Кроме того, он должен уметь записывать txt или csv, чтобы служить входными данными для EA с результатами анализа настроений (Sentiment).

def read_symbol_from_file():
    try:
        with open(symbol_file_path, 'r', encoding='utf-16') as file:
            raw_data = file.read()
            print(f"Raw data from file: {repr(raw_data)}")  # Print raw data
            symbol = raw_data.strip()  # Lee el contenido y elimina espacios en blanco adicionales
            symbol = symbol.replace('\ufeff', '')  # Remove BOM character if present
            print(f"Symbol after stripping whitespace: {symbol}")
            return symbol
    except FileNotFoundError:
        print(f"El archivo {symbol_file_path} no existe.")
        return None
def save_sentiment_to_txt(average_sentiment, file_path='C:/Users/jsgas/AppData/Roaming/MetaQuotes/Terminal/24F345EB9F291441AFE537834F9D8A19/MQL5/Files/Files/'+str(symbol)+'sentiment.txt'):
    with open(file_path, 'w') as f:
        f.write(f"{average_sentiment:.2f}")
if symbol:
    news, current_rate = get_forex_news(symbol)

    if news:
        print(f"Noticias para {symbol}:")
        for i, (title, description) in enumerate(news, 1):
            print(f"{i}. {title}")
            print(f"   {description[:100]}...")  # Primeros 100 caracteres de la descripción
        
        print(f"\nTipo de cambio actual: {current_rate if current_rate else 'No disponible'}")

        # Calcular el sentimiento promedio
        sentiment_scores = [TextBlob(title + " " + description).sentiment.polarity for title, description in news]
        average_sentiment = sum(sentiment_scores) / len(sentiment_scores) if sentiment_scores else 0
        print(f"Sentimiento promedio: {average_sentiment:.2f}")

        # Guardar resultados en CSV
        #save_to_csv(symbol, current_rate, average_sentiment)

        # Guardar sentimiento promedio en un archivo de texto
        save_sentiment_to_txt(average_sentiment)
        print("Sentimiento promedio guardado en 'sentiment.txt'")
    else:
        print("No se pudieron obtener noticias de Forex.")
else:
    print("No se pudo obtener el símbolo del archivo.")

Читателям нужно адаптировать весь скрипт в зависимости от того, что анализируется: Форекс, акции или крипта.


Советник

Мы должны включить библиотеку shell32.dll, как показано здесь, чтобы запустить скрипты на языке Python

#include <WinUser32.mqh>

#import "shell32.dll"
int ShellExecuteW(int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);
#import

Нужно добавить скрипты Python в папку File

string script1 = "C:\\Users\\jsgas\\AppData\\Roaming\\MetaQuotes\\Terminal\\24F345EB9F291441AFE537834F9D8A19\\MQL5\\Files\\Files\\dl model for mql5 v6 Final EURUSD_bien.py";
string script2 = "C:\\Users\\jsgas\\AppData\\Roaming\\MetaQuotes\\Terminal\\24F345EB9F291441AFE537834F9D8A19\\MQL5\\Files\\Files\\sentiment analysis marketaux v6 Final EURUSD_bien.py";

И все пути к входным и выходным данным скриптов на Python,

// Ruta del archivo donde se escribirá el símbolo
string filePathSymbol = "//Files//symbol.txt";
// Ruta del archivo donde se escribirá el timeframe
string filePathTimeframe = "//Files//timeframe.txt";
string filePathTime = "//Files//time.txt";
string filePathApi = "//Files//api.txt";

string fileToSentiment = "//Files//"+Symbol()+"sentiment.txt";



string file_add = "C://Users//jsgas//AppData//Roaming//MetaQuotes//Terminal//24F345EB9F291441AFE537834F9D8A19//MQL5//Files";
string file_str = "//Files//model_";
string file_str_final = ".onnx";
string file_str_nexo = "_";

string file_add2 = "C:\\Users\\jsgas\\AppData\\Roaming\\MetaQuotes\\Terminal\\24F345EB9F291441AFE537834F9D8A19\\MQL5\\Files";
string file_str2 = "\\Files\\model_";
string file_str_final2 = ".onnx";
string file_str_nexo2 = "_";

Нужно ввести ключ Marketaux API

input string api_key      = "mWpORHgs3GdjqNZkxZwnXmrFLYmG5jhAbVrF";           // MARKETAUX_API_KEY www.marketaux.com

Мы можем получить его здесь, и это будет выглядеть так:

api key

Я не работаю на Marketaux, поэтому можете использовать любую другую новостную ленту или подписку по своему желанию или необходимости.

Чтобы ордера не путались, вам нужно будет настроить магический номер (Magic Number)

int OnInit()
  {
   ExtTrade.SetExpertMagicNumber(Magic_Number);

Вы можете добавить его и здесь

void OpenBuyOrder(double lotSize, double slippage, double stopLoss, double takeProfit)
  {
// Definir la estructura MqlTradeRequest
   MqlTradeRequest request;
   MqlTradeResult result;

// Inicializar la estructura de la solicitud
   ZeroMemory(request);

// Establecer los parámetros de la orden
   request.action   = TRADE_ACTION_DEAL;
   request.symbol   = _Symbol;
   request.volume   = lotSize;
   request.type     = ORDER_TYPE_BUY;
   request.price    = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   request.deviation= slippage;
   request.sl       = stopLoss;
   request.tp       = takeProfit;
   request.magic    = Magic_Number;
   request.comment  = "Buy Order";

// Enviar la solicitud de comercio
   if(!OrderSend(request,result))
     {
      Print("Error al abrir orden de compra: ", result.retcode);

Последний фрагмент кода описывает создание ордера, для чего можно также использовать торговлю из CTrade.

Так запишется файл (для использования в качестве входных данных в скриптах .py):

void WriteToFile(string filePath, string data)
  {
   Print("Intentando abrir el archivo: ", filePath);
// Abre el archivo en modo de escritura, crea el archivo si no existe
   int fileHandle = FileOpen(filePath, FILE_WRITE | FILE_TXT);
   if(fileHandle != INVALID_HANDLE)
     {
      // Escribe los datos en el archivo
      FileWriteString(fileHandle, data);
      FileClose(fileHandle);  // Cierra el archivo
      Print("Archivo escrito exitosamente: ", filePath);
     }
   else
     {
      Print("Error al abrir el archivo ", filePath, ". Código de error: ", GetLastError());
     }
  }

Это запишет в файл символ, таймфрейм и текущую дату:

void WriteSymbolAndTimeframe()
  {
// Obtén el símbolo actual
   currentSymbol = Symbol();
// Obtén el período de tiempo del gráfico actual
   string currentTimeframe = GetTimeframeString(Period());
   currentTime = TimeToString(TimeCurrent(), TIME_DATE);

// Escribe cada dato en su respectivo archivo
   WriteToFile(filePathSymbol, currentSymbol);
   WriteToFile(filePathTimeframe, currentTimeframe);
   WriteToFile(filePathTime, currentTime);
   WriteToFile(filePathApi,api_key);

   Sleep(10000); // Puedes ajustar o eliminar esto según sea necesario
  }

Функция WriteSymbolAndTimeframe выполняет следующие задачи:

  1. Сначала она извлекает текущий торговый символ и сохраняет его в currentSymbol
  2. Затем она получает текущий таймфрейм графика в виде строки с помощью GetTimeframeString(Period()) и сохраняет его в currentTimeframe
  3. ٌКроме того, она получает текущее время в определенном формате с помощью TimeToString(TimeCurrent(), TIME_DATE) и сохраняет его в currentTime
  4. Затем она записывает каждое из этих значений в соответствующие файлы:
    • currentSymbol записывается в filePathSymbol
    • currentTimeframe записывается в filePathTimeframe
    • currentTime записывается в filePathTime
    • api_key записывается в filePathApi
  5. Наконец, функция приостанавливается на 10 секунд с помощью Sleep(10000), которую можно настроить или удалить при необходимости.

Мы можем запустить скрипты так:

void OnTimer()
  {
   datetime currentTime2 = TimeCurrent();

// Verifica si ha pasado el intervalo para el primer script
   if(currentTime2 - lastExecutionTime1 >= interval1)
     {
      // Escribe los datos necesarios antes de ejecutar el script
      WriteSymbolAndTimeframe();

      // Ejecuta el primer script de Python
      int result = ShellExecuteW(0, "open", "cmd.exe", "/c python \"" + script1 + "\"", "", 1);
      if(result > 32)
         Print("Script 1 iniciado exitosamente");
      else
         Print("Error al iniciar Script 1. Código de error: ", result);
      lastExecutionTime1 = currentTime2;
     }

Функция `OnTimer` исполняется периодически и выполняет следующие задачи:

  1. Сначала она извлекает текущее время и сохраняет его в `currentTime2`.
  2. Затем она проверяет, больше или равно прошедшее с последнего исполнения первого скрипта (`lastExecutionTime1`) время предопределенному интервалу (`interval1`).
  3. При выполнении условия она записывает необходимую дату, вызывая `WriteSymbolAndTimeframe`.
  4. Потом она исполняет первый скрипт на Python, запуская команду посредством `ShellExecuteW`, которая открывает `cmd.exe` и запускает скрипт на Python, указанный с помощью `script1`.
  5. При успешном выполнении скрипта (на что указывает результат больше 32), она выводит сообщение об этом; в противном случае выводит сообщение об ошибке с указанием кода ошибки.
  6. Наконец, она обновляет `lastExecutionTime1` до текущего времени (`currentTime2`).

Мы можем прочитать файл с помощью этой функции:

string ReadFile(string file_name)
  {
   string result = "";
   int handle = FileOpen(file_name, FILE_READ|FILE_TXT|FILE_ANSI); // Use FILE_ANSI for plain text

   if(handle != INVALID_HANDLE)
     {
      int file_size = FileSize(handle); // Get the size of the file
      result = FileReadString(handle, file_size); // Read the whole file content
      FileClose(handle);
     }
   else
     {
      Print("Error opening file: ", file_name);
     }

   return result;
  }

Код определяет функцию под названием ReadFile, которая принимает имя файла в качестве аргумента и возвращает содержимое файла в виде строки. Сначала она инициализирует результат пустой строки, затем пытается открыть файл разрешениями на чтение and в текстовом режиме с помощью FileOpen. Если дескриптор файла действителен, она получает размер файла с помощью FileSize, считывает все содержимое файла в результат с помощью FileReadString, а затем закрывает файл с помощью FileClose. При недействительном дескрипторе она выводит сообщение об ошибке с именем файла. Наконец, она возвращает результат с содержимым файла.

Изменяя это условие, можем добавить в качестве еще одного условия настроение:

   if(ExtPredictedClass==PRICE_DOWN && Sentiment_number<0)
      signal=ORDER_TYPE_SELL;    // sell condition
   else
     {
      if(ExtPredictedClass==PRICE_UP && Sentiment_number>0)
         signal=ORDER_TYPE_BUY;  // buy condition
      else
         Print("No order possible");
     }

В этом случае настроения колеблются от 10 до -10, при этом сигнал, равный 0, означает нейтральное настроение. Вы можете изменять эту стратегию по своему усмотрению.

Остальная часть кода — простой советник из статьи Использование ONNX-моделей в MQL5 с некоторыми изменениями.

Это не полностью готовый EA, а лишь простой пример возможностей использования языков Python и MQL5 для создания эксперта на основе анализа настроений и глубокого обучения. Чем больше времени вы потратите на этот советник, тем меньше ошибок и проблем у вас будет. Это исследование современного случая, и исследование на истории показывает перспективные результаты. Надеюсь, эта статья окажется полезной, и если у кого-то получится получить хорошую выборку новостей или заставит его работать какое-то время, прошу поделиться результатами. Для тестирования стратегии лучше использовать демо-счет.


Заключение

В заключение отмечу, что интеграция глубокого обучения и анализа настроений в торговые стратегии MetaTrader 5 (MQL5) демострирует передовые возможности современного алготрейдинга. Используя скрипты на Python с помощью интерфейса динамической библиотеки shell32.dll, мы можем беспрепятственно выполнять сложные модели и получать ценные данные о настроениях, улучшая тем самым торговые решения и результаты. Описанный процесс включает в себя использование языка Python для извлечения и анализа настроений в новостях, запуск ONNX-моделей для прогнозирования цен и совершения сделок, когда обаиндикатора совпадают.

Результаты тестирования на истории демонстрируют потенциальную прибыльность стратегии, о чем свидетельствуют выраженные показатели корреляции, большие значения достоверности аппроксимации и отличные коэффициенты Шарпа и Сортино. Полученные результаты свидетельствуют о том, что сочетание анализа настроений с глубоким обучением может существенно повысить точность торговых сигналов и общую эффективность стратегии.

В дальнейшем разработка полнофункционального эксперта (EA) потребует тщательной интеграции различных компонентов, включая скрипты на Python для анализа настроений и ONNX-модели для прогнозирования цен. Постоянно совершенствуя эти элементы и адаптируя стратегию к разным рынкам и источникам данных, трейдеры смогут создать надежный и эффективный торговый инструмент.

Это исследование служит основной для интересующихся изучением объединения машинного обучения, анализа настроений и алготрейдинга, предлагая путь к более информированным и потенциально прибыльным торговым решениям.

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/15225

Прикрепленные файлы |
Scripts.zip (1640.86 KB)
Последние комментарии | Перейти к обсуждению на форуме трейдеров (14)
Javier Santiago Gaston De Iriarte Cabrera
Javier Santiago Gaston De Iriarte Cabrera | 27 июл. 2024 в 23:55
WillowTrader #:

Привет, Хавьер, именно так. Я перешел к просмотру и экспериментированию с кодом. Сначала я использовал модель dl, найденную в папке backtesting. В этой модели мы создаем нейронную сеть для предсказания цены эфириума на основе истории закрытия, верно? -> Я адаптировал ее, чтобы посмотреть, сможем ли мы получить правильное направление. Эта модель сама по себе работает немного лучше, чем подбрасывание монеты, но я с нетерпением жду, когда смогу добавить в нее данные о настроениях. Или я неправильно понял назначение этой модели?

В настоящее время я решаю возникающие проблемы, сохраняя ее как модель ONNX. Полезно, наверное, для обучения.

Спасибо за это. Я поделюсь с вами, как только мне удастся реализовать это.

Я только что добавил сентимент в торговую логику.

iwetago247
iwetago247 | 10 авг. 2024 в 08:38
Javier Santiago Gaston De Iriarte Cabrera #:

Я только что добавил сентимент в торговую логику.

Могу ли я получить вашу модель, пожалуйста, она может изменить мою жизнь, у меня нет ресурсов и способностей, которыми обладаете вы, и денег тоже, но, пожалуйста, помогите мне с вашей моделью.
Javier Santiago Gaston De Iriarte Cabrera
Javier Santiago Gaston De Iriarte Cabrera | 16 авг. 2024 в 04:07
iwetago247 #:
Могу ли я получить вашу модель, пожалуйста, она может изменить мою жизнь, у меня нет таких ресурсов и способностей, как у вас, и денег тоже, но, пожалуйста, помогите мне с вашей моделью

Привет, вы должны стремиться получить процессор или gpu для вычисления моделей, вы могли бы использовать те, из статей (но искать для таймфрейма валидности) (один 1 день таймфрейм модель для одного символа держится на 3 -6 месяцев) ... или вы могли бы разместить фриланс, чтобы кто-то сделать модели для вас. (У каждого инструмента должна быть своя модель для правильного таймфрейма).

Alasdair
Alasdair | 17 авг. 2024 в 19:19

Здравствуйте,

Вы торгуете с этой моделью? Если да, то не могли бы вы поделиться со мной ее характеристиками.

Спасибо.

yehaichang
yehaichang | 9 апр. 2025 в 20:03
Приготовьтесь к покупке
Нейросети в трейдинге: Агент с многоуровневой памятью (Окончание) Нейросети в трейдинге: Агент с многоуровневой памятью (Окончание)
Продолжаем начатую работу по созданию фреймворка FinMem, который использует подходы многоуровневой памяти, имитирующие когнитивные процессы человека. Это позволяет модели не только эффективно обрабатывать сложные финансовые данные, но и адаптироваться к новым сигналам, значительно повышая точность и результативность инвестиционных решений в условиях динамично изменяющихся рынков.
Нейросети в трейдинге: Агент с многоуровневой памятью Нейросети в трейдинге: Агент с многоуровневой памятью
Подходы многоуровневой памяти, имитирующие когнитивные процессы человека, позволяют обрабатывать сложные финансовые данные и адаптироваться к новым сигналам, что способствует повышению эффективности инвестиционных решений в условиях динамичных рынков.
Возможности Мастера MQL5, которые вам нужно знать (Часть 27): Скользящие средние и угол атаки Возможности Мастера MQL5, которые вам нужно знать (Часть 27): Скользящие средние и угол атаки
Угол атаки (Angle of Attack) — популярный показатель, значение крутизны (steepness) которого, как считается, тесно связано с силой преобладающего тренда. Мы рассмотрим, как он обычно трактуется и применяется, и выясним, есть ли изменения, которые можно было бы внести в способ его измерения для улучшения торговой системы.
Использование алгоритма машинного обучения PatchTST для прогноза ценовых движений на следующие 24 часа Использование алгоритма машинного обучения PatchTST для прогноза ценовых движений на следующие 24 часа
В этой статье мы применим относительно сложный нейросетевой алгоритм PatchTST, реализованный в 2023 году, для прогнозирования ценовых движений на ближайшие 24 часа. Воспользуемся официальным репозиторием, внесем небольшие изменения, обучим модель для EURUSD и применим ее для формирования будущих прогнозов на языке Python или MQL5.