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

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.