Option chain in node js


  • 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


  • @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.


  • @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.


  • 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


  • @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


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

    Regards,
    SmartAPI Team