Navigation

    SmartAPI Forum
    • Register
    • Login
    • Search
    • Categories
    • Popular
    • Groups
    • FAQs
    • API Docs

    Option chain in node js

    General Discussion
    0
    6
    31
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      ajaykaswan00 last edited by

      I am creation a Option chain using Two api

      app.post('/option-chain', async (req, res) => {
        try {
          // Construct the data payload for the first API request
          const data = JSON.stringify({
            "name": req.body.data.stock,
            "expirydate": req.body.data.expiry
          });
      
          // Combine CE and PE tokens from the request body
          // const ceTokenValues = Object.values(req.body.ceToken).slice(2, -2);
          // const peTokenValues = Object.values(req.body.peToken).slice(2, -2);
          
          // const dataThis = [
          //   ...ceTokenValues,
          //   ...peTokenValues
          // ];
      
          
          const ceTokenValues = Object.values(req.body.ceToken);
          const peTokenValues = Object.values(req.body.peToken);
          
          const ceLength = ceTokenValues.length;
          const peLength = peTokenValues.length;
          
          // Calculate start and end indices for the middle 20 elements
          const ceStartIndex = Math.floor((ceLength - 20) / 2);
          const ceEndIndex = ceStartIndex + 20;
          
          const peStartIndex = Math.floor((peLength - 20) / 2);
          const peEndIndex = peStartIndex + 20;
          
          // Get the middle 20 elements of the arrays
          const middle20ce = ceTokenValues.slice(ceStartIndex, ceEndIndex);
          const middle20pe = peTokenValues.slice(peStartIndex, peEndIndex);
          
      
      const dataThis = [
            ...middle20ce,
            ...middle20pe
          ];
          // Construct the data payload for the second API request
          let data2 = JSON.stringify({
            "mode": "FULL",
            "exchangeTokens": {
              "NSE": [],
              "NFO": dataThis
            }
          });
      
         
      
           console.log("this is data2",data2)
          // Configure the first API request
          let config = {
            method: 'post',
            maxBodyLength: Infinity,
            url: 'https://apiconnect.angelbroking.com/rest/secure/angelbroking/marketData/v1/optionGreek',
            headers: {
              'X-PrivateKey': 'RVHXL1IU',
              'X-SourceID': 'WEB',
              'X-MACAddress': 'D0-37-45-BF-20-A1',
              'Authorization': `Bearer ${apiData.data.jwtToken}`,
              'Content-Type': 'application/json',
            },
            data: data
          };
      
          // Make the first API request
          const response = await axios.request(config);
      
          // Configure the second API request
          let configTwo = {
            method: 'post',
            maxBodyLength: Infinity,
            url: 'https://apiconnect.angelbroking.com/rest/secure/angelbroking/market/v1/quote/',
            headers: {
              'X-PrivateKey': 'RVHXL1IU',
              'X-SourceID': 'WEB',
              'X-MACAddress': 'D0-37-45-BF-20-A1',
              'Authorization': `Bearer ${apiData.data.jwtToken}`,
              'Content-Type': 'application/json',
            },
            data: data2
          };
      
      
          // Make the second API request
          const responseTwo = await axios.request(configTwo);
      
      console.log("responseTwo",responseTwo.data)
          // Configure the second API request
         
      
          // console.log("responseThree",responseThree.data)
          // Modify response.data by adding a symbol to each option
          response.data.data.forEach(option => {
            const formattedStrikePrice = option.strikePrice.split('.')[0];
             // Get the last two digits of the year in the expiry date
        const expiryYear = option.expiry.slice(-2);
        
        // Get the first three characters of the expiry month
        const expiryMonth = option.expiry.slice(0, 5);
            option.symbol = `${option.name}${expiryMonth}${expiryYear}${formattedStrikePrice}${option.optionType}`;
            option.strikePrice = formattedStrikePrice;
          });
      
          let mergedData = [];
      
              // Iterate through each item in responseTwo.data.data.fetched
          responseTwo.data.data.fetched.forEach(itemTwo => {
            // Find the corresponding item in response.data.data based on symbol
            let itemOne = response.data.data.find(itemOne => itemOne.symbol === itemTwo.tradingSymbol);
      
            // If a matching item is found, merge the data
            if (itemOne) {
              let mergedItem = { ...itemOne, ...itemTwo };
              mergedData.push(mergedItem);
            }
          });
      
          // Send the merged data in the response
          res.status(200).send({ data: response.data, dataTwo: responseTwo.data, mergedData: mergedData });
      
        } catch (error) {
          console.error('API request error:', error.message);
          res.status(500).send({ message: 'Failed to fetch option chain data' });
        }
      });
      

      as you can see in mergedData. i am getting my option chain but ,i am facing some problem like, i want to store this data in my database so, i can show graph and other stuff for that, i need data of all day data there is no other api that giving me data of full day so bassicaly i need to store this data for every 10 second, but problem is there is 180 stock that i need to store and i can only store only one at a time and if i want to get data for 180 stock i need to calll these api so many time and it will give me error and also not effective so is there any way you can suggest me it will be help

      M 1 Reply Last reply Reply Quote 0
      • M
        Moderator_3 @ajaykaswan00 last edited by

        Hello @ajaykaswan00
        Can you please use websocket to achive the second by seconds data

        Regards,
        SmartAPI Team

        A K 3 Replies Last reply Reply Quote 0
        • A
          ajaykaswan00 @Moderator_3 last edited by

          @Moderator_3 Thank you for your reply can you tell me how i convert all the data in to json because when i get data i get buffer data

          also when we o want to access data for a strike price it dont work it just giving me only for only 1 token but in option chain for every strike price there is diffrent token so how to handal that

          M 1 Reply Last reply Reply Quote 0
          • M
            Moderator_3 @ajaykaswan00 last edited by

            Hello @ajaykaswan00

            Please use the python/java/node sdk which send you the data as a json.
            You need to subscribe to differenct token to different strike prices.

            Reagrds,
            SmartAPI Team

            1 Reply Last reply Reply Quote 0
            • K
              Kirti1963 @Moderator_3 last edited by

              @Moderator_3
              I have absolutely no idea what this is all about.Heard a lot but will someone help me how to use it since my idea of computer knowledge is almost nill.

              1 Reply Last reply Reply Quote 0
              • K
                Kirti1963 @Moderator_3 last edited by

                @Moderator_3
                Plz help me how to use it .Though I am a trader but don't have any knowledge about computer coding.Is it very difficult will someone give me a hand holding sessions.

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post