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 (TURNOVER LOGIC)

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=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)

                    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])

                    

                    # рдЯрд░्рдирдУрд╡рд░ рдХे рдЖрдзाрд░ рдкрд░ рдЯॉрдк 250

                    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 (7-Day Lookback)

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: Turnover Sheet Updated successfully 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 рдХा рд╡ीрдбिрдпो рдЗрд╕ рд▓िрдХं рд╕े рджेрдЦेंः-

https://youtu.be/tyeG16q9214?si=cGkG-QJjooFLcsdu



рдЬिрди рднी рдлॉрд▓ोрд╡рд░्рд╕ рдХे рд╕рдорд╕्рдпाрдПं рдЖ рд░рд╣ी рдеी рд╡ рдЬो рд╢ीрдЯ рдирд╣ीं рдмрдиा рдкा рд░рд╣े рдеे рдЙрдирдХा рд╕рд░्рд╡े рдПрдХ рдЧूрдЧрд▓ рдлाрд░्рдо рдоें рдХрд░рд╡ाрдпा рдЧрдпा рддрдеा рдЧूрдЧрд▓ рдлाрд░्рдо рдоें рдк्рд░ाрдк्рдд рд╕рд░्рд╡े рдХे рдЕрдиुрд╕ाрд░ рдлॉрд▓ोрд╡рд░्рд╕ рдХी рд╕рдорд╕्рдпा рдХो рдХैрдЯेрдЧрд░ाрдИрдЬ рдХрд░рдХे рд╕рдмрдХा рд╕рдоाрдзाрди рдЗрд╕ рдЧूрдЧрд▓ рдбॉрдХ्рдпूрдоेंрдЯ рдоें рджे рджिрдпा рдЧрдпा рд╣ै рдпрджि рдЖрдкрдХे рднी рдХोрдИ рд╕рдорд╕्рдпा рдЖ рд░рд╣ी рд╣ै рддो рдЗрд╕ рдЧूрдЧрд▓ рдбाрдХ्рдпूрдоेंрдЯ рдХो рдкрдврдХрд░ рдЙрд╕рдХा рд╕рдоाрдзाрди рддрд▓ाрд╢ рдХрд░ рд╕рдХрддे рд╣ैंः-

https://docs.google.com/document/d/1qr9nZUbBiU4yYVkSy6cck_D4Guk0wjf94PJL72m6QIc/edit?usp=drive_link

рдЬो рдлॉрд▓ोрд╡рд░ рдПрдХ рд╣ी рд╢ीрдЯ рдоें рджो рдЕрд▓рдЧ рдЕрд▓рдЧ рдЯैрдм рдмрдиाрдХрд░ рдПрдХ рдоें рд╡ोрд▓्рдпूрдо рдХे рдЖрдзाрд░ рдкрд░ рдЯॉрдк 250 рд╕्рдЯॉрдХ्рд╕ рдбाрдЙрдирд▓ोрдб рдХрд░рдиा рдЪाрд╣рддे рд╣ैं рд╡ рджूрд╕рд░ी рдЯैрдм рдоें рдЯрд░्рдирдУрд╡рд░ рдХे рдЖрдзाрд░ рдкрд░ рдЯॉрдк 250 рд╕्рдЯॉрдХ्рд╕ рдбाрдЙрдирд▓ोрдб рдХрд░рдиा рдЪाрд╣рддे рд╣ैं рдЙрдирдХे рд▓िрдпे рдоैंрдиे рдЖрдкрдХे рд▓िрдП рдПрдХ "рдЯू-рдЗрди-рд╡рди рдоाрд╕्рдЯрд░ рдХोрдб" (2-in-1 Master Code) рд▓िрдЦा рд╣ै। рдпрд╣ рджो рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░ोрдмोрдЯ рдирд╣ीं рд╣ैं, рдмрд▓्рдХि рдПрдХ рд╣ी рдмेрд╣рдж рдПрдбрд╡ांрд╕ рд╕्рдХ्рд░िрдк्рдЯ рд╣ै।

рдпрд╣ рдирдпा рдХोрдб рдХ्рдпा рдХрд░рддा рд╣ै? рдпрд╣ NSE рдХे рд╕рд░्рд╡рд░ рдкрд░ рдЬाрдХрд░ рднाрд╡рдХॉрдкी (Bhavcopy) рдХी рдлाрдЗрд▓ рд╕िрд░्рдл 1 рд╣ी рдмाрд░ рдбाрдЙрдирд▓ोрдб рдХрд░рддा рд╣ै। рдлिрд░ рдпрд╣ рдЕрдкрдиे рджिрдоाрдЧ (Memory) рдоें рдЙрд╕ी 1 рдлाрдЗрд▓ рд╕े 'рд╡ॉрд▓्рдпूрдо' рд╡ाрд▓े рдЯॉрдк 250 рд╢ेрдпрд░ рдиिрдХाрд▓рддा рд╣ै рдФрд░ рдкрд╣рд▓ी рд╢ीрдЯ рдоें рдбाрд▓ рджेрддा рд╣ै। рдлिрд░ рд╕ेрдХंрдб рднрд░ рдХे рдЕंрджрд░, рдЙрд╕ी рдлाрдЗрд▓ рд╕े 'рдЯрд░्рдирдУрд╡рд░' рд╡ाрд▓े рдЯॉрдк 250 рд╢ेрдпрд░ рдиिрдХाрд▓рддा рд╣ै рдФрд░ рджूрд╕рд░ी рд╢ीрдЯ рдоें рдбाрд▓ рджेрддा рд╣ै।

рд╕्рдЯेрдк 1: рдЖрдкрдХी рдЧूрдЧрд▓ рд╢ीрдЯ рдоें рдПрдХ рдирдпा рдЯैрдм (Tab) рдмрдиाрдиा

рдЪूँрдХि рдЖрдк ,рдПрдХ рд╣ी рд╢ीрдЯ рдХा рдЗрд╕्рддेрдоाрд▓ рдХрд░ рд░рд╣े рд╣ैं। , рддो рд╕рдмрд╕े рдкрд╣рд▓े рдЖрдкрдХो рдЗрд╕рдоें рдЯрд░्рдирдУрд╡рд░ рдХा рдбेрдЯा рдоंрдЧाрдиे рдХे рд▓िрдП рдПрдХ рдЦाрд▓ी рдЬрдЧрд╣ рдмрдиाрдиी рд╣ोрдЧी:

  1. рдЕрдкрдиी рдЙрд╕ी рдЧूрдЧрд▓ рд╢ीрдЯ рдХो рдЦोрд▓ें। рдЬो рдмрдиाрдпी рд╣ुрдпी рд╣ै। рдпрджि рдЯрд░्рдирдУрд╡рд░ рд╡ाрд▓ी рдмрдиाрдпी рд╣ुрдпी рд╣ै рддो рдЙрд╕ी рдХो рдЦोрд▓ें।

  2. рдиीрдЪे '+' рдмрдЯрди рджрдмाрдХрд░ рдПрдХ рдирдпा рдЯैрдм (Sheet) рдмрдиाрдПँ рдФрд░ рдЙрд╕рдХा рдиाрдо рдмिрд▓्рдХुрд▓ рдпрд╣ рд░рдЦें: Top 250 Turnover (рд╕्рдкेрд▓िंрдЧ рдФрд░ рд╕्рдкेрд╕ рдмिрд▓्рдХुрд▓ рдпрд╣ी рд░рдЦें рдХ्рдпोंрдХि рдХोрдб рдЗрд╕ी рдиाрдо рдХो рдвूँрдвेрдЧा)।

  3. рдЕрдм рдЕрдкрдиी рдкुрд░ाрдиी рд╢ीрдЯ Top 250 Stocks рдХी рдкрд╣рд▓ी рд▓ाрдЗрди (Row 1 рдХी рд╣ेрдбिंрдЧ्рд╕ A1 рд╕े рд▓ेрдХрд░ K1 рддрдХ) рдХॉрдкी рдХрд░ें рдФрд░ рдЗрд╕ рдирдИ Top 250 Turnover рд╢ीрдЯ рдХी Row 1 рдоें рдкेрд╕्рдЯ рдХрд░ рджें।

  4. (рд╡ैрдХрд▓्рдкिрдХ) рдЗрд╕ рдирдИ рд╢ीрдЯ рдХे B1 рдоें 'Volume' рдХी рдЬрдЧрд╣ 'Turnover (Lacs)' рд▓िрдЦ рд▓ें рддाрдХि рдХंрдл्рдпूрдЬрди рди рд░рд╣े।

рд╕्рдЯेрдк 2: рдЖрдкрдХा рдирдпा 'рдЯू-рдЗрди-рд╡рди' (2-in-1) рдкाрдпрдерди рдХोрдб

рдЕрдм рдЖрдкрдХो GitHub рдкрд░ рдЕрдкрдиी update_sheet.py рдл़ाрдЗрд▓ рдХो рдЦोрд▓рдХрд░ рдЙрд╕рдоें рдкрд╣рд▓े рд╕े рдоौрдЬूрдж рдкूрд░े рдХोрдб рдХो рдбिрд▓ीрдЯ (Delete) рдХрд░рдиा рд╣ै рдФрд░ рдпрд╣ рдирдпा рдоाрд╕्рдЯрд░ рдХोрдб рдкेрд╕्рдЯ рдХрд░рдиा рд╣ै। рдЗрд╕рдоें рдЬрд╣ां рд▓िрдЦा рд╣ै рдпрд╣ां рдкрд░ рдЕрдкрдиी рд╢ीрдЯ рдХी рдЖрдИрдбी рдбाрд▓े рд╡рд╣ां рдЖрдкрдХी рд╢ीрдЯ рдХी рдЖрдИрдбी рдбाрд▓рдиा рдордд рднुрд▓ें рдЖрдИрдбी рдХैрд╕े рдиिрдХाрд▓рддे рд╣ैं рдпрд╣ рд╡ीрдбिрдпो рдоें рдмрддाрдпा рд╣ै рдиीрдЪे рд╡ीрдбिрдпो рдХा рд▓िंрдХ рднी рдЖ рдЬाрдпेрдЧा। 50 рдк्рд░рддिрд╢рдд рдлॉрд▓ोрд╡рд░ рдЬिрдирдХे рдРрд░рд░ рдЖрддी рд╣ै рд╡ो рдпा рддो рд╢ीрдЯ рдХी рдЖрдИрдбी рдбाрд▓рдиा рд╣ी рднूрд▓ рдЬाрддे рд╣ै рдпा рдЖрдИрдбी рдбाрд▓рдиे рдоें рдХोрдИ рдЧрд▓рддी рдХрд░рддे рд╣ैं рдпा рдЖрдЗрдбी рдХे рдкाрд╕ рдЬो рдЗрди्рд╡рд░्рдЯेрдб рдХोрдоा рд╣ै рдЙрдирдХो рдбीрд▓ीрдЯ рдХрд░ рджेрддे рд╣ैं। рдЗрд╕рд▓िрдпे рдЖрдИрдбी рд╡ाрд▓ी рдЧрд▓рддी рдХा рдз्рдпाрди рдХрд░ рд▓ेрдиा।

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("ERROR: 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 = "рдпрд╣ां рдкрд░ рдЕрдкрдиी рд╢ीрдЯ рдХी рдЖрдИрдбी рдбाрд▓े "

# рджोрдиों рд╢ीрдЯ्рд╕ рдХो рдХрдиेрдХ्рдЯ рдХрд░рдиा
try:
    ws_volume = client.open_by_key(spreadsheet_id).worksheet("Top 250 Stocks")
    ws_turnover = client.open_by_key(spreadsheet_id).worksheet("Top 250 Turnover")
except Exception as e:
    print(f"Sheet Connection Error: {e}")
    exit(1)

# 2. New 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'
    }
    print(f"--- рддाрд░ीрдЦ {date_obj.strftime('%d-%m-%Y')} рдЪेрдХ рдХрд░ рд░рд╣े рд╣ैं ---")
    
    try:
        response = requests.get(url, headers=headers, timeout=15)
        if response.status_code == 200:
            print("рдлाрдЗрд▓ рдоिрд▓ рдЧрдИ! рдЕрдм рдЗрд╕े рдЦोрд▓ рд░рд╣े рд╣ैं...")
            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'
                    
                    # 1. рд╡ॉрд▓्рдпूрдо рдХॉрд▓рдо рдвूँрдврдиा
                    vol_col = 'TtlTradgVol'
                    for c in ['TtlTradgVol', 'TOTTRDQTY', 'TtlTrdQty', 'TotTrdQty']:
                        if c in df.columns:
                            vol_col = c
                            break
                            
                    # 2. рдЯрд░्рдирдУрд╡рд░ рдХॉрд▓рдо рдвूँрдврдиा (TtlTrfVal)
                    turnover_col = 'TtlTrfVal'
                    for c in ['TtlTrfVal', 'TOTTRDVAL', 'TtlTrdVal', 'TotTrdVal']:
                        if c in df.columns:
                            turnover_col = c
                            break
                    
                    # рд╕िрд░्рдл EQ рд╕ीрд░ीрдЬ рдЫांрдЯрдиा
                    if series_col in df.columns:
                        df = df[df[series_col].astype(str).str.strip() == 'EQ']
                    
                    # ETF, GOLD, LIQUID рд╣рдЯाрдиा
                    filter_keywords = 'BEES|ETF|GOLD|LIQUID|CASE|SILVER|LIQ'
                    df = df[~df[sym_col].astype(str).str.contains(filter_keywords, case=False, na=False)]
                    
                    # --- рдбेрдЯा рдХो рджो рднाрдЧों рдоें рдмाँрдЯрдиा ---
                    
                    # рд▓िрд╕्рдЯ A: рд╡ॉрд▓्рдпूрдо рдХे рдЖрдзाрд░ рдкрд░ рдЯॉрдк 250
                    df_vol = df.sort_values(by=vol_col, ascending=False).head(250)
                    data_vol = df_vol[[sym_col, vol_col, close_col]].values.tolist()
                    
                    # рд▓िрд╕्рдЯ B: рдЯрд░्рдирдУрд╡рд░ рдХे рдЖрдзाрд░ рдкрд░ рдЯॉрдк 250
                    df_turnover = df.sort_values(by=turnover_col, ascending=False).head(250)
                    data_turnover = df_turnover[[sym_col, turnover_col, close_col]].values.tolist()
                    
                    return data_vol, data_turnover
        else:
            print(f"NSE рд╕рд░्рд╡рд░ рдиे {response.status_code} рд░िрд╕्рдкॉрди्рд╕ рджिрдпा।")
            return None, None
    except Exception as e:
        print(f"Error: {e}")
        return None, None

# 3. Execution Logic (7 рджिрди рдкीрдЫे рддрдХ рдЪेрдХ рдХрд░рдиा)
date = datetime.now()
data_vol_to_insert = None
data_turnover_to_insert = None
fetched_date_str = ""

for i in range(7):
    test_date = date - timedelta(days=i)
    if test_date.weekday() >= 5: # Skip Sat/Sun
        continue
        
    data_vol, data_turnover = fetch_bhavcopy_for_date(test_date)
    if data_vol and data_turnover:
        data_vol_to_insert = data_vol
        data_turnover_to_insert = data_turnover
        fetched_date_str = test_date.strftime('%d-%b-%Y')
        break

# 4. Update Both Sheets
if data_vol_to_insert and data_turnover_to_insert:
    try:
        # A. рд╡ॉрд▓्рдпूрдо рд╡ाрд▓ी рдкुрд░ाрдиी рд╢ीрдЯ рдЕрдкрдбेрдЯ рдХрд░ें
        ws_volume.batch_clear(['A2:C251'])
        ws_volume.update('A2', data_vol_to_insert)
        
        # B. рдЯрд░्рдирдУрд╡рд░ рд╡ाрд▓ी рдирдИ рд╢ीрдЯ рдЕрдкрдбेрдЯ рдХрд░ें
        ws_turnover.batch_clear(['A2:C251'])
        ws_turnover.update('A2', data_turnover_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)"
        
        ws_volume.update('K2', [[status_msg]])
        ws_turnover.update('K2', [[status_msg]])
        
        print(f"SUCCESS: рджोрдиों рд╢ीрдЯ्рд╕ (Volume рдФрд░ Turnover) {fetched_date_str} рдХे рдбेрдЯा рд╕े рдЕрдкрдбेрдЯ рд╣ो рдЧрдИ рд╣ैं!")
    except Exception as e:
        print(f"Google Sheet рдЕрдкрдбेрдЯ рдХрд░рдиे рдоें рдПрд░рд░: {e}")
        exit(1)
else:
    print("FAILED: рдкिрдЫрд▓े 7 рджिрдиों рдоें рд╕े рдХिрд╕ी рднी рджिрди рдХी рдлाрдЗрд▓ рдирд╣ीं рдоिрд▓ी।")
    exit(1)

рдЕрдм рдЖрдкрдХो рдХ्рдпा рдХрд░рдиा рд╣ै?

  1. рдЗрд╕ рдХोрдб рдХो GitHub рдоें рдкेрд╕्рдЯ рдХрд░рдХे Commit changes рдХрд░ рджें।

  2. Actions рдЯैрдм рдоें рдЬाрдХрд░ рдПрдХ рдмाрд░ 'Run Workflow' рдкрд░ рдХ्рд▓िрдХ рдХрд░ рджें।

рдЖрдк рджेрдЦेंрдЧे рдХि рдЖрдкрдХी рджोрдиों рд╢ीрдЯ्рд╕ рдПрдХ рд╕ाрде рд╕ुрдкрд░рдлाрд╕्рдЯ рд╕्рдкीрдб рд╕े рднрд░ рдЧрдИ рд╣ैं। Top 250 Stocks рдоें рдкрд╣рд▓े рдХी рддрд░рд╣ рд╡ॉрд▓्рдпूрдо рд╡ाрд▓े рд╢ेрдпрд░ рдЖрдПंрдЧे рдФрд░ рдирдИ Top 250 Turnover рд╢ीрдЯ рдоें рдкैрд╕े (Value) рд╡ाрд▓े рдмेрд╣рддрд░ीрди рд╢ेрдпрд░ рдЖ рдЬाрдПंрдЧे।

рдпрджि рдХिрд╕ी рдХे рдХोрдИ рдРрд░рд░ рдЖрддी рд╣ै рддो рдкूрд░े рдХोрд░्рд╕ рдоें рдлॉрд▓ोрд╡рд░्рд╕ рдж्рд╡ाрд░ा рдмрддाрдпी рдЧрдпी рдХॉрдорди рдРрд░рд░ рдХा рд╕рдоाрдзाрди рдЗрд╕ рдЧूрдЧрд▓ рдбाрдХ्рдпूрдоेंрдЯ рдоें рджे рджिрдпा рд╣ै рдЗрд╕े рдкреЭрдХрд░ рд╕рдоाрдзाрди рдХрд░ рд▓ेрд╡ें।

https://docs.google.com/document/d/1qr9nZUbBiU4yYVkSy6cck_D4Guk0wjf94PJL72m6QIc/edit?usp=sharing

рдЖрдЧे рдЖрдкрдХो рдХ्рдпा рдХрд░рдиा рд╣ै? (рд╕िрд░्рдл 2 рдоिрдирдЯ рдХा рдХाрдо)

рд╕्рдЯेрдк 1: рдЕрдкрдиी рд╢ीрдЯ рдоें рдиीрдЪे '+' рджрдмाрдХрд░ рдПрдХ рдирдпा рдЯैрдм рдмрдиाрдПँ рдФрд░ рдЙрд╕рдХा рдиाрдо Final List Turnover рд░рдЦ рджें। Final List рд╡ाрд▓ी рд╢ीрдЯ рдХा рдиाрдо рдмрджрд▓рдХрд░ Final List Volume рдХрд░ рджेрд╡ें। 

рд╕्рдЯेрдк 2: рдЕрдкрдиी рдкुрд░ाрдиी 'Final List Volume' рдХी рдКрдкрд░ рд╡ाрд▓ी рд╣ेрдбिंрдЧ्рд╕ (Row 1 рдХे A1 рд╕े F1 рддрдХ) рдХो рдХॉрдкी рдХрд░ें рдФрд░ рдЗрд╕ рдирдИ рд╢ीрдЯ рдХी рдкрд╣рд▓ी рд▓ाрдЗрди рдоें рдкेрд╕्рдЯ рдХрд░ рджें। рд╡  рдЙрдкрд░ рдХे рд╣ेрдбिंрдЧ рдоें рд╡ोрд▓्рдпूрдо рдХे рд╕्рдеाрди рдкрд░ рдЯрд░्рдирдУрд╡рд░ рдХрд░ рджेрд╡ें।

рд╕्рдЯेрдк 3: рдЕрдм рдЗрд╕ рдирдИ рд╢ीрдЯ рдХे рд╕ेрд▓ A2 рдоें рдпрд╣ рдирдпा рдлॉрд░्рдоूрд▓ा рдкेрд╕्рдЯ рдХрд░ рджें:

=IFERROR(SORT(FILTER({'Top 250 Turnover'!A:D, 'Top 250 Turnover'!I:J}, 'Top 250 Turnover'!H:H="In Bull Run", 
'Top 250 Turnover'!J:J="Buy/Average Out"), 2, FALSE), "рдХोрдИ рд╕्рдЯॉрдХ рдирд╣ीं рдоिрд▓ा")

рдЕрдм рдЬो рдоेрд░े рдк्рдпाрд░े рдлोрд▓ोрд╡рд░्рд╕ рдРрд╕े рд╣ैं рдЬो рдпा рддो рд╕рдо्рдоाрдиीрдп рд╕ीрдиीрдпрд░ рд╕ीрдЯीрдЬрди рд╣ैं рдпा рдЬ्рдпाрджा рдЯेрдХ्рдиोрд▓ाрдЬी рдл्рд░ैंрдбрд▓ी рдирд╣ीं рд╣ै рдпा рдРрд╕े рд╣ैं рдЬो рд╕рдм рдХुрдЫ рдЬाрдирддे рд╣ुрдпे рднी рдЗрддрдиी рдоेрд╣рдирдд рд╢ीрдЯ рдмрдиाрдиें рдХी рдирд╣ीं рдХрд░рдиा рдЪाрд╣рддे рдЬिрдирдХो рдоैं рдк्рдпाрд░ рд╕े рдорд╣ाрдЖрд▓рд╕ी рд╡ рдорд╣ाрдиाрд▓ाрдпрдХ рдлोрд▓ोрд╡рд░्рд╕ рднी рдХрд╣рддा рд╣ूं। 
рдЙрдирдХे рд░ेрдлрд░ेंрд╕ рдХे рд▓िрдпे рд╡ोрд▓्рдпूрдо рд╡ рдЯрд░्рдирдУрд╡рд░ рд╡ाрд▓ी рд╢ीрдЯों рдоें рдЬो рдлाрдИрдирд▓ рд╕्рдЯॉрдХ рд░ोрдЬ рд╕्рдХैрди рд╣ोрдХрд░ рдЖрддे рд╣ैं рдЙрдирдХो рд╡ो рдЗрди рдмрдЯрдиों рдХो рджрдмाрдХрд░ рджेрдЦ рд╕рдХрддे рд╣ैं। 
рдЬрдм рднी рд╢ीрдЯ рдСрдЯो рдЕрдкрдбेрдЯ рд╣ोрдЧी рдмрдЯрдиों рдХे рдиीрдЪे рдХे рд╕्рдЯॉрдХ рднी рдЕрдкрдбेрдЯ рд╣ो рдЬाрдпेрдЧें рдпे рдмрдЯрди рдоेрд░ी рд╢ीрдЯ рд╕े рдЬुреЬे рд╣ुрдпे рд╣ैं। рдкрд░рди्рддु рдпाрдж рд░рдЦें рдпрд╣ рдоेрд░ी рд╕्рдЯॉрдХ рд░ेрдХрдоाрдбेंрд╢рди рдирд╣ीं рд╣ै рдпрд╣ рд╕िрд░्рдл рд░ेрдлрд░ेंрд╕ рд╡ рдРрдЬुрдХेрд╢рдирд▓ рдкрдкрд░्рдЬ рдХे рд▓िрдпे рд╣ैं рдЗрд╕рдХे рдЖрдзाрд░ рдкрд░ рдХोрдИ рд╕्рдЯॉрдХ рдиा рдЦрд░ीрджें рдкрд╣рд▓े рдЗрдирдХे рдЯेрдХ्рдиीрдХрд▓ рд╡ рдлंрдбाрдоेंрдЯрд▓ рдЬांрдЪे рдлिрд░ рдЕрдкрдиे рд╡िрд╡ेрдХ рдХो рд▓рдЧाрдР рдлिрд░ рдЕрдкрдиे рдкंрдЬीрдХृрдд рдиिрд╡ेрд╢ рд╕рд▓ाрд╣рдХाрд░ рдХो рдкुрдЫे рдлिрд░ рд╣ी рдХोрдИ рдХाрдо рдХрд░ें рдЗрди рд╕рдм рд╢ेрдпрд░ों рдоें рдоेрд░ा рд╡ рдоेрд░े рд░िрд╢्рддेрджाрд░ों рдХा рдиिрд╡ेрд╢ рд╣ो рд╕рдХрддा рд╣ै। рдЗрд╕рд▓िрдпे рд╕ाрд╡рдзाрди рд░рд╣ें рд╕рддрд░्рдХ рд░рд╣े।


ЁЯХТ рдЕрдкрдбेрдЯ рдХा рд╕рдордп рдЪेрдХ рдХिрдпा рдЬा рд░рд╣ा рд╣ै...
ЁЯЪА рдбेрдЯा рд▓ोрдб рд╣ो рд░рд╣ा рд╣ै, рдХृрдкрдпा рдк्рд░рддीрдХ्рд╖ा рдХрд░ें...
рдХ्рд░рдорд╢ः.....
.......рдЬाрд░ी рд╣ै рдХोрд░्рд╕ рдХी рдХрдХ्рд╖ा 4 рдоें рдЗрд╕ рд▓िрд╕्рдЯ рд╕े рдЖрдпे рд╕्рдЯॉрдХ्рд╕ рдХी рдЯ्рд░ेрдбिंрдЧ рдпрджि рдкंрдЬीрдХृрдд рдиिрд╡ेрд╢ рд╕рд▓ाрд╣рдХाрд░ рдХी рд╕рд▓ाрд╣ рд╕े рдХрд░рддे рд╣ैं рддो рдХैрдкिрдЯрд▓ рдоैрдиेрдЬрдоेंрдЯ рд╡ рдХрдо्рдкाрдЙंрдбिंрдЧ рдХैрд╕े рдХрд░рддे рд╣ैं рд╡ो рд╕ीрдЦाрдпा рдЬाрдиा рдЕрднी рдмाрдХी рд╣ै।

рдорд╣рдд्рд╡рдкूрд░्рдг рдк्рд░рдХрдЯीрдХрд░рдг (Disclosure): рдоैं рдПрдХ SEBI рдкंрдЬीрдХृрдд рд░िрд╕рд░्рдЪ рдПрдиाрд▓िрд╕्рдЯ (SEBI Registered Research Analyst) рд╣ूँ। рдКрдкрд░ рджी рдЧрдИ рдЬाрдирдХाрд░ी, рддрдХрдиीрдХी рд╕ेрдЯрдЕрдк, рдлॉрд░्рдоूрд▓े рдФрд░ рд╕्рдЯॉрдХ्рд╕ рдХी рд╕ूрдЪी рдХेрд╡рд▓ рд╢ैрдХ्рд╖िрдХ рдФрд░ рдЕрдз्рдпрдпрди рдЙрдж्рджेрд╢्рдпों (Educational Purposes) рдХे рд▓िрдП рд╕ाрдЭा рдХी рдЧрдИ рд╣ै। рдХृрдкрдпा рдХोрдИ рднी рдиिрд╡ेрд╢ рдиिрд░्рдгрдп рд▓ेрдиे рд╕े рдкрд╣рд▓े рдЕрдкрдиे рд╡िрдд्рддीрдп рд╕рд▓ाрд╣рдХाрд░ рд╕े рдкрд░ाрдорд░्рд╢ рдЕрд╡рд╢्рдп рд▓ें।


Blog Archive