Friday, May 8, 2026

पायथन कोड से वोल्यूम के साथ ब्रेकआउट वाले स्टॉक कैसे पहचानें ? फ्री कोर्स का स्टडी मेटेरियल

 साथियो नमस्कारआज में आपको एक ऐसी जादुई गूगल शीट पायथन कोड, गूगल क्लाउड एपीआई व गिटहब की सहायता से तैयार करना सीखाने वाला हूं जो आपको वोल्यूम के साथ ब्रेकआउट वाले स्टॉक्स अपने आप सेलेक्ट करके देगी।यह पूरा कोर्स है जो एकदम फ्री है। इस कोर्स के वीडियोज की प्लेलिस्ट आपको मेरे यूटयूब चैनल महेश चन्द्र कौशिक पर मिल जायेगी। इस प्लेलिस्ट का लिंक निम्न हैः- https://www.youtube.com/playlist?list=PL-X8WTMcEbY-UTbq_OiXsFoiLZbEzxE4Y

आज मैं आपको एक ऐसा तरीका बताने जा रहा हूँ जिससे आप खुद की एक ऐसी 'स्मार्ट गूगल शीट' बना सकते हैं, जो हर शाम बाज़ार बंद होने के बाद खुद-ब-खुद NSE से नया डेटा लाएगी, उसमें से सबसे ज़्यादा वॉल्यूम वाले टॉप 250 असली शेयर छांटेगी, और आपके फॉर्मूले के हिसाब से आपको बेहतरीन स्टॉक्स की लिस्ट निकाल कर दे देगी।

चाहे आपको कोडिंग का 'C' भी न आता हो, इस गाइड को स्टेप-बाय-स्टेप फॉलो करें और आपका अपना रोबोट तैयार हो जाएगा!


स्टेप 1: अपनी गूगल शीट तैयार करना

सबसे पहले हमें एक खाली गूगल शीट चाहिए जहाँ सारा डेटा आएगा।

  1. Google Sheets खोलें और एक नई शीट बनाएँ।

  2. इसमें नीचे '+' पर क्लिक करके दो टैब (Sheet) बनाएँ।

  3. पहले टैब का नाम रखें: Top 250 Stocks

  4. दूसरे टैब का नाम रखें: Final List

  5. Top 250 Stocks शीट में पहली लाइन (Row 1) में ये हेडिंग्स डाल दें:

    • A1: NSE Code

    • B1: Volume

    • C1: Close Price (कॉलम D से आगे हम 50 डीएमए 100 डीएमए 200 डीएमए सीएआर आदि कुछ फार्मूले लगायेगें जो इस पोस्ट में आगे सीखाये जायेगें अभी आपको अपना पूरा फोकस एनएसई से सबसे ज्यादा वोल्यूम वाले टॉप 250 स्टॉक्स की लिस्ट रोज ऑटोमेटिक निकालने करने पर रखना है।!)


स्टेप 2: गूगल क्लाउड (Google Cloud) से API 'चाबी' लेना

हमारी पायथन स्क्रिप्ट को आपकी शीट में डेटा लिखने के लिए एक सुरक्षित रास्ते की ज़रूरत है। इसके लिए हम एक 'Service Account' (रोबोट) बनाएंगे।

  1. Google Cloud Console API Library पर जाएँ।

  2. सर्च बॉक्स में "Google Sheets API" ढूँढें और उसे Enable कर दें।

  3. फिर से सर्च करें "Google Drive API" और उसे भी Enable कर दें।

  4. अब बाएँ मेनू में "Credentials" पर क्लिक करें। ऊपर "+ Create Credentials" पर जाएँ और "Service Account" चुनें।

  5. इसे नाम दें (जैसे: stock-updater-bot) और Create कर दें।

  6. अब सर्विस अकाउंट की लिस्ट में उस नए अकाउंट के Email ID (जो ...iam.gserviceaccount.com जैसा होगा) को कॉपी कर लें।

  7. उसी ईमेल पर क्लिक करें, Keys टैब में जाएँ -> Add Key -> Create new key पर क्लिक करें। JSON चुनें और डाउनलोड कर लें। यह आपकी तिजोरी की चाबी है!

ज़रूरी काम: अब अपनी गूगल शीट पर वापस आएँ। ऊपर दाईं ओर Share बटन दबाएं और उस कॉपी की हुई Service Account Email ID को 'Editor' का एक्सेस देकर सेव कर दें।


स्टेप 3: GitHub पर अपना ऑटोमेशन सेट अप करना

अब हम अपने कोड को एक ऐसे सर्वर पर रखेंगे जो रोज़ शाम को अपने आप चलेगा। इसके लिए GitHub (जो बिल्कुल फ्री है) का इस्तेमाल करेंगे।

  1. GitHub.com पर जाकर अपना अकाउंट बनाएँ या लॉगिन करें।

  2. दाएँ कोने में '+' दबाएं और New repository चुनें। नाम दें (जैसे: NSE-Auto-Sheet) और इसे Private रखें।

  3. अब अपनी रिपॉजिटरी की Settings में जाएँ। बाएँ मेनू में नीचे Secrets and variables > Actions पर क्लिक करें।

  4. New repository secret बटन दबाएं। Name में लिखें: GCP_CREDENTIALS

  5. जो JSON फाइल आपने डाउनलोड की थी, उसे नोटपैड (Notepad) में खोलें, उसका सारा टेक्स्ट कॉपी करें और यहाँ Secret बॉक्स में पेस्ट करके सेव कर दें।


स्टेप 4: पायथन स्क्रिप्ट (Python Script) डालना

अब हम वह जादुई कोड डालेंगे जो NSE के नए सिस्टम से डेटा लाएगा।

  1. रिपॉजिटरी के मुख्य पेज (Code टैब) पर Add file > Create new file पर क्लिक करें।

  2. फाइल का नाम दें: update_sheet.py

  3. नीचे दिया गया पूरा कोड कॉपी करके उस बॉक्स में पेस्ट कर दें:

Python
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import pandas as pd
import requests
import zipfile
import io
from datetime import datetime, timedelta
import os
import json

# 1. Credentials Setup
creds_json = os.environ.get('GCP_CREDENTIALS')
creds_dict = json.loads(creds_json)
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_dict(creds_dict, scope)
client = gspread.authorize(creds)

# अपनी गूगल शीट की ID यहाँ डालें (URL के बीच का हिस्सा)
spreadsheet_id = "यहाँ_अपनी_शीट_की_ID_डालें" 
worksheet = client.open_by_key(spreadsheet_id).worksheet("Top 250 Stocks")

# 2. NSE UDiFF Data Fetcher
def fetch_bhavcopy_for_date(date_obj):
    date_str = date_obj.strftime("%Y%m%d")
    url = f"https://nsearchives.nseindia.com/content/cm/BhavCopy_NSE_CM_0_0_0_{date_str}_F_0000.csv.zip"
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
    }
    
    try:
        response = requests.get(url, headers=headers, timeout=15)
        if response.status_code == 200:
            with zipfile.ZipFile(io.BytesIO(response.content)) as z:
                csv_filename = z.namelist()[0]
                with z.open(csv_filename) as f:
                    df = pd.read_csv(f)
                    
                    sym_col = 'TckrSymb' if 'TckrSymb' in df.columns else 'SYMBOL'
                    close_col = 'ClsPric' if 'ClsPric' in df.columns else 'CLOSE'
                    series_col = 'SctySrs' if 'SctySrs' in df.columns else 'SERIES'
                    
                    vol_col = 'TtlTradgVol'
                    for c in ['TtlTradgVol', 'TtlTrdQty', 'TotTrdQty', 'TOTTRDQTY']:
                        if c in df.columns:
                            vol_col = c
                            break
                    
                    # सिर्फ EQ सीरीज और ETFs (LIQUID/BEES) को बाहर करना
                    if series_col in df.columns:
                        df = df[df[series_col].astype(str).str.strip() == 'EQ']
                    filter_keywords = 'BEES|ETF|GOLD|LIQUID|CASE|SILVER|LIQ'
                    df = df[~df[sym_col].astype(str).str.contains(filter_keywords, case=False, na=False)]
                    
                    df_top = df.sort_values(by=vol_col, ascending=False).head(250)
                    return df_top[[sym_col, vol_col, close_col]].values.tolist()
        return None
    except:
        return None

# 3. Execution Logic
date = datetime.now()
data_to_insert = None
fetched_date_str = ""

for i in range(5): 
    test_date = date - timedelta(days=i)
    if test_date.weekday() >= 5: continue
        
    data_to_insert = fetch_bhavcopy_for_date(test_date)
    if data_to_insert:
        fetched_date_str = test_date.strftime('%d-%b-%Y')
        break

# 4. Update Sheet
if data_to_insert:
    worksheet.batch_clear(['A2:C251'])
    worksheet.update('A2', data_to_insert)
    ist_now = (datetime.utcnow() + timedelta(hours=5, minutes=30)).strftime('%d-%b %H:%M')
    status_msg = f"Data Date: {fetched_date_str} | Last Update: {ist_now} (IST)"
    worksheet.update('K2', [[status_msg]])
    print("SUCCESS: Sheet Updated!")

ध्यान दें: कोड में spreadsheet_id की जगह अपनी शीट के URL से ID निकाल कर ज़रूर डालें। फिर Commit changes पर क्लिक करें।


स्टेप 5: टाइमर (Cron) सेट करना

हम इस कोड को रोज़ रात 8:15 बजे चलाएंगे ताकि GitHub के सर्वर पर ट्रैफिक न मिले।

  1. अपने GitHub में Actions टैब पर क्लिक करें।

  2. "set up a workflow yourself" पर क्लिक करें।

  3. नीचे दिया गया कोड पेस्ट करें:

YAML
name: Update NSE Stocks to Google Sheet

on:
  schedule:
    # यह समय 14:45 UTC है, जिसका मतलब भारत में रात 8:15 PM है
    - cron: '45 14 * * 1-5'
  workflow_dispatch:

jobs:
  update-sheet:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@v4

      - name: Setup Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.10'

      - name: Install Libraries
        run: pip install gspread oauth2client pandas requests

      - name: Run Python Script
        env:
          GCP_CREDENTIALS: ${{ secrets.GCP_CREDENTIALS }}
        run: python update_sheet.py

इसे भी Commit changes कर दें। बस, आपका ऑटोमेशन तैयार है!

यहां तक इस कोर्स की कक्षा 1 थी इससे आगे अगली कक्षा में सीखाया जायेगा इस कक्षा का फ्री वीडियो यूटयूब पर निम्न लिंक पर देख सकते हैं:- https://youtu.be/MnIJ6kx6ww4



🚀 ऑटोमैटिक स्टॉक स्कैनर कैसे बनाएं - कक्षा 2 (Moving Averages & Advanced CAR Formula)

नमस्कार दोस्तों! 'ऑटोमैटिक स्टॉक एनालाइज़र शीट' बनाने की इस मास्टरक्लास (कक्षा 2) में आपका स्वागत है।

कक्षा 1 के वीडियो और ब्लॉग पोस्ट में हमने सीखा था कि कैसे गिटहब (GitHub) की मदद से रोज़ाना शाम को NSE से टॉप 250 शेयरों का रॉ डेटा (Raw Data) अपनी गूगल शीट में अपने आप कैसे लाया जाए।

आज की इस कक्षा 2 में हम उस रॉ डेटा में मेरे (महेश कौशिक) कुछ एडवांस फॉर्मूले लगाएंगे और इसे एक 'स्मार्ट स्कैनर' में बदलेंगे। हम अपनी 'Top 250 Stocks' शीट में 50, 100 और 200 दिन का मूविंग एवरेज निकालेंगे, और सबसे खास—मेरा बनाया हुआ एडवांस CAR (Cumulative Average Rule) रेटिंग फॉर्मूला लगाएंगे जो आपको बताएगा कि स्टॉक खरीदने लायक है या नहीं।

तो चलिए, अपनी गूगल शीट खोलिए और मेरे साथ ये 5 आसान स्टेप्स फॉलो कीजिए:


स्टेप 1: लाइव प्राइस (CMP) लाना

हमारी शीट के कॉलम A, B और C में पायथन ने डेटा डाल दिया है। अब हम सेल D2 (CMP) में गूगल फाइनेंस का फॉर्मूला लगाएंगे ताकि दिन में हमें लाइव भाव दिखे।

सेल D2 में यह फॉर्मूला पेस्ट करें:

=GOOGLEFINANCE("NSE:"&A2,"price")

स्टेप 2: मूविंग एवरेज (50, 100 और 200 DMA)

अब हम वो इंडिकेटर्स लगाएंगे जो स्टॉक का ट्रेंड (Trend) बताते हैं।

सेल E2 (50 DMA) में पेस्ट करें:

=IFERROR(AVERAGE(QUERY(SORT(GOOGLEFINANCE("NSE:"&A2,"price",TODAY()-75,TODAY()),1,0),"select Col2 limit 50")), "")

सेल F2 (100 DMA) में पेस्ट करें:

=IFERROR(AVERAGE(QUERY(SORT(GOOGLEFINANCE("NSE:"&A2,"price",TODAY()-150,TODAY()),1,0),"select Col2 limit 100")), "")

सेल G2 (200 DMA) में पेस्ट करें:

=IFERROR(AVERAGE(QUERY(SORT(GOOGLEFINANCE("NSE:"&A2,"price",TODAY()-300,TODAY()),1,0),"select Col2 limit 200")), "")

स्टेप 3: बुल रन (Bull Run) और 200 DMA से दूरी

सेल H2 (Output) में हम एक शर्त लगाएंगे जो बताएगी कि स्टॉक बुल रन में है या नहीं। सेल H2 में पेस्ट करें:

=IF(AND(D2>E2, D2>F2, D2>G2, I2>=0.01, I2<=10), "In Bull Run",
IF(AND(D2<E2, D2<F2, D2<G2, I2>=-10, I2<=-0.01), "In Bear Run", "Unconfirmed"))

सेल I2 (Difference from 200 DMA) में हम 200 DMA से प्रतिशत दूरी निकालेंगे। सेल I2 में पेस्ट करें:

=((D2-G2)*100)/G2


स्टेप 4: मेरा एडवांस CAR (Cumulative Average Rule) फॉर्मूला

यह इस शीट का सबसे ताकतवर हिस्सा है। यह फॉर्मूला पिछले 52 हफ्तों के हाई (High) का पता लगाता है, वहाँ से अब तक का डेटा निकालकर उसका औसत निकालता है, और यह चेक करता है कि क्या यह स्टॉक लगातार ऊपर की ओर जा रहा है।

(नोट: यह फॉर्मूला लंबा है, आप इस पूरे बॉक्स को एक साथ कॉपी करके सेल J2 में पेस्ट कर सकते हैं, गूगल शीट इसे आसानी से समझ लेगा)

सेल J2 (CAR Rating) में यह पूरा फॉर्मूला कॉपी करके पेस्ट करें:

=IFERROR(IF(A2="","ENTER STOCK",

  LET(

    raw_high, GOOGLEFINANCE("NSE:" & A2, "high", TODAY()-365, TODAY()),

    high_date, IFERROR(TO_DATE(QUERY(raw_high, "SELECT Col1 WHERE Col2 IS NOT NULL ORDER BY Col2 DESC LIMIT 1 LABEL Col1 ''", 1)), TODAY()-30),

    raw_data, IFERROR(GOOGLEFINANCE("NSE:" & A2, "close", high_date, TODAY()), GOOGLEFINANCE("NSE:" & A2, "close", TODAY()-10, TODAY())),

    prices, IFERROR(CHOOSEROWS(INDEX(raw_data, 0, 2), SEQUENCE(ROWS(raw_data)-1, 1, 2, 1)), {0}),

    count_rows, ROWS(prices),

    cum_avg, SCAN(0, SEQUENCE(count_rows), LAMBDA(a,n, AVERAGE(CHOOSEROWS(prices, SEQUENCE(n))))),

    last_10, IF(count_rows < 10, {0;0;0;0;0;0;0;0;0;0}, CHOOSEROWS(cum_avg, SEQUENCE(10, 1, count_rows - 9, 1))),

    check, SUMPRODUCT(--(CHOOSEROWS(last_10, SEQUENCE(9, 1, 2, 1)) > CHOOSEROWS(last_10, SEQUENCE(9, 1, 1, 1)))),

    IF(count_rows < 10, "Short History", IF(check = 9, "Buy/Average Out", "Avoid/Hold"))

  )

), "TICKER NOT FOUND")


👉 ज़रूरी काम: अब सेल D2 से लेकर J2 तक के सभी फॉर्मूलों को एक साथ सेलेक्ट करें और नीचे Row 250 तक ड्रैग (Drag) कर दें (या डबल-क्लिक कर दें)। आपका सारा डेटा कैलकुलेट हो जाएगा!


स्टेप 5: मास्टर फॉर्मूला (Final List तैयार करना)

निश्चित रूप से, यहाँ आपके 'फाईनल लिस्ट' (Final List) वाले स्टेप का पूरा विवरण है, जिसमें मास्टर फॉर्मूला को दो लाइनों में इस तरह व्यवस्थित किया गया है कि यह ब्लॉग पर आसानी से फिट हो जाए और आपके फॉलोवर्स इसे सीधे कॉपी-पेस्ट कर सकें:


स्टेप 5: फाईनल लिस्ट (Final List) तैयार करना

यह इस पूरी प्रोसेस का सबसे महत्वपूर्ण हिस्सा है। यहाँ हम एक मास्टर फॉर्मूले की मदद से अपनी पसंद के बेहतरीन स्टॉक्स को अलग करेंगे।

शीट का सेटअप:

  1. अपनी 'Final List' वाली शीट खोलें।

  2. पहली रो (Row 1) में सेल A1 से F1 तक को सेलेक्ट करें और हेडिंग दें: Stocks In Bull Run

  3. दूसरी रो (Row 2) में कॉलम के नाम इस प्रकार लिखें:

    • A2: NSE Code

    • B2: Volume

    • C2: Previous Close

    • D2: CMP

    • E2: Difference from 200 DMA

    • F2: CAR

मास्टर फॉर्मूला पेस्ट करना: अब हमें सिर्फ एक फॉर्मूला सेल A3 में डालना है। यह फॉर्मूला 'Top 250 Stocks' वाली शीट से डेटा उठाएगा, उसे फिल्टर करेगा और वॉल्यूम के हिसाब से सही क्रम में लगा देगा।

(नोट: इस फॉर्मूले को दो लाइनों में लिखा गया है ताकि ब्लॉग पर यह बाहर न निकले। आप इस पूरे बॉक्स को एक साथ कॉपी करके सेल A3 में पेस्ट कर दें, गूगल शीट इसे बिल्कुल सही तरह से स्वीकार कर लेगा)

सेल A3 में यह फॉर्मूला पेस्ट करें:

Excel
=IFERROR(SORT(FILTER({'Top 250 Stocks'!A:D, 'Top 250 Stocks'!I:J}, 'Top 250 Stocks'!H:H="In Bull Run", 
'Top 250 Stocks'!J:J="Buy/Average Out"), 2, FALSE), "कोई स्टॉक नहीं मिला")

यह फॉर्मूला अपने आप उन सभी स्टॉक्स की लिस्ट तैयार कर देगा जो बुल रन में हैं और जिनकी CAR रेटिंग "Buy/Average Out" है। आपको बार-बार कुछ भी करने की ज़रूरत नहीं है, जैसे ही मुख्य शीट अपडेट होगी, यह लिस्ट भी अपने आप अपडेट हो जाएगी।

🌟 बोनस अपडेट: वॉल्यूम (Volume) की जगह टर्नओवर (Turnover) से टॉप 250 शेयर कैसे चुनें?

मेरे कुछ फॉलोवर्स ने मांग की है कि वे 'टोटल वॉल्यूम' की जगह 'टोटल टर्नओवर' (कुल ट्रेडेड वैल्यू) के आधार पर टॉप 250 स्टॉक्स सेलेक्ट करना चाहते हैं। यह एक बहुत ही शानदार और प्रोफेशनल सोच है!

वॉल्यूम के बजाय टर्नओवर से शेयर चुनने के फायदे: अक्सर 1-2 रुपये वाले पेनी स्टॉक्स (Penny Stocks) का वॉल्यूम (क्वांटिटी) बहुत ज्यादा होता है, जिससे वे फालतू में हमारी लिस्ट में ऊपर आ जाते हैं। लेकिन 'टर्नओवर' हमें यह बताता है कि आज किस शेयर में सबसे ज़्यादा रुपया (पैसा) लगा है। टर्नओवर के आधार पर फिल्टर करने से कचरा शेयर अपने आप बाहर हो जाएंगे और आपको सिर्फ हाई-क्वालिटी और मजबूत स्टॉक्स की लिस्ट मिलेगी, जहाँ बड़े निवेशक (Smart Money) पैसा लगा रहे हैं।

यदि आप भी अपनी शीट को इस नए और ज़्यादा सटीक तरीके से अपग्रेड करना चाहते हैं, तो कोडिंग में उलझने की बिल्कुल ज़रूरत नहीं है। बस इन आसान स्टेप्स को फॉलो करें:

स्टेप 1: अपने GitHub अकाउंट में जाएँ और अपनी update_sheet.py फाइल खोलें। स्टेप 2: दाईं ओर ऊपर पेंसिल (✏️ Edit) के बटन पर क्लिक करें। स्टेप 3: वहां पहले से लिखे हुए पूरे कोड को सेलेक्ट करके डिलीट (Delete) कर दें (पेज को बिल्कुल खाली कर दें)। स्टेप 4: अब नीचे दिए गए इस नए कोड को कॉपी करें और वहां पेस्ट कर दें:

import gspread

from oauth2client.service_account import ServiceAccountCredentials

import pandas as pd

import requests

import zipfile

import io

from datetime import datetime, timedelta

import os

import json


# 1. Credentials Setup

creds_json = os.environ.get('GCP_CREDENTIALS')

if not creds_json:

    print("CRITICAL: GCP_CREDENTIALS secret missing!")

    exit(1)


creds_dict = json.loads(creds_json)

scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]

creds = ServiceAccountCredentials.from_json_keyfile_dict(creds_dict, scope)

client = gspread.authorize(creds)


# ⚠️ अपनी गूगल शीट की ID यहाँ दोबारा डालना न भूलें

spreadsheet_id = "यहाँ_अपनी_शीट_की_ID_डालें" 

worksheet = client.open_by_key(spreadsheet_id).worksheet("Top 250 Stocks")


# 2. NSE Data Fetcher

def fetch_bhavcopy_for_date(date_obj):

    date_str = date_obj.strftime("%Y%m%d")

    url = f"https://nsearchives.nseindia.com/content/cm/BhavCopy_NSE_CM_0_0_0_{date_str}_F_0000.csv.zip"

    

    headers = {

        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',

        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'

    }

    

    try:

        print(f"तारीख {date_str} की फाइल चेक कर रहे हैं...")

        response = requests.get(url, headers=headers, timeout=20)

        

        if response.status_code == 200:

            with zipfile.ZipFile(io.BytesIO(response.content)) as z:

                csv_filename = z.namelist()[0]

                with z.open(csv_filename) as f:

                    df = pd.read_csv(f)

                    

                    # कॉलम के नाम से एक्स्ट्रा स्पेस हटाना

                    df.columns = [c.strip() for c in df.columns]

                    

                    sym_col = next((c for c in ['TckrSymb', 'SYMBOL'] if c in df.columns), None)

                    close_col = next((c for c in ['ClsPric', 'CLOSE'] if c in df.columns), None)

                    series_col = next((c for c in ['SctySrs', 'SERIES'] if c in df.columns), None)

                    

                    # यहाँ हमने TtlTrfVal (NSE का असली नाम) जोड़ दिया है

                    turnover_col = next((c for c in ['TtlTrfVal', 'TtlTrdVal', 'TURNOVER_LACS', 'TURNOVER'] if c in df.columns), None)

                    

                    if not all([sym_col, close_col, turnover_col]):

                        return None

                    

                    if series_col:

                        df = df[df[series_col].astype(str).str.strip() == 'EQ']

                    

                    filter_keywords = 'BEES|ETF|GOLD|LIQUID'

                    df = df[~df[sym_col].astype(str).str.contains(filter_keywords, case=False, na=False)]

                    

                    df[turnover_col] = pd.to_numeric(df[turnover_col], errors='coerce')

                    df = df.dropna(subset=[turnover_col])

                    

                    df_top = df.sort_values(by=turnover_col, ascending=False).head(250)

                    return df_top[[sym_col, turnover_col, close_col]].values.tolist()

        return None

    except Exception as e:

        return None


# 3. Execution Logic

date = datetime.now()

data_to_insert = None

fetched_date_str = ""


for i in range(7): 

    test_date = date - timedelta(days=i)

    if test_date.weekday() >= 5: continue

        

    data_to_insert = fetch_bhavcopy_for_date(test_date)

    

    if data_to_insert:

        fetched_date_str = test_date.strftime('%d-%b-%Y')

        break


# 4. Update Sheet

if data_to_insert:

    try:

        worksheet.batch_clear(['A2:C251'])

        worksheet.update('A2', data_to_insert)

        ist_now = (datetime.utcnow() + timedelta(hours=5, minutes=30)).strftime('%d-%b %H:%M')

        status_msg = f"Data Date: {fetched_date_str} | Last Update: {ist_now} (IST)"

        worksheet.update('K2', [[status_msg]])

        print(f"SUCCESS: Sheet Updated successfully with Turnover Data for {fetched_date_str}!")

    except Exception as e:

        print(f"Google Sheet Error: {str(e)}")

else:

    print("FAILED: पिछले 7 दिनों में से किसी भी दिन की फाइल नहीं मिली या प्रोसेस नहीं हुई।")

स्टेप 5: कोड पेस्ट करने के बाद spreadsheet_id = "यहाँ_अपनी_शीट_की_ID_डालें" वाली लाइन में अपनी गूगल शीट की ID वापस डाल लें और ऊपर से Commit changes कर दें। स्टेप 6 (अंतिम काम): अपनी गूगल शीट खोलें और दोनों शीट्स (Top 250 Stocks और Final List) में कॉलम B की हेडिंग को "Volume" से बदलकर "Turnover" कर दें, ताकि आगे कोई कंफ्यूजन न रहे!

बस हो गया! अब आपका स्कैनर और भी ज़्यादा पावरफुल और सटीक बन चुका है।

जिन लोगों के कोई भी समस्या आ रही है वे गूगल जेमिनी खोलें। उसमे यह कमांड लिखें

हैलो, मैं महेश कौशिक सर के निम्न ब्लॉग पोस्ट को पढ़कर उससे सीखकर पायथन कोड से ऑटोमेटेड स्टोक्स सेलेक्श शीट बना रहा हूंः- https://www.maheshkaushik.com/2026/05/blog-post.html

परन्तु इस शीट में मेरे कुछ ऐरर आ रही है क्या आप इस ब्लॉग पोस्ट के अनुसार शीट बनानें मे मेरी मदद कर सकते हैं।

उसके बाद जेमिनी को अपने एरर कोड अपनी समस्या का स्क्रीनशॉट आदि देते जायें व जेमिनी के बताये अनुसार सही करते जायें। आपकी प्रोब्लम सॉल्व हो जायेगी।

इसे समझने के लिये कक्षा 2 का वीडियो इस लिकं से देखेंः-

क्रमशः............जारी है कोर्स की कक्षा 3 में इस लिस्ट से आये स्टॉक्स की ट्रेडिंग यदि पंजीकृत निवेश सलाहकार की सलाह से करते हैं तो कैपिटल मैनेजमेंट व कम्पाउंडिंग कैसे करते हैं वो सीखाया जाना अभी बाकी है।


महत्वपूर्ण प्रकटीकरण (Disclosure): मैं एक SEBI पंजीकृत रिसर्च एनालिस्ट (SEBI Registered Research Analyst) हूँ। ऊपर दी गई जानकारी, तकनीकी सेटअप, फॉर्मूले और स्टॉक्स की सूची केवल शैक्षिक और अध्ययन उद्देश्यों (Educational Purposes) के लिए साझा की गई है। कृपया कोई भी निवेश निर्णय लेने से पहले अपने वित्तीय सलाहकार से परामर्श अवश्य लें।


Saturday, May 2, 2026

My Latest May 2026 Stock Market Data Bank in an Excel Sheet

 Dear Readers, Namaskar

I am happy to provide you my latest May 2026 stock market data bank in an Excel sheet.

This is my personal data bank, and I personally use this data bank in my own research. 

I hope this database is useful in your stock market research.

Link for download May 2026 Indian stock market data bank:-

https://docs.google.com/spreadsheets/d/1bLhQHhHQY4Te_H_4HqembE7wPFTlFAZ9/edit?usp=sharing&ouid=111573829003502969131&rtpof=true&sd=true

Link of my best-selling books:- 

https://amzn.to/3ypVYpi

How to use this data bank?           

Please watch this video to understand how you find the best stocks with the help of this data bank:-

1. https://youtu.be/BYm-rppAHSc?si=9rvWdjaiCWQi7h2z



अपना खुद का डाटा बैंक कैसे बनाएं?

How you make your own data bank like this:- Many followers ask how they make their own data bank like this. if you are also interested in knowing how this type of data will be collected, you will watch this video to learn more:-

1. https://youtu.be/1z-xatk8LKg?si=oB08hoVvGC-EzdZX



Please remember to share your view in the comments because your comments give me more energy for my hard work.

Regards

Mahesh Kaushik

सावधान मेरी कोई पेड सर्विस नहीं है यदि कोई मेरी फोटो फेसबुक टेलीग्राम या इन्स्टाग्राम या व्हाटसअप पर लगाकर आपसे पैसे मांग कर कोई प्लान बेचता है तो वो मैं नहीं हूं आप उसकी रिर्पोट करें तथा हमेंशा याद रखें मैं ना तो फोलोवर्स से फोन पर बात करता हूं ना ही उन्हे कोई प्लान बेचता हूं ना ही किसी से कोई पैसा मांगता हूं। मेरा अधिकृत व्हाटसअप चैनल इस लिंक से ज्वाईन कर लेवें :- https://whatsapp.com/channel/0029VaAhVMU5kg78k93n662x व वर्तमान में मेरी कोई एप भी नहीं है सिर्फ व्हाटसअप चैनल पर ही मैं ऐप की तरह मेरे ब्लाॅगस व यूटयूब चैनल के अपडेट शेयर करता हूं इसके अलावा कोई प्लान वगैरा कभी भी व्हाटसएप पर भी नहीं देता तथा ना ही कोई टीप देता हूं। मुझसे सीखने का एक ही तरीका है मेरी किताबें पढें व मेरे वीडियोज देखकर खुद सीखें।

Follow me on X here:-

https://x.com/mahesh_kaushik

I have no any paid service, do not provide any tips, do not sell any plan, and never ask for money from followers, so please do not pay money to anyone. If anyone uses my profile picture and sells any plan on Telegram, Facebook, Instagram or WhatsApp, then please report them and protect yourself from spammers, hackers, and cyber fraudsters.

Disclaimer: - Please remember that I collect all data of this data bank from my own credible source. Some of the data like stock price year high-low ,net sales etc., are subject to change regularly.
 So It is possible some data are not correct or may be modified when you download this sheet so please always confirm data from the stock exchange website or company website, No liability is accepted for this purpose.
Keywords:- Indian stock market data bank, stock market data download, stock market data in Excel.

Friday, December 26, 2025

Stocks Historical Data Download in Excel किसी स्टाॅक के हिस्टोरीकल डाटा को ऐक्सेल फाईल के रूप में कैसे डाउनलोड करें।

 साथियो नमस्कार,

Namaskar Friends

किसी स्टाॅक के डाटा पर रिसर्च करने के लिये हमें उस स्टाॅक के डाटा को ऐक्सेल में डाउनलोड करने की आवश्यकता होती है।

To research a stock's data, we need to download that stock's data into Excel.

हालांकि एनएसई की वेबसाईट के नये डिजाईन में अभी भी स्टाॅक के हिस्टोरीकल डाटा को डाउनलोड करने का लिंक दिया है जिसको यह लिंक नहीं मिल रहा है वो निम्न वीडियो से देखकर सीख सकते हैं कि किसी स्टाॅक के हिस्टोरीकल डाटा को डाउनलोड करने के लिये लिंक एनएसई की साईट पर कहां मिलता है-

https://youtu.be/XRZAYcHT2EQ



However, the new design of the NSE website still provides the link to download the historical data of a stock. Those who are unable to find this link can watch the following video to learn where the link to download a stock's historical data is located on the NSE site.:-
Video Link:-
इसमें एनएसई से डाटा डाउनलोड करने में बहुत सी समस्याएं सामने आती है जैसे एनएसई 1 साल से ज्यादा के डाटा को ऐक्सेल में डाउनलोड नहीं करने देती। इसमें हमें यदि 7 साल के डाटा चाहिए तो 7 अलग अलग ऐक्सेल फाईलें डाउनलोड करके फिर एक फाईल में डाटा काॅपी पेस्ट करना पड़ता है इस पूरी प्रक्रिया में लगभग 2 घंटें लग जाते है जो बहुत ही श्रमसाध्य कार्य है।

In this process, several issues arise when downloading data from the NSE; for instance, the NSE does not allow downloading more than one year of data into Excel at once. If we need seven years of data, we have to download seven separate Excel files and then copy-paste the data into a single file. This entire process takes about two hours and is a very laborious task.

इसके विकल्प के रूप में याहू फायनेंस से एक साथ हिस्टोरीकल डाटा ऐक्सेल फाईल में मैक्रो फार्मूला लगाकर कर सकते हैं। इसके लिये मैने ऐक्सेल की मैक्रो वाली फाईल बनायी है ऐसा दावा मैं नहीं करूंगा क्यो कि ईमानदारी सबसे अच्छी पाॅलिसी है मैं झूठा क्रेडिट नहीं लूगा मैने जो ऐक्सेल फाईल उक्त वीडियो में प्रयोग की है वो मैने इस वेबसाईट से डाउनलोड की हैः-


As an alternative, historical data can be pulled from Yahoo Finance all at once by using a Macro formula in an Excel file. I will not claim that I created this Excel Macro file myself, because honesty is the best policy and I won't take false credit. The Excel file I used in the aforementioned video was downloaded from this website:-


ध्यान रहे उक्त वेबसाईट से मेरा कोई काॅलोबरेशन नहीं है। मैं इन्टरनेट से सर्च करके ही इस वेबसाईट तक पहुंचा हूं अतः कोई भी फाईल अपनी रिस्क पर उक्त वेबसाईट से डाउनलोड करें मुझे तो कोई समस्या नहीं आयी है।

Please note that I have no collaboration with the said website. I reached this site simply by searching the internet; therefore, download any file from there at your own risk. I personally did not encounter any issues.

ज्यादा जानकारी के लिये निफ्टी की दुकान के वीडियो पहले भाग से देखें इसके पूरे कोर्स की प्लेलिस्ट का लिंक निम्न हैः-

https://www.youtube.com/playlist?list=PL-X8WTMcEbY9PwIlpUbaMtp1JNNtdcWyM

For more information, watch the 'Nifty Ki Dukaan' videos starting from the first part. The link to the full course playlist is below:-

https://www.youtube.com/playlist?list=PL-X8WTMcEbY9PwIlpUbaMtp1JNNtdcWyM

Thursday, May 29, 2025

Annual audit report in respect of compliance in terms of regulation 25(3) of the SEBI (Research analysts) Regulations,2014

 Respected Readers,

As a part of the compliance Annual Audit Report in respect of compliance in terms of regulation 25(3) of the SEBI (Research Analysts) Regulations,2014, is published here.

Here are the links of the Annual Audit Report of my activities as a research analyst:-

Annual Audit Report 2024-25

                                                                                                      Mahesh Chander Kaushik

                                                                                                                   Research Analyst

Wednesday, January 1, 2025

Grievance Redressal/ Escalation Matrix to be displayed by Investment Advisers and Research Analysts

 प्रिय पाठको

जैसा कि आपको विदित है मैं 2009 से स्टाॅक मार्केट की फ्री शिक्षा अपने ब्लाॅग व यूटयूब चैनल से उपलब्ध करवा रहा हूं। मेरी कोई फीस नहीं है तथा यद्पि मैं खुद पंजीकृत रिसर्च एनालिस्ट हूं फिर भी सभी को मैं यही सलाह देता हूं कि मेरे सभी वीडियो व पोस्ट सिर्फ एजुकेशनल पपर्ज के लिये हैं इन्हे किसी भी तरीके से निवेश सलाह नहीं माना जावे तथा कोई भी निवेश संबधि निर्णय अपने निवेश सलाहाकार की सलाह से ही करें।

चूंकि मैं निस्वार्थ भाव से जानकारी के उद्देश्य से बगैर निवेश सलाह के वीडियो बनाता हूं तथा मैं अपना अनुभव मात्र व मेरी बनायी हुयी गुगल शीटें व मेरा ज्ञान पुस्तकों के माध्यम से आपके साथ शेयर करता हूं इसलिये मुझसे आपको कोई शिकायत होनी तो नहीं चाहिये फिर भी आपको कोई शिकायत हो तो आपके लिये मेरा सम्पर्क सूत्र निम्न प्रकार से हैः-

Details of designation

Contact Person Name

Address where the physical address location

Contact No.

Email-ID

Working hours when the complainant can call

Customer Care

 Mahesh Chander Kaushik  

JJ Colony Pindwara Sirohi Rajasthan 307022

 N.A                

 mahesh2073@yahoo.com

 N.A

Head of Customer Care

 Mahesh Chander Kaushik                

 JJ Colony Pindwara Sirohi Rajasthan 30702

 N.A

 mahesh2073@yahoo.com

 N.A

Compliance Officer

 Mahesh Chander Kaushik

 JJ Colony Pindwara Sirohi Rajasthan 30702

 N.A

 mahesh2073@yahoo.com

 N.A

CEO

 Mahesh Chander Kaushik

 JJ Colony Pindwara Sirohi Rajasthan 30702

 N.A

 mahesh2073@yahoo.com

N.A 

Principal Officer

 Mahesh Chander Kaushik

 JJ Colony Pindwara Sirohi Rajasthan 30702

 N.A

 mahesh2073@yahoo.com

 N.A

 

Blog Archive

disclaimer:-Trading in stock market is very risky. This website is not perfect. This is not an advisory service to buy or sell. The contents of “maheshkaushik.com” are only for educational purposes. No liability is accepted for any content in “www.maheshkaushik.com”. Subject to pindwara(india) jurisdiction only. The author is neither a registered stockbroker nor a registered advisor and does not give investment advice.. While he believes his statements to be true, they always depend on the reliability of his own credible sources. The author recommends that you consult with a qualified investment advisor, one licensed by appropriate regulatory agencies in your legal jurisdiction, author of this website is not a trend technical analyst.