from llama_index import SimpleKeywordTableIndex, Document from datetime import datetime, timedelta import requests import numpy as np import pandas as pd
Fetch historical price data
def fetch_price_data(symbol="ETHUSDT", interval="1h", limit=500): """ Fetch historical price data from Binance API. """ url = f"https://api.binance.com/api/v3/klines?symbol={symbol}&interval={interval}&limit={limit}" response = requests.get(url) data = response.json()
# Parse to DataFrame
df = pd.DataFrame(data, columns=[
"timestamp", "open", "high", "low", "close", "volume", "close_time",
"quote_asset_volume", "number_of_trades", "taker_buy_base",
"taker_buy_quote", "ignore"
])
df["timestamp"] = pd.to_datetime(df["timestamp"], unit="ms")
df["close"] = df["close"].astype(float)
return df[["timestamp", "close"]]
Prepare price history as documents
def prepare_documents(df, window_size=5): """ Convert sliding price windows into Llama documents. """ prices = df["close"].values timestamps = df["timestamp"].values
documents = []
for i in range(len(prices) - window_size):
time_range = f"{timestamps[i]} to {timestamps[i + window_size]}"
price_window = prices[i:i + window_size]
content = f"Price trend from {time_range}: {price_window.tolist()}"
documents.append(Document(content))
return documents
LlamaIndex-based predictive task
def train_with_llama_index(documents): """ Create a Simple Keyword Table Index to simulate trend prediction using LlamaIndex. """ index = SimpleKeywordTableIndex.from_documents(documents)
# Simulating a market prediction
prompt = (
"Based on historical trends, what might be the next ETH/USDT price, "
"assuming consistent linear progression? Focus on patterns."
)
response = index.query(prompt)
return response
Main pipeline
def main(): # Step 1: Fetch historical data symbol = "ETHUSDT" df = fetch_price_data(symbol) print("Fetched historical data:") print(df.head())
# Step 2: Prepare documents for LlamaIndex
window_size = 5
documents = prepare_documents(df, window_size)
# Step 3: Train a Simple Keyword Table Index and predict trends
prediction_response = train_with_llama_index(documents)
# Step 4: Display response
print(f"\nPrediction response from LlamaIndex:\n{prediction_response}")
Entry point
if name == "main": main()