Site icon R-bloggers

GOLD/SILVER RATIO: GenAI with Quant Agents on Microsoft AI Foundry

[This article was first published on DataGeeek, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

1. Introduction: The Strategic Edge of Agentic Finance

In the contemporary landscape of quantitative finance, the bottleneck is no longer data availability, but the speed of insight generation. Leveraging the Microsoft AI Foundry ecosystem, we have moved beyond static scripting into the realm of Autonomous Financial Agents. This article explores how a specialized agent can navigate precious metal volatility by analyzing the Gold/Silver ratio with high-performance precision.

2. Infrastructure: Model Deployment on Microsoft AI Foundry

The intelligence behind this analysis is not a local script but a deployed model instance on Microsoft AI Foundry. We utilize the GPT-4o model, deployed as a scalable web service within the Foundry environment.

3. The Technical Bridge: Python-R Integration

One of the most powerful features of our AI Foundry Agent is its multi-lingual capability. It bridges the gap between Python and R using the rpy2 library, creating a high-performance research pipeline.

The R Ecosystem in Play:

4. Methodology: Taming the Noise with Visual Precision

To extract actionable trends, the Agent is instructed to apply a LOESS smoothing algorithm. By strictly setting .line_size = 1.5 and .smooth_size = 1.5, we ensure the trendline is bold enough to be the primary focus for analysts, effectively “taming” the daily price volatility.

5. Conclusion: Scaling Quantitative Research

The synergy between Microsoft AI Foundry, deployed LLMs, and specialized R packages represents the future of financial research. We have replaced manual data wrangling with an autonomous, standardized agent that can be scaled across thousands of different asset pairs with a single command.

The ABI Connection (Bridging Python to R in VS Code)

For the script to run locally in VS Code, we must establish a robust Application Binary Interface (ABI) connection. This is handled by the rpy2 library, which serves as the translation layer between Python and the R interpreter.

import os

# Force rpy2 to use ABI mode to avoid the Windows CFFI conflict
os.environ['RPY2_CFFI_MODE'] = 'ABI'

import rpy2.robjects as robjects
from rpy2.robjects.packages import importr
print("Interface initialized in ABI mode.")

The Integrated Agent Script:

import os
import httpx
from openai import AzureOpenAI
import rpy2.robjects as robjects
from rpy2.robjects import pandas2ri
from rpy2.robjects.conversion import localconverter
from IPython.display import Image, display

#Microsoft AI Foundry - Azure OpenAI Connection
client = AzureOpenAI(
    api_version="2024-12-01-preview",
    azure_endpoint="AZURE_OPENAI_ENDPOINT",
    api_key="AZURE_OPENAI_KEY", 
    http_client=httpx.Client(verify=False, trust_env=False)
)

def run_updated_agent(user_request):
    system_instructions = (
        "You are a Quantitative Researcher. MANDATORY: All output, comments, and labels in English. "
        "Strict Operational Guidelines:\n"
        "1. Libraries: library(tidyquant), library(timetk), library(lubridate), library(dplyr), library(ggplot2).\n"
        "2. Analysis: Fetch GC=F and SI=F for 3 years, merge via inner_join, and calculate 'ratio'.\n"
        "3. Visualization: Use timetk::plot_time_series with .interactive = FALSE and .title = \"Gold/Silver Ratio\".\n"
        "4. Precision: Set .line_size = 2 and ALWAYS set .smooth_size = 2 for the smoothing line.\n"
        "5. Set title  face and axis texts  face to 'bold', and size to 16 with theme() function.\n"
        "6. EXPORT: Save using 'ggsave(\"ratio_plot.png\", width = 10, height = 6)'.\n"
        "7. Output ONLY raw R code."
    )

    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[
            {"role": "system", "content": system_instructions},
            {"role": "user", "content": user_request}
        ]
    )
    
    # Cleaning any markdown or headers to get raw code
    agent_code = response.choices[0].message.content.strip()
    if agent_code.startswith("```"):
        agent_code = "\n".join(agent_code.split("\n")[1:-1])
    
    print("-" * 40)
    print(agent_code)
    print("-" * 40)
    
    try:
        with localconverter(robjects.default_converter + pandas2ri.converter):
            # Synchronize working directory
            robjects.r(f'setwd("{os.getcwd().replace("\\", "/")}")')
            robjects.r(agent_code)
            
            if os.path.exists("ratio_plot.png"):
                display(Image(filename="ratio_plot.png"))
    except Exception as e:
        print(f"Agent Error: {e}")

# Execution
run_updated_agent("Plot the Gold/Silver ratio for the last 3 years with a smooth line.")
To leave a comment for the author, please follow the link and comment on their blog: DataGeeek.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Exit mobile version