Automated Forex Trading Journal: Track Your Trades with n8n and Google Sheets

Every successful Forex trader knows that keeping a detailed trading journal is crucial for improving performance and identifying profitable patterns. However, manually logging each trade is time-consuming and prone to errors. In this guide, we’ll build an automated trading journal that captures your trades in real-time and syncs them with Google Sheets for easy analysis.

By combining n8n’s powerful workflow automation with Google Sheets’ flexibility and Alibaba Cloud’s robust infrastructure, you’ll create a system that automatically logs every trade, calculates performance metrics, and provides insights into your trading behavior.

Why Automate Your Trading Journal?

Manual trade logging presents several challenges:

Human error: Forgetting to log trades or entering incorrect data
Time consumption: Spending valuable trading time on administrative tasks
Delayed insights: Waiting until end of day to analyze performance
Inconsistent data: Missing fields or incomplete information
Limited analysis: Difficulty spotting patterns across hundreds of trades

An automated system eliminates these issues by capturing every trade detail instantly and organizing it for analysis.

Architecture: Leveraging Alibaba Cloud

Our automated trading journal uses three powerful Alibaba Cloud services:

1. Simple Log Service (SLS) – Captures and stores all trade events in real-time with automatic indexing and search capabilities
2. API Gateway – Provides secure webhook endpoints for n8n to send trade data and receive confirmations
3. Tablestore – Stores structured trade data with automatic synchronization to Google Sheets, ensuring data integrity and fast queries

This architecture ensures your trading journal is always available, scalable, and capable of handling high-frequency trading data.

Prerequisites

Before we begin, ensure you have:

• n8n installed (cloud or self-hosted)
• Google account with access to Google Sheets
• Alibaba Cloud account with SLS, API Gateway, and Tablestore enabled
• Trading platform with webhook or API support
• Basic understanding of n8n workflows
• Python 3.8+ installed for custom scripts

Step 1: Setting Up Alibaba Cloud Services

First, configure your Alibaba Cloud infrastructure:

# Install Alibaba Cloud SDK
pip install aliyun-python-sdk-core
pip install aliyun-python-sdk-sls
pip install tablestore

# Configure SLS for trade logging
from aliyunsdkcore.client import AcsClient
from aliyunsdksls.request.v20191230 import CreateLogstoreRequest

client = AcsClient(
    'your-access-key-id',
    'your-access-key-secret',
    'us-west-1'
)

# Create logstore for trades
request = CreateLogstoreRequest.CreateLogstoreRequest()
request.set_ProjectName('forex-trading-journal')
request.set_LogstoreName('trade-logs')
request.set_Ttl(90)  # Keep logs for 90 days
request.set_ShardCount(2)

response = client.do_action_with_exception(request)
print(response)

Step 2: Creating the n8n Workflow

Build an n8n workflow that listens for trade events and processes them:

# n8n webhook configuration (JSON format)
{
  "nodes": [
    {
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [250, 300],
      "parameters": {
        "path": "trade-webhook",
        "method": "POST"
      }
    },
    {
      "name": "Process Trade Data",
      "type": "n8n-nodes-base.function",
      "position": [450, 300],
      "parameters": {
        "functionCode": "const tradeData = items[0].json;\nreturn [{\n  json: {\n    timestamp: new Date().toISOString(),\n    symbol: tradeData.symbol,\n    type: tradeData.type,\n    entry_price: tradeData.entry,\n    exit_price: tradeData.exit,\n    profit_loss: tradeData.exit - tradeData.entry,\n    lot_size: tradeData.lots\n  }\n}];"
      }
    },
    {
      "name": "Log to Alibaba SLS",
      "type": "n8n-nodes-base.httpRequest",
      "position": [650, 300]
    },
    {
      "name": "Save to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [850, 300]
    }
  ]
}

Step 3: Integrating with API Gateway

Connect your n8n workflow to Alibaba Cloud API Gateway:

# Configure API Gateway endpoint
import requests

api_gateway_config = {
    "endpoint": "https://your-api-id.execute-api.us-west-1.aliyuncs.com",
    "stage": "production",
    "api_name": "trade-logger"
}

def send_trade_to_gateway(trade_data):
    """Send trade data through API Gateway to SLS"""
    headers = {
        'Content-Type': 'application/json',
        'X-Ca-Key': 'your-api-key',
        'X-Ca-Secret': 'your-api-secret'
    }
    
    response = requests.post(
        f"{api_gateway_config['endpoint']}/trade-log",
        json=trade_data,
        headers=headers
    )
    
    return response.json()

# Example trade submission
trade = {
    "symbol": "EUR/USD",
    "type": "BUY",
    "entry_price": 1.0850,
    "exit_price": 1.0875,
    "lot_size": 0.5,
    "profit_loss": 125.00
}

result = send_trade_to_gateway(trade)
print(f"Trade logged: {result}")

Step 4: Syncing with Google Sheets

Automatically append trade data to Google Sheets:

from google.oauth2.service_account import Credentials
from googleapiclient.discovery import build

# Authenticate with Google Sheets
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
creds = Credentials.from_service_account_file(
    'credentials.json', scopes=SCOPES
)
service = build('sheets', 'v4', credentials=creds)

SPREADSHEET_ID = 'your-spreadsheet-id'

def append_trade_to_sheet(trade_data):
    """Append trade data to Google Sheets"""
    values = [[
        trade_data['timestamp'],
        trade_data['symbol'],
        trade_data['type'],
        trade_data['entry_price'],
        trade_data['exit_price'],
        trade_data['lot_size'],
        trade_data['profit_loss']
    ]]
    
    body = {'values': values}
    
    result = service.spreadsheets().values().append(
        spreadsheetId=SPREADSHEET_ID,
        range='Trades!A:G',
        valueInputOption='USER_ENTERED',
        body=body
    ).execute()
    
    return result

# Example usage
trade = {
    "timestamp": "2025-10-08 14:30:00",
    "symbol": "GBP/USD",
    "type": "SELL",
    "entry_price": 1.2650,
    "exit_price": 1.2625,
    "lot_size": 1.0,
    "profit_loss": 250.00
}

append_trade_to_sheet(trade)

Step 5: Using Tablestore for Data Persistence

Store trade data in Alibaba Cloud Tablestore for fast queries:

from tablestore import *

# Initialize Tablestore client
client = OTSClient(
    'your-endpoint',
    'your-access-key-id',
    'your-access-key-secret',
    'forex-trades'
)

def save_trade_to_tablestore(trade_data):
    """Save trade to Tablestore for long-term storage"""
    primary_key = [
        ('trade_id', trade_data['trade_id']),
        ('timestamp', trade_data['timestamp'])
    ]
    
    attribute_columns = [
        ('symbol', trade_data['symbol']),
        ('type', trade_data['type']),
        ('entry_price', trade_data['entry_price']),
        ('exit_price', trade_data['exit_price']),
        ('profit_loss', trade_data['profit_loss']),
        ('lot_size', trade_data['lot_size'])
    ]
    
    row = Row(primary_key, attribute_columns)
    consumed, return_row = client.put_row('trades_table', row)
    
    return consumed

def query_trades_by_symbol(symbol):
    """Query all trades for a specific currency pair"""
    inclusive_start_primary_key = [
        ('trade_id', INF_MIN),
        ('timestamp', INF_MIN)
    ]
    
    exclusive_end_primary_key = [
        ('trade_id', INF_MAX),
        ('timestamp', INF_MAX)
    ]
    
    columns_to_get = []
    
    consumed, next_start_primary_key, row_list = client.get_range(
        'trades_table',
        Direction.FORWARD,
        inclusive_start_primary_key,
        exclusive_end_primary_key,
        columns_to_get,
        1000
    )
    
    # Filter by symbol
    filtered_trades = [
        row for row in row_list 
        if dict(row.attribute_columns).get('symbol') == symbol
    ]
    
    return filtered_trades

# Query example
eurusd_trades = query_trades_by_symbol('EUR/USD')
print(f"Found {len(eurusd_trades)} EUR/USD trades")

Advanced Features

Enhance your trading journal with these advanced capabilities:

1. Automatic Performance Metrics

Calculate win rate, average profit/loss, and drawdown automatically:

import pandas as pd

def calculate_performance_metrics(spreadsheet_id):
    """Calculate trading performance metrics"""
    # Read data from Google Sheets
    result = service.spreadsheets().values().get(
        spreadsheetId=spreadsheet_id,
        range='Trades!A2:G'
    ).execute()
    
    values = result.get('values', [])
    df = pd.DataFrame(values, columns=[
        'Timestamp', 'Symbol', 'Type', 'Entry', 
        'Exit', 'Lots', 'Profit/Loss'
    ])
    
    df['Profit/Loss'] = pd.to_numeric(df['Profit/Loss'])
    
    # Calculate metrics
    metrics = {
        'total_trades': len(df),
        'winning_trades': len(df[df['Profit/Loss'] > 0]),
        'losing_trades': len(df[df['Profit/Loss'] < 0]),
        'win_rate': len(df[df['Profit/Loss'] > 0]) / len(df) * 100,
        'avg_profit': df[df['Profit/Loss'] > 0]['Profit/Loss'].mean(),
        'avg_loss': df[df['Profit/Loss'] < 0]['Profit/Loss'].mean(),
        'total_pnl': df['Profit/Loss'].sum()
    }
    
    return metrics

metrics = calculate_performance_metrics(SPREADSHEET_ID)
print(f"Win Rate: {metrics['win_rate']:.2f}%")
print(f"Total P&L: ${metrics['total_pnl']:.2f}")

2. Real-time Notifications

Get instant alerts when trades are logged:

def send_telegram_notification(trade_data):
    """Send trade notification via Telegram"""
    import requests
    
    bot_token = 'your-telegram-bot-token'
    chat_id = 'your-chat-id'
    
    message = f"""
    🔔 New Trade Logged
    
    Symbol: {trade_data['symbol']}
    Type: {trade_data['type']}
    Entry: {trade_data['entry_price']}
    Exit: {trade_data['exit_price']}
    P&L: ${trade_data['profit_loss']:.2f}
    """
    
    url = f"https://api.telegram.org/bot{bot_token}/sendMessage"
    payload = {
        'chat_id': chat_id,
        'text': message
    }
    
    requests.post(url, json=payload)

Cost Optimization on Alibaba Cloud

Minimize your cloud costs with these strategies:

SLS Storage: Set log retention to 30-90 days based on your needs (¥0.002/GB/day)
API Gateway: Use the shared instance for low-volume trading (1M calls free per month)
Tablestore: Choose reserved capacity for predictable workloads (saves up to 50%)
Data Transfer: Keep services in the same region to avoid cross-region charges

For a typical trader making 20-50 trades per day, expect monthly costs around $5-10.

Conclusion

An automated trading journal eliminates manual data entry while providing real-time insights into your trading performance. By combining n8n’s workflow automation with Google Sheets’ accessibility and Alibaba Cloud’s reliable infrastructure, you’ve built a system that captures every trade detail automatically.

The integration of Simple Log Service, API Gateway, and Tablestore ensures your trading data is secure, scalable, and always available for analysis. Whether you’re a day trader or swing trader, this automated journal will help you identify profitable patterns and improve your trading strategy.

Start logging your trades automatically today and unlock deeper insights into your trading performance!