Overview
Trading Spark is a semi-automated trading assistant workflow running at second-level intervals, designed to capture and rigorously validate a trader’s spontaneous trade ideas in real time. Each cycle, the workflow surfaces an interactive form prompting the trader to input a trading symbol, direction (Long / Short / Cover Long / Cover Short), quantity, and the rationale behind the idea. If no input is received within the allotted time, the workflow silently skips the current cycle and awaits the next trigger.
Core Logic
Once a trade idea is submitted, the workflow simultaneously launches three data collection branches:
Once all three data streams are merged, a second AI large language model conducts a comprehensive four-dimensional validation of the trade idea: rationale soundness, technical signal alignment, sentiment risk, and entry timing. The model outputs a complete 31-field trading decision report in strict flat JSON format, covering execution recommendation, confidence level, suggested entry price, stop-loss / take-profit targets, risk-reward ratio, and decision validity period.
Output & Logging
Each analysis result is appended to a persistent global trade log and exported as a CSV file saved locally, building a traceable history of all trade decisions.
Strategic Positioning
This workflow does not place orders autonomously. It acts as an “AI co-pilot” for the trader — completing data aggregation and multi-dimensional validation within seconds — helping traders identify cognitive biases, quantify risk, and refine entry logic, while keeping the human trader in full control of the final execution decision.
{"type":"n8n","content":"{\"workflowData\":{\"nodes\":[{\"parameters\":{\"notice\":\"\",\"rule\":{\"interval\":[{\"field\":\"seconds\",\"secondsInterval\":60}]}},\"type\":\"n8n-nodes-base.scheduleTrigger\",\"typeVersion\":1.2,\"position\":[-576,240],\"id\":\"50964eef-bff5-42e2-9208-7fd5f61e8731\",\"name\":\"Schedule Trigger\"},{\"parameters\":{\"model\":{\"__rl\":true,\"value\":\"anthropic/claude-sonnet-4.5\",\"mode\":\"list\",\"cachedResultName\":\"anthropic/claude-sonnet-4.5\"}},\"type\":\"n8n-nodes-base.lmOpenAi\",\"typeVersion\":1,\"position\":[416,448],\"id\":\"bac24d18-6907-4e0b-ae45-10625a022ea8\",\"name\":\"OpenAI Model\",\"credentials\":{\"openAiApi\":{\"id\":\"54d0b567-b3fc-4c6a-b6be-546e0b9cd83f\",\"name\":\"openrouter\"}}},{\"parameters\":{\"model\":{\"__rl\":true,\"value\":\"anthropic/claude-sonnet-4.5\",\"mode\":\"list\",\"cachedResultName\":\"anthropic/claude-sonnet-4.5\"}},\"type\":\"n8n-nodes-base.lmOpenAi\",\"typeVersion\":1,\"position\":[1264,704],\"id\":\"2bf205c3-6fc4-4c9f-a24f-af0a0bbeb919\",\"name\":\"OpenAI Model1\",\"credentials\":{\"openAiApi\":{\"id\":\"54d0b567-b3fc-4c6a-b6be-546e0b9cd83f\",\"name\":\"openrouter\"}}},{\"parameters\":{\"resume\":\"form\",\"formTitle\":\"Trading Spark\",\"formDescription\":\"\",\"formFields\":{\"values\":[{\"fieldLabel\":\"Trading Symbol\",\"fieldType\":\"text\",\"placeholder\":\"BTC\",\"requiredField\":false},{\"fieldLabel\":\"Trading Direction\",\"fieldType\":\"dropdown\",\"fieldOptions\":{\"values\":[{\"option\":\"LONG\"},{\"option\":\"SHORT\"},{\"option\":\"COVERLONG\"},{\"option\":\"COVERSHORT\"}]},\"multiselect\":false,\"requiredField\":false},{\"fieldLabel\":\"Trading Quantity\",\"fieldType\":\"number\",\"placeholder\":\"1\",\"requiredField\":false},{\"fieldLabel\":\"Trading Rationale\",\"fieldType\":\"text\",\"placeholder\":\"Current trading inspiration\",\"requiredField\":false}]},\"pushNotifications\":false,\"autoPopup\":true,\"limitWaitTime\":true,\"limitType\":\"afterTimeInterval\",\"resumeAmount\":60,\"resumeUnit\":\"seconds\"},\"type\":\"n8n-nodes-base.wait\",\"typeVersion\":1.1,\"position\":[-352,240],\"id\":\"15054693-be29-4fc8-8b0e-1c4bfd9b9705\",\"name\":\"Input Trading Spark\"},{\"parameters\":{\"mode\":\"rules\",\"rules\":{\"values\":[{\"conditions\":{\"options\":{\"caseSensitive\":true,\"leftValue\":\"\",\"typeValidation\":\"strict\",\"version\":2},\"conditions\":[{\"leftValue\":\"={{ $json}}\",\"rightValue\":\"\",\"operator\":{\"type\":\"object\",\"operation\":\"empty\",\"singleValue\":true},\"id\":\"1f3924ef-e2a4-425d-ad42-866579ab4492\"}],\"combinator\":\"and\"},\"renameOutput\":false}]},\"looseTypeValidation\":false,\"options\":{}},\"type\":\"n8n-nodes-base.switch\",\"typeVersion\":3.2,\"position\":[-128,-112],\"id\":\"8ff33373-9e55-42a6-99db-ccc5fb984b98\",\"name\":\"No Ideas Check\"},{\"parameters\":{\"logAll\":false,\"output\":\"No trading spark\"},\"type\":\"n8n-nodes-base.log\",\"typeVersion\":1,\"position\":[96,-112],\"id\":\"03c1aa4e-6797-4895-a80d-3d73b9c45d3f\",\"name\":\"Log Output\"},{\"parameters\":{\"endpointUrl\":\"https://mcp.alphavantage.co/mcp?apikey='HCTH32FPOI6UPF66'\",\"authentication\":\"none\",\"tool\":\"NEWS_SENTIMENT\"},\"type\":\"@n8n/n8n-nodes-langchain.mcpClient\",\"typeVersion\":1.1,\"position\":[96,336],\"id\":\"fd7fe140-0950-4374-aabf-c5b6afc04f2c\",\"name\":\"Collect Sentiment Data\"},{\"parameters\":{\"operation\":\"getPosition\",\"exchange\":0,\"symbol\":{\"__rl\":true,\"value\":\"={{ $json[\\\"Trading Symbol\\\"] }}_USDT.swap\",\"mode\":\"id\"}},\"type\":\"n8n-nodes-base.accountInfo\",\"typeVersion\":1,\"position\":[400,32],\"id\":\"16d7c75a-a04e-4bae-a6ee-ee565d8900d4\",\"name\":\"Collect Position Info\"},{\"parameters\":{\"text\":\"=You are an advanced sentiment analyzer specializing in **cryptocurrency market sentiment and expectations**. For the cryptocurrency {{ $('Identify Trading Spark').item.json['Trading Symbol'] }}, perform a two-part sentiment analysis using the following methods:\\n\\n**Short-term Sentiment Analysis:**\\n\\n* Evaluate immediate market reactions, including price volatility, social media buzz, news events, on-chain data, and technical indicator signals;\\n* Determine overall market bias: \\\"Positive\\\", \\\"Neutral\\\", or \\\"Negative\\\";\\n* Calculate a numerical sentiment score between **-1 (extremely negative)** and **1 (extremely positive)**;\\n* Provide a concise rationale for short-term sentiment, focusing on **latest market movements, trader behavior, news events, or technical trends**.\\n\\n**Long-term Sentiment Analysis:**\\n\\n* Assess the long-term prospects of the crypto asset, including fundamentals, development progress, market adoption, macroeconomic conditions, and regulatory environment;\\n* Determine overall sentiment category: \\\"Positive\\\", \\\"Neutral\\\", or \\\"Negative\\\";\\n* Calculate a long-term sentiment score between **-1 (extremely negative)** and **1 (extremely positive)**;\\n* Provide detailed rationale for long-term sentiment, focusing on **project potential, market structure, policy trends, and institutional participation**.\\n\\nOutput must be a strictly formatted JSON object containing two keys: \\\"shortTermSentiment\\\" and \\\"longTermSentiment\\\".\\nEach key's value should be an object with three fields: \\\"category\\\", \\\"score\\\", \\\"rationale\\\".\\nDo not output any additional text.\\n\\n**Output Example:**\\n\\n```json\\n{\\n \\\"shortTermSentiment\\\": {\\n \\\"category\\\": \\\"Positive\\\",\\n \\\"score\\\": 0.7,\\n \\\"rationale\\\": \\\"...\\\"\\n },\\n \\\"longTermSentiment\\\": {\\n \\\"category\\\": \\\"Neutral\\\",\\n \\\"score\\\": 0.0,\\n \\\"rationale\\\": \\\"...\\\"\\n }\\n}\\n```\\n\\n**Now, analyze the following cryptocurrency market-related text and generate JSON output in the above format:**\\n{{ $json.text }}\\n\",\"options\":{}},\"type\":\"@n8n/n8n-nodes-langchain.agent\",\"typeVersion\":1,\"position\":[320,224],\"id\":\"adb6ce18-82e3-43f0-b8ca-7f7545af2696\",\"name\":\"Sentiment Analysis\"},{\"parameters\":{\"input\":\"={{ $json[\\\"Trading Symbol\\\"] }}\",\"operation\":511852},\"type\":\"n8n-nodes-base.tradingPlugin\",\"typeVersion\":1,\"position\":[400,720],\"id\":\"2293b893-1c4b-4664-9ce1-3c1c9af4aefd\",\"name\":\"Calculate Technical Indicators\"},{\"parameters\":{\"mode\":\"append\",\"numberInputs\":4},\"type\":\"n8n-nodes-base.merge\",\"typeVersion\":3.2,\"position\":[768,448],\"id\":\"eb8470a0-e660-4e3b-a8b4-6b3f28313457\",\"name\":\"Merge Data\"},{\"parameters\":{\"mode\":\"runOnceForAllItems\",\"language\":\"javaScript\",\"jsCode\":\"// Initialize containers for each set of data.\\nlet posData = null;\\nlet contentData = null;\\nlet technicalIndicators = null;\\nlet tradeIdea = null;\\n\\n// Loop over each item from the merge node.\\nfor (const item of items) {\\n // =============== Position Data ===============\\n if (item.json.operation === 'getPosition' && item.json.result !== undefined) {\\n posData = item.json.result;\\n posData.amount = posData.amount == 0 ? \\\"No position\\\" : posData.amount > 0 ? \\\"Long position\\\" : \\\"Short position\\\";\\n }\\n\\n // =============== Sentiment Analysis Result ===============\\n if (item.json.output !== undefined) {\\n // Output is a JSON string, so parse it\\n try {\\n contentData = JSON.parse(item.json.output);\\n } catch (e) {\\n contentData = item.json.output;\\n }\\n }\\n\\n // =============== Technical Indicator Data ===============\\n if (item.json.MACD !== undefined || item.json.RSI !== undefined || \\n item.json.ATR !== undefined || item.json.OBV !== undefined) {\\n technicalIndicators = {\\n \\\"Trend_Indicator_MACD\\\": item.json.MACD,\\n \\\"Oscillator_RSI\\\": item.json.RSI,\\n \\\"Volatility_ATR\\\": item.json.ATR,\\n \\\"Volume_Analysis_OBV\\\": item.json.OBV\\n };\\n }\\n\\n // =============== Trading Intent (Manual/Strategy Suggestion) ===============\\n if (item.json[\\\"Trading Symbol\\\"] !== undefined && item.json[\\\"Trading Direction\\\"] !== undefined && item.json[\\\"Trading Quantity\\\"] !== undefined && item.json[\\\"Trading Rationale\\\"] !== undefined) {\\n tradeIdea = {\\n \\\"Trading_Symbol\\\": item.json[\\\"Trading Symbol\\\"],\\n \\\"Trading_Direction\\\": item.json[\\\"Trading Direction\\\"],\\n \\\"Trading_Quantity\\\": item.json[\\\"Trading Quantity\\\"],\\n \\\"Trading_Rationale\\\": item.json[\\\"Trading Rationale\\\"]\\n };\\n }\\n}\\n\\n// =============== Return Aggregated Result ===============\\nreturn [{\\n json: {\\n \\\"Position_Data\\\": posData,\\n \\\"Sentiment_Analysis\\\": contentData,\\n \\\"Technical_Indicators\\\": technicalIndicators,\\n \\\"Trading_Intent\\\": tradeIdea\\n }\\n}];\\n\",\"notice\":\"\"},\"type\":\"n8n-nodes-base.code\",\"typeVersion\":2,\"position\":[944,480],\"id\":\"cfb4f158-d21c-4454-b868-57208175381c\",\"name\":\"Organize Data\"},{\"parameters\":{\"text\":\"=You are a **Cryptocurrency Trading Decision Analyst**, focused on providing **directly executable trading judgments**.\\n\\n---\\n\\n## 📥 Input Data\\n- **Trading Intent**: Symbol {{ $json['Trading_Intent']['Trading_Symbol'] }} | Direction {{ $json['Trading_Intent']['Trading_Direction'] }} | Quantity {{ $json['Trading_Intent']['Trading_Quantity'] }}\\n- **Trading Rationale**: {{ $json['Trading_Intent']['Trading_Rationale'] }}\\n- **Position Status**: {{ JSON.stringify($json['Position_Data']) }}\\n- **Market Sentiment**: {{ $json['Sentiment_Analysis'] }}\\n- **Technical Indicators**: {{ JSON.stringify($json['Technical_Indicators']) }}\\n- **Analysis Time**: {{ new Date().toISOString() }}\\n\\n---\\n\\n## 🔍 Analysis Framework (4-Dimension Quick Assessment)\\n\\n### 0️⃣ **Rationale Verification** (Priority Assessment)\\n- Is the rationale valid? (Verify with technical indicators + sentiment data)\\n- Are there cognitive biases? (e.g., focusing only on decline while ignoring trends, chasing rallies/selling dips, anchoring effect)\\n- Is the risk-reward ratio reasonable? (At least 2:1)\\n\\n### 1️⃣ Technical Signals\\n- Does MACD direction support the trading direction? (Golden cross/death cross/divergence)\\n- Is RSI overbought/oversold (>70/<30)? Which zone is it currently in?\\n- Does ATR measure high or low volatility?\\n- Does OBV diverge from price? Is capital flow consistent?\\n\\n### 2️⃣ Sentiment Risk\\n- What is the exact short-term sentiment score? (>0.6 extreme greed / <-0.6 extreme fear)\\n- Are there major black swan events? (Policy, liquidation, technical failures)\\n\\n### 3️⃣ Entry Timing\\n- Is the current price level in a reasonable range? (Support/resistance/round numbers)\\n- Need to wait for pullback/breakout? What specific signal to wait for?\\n\\n---\\n\\n## 📤 Output Requirements\\n\\n**Critical**: Output pure JSON object directly, do not use markdown code blocks\\n\\n### Strict JSON Structure (Completely Flat, All Fields Required):\\n\\n{\\n \\\"Analysis_Time\\\": \\\"2025-10-11T10:30:00.000Z\\\",\\n \\\"Trading_Symbol\\\": \\\"{{ $json['Trading_Intent']['Trading_Symbol'] }}\\\",\\n \\\"Trading_Direction\\\": \\\"{{ $json['Trading_Intent']['Trading_Direction'] }}\\\",\\n \\\"Trading_Quantity\\\": \\\"{{ $json['Trading_Intent']['Trading_Quantity'] }}\\\",\\n \\n \\\"Original_Rationale\\\": \\\"{{ $json['Trading_Intent']['Trading_Rationale'] }}\\\",\\n \\\"Rationale_Assessment\\\": \\\"Reasonable/Partially Reasonable/Unreasonable\\\",\\n \\\"Verification_Result\\\": \\\"[Required] Verify rationale with actual indicator data, including specific values (e.g., MACD=-213, RSI=31.14), 2-3 sentences\\\",\\n \\\"Critical_Flaw\\\": \\\"[Required] Point out the biggest cognitive bias or technical gap; if none, write 'No significant flaws'\\\",\\n \\n \\\"Execution_Recommendation\\\": \\\"Execute immediately/Wait for entry/Abandon trade\\\",\\n \\\"Confidence_Level\\\": \\\"High/Medium/Low\\\",\\n \\\"Basis_Rationale_Verification\\\": \\\"[Required] Judgment on trading rationale with data support\\\",\\n \\\"Basis_Technical_Analysis\\\": \\\"[Required] Conclusion from MACD/RSI/OBV in one sentence\\\",\\n \\\"Basis_Risk_Points\\\": \\\"[Required] Biggest risk with specific trigger conditions\\\",\\n \\n \\\"Suggested_Entry_Price\\\": \\\"[Required] $XXX,XXX\\\",\\n \\\"Suggested_Entry_Conditions\\\": \\\"[Required] Candlestick pattern + indicator trigger + volume conditions\\\",\\n \\\"Suggested_Entry_Time\\\": \\\"[Required] Immediately/Within 4 hours/Within 24 hours/After breakout/Abandon\\\",\\n \\\"Stop_Loss_Price\\\": \\\"[Required] $XXX,XXX\\\",\\n \\\"Stop_Loss_Reason\\\": \\\"[Required] Breaking XX support/Technical pattern destruction\\\",\\n \\\"Take_Profit_Target1_Price\\\": \\\"[Required] $XXX,XXX\\\",\\n \\\"Take_Profit_Target1_Position\\\": \\\"[Required] 50%\\\",\\n \\\"Take_Profit_Target1_Reason\\\": \\\"[Required] Tested resistance/XX% retracement\\\",\\n \\\"Take_Profit_Target2_Price\\\": \\\"[Required] $XXX,XXX\\\",\\n \\\"Take_Profit_Target2_Position\\\": \\\"[Required] Remaining position\\\",\\n \\\"Take_Profit_Target2_Reason\\\": \\\"[Required] Key round number/Long-term target\\\",\\n \\n \\\"Core_Risk\\\": \\\"[Required] Biggest single risk point (policy/technical/sentiment) with potential price impact\\\",\\n \\\"Risk_Reward_Ratio\\\": \\\"[Required] X.XX:1\\\",\\n \\\"Potential_Profit_Percentage\\\": \\\"[Required] XX%\\\",\\n \\\"Maximum_Loss_Percentage\\\": \\\"[Required] XX%\\\",\\n \\\"Risk_Level\\\": \\\"Low risk/Medium risk/High risk/Extreme risk\\\",\\n \\n \\\"Operation_Summary\\\": \\\"[Required] One sentence summary: what to do/what to wait for/what not to do\\\",\\n \\\"Decision_Validity_Period\\\": \\\"[Required] Valid within 4 hours/Until price breaks $XX,XXX/Long-term hold\\\",\\n \\\"Review_Conditions\\\": \\\"[Required] Trigger conditions requiring reassessment (e.g., MACD golden cross/RSI breaks 45/Major news)\\\"\\n}\\n\\n---\\n\\n## ✅ Output Specifications (Strictly Enforce)\\n\\n**Mandatory Requirements**:\\n1. ✅ **Primary Task**: Verify whether \\\"Trading Rationale\\\" has cognitive biases using specific data\\n2. ✅ **Data Support**: All judgments must reference actual indicator values (e.g., MACD=-213, not just \\\"MACD negative\\\")\\n3. ✅ **Pure JSON Output**: Output JSON object directly, never use ```json``` wrapper\\n4. ✅ **Price Format**: USD prices in uniform format $123,456 (comma-separated thousands)\\n5. ✅ **Time Clarity**: \\\"Suggested Entry Time\\\" must provide specific time range or trigger conditions\\n6. ✅ **Complete Fields**: All 31 fields must exist, cannot omit any entry\\n7. ✅ **Flat Structure**: No nested objects, all fields at the same level\\n8. ✅ **Executability**: All recommendations must include clear trigger conditions and execution parameters\\n9. ❌ **No Ambiguity**: Don't use \\\"possibly\\\", \\\"perhaps\\\", \\\"suggest considering\\\" etc.\\n10. ❌ **No Preaching**: Don't explain technical indicator calculation principles, only give conclusions\\n11. ❌ **No Nesting**: JSON must be completely flat, field names use underscores to separate hierarchy\\n\\n---\\n\\n## 🎯 Field Naming Rules\\n\\n**Hierarchy Separator**: Use underscore to connect related fields\\n- Rationale related: `Original_Rationale`, `Rationale_Assessment`, `Verification_Result`\\n- Basis related: `Basis_Rationale_Verification`, `Basis_Technical_Analysis`, `Basis_Risk_Points`\\n- Take profit related: `Take_Profit_Target1_Price`, `Take_Profit_Target1_Position`, `Take_Profit_Target1_Reason`\\n\\n**Data Types**:\\n- Time: ISO 8601 format `2025-10-11T10:30:00.000Z`\\n- Price: With dollar sign and comma `$123,456`\\n- Percentage: With % sign `15%`\\n- Ratio: Colon separated `2.5:1`\\n\\n---\\n\\n## 🎯 Special Case Handling\\n\\n### When \\\"Trading Rationale\\\" is clearly unreasonable:\\n- \\\"Execution_Recommendation\\\" must be \\\"Abandon trade\\\"\\n- \\\"Critical_Flaw\\\" must clearly specify type of cognitive bias\\n- \\\"Suggested_Entry_Time\\\" write \\\"Abandon current plan\\\"\\n- \\\"Suggested_Entry_Price\\\" write \\\"Entry not recommended\\\"\\n- \\\"Suggested_Entry_Conditions\\\" write \\\"Trading rationale has major flaws\\\"\\n\\n### When market is extremely volatile:\\n- \\\"Risk_Level\\\" mark as \\\"Extreme risk\\\"\\n- \\\"Decision_Validity_Period\\\" shortened to \\\"Valid within 1 hour\\\"\\n- \\\"Review_Conditions\\\" add volatility monitoring\\n\\n### When technical indicators conflict:\\n- \\\"Confidence_Level\\\" mark as \\\"Low\\\"\\n- \\\"Execution_Recommendation\\\" prioritize \\\"Wait for entry\\\"\\n- \\\"Review_Conditions\\\" clarify which indicator confirmation to wait for\\n\\n---\\n\\n## 🚀 Start Analysis Immediately\\n\\nFor trading rationale \\\"{{ $json['Trading_Intent']['Trading_Rationale'] }}\\\" and trading intent ({{ $json['Trading_Intent']['Trading_Symbol'] }} {{ $json['Trading_Intent']['Trading_Direction'] }} {{ $json['Trading_Intent']['Trading_Quantity'] }} units), strictly output decision according to the above flat JSON structure, ensuring all 31 fields are complete and at the same level.\",\"options\":{}},\"type\":\"@n8n/n8n-nodes-langchain.agent\",\"typeVersion\":1,\"position\":[1168,480],\"id\":\"a1e1b474-dd04-44da-a882-d448d26aef99\",\"name\":\"AI Trading Spark Verification\"},{\"parameters\":{\"mode\":\"rules\",\"rules\":{\"values\":[{\"conditions\":{\"options\":{\"caseSensitive\":true,\"leftValue\":\"\",\"typeValidation\":\"strict\",\"version\":2},\"conditions\":[{\"leftValue\":\"={{$json}}\",\"rightValue\":\"\",\"operator\":{\"type\":\"object\",\"operation\":\"notEmpty\",\"singleValue\":true},\"id\":\"571da14e-bf45-4aaa-bce3-f09a8effe43b\"}],\"combinator\":\"and\"},\"renameOutput\":false}]},\"looseTypeValidation\":false,\"options\":{}},\"type\":\"n8n-nodes-base.switch\",\"typeVersion\":3.2,\"position\":[-128,464],\"id\":\"7a0ec826-9392-4374-88df-229739ba1512\",\"name\":\"Identify Trading Spark\"},{\"parameters\":{\"mode\":\"runOnceForAllItems\",\"language\":\"javaScript\",\"jsCode\":\"const rawData = $input.first().json.output;\\n\\n// Function to extract JSON content\\nfunction extractJSON(outputString) {\\n // Remove markdown code block markers\\n const jsonMatch = outputString.match(/```json\\\\n([\\\\s\\\\S]*?)\\\\n```/);\\n \\n if (jsonMatch && jsonMatch[1]) {\\n // Parse JSON string\\n return JSON.parse(jsonMatch[1]);\\n }\\n \\n throw new Error(\\\"Unable to extract JSON content from output\\\");\\n}\\n\\n// Execute extraction\\nconst result = extractJSON(rawData);\\n\\nconsole.log(\\\"Current trade analysis:\\\", result);\\n\\n// Read trade log\\nlet tradelog = _G('tradelog') || [];\\n\\n// Add latest record\\ntradelog.push(result);\\n\\n// Save\\n_G('tradelog', tradelog);\\n\\nreturn tradelog;\",\"notice\":\"\"},\"type\":\"n8n-nodes-base.code\",\"typeVersion\":2,\"position\":[1568,480],\"id\":\"be72f517-8b31-49c0-a9a6-d28ad2d7f115\",\"name\":\"Code\"},{\"parameters\":{\"operation\":\"csv\",\"binaryPropertyName\":\"data\",\"options\":{}},\"type\":\"n8n-nodes-base.convertToFile\",\"typeVersion\":1.1,\"position\":[1760,480],\"id\":\"2c268188-185a-4c67-a034-0a5459dec5be\",\"name\":\"Convert to File\"},{\"parameters\":{\"info\":\"\",\"fileName\":\"tradelog.csv\",\"dataPropertyName\":\"data\",\"options\":{}},\"type\":\"n8n-nodes-base.writeFile\",\"typeVersion\":1,\"position\":[1936,480],\"id\":\"bfc0ee26-77d6-46f1-a9b1-5a57052201a5\",\"name\":\"Write File to Disk\"}],\"pinData\":{},\"connections\":{\"Schedule Trigger\":{\"main\":[[{\"node\":\"Input Trading Spark\",\"type\":\"main\",\"index\":0}]]},\"OpenAI Model\":{\"ai_languageModel\":[[{\"node\":\"Sentiment Analysis\",\"type\":\"ai_languageModel\",\"index\":0}]]},\"OpenAI Model1\":{\"ai_languageModel\":[[{\"node\":\"AI Trading Spark Verification\",\"type\":\"ai_languageModel\",\"index\":0}]]},\"Input Trading Spark\":{\"main\":[[{\"node\":\"No Ideas Check\",\"type\":\"main\",\"index\":0},{\"node\":\"Identify Trading Spark\",\"type\":\"main\",\"index\":0}]]},\"No Ideas Check\":{\"main\":[[{\"node\":\"Log Output\",\"type\":\"main\",\"index\":0}]]},\"Collect Sentiment Data\":{\"main\":[[{\"node\":\"Sentiment Analysis\",\"type\":\"main\",\"index\":0}]]},\"Collect Position Info\":{\"main\":[[{\"node\":\"Merge Data\",\"type\":\"main\",\"index\":0}]]},\"Sentiment Analysis\":{\"main\":[[{\"node\":\"Merge Data\",\"type\":\"main\",\"index\":1}]]},\"Calculate Technical Indicators\":{\"main\":[[{\"node\":\"Merge Data\",\"type\":\"main\",\"index\":2}]]},\"Merge Data\":{\"main\":[[{\"node\":\"Organize Data\",\"type\":\"main\",\"index\":0}]]},\"Organize Data\":{\"main\":[[{\"node\":\"AI Trading Spark Verification\",\"type\":\"main\",\"index\":0}]]},\"AI Trading Spark Verification\":{\"main\":[[{\"node\":\"Code\",\"type\":\"main\",\"index\":0}]]},\"Identify Trading Spark\":{\"main\":[[{\"node\":\"Calculate Technical Indicators\",\"type\":\"main\",\"index\":0},{\"node\":\"Collect Sentiment Data\",\"type\":\"main\",\"index\":0},{\"node\":\"Collect Position Info\",\"type\":\"main\",\"index\":0},{\"node\":\"Merge Data\",\"type\":\"main\",\"index\":3}]]},\"Code\":{\"main\":[[{\"node\":\"Convert to File\",\"type\":\"main\",\"index\":0}]]},\"Convert to File\":{\"main\":[[{\"node\":\"Write File to Disk\",\"type\":\"main\",\"index\":0}]]}},\"active\":false,\"settings\":{\"timezone\":\"Asia/Shanghai\",\"executionOrder\":\"v1\"},\"tags\":[],\"credentials\":{},\"id\":\"3f3634eb-ecb2-40a0-89d7-50b7bb0052db\",\"plugins\":{\"511852\":{\"id\":511852,\"args\":\"[]\",\"name\":\"Indicator Calculation\"}},\"mcpClients\":{\"NEWS_SENTIMENT\":{\"name\":\"NEWS_SENTIMENT\",\"description\":\"Returns live and historical market news & sentiment data from premier news outlets worldwide.\",\"properties\":[{\"displayName\":\"tickers\",\"name\":\"tickers\",\"type\":\"string\",\"description\":\"Stock/crypto/forex symbols to filter articles. Example: \\\"IBM\\\" or \\\"COIN,CRYPTO:BTC,FOREX:USD\\\".\",\"displayOptions\":{\"show\":{\"tool\":[\"NEWS_SENTIMENT\"]}},\"placeholder\":\"Enter tickers\"},{\"displayName\":\"topics\",\"name\":\"topics\",\"type\":\"string\",\"description\":\"News topics to filter by. Example: \\\"technology\\\" or \\\"technology,ipo\\\".\",\"displayOptions\":{\"show\":{\"tool\":[\"NEWS_SENTIMENT\"]}},\"placeholder\":\"Enter topics\"},{\"displayName\":\"time_from\",\"name\":\"time_from\",\"type\":\"string\",\"description\":\"Start time range in YYYYMMDDTHHMM format. Example: \\\"20220410T0130\\\".\",\"displayOptions\":{\"show\":{\"tool\":[\"NEWS_SENTIMENT\"]}},\"placeholder\":\"Enter time_from\"},{\"displayName\":\"time_to\",\"name\":\"time_to\",\"type\":\"string\",\"description\":\"End time range in YYYYMMDDTHHMM format. Defaults to current time if time_from specified.\",\"displayOptions\":{\"show\":{\"tool\":[\"NEWS_SENTIMENT\"]}},\"placeholder\":\"Enter time_to\"},{\"displayName\":\"sort\",\"name\":\"sort\",\"type\":\"string\",\"description\":\"Sort order - \\\"LATEST\\\" (default), \\\"EARLIEST\\\", or \\\"RELEVANCE\\\".\",\"displayOptions\":{\"show\":{\"tool\":[\"NEWS_SENTIMENT\"]}},\"placeholder\":\"Enter sort\"},{\"displayName\":\"limit\",\"name\":\"limit\",\"type\":\"number\",\"description\":\"Number of results to return. Default 50, max 1000.\",\"displayOptions\":{\"show\":{\"tool\":[\"NEWS_SENTIMENT\"]}}}]}}},\"startNodes\":[],\"triggerToStartFrom\":{\"name\":\"Schedule Trigger\"}}"}