Robot d'observation du marché

Intermédiaire

Ceci est unCrypto Tradingworkflow d'automatisation du domainecontenant 14 nœuds.Utilise principalement des nœuds comme Code, Wait, Slack, HttpRequest, SplitInBatches. API FinnHub et modèles Slack

Prérequis
  • Token Bot Slack ou URL Webhook
  • Peut nécessiter les informations d'identification d'authentification de l'API cible

Catégorie

Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "VYmYeHeu5eKYVLXA",
  "meta": {
    "instanceId": "3a80618028e8320a9c63d9239bfaf37c2f20bb22591695cb28556731cef25f4d",
    "templateCredsSetupCompleted": true
  },
  "name": "Market Watcher Bot",
  "tags": [
    {
      "id": "mmCdWnzPkjIpcvuR",
      "name": "Investment",
      "createdAt": "2025-06-15T04:39:59.965Z",
      "updatedAt": "2025-06-15T04:39:59.965Z"
    }
  ],
  "nodes": [
    {
      "id": "a244c890-bc5f-4edd-91f4-37192d7807c2",
      "name": "Déclencheur d'Actualités Quotidiennes du Marché",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -3000,
        660
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "15 9 * * 1-5"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "1baa58b8-de7e-469c-a1ab-3c020e87714e",
      "name": "HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -2340,
        660
      ],
      "parameters": {
        "url": "https://finnhub.io/api/v1/company-news",
        "options": {},
        "sendQuery": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "symbol",
              "value": "={{ $json.ticker }}"
            },
            {
              "name": "from",
              "value": "={{ $now.toLocal().toISO().split('T')[0] }}"
            },
            {
              "name": "to",
              "value": "={{ $now.toLocal().toISO().split('T')[0] }}"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "Tj0aIslgiVQgNZb4",
          "name": "Header Auth - Finnhub"
        }
      },
      "typeVersion": 4.2,
      "alwaysOutputData": true
    },
    {
      "id": "c36458a6-50c2-4219-b459-6629147c205e",
      "name": "Boucle sur les Éléments",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -2560,
        660
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "0da44d7e-1300-4d47-80f2-da63e647dfe8",
      "name": "Attente",
      "type": "n8n-nodes-base.wait",
      "position": [
        -1260,
        740
      ],
      "webhookId": "6c990829-24a2-4dfd-a689-4bdbd37a8bd3",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "64246872-3c95-429f-93e8-561ad6b6b940",
      "name": "Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        -1740,
        660
      ],
      "webhookId": "4a63a5b5-e257-430e-8956-8cd1a620c4f2",
      "parameters": {
        "text": "={{ $json.output }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "name",
          "value": "#stock-market"
        },
        "otherOptions": {
          "includeLinkToWorkflow": false
        }
      },
      "credentials": {
        "slackApi": {
          "id": "CBElgW2pS2InXBCW",
          "name": "Slack Market Bot"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "35e91c84-e051-4b71-91ea-2800d5919751",
      "name": "Formatage",
      "type": "n8n-nodes-base.code",
      "position": [
        -2120,
        660
      ],
      "parameters": {
        "jsCode": "let msg = '*' + ($input.first().json.related ? $input.first().json.related : $('Loop Over Items').first().json.ticker) + '* - Daily Market News :newspaper: \\n\\n';\n\nlet count = 0;\n\nif ($input.first().json.related) {\n  for (const item of $input.all()) {\n    count++;\n    if (count <= 5) {\n      msg += '- <' + item.json.url + '|' + item.json.headline + '>\\n';\n    } else {\n      break;\n    }\n    \n  }\n} else {\n  msg += 'No news found for this ticker'\n}\n\nreturn {\n  output: msg\n}"
      },
      "typeVersion": 2
    },
    {
      "id": "4ab6c87d-536e-4d40-a6c3-e92ed3f30e13",
      "name": "Aucune Opération, ne rien faire",
      "type": "n8n-nodes-base.noOp",
      "position": [
        -2360,
        260
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "4987c8e4-83da-403c-aca2-f56e77d9f4a9",
      "name": "Préparation des Tickers",
      "type": "n8n-nodes-base.code",
      "position": [
        -2780,
        660
      ],
      "parameters": {
        "jsCode": "const tickers = [\"AAPL\", \"META\", \"NVDA\", \"TSLA\", \"MSFT\", \"AMZN\", \"GOOG\", \"IAU\", \"IBIT\", \"QQQ\", \"SPY\"];\n\nlet output = [];\n\nfor(const item of tickers) {\n  output.push({ticker: item});\n}\n\nreturn output;"
      },
      "typeVersion": 2
    },
    {
      "id": "8914ece4-d42b-4db9-a6dd-ef6310320e53",
      "name": "Note Adhésive7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3820,
        320
      ],
      "parameters": {
        "width": 460,
        "height": 960,
        "content": "## Daily Company News Bot\n### This n8n template demonstrates how to use Free FinnHub API to retrieve the company news from a list stock tickers and post messages in Slack channel with a pre-scheduled time.\n\n### How it works\n* We firstly define the list of stock tickers you are interested\n* Loop over items to call FinnHub API to get the latest company news via the ticker\n* Then we format the company news as a markdown text content which could be sent to Slack\n* Post a new message in Slack channel\n* Wait for 5 seconds, then move to the next ticker\n\n### How to use\n* Simply setup a scheduler trigger to automatically trigger the workflow\n\n### Requirements\n* FinnHub API Key\n* Slack channel webhook\n\n\n### Need Help?\nContact me via [My Blog](https://fans-ai-lab.com/contact) or ask in the [Forum](https://community.n8n.io/)!\n\nHappy Hacking!"
      },
      "typeVersion": 1
    },
    {
      "id": "553353ca-c848-4110-91a5-ffdd9edabc28",
      "name": "Note Adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2840,
        460
      ],
      "parameters": {
        "content": "## Prepare the list of the tickers \nFeel free to update the list of the tickers"
      },
      "typeVersion": 1
    },
    {
      "id": "957ee9cc-3f32-4bed-aaf8-6ff3d9e8f1d3",
      "name": "Note Adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2380,
        420
      ],
      "parameters": {
        "width": 440,
        "height": 440,
        "content": "## Retrieve company news via FinnHub API\n\n### FinnHub FREE API\n- go to [FinnHub API site](https://finnhub.io/)\n- get a free API key\n- create a FinnHub Header Auth credential in n8n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "eea4abee-a783-452c-afb1-496e658f2e38",
      "name": "Note Adhésive2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1900,
        420
      ],
      "parameters": {
        "width": 440,
        "height": 440,
        "content": "## Post to Slack Channel via webhook\n\n### Slack Channel webhook\n- go your slack app management dashboard\n- create a new app\n- enable webhook for the newly created app\n\ndetails to follow this instruction [Sending messages using incoming webhooks](https://api.slack.com/messaging/webhooks)\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "45362a93-2523-44e4-8e3e-1b642eaa7381",
      "name": "Note Adhésive3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1440,
        420
      ],
      "parameters": {
        "width": 440,
        "height": 440,
        "content": "## Wait for 5 seconds\n\nYou can customize it to other waiting time you want. The main purpose here is to avoid sending too many requests to Finnhub at one time due to limited usage of FinnHub Free API\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "51f5c38c-3fd9-4022-9c24-d83b4d98818d",
      "name": "Note Adhésive4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3060,
        860
      ],
      "parameters": {
        "content": "## Cron scheduler\ncurrently it is scheduled every weekday morning at 9:15AM. You can customize it to any time you want"
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "pinData": {},
  "settings": {
    "callerPolicy": "workflowsFromSameOwner",
    "executionOrder": "v1",
    "timeSavedPerExecution": 15
  },
  "versionId": "e2ac836d-ee4b-4f78-b43b-e8054c511bc1",
  "connections": {
    "0da44d7e-1300-4d47-80f2-da63e647dfe8": {
      "main": [
        [
          {
            "node": "c36458a6-50c2-4219-b459-6629147c205e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "64246872-3c95-429f-93e8-561ad6b6b940": {
      "main": [
        [
          {
            "node": "0da44d7e-1300-4d47-80f2-da63e647dfe8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "35e91c84-e051-4b71-91ea-2800d5919751": {
      "main": [
        [
          {
            "node": "64246872-3c95-429f-93e8-561ad6b6b940",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1baa58b8-de7e-469c-a1ab-3c020e87714e": {
      "main": [
        [
          {
            "node": "35e91c84-e051-4b71-91ea-2800d5919751",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4987c8e4-83da-403c-aca2-f56e77d9f4a9": {
      "main": [
        [
          {
            "node": "c36458a6-50c2-4219-b459-6629147c205e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c36458a6-50c2-4219-b459-6629147c205e": {
      "main": [
        [
          {
            "node": "4ab6c87d-536e-4d40-a6c3-e92ed3f30e13",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "1baa58b8-de7e-469c-a1ab-3c020e87714e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a244c890-bc5f-4edd-91f4-37192d7807c2": {
      "main": [
        [
          {
            "node": "4987c8e4-83da-403c-aca2-f56e77d9f4a9",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Intermédiaire - Trading crypto

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Intermédiaire
Nombre de nœuds14
Catégorie1
Types de nœuds8
Description de la difficulté

Adapté aux utilisateurs expérimentés, avec des workflows de complexité moyenne contenant 6-15 nœuds

Auteur
Fan Luo

Fan Luo

@luofan189

Hi, there, I am Fan Luo, father of two lovely daughters Chloe and Claire. My family and I live in a small beautiful town in Toronto area, Canada. I have extensive experience as a developer, technical leader and AI automation expert and solopreneur. My expertise are web app development, hybrid app development and process automation.

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34