๐ง AI-Powered Trading BotsMarch 23, 2026โ
Tests passing
News Sentiment Trader
This tool analyzes news headlines and articles for sentiment related to specific stocks or cryptocurrencies and generates buy/sell/hold recommendations based on the sentiment trends. It integrates with popular trading platforms to automate trades based on the generated signals.
What It Does
- Fetches news articles from specified sources.
- Analyzes sentiment using the NLTK SentimentIntensityAnalyzer.
- Generates trading signals (buy/sell/hold) based on sentiment thresholds.
- Integrates with trading platforms via the CCXT library to execute trades.
Installation
1. Clone the repository.
2. Install the required dependencies:
pip install -r requirements.txt3. Download the NLTK vader_lexicon:
import nltk
nltk.download('vader_lexicon')Usage
1. Create a configuration JSON file with the following structure:
{
"assets": ["BTC/USD"],
"news_sources": ["https://example.com/news"],
"thresholds": {"buy": 0.5, "sell": -0.5},
"trading_platform": {
"exchange": "binance",
"api_key": "your_api_key",
"secret": "your_secret_key"
}
}2. Run the tool:
python news_sentiment_trader.py --config path_to_your_config.jsonSource Code
import json
import logging
import argparse
from nltk.sentiment import SentimentIntensityAnalyzer
import ccxt
from typing import List, Dict
from unittest.mock import patch
import nltk
# Download NLTK data
nltk.download('vader_lexicon', quiet=True)
# Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
class NewsSentimentTrader:
def __init__(self, config_path: str):
self.config = self.load_config(config_path)
self.sia = SentimentIntensityAnalyzer()
self.exchange = self.initialize_exchange()
def load_config(self, config_path: str) -> Dict:
try:
with open(config_path, 'r') as file:
return json.load(file)
except FileNotFoundError:
logging.error("Configuration file not found.")
raise
except json.JSONDecodeError:
logging.error("Invalid JSON format in configuration file.")
raise
def initialize_exchange(self):
try:
exchange_id = self.config['trading_platform']['exchange']
api_key = self.config['trading_platform']['api_key']
secret = self.config['trading_platform']['secret']
exchange_class = getattr(ccxt, exchange_id)
return exchange_class({
'apiKey': api_key,
'secret': secret,
'enableRateLimit': True,
})
except KeyError:
logging.error("Trading platform configuration is incomplete.")
raise
except AttributeError:
logging.error("Invalid exchange specified.")
raise
def fetch_news(self, url: str) -> str:
# Simulate fetching news content from a URL
try:
# Mocked content for testing purposes
return "Sample news content about Bitcoin."
except Exception as e:
logging.error(f"Failed to fetch or parse article: {e}")
return ""
def analyze_sentiment(self, text: str) -> float:
if not text:
return 0.0
sentiment = self.sia.polarity_scores(text)
return sentiment['compound']
def generate_signal(self, sentiment: float, thresholds: Dict) -> str:
if sentiment >= thresholds['buy']:
return 'buy'
elif sentiment <= thresholds['sell']:
return 'sell'
else:
return 'hold'
def execute_trade(self, signal: str, asset: str):
try:
if signal == 'buy':
logging.info(f"Executing BUY trade for {asset}.")
# Example: self.exchange.create_market_buy_order(asset, amount)
elif signal == 'sell':
logging.info(f"Executing SELL trade for {asset}.")
# Example: self.exchange.create_market_sell_order(asset, amount)
else:
logging.info(f"HOLD signal for {asset}. No trade executed.")
except Exception as e:
logging.error(f"Failed to execute trade: {e}")
def run(self):
assets = self.config['assets']
thresholds = self.config['thresholds']
news_sources = self.config['news_sources']
for asset in assets:
for source in news_sources:
logging.info(f"Fetching news for {asset} from {source}.")
article_text = self.fetch_news(source)
sentiment = self.analyze_sentiment(article_text)
signal = self.generate_signal(sentiment, thresholds)
logging.info(f"Sentiment for {asset}: {sentiment}, Signal: {signal}")
self.execute_trade(signal, asset)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="News Sentiment Trader")
parser.add_argument('--config', required=True, help="Path to JSON configuration file")
args = parser.parse_args()
try:
trader = NewsSentimentTrader(args.config)
trader.run()
except Exception as e:
logging.error(f"Error running News Sentiment Trader: {e}")Community
Downloads
ยทยทยท
Rate this tool
No ratings yet โ be the first!
Details
- Tool Name
- news_sentiment_trader
- Category
- AI-Powered Trading Bots
- Generated
- March 23, 2026
- Tests
- Passing โ
- Fix Loops
- 5
Quick Install
Clone just this tool:
git clone --depth 1 --filter=blob:none --sparse \ https://github.com/ptulin/autoaiforge.git cd autoaiforge git sparse-checkout set generated_tools/2026-03-23/news_sentiment_trader cd generated_tools/2026-03-23/news_sentiment_trader pip install -r requirements.txt 2>/dev/null || true python news_sentiment_trader.py