рд╕ाрдеिрдпो рдирдорд╕्рдХाрд░рдЖрдЬ рдоें рдЖрдкрдХो рдПрдХ рдРрд╕ी рдЬाрджुрдИ рдЧूрдЧрд▓ рд╢ीрдЯ рдкाрдпрдерди рдХोрдб, рдЧूрдЧрд▓ рдХ्рд▓ाрдЙрдб рдПрдкीрдЖрдИ рд╡ рдЧिрдЯрд╣рдм рдХी рд╕рд╣ाрдпрддा рд╕े рддैрдпाрд░ рдХрд░рдиा рд╕ीрдЦाрдиे рд╡ाрд▓ा рд╣ूं рдЬो рдЖрдкрдХो рд╡ोрд▓्рдпूрдо рдХे рд╕ाрде рдм्рд░ेрдХрдЖрдЙрдЯ рд╡ाрд▓े рд╕्рдЯॉрдХ्рд╕ рдЕрдкрдиे рдЖрдк рд╕ेрд▓ेрдХ्рдЯ рдХрд░рдХे рджेрдЧी।рдпрд╣ рдкूрд░ा рдХोрд░्рд╕ рд╣ै рдЬो рдПрдХрджрдо рдл्рд░ी рд╣ै। рдЗрд╕ рдХोрд░्рд╕ рдХे рд╡ीрдбिрдпोрдЬ рдХी рдк्рд▓ेрд▓िрд╕्рдЯ рдЖрдкрдХो рдоेрд░े рдпूрдЯрдпूрдм рдЪैрдирд▓ рдорд╣ेрд╢ рдЪрди्рдж्рд░ рдХौрд╢िрдХ рдкрд░ рдоिрд▓ рдЬाрдпेрдЧी। рдЗрд╕ рдк्рд▓ेрд▓िрд╕्рдЯ рдХा рд▓िंрдХ рдиिрдо्рди рд╣ैः- https://www.youtube.com/playlist?list=PL-X8WTMcEbY-UTbq_OiXsFoiLZbEzxE4Y
рдЖрдЬ рдоैं рдЖрдкрдХो рдПрдХ рдРрд╕ा рддрд░ीрдХा рдмрддाрдиे рдЬा рд░рд╣ा рд╣ूँ рдЬिрд╕рд╕े рдЖрдк рдЦुрдж рдХी рдПрдХ рдРрд╕ी 'рд╕्рдоाрд░्рдЯ рдЧूрдЧрд▓ рд╢ीрдЯ' рдмрдиा рд╕рдХрддे рд╣ैं, рдЬो рд╣рд░ рд╢ाрдо рдмाрдЬ़ाрд░ рдмंрдж рд╣ोрдиे рдХे рдмाрдж рдЦुрдж-рдм-рдЦुрдж NSE рд╕े рдирдпा рдбेрдЯा рд▓ाрдПрдЧी, рдЙрд╕рдоें рд╕े рд╕рдмрд╕े рдЬ़्рдпाрджा рд╡ॉрд▓्рдпूрдо рд╡ाрд▓े рдЯॉрдк 250 рдЕрд╕рд▓ी рд╢ेрдпрд░ рдЫांрдЯेрдЧी, рдФрд░ рдЖрдкрдХे рдлॉрд░्рдоूрд▓े рдХे рд╣िрд╕ाрдм рд╕े рдЖрдкрдХो рдмेрд╣рддрд░ीрди рд╕्рдЯॉрдХ्рд╕ рдХी рд▓िрд╕्рдЯ рдиिрдХाрд▓ рдХрд░ рджे рджेрдЧी।
рдЪाрд╣े рдЖрдкрдХो рдХोрдбिंрдЧ рдХा 'C' рднी рди рдЖрддा рд╣ो, рдЗрд╕ рдЧाрдЗрдб рдХो рд╕्рдЯेрдк-рдмाрдп-рд╕्рдЯेрдк рдлॉрд▓ो рдХрд░ें рдФрд░ рдЖрдкрдХा рдЕрдкрдиा рд░ोрдмोрдЯ рддैрдпाрд░ рд╣ो рдЬाрдПрдЧा!
рд╕्рдЯेрдк 1: рдЕрдкрдиी рдЧूрдЧрд▓ рд╢ीрдЯ рддैрдпाрд░ рдХрд░рдиा
рд╕рдмрд╕े рдкрд╣рд▓े рд╣рдоें рдПрдХ рдЦाрд▓ी рдЧूрдЧрд▓ рд╢ीрдЯ рдЪाрд╣िрдП рдЬрд╣ाँ рд╕ाрд░ा рдбेрдЯा рдЖрдПрдЧा।
Google Sheets рдЦोрд▓ें рдФрд░ рдПрдХ рдирдИ рд╢ीрдЯ рдмрдиाрдПँ।
рдЗрд╕рдоें рдиीрдЪे '+' рдкрд░ рдХ्рд▓िрдХ рдХрд░рдХे рджो рдЯैрдм (Sheet) рдмрдиाрдПँ।
рдкрд╣рд▓े рдЯैрдм рдХा рдиाрдо рд░рдЦें:
Top 250 Stocksрджूрд╕рд░े рдЯैрдм рдХा рдиाрдо рд░рдЦें:
Final ListTop 250 Stocks рд╢ीрдЯ рдоें рдкрд╣рд▓ी рд▓ाрдЗрди (Row 1) рдоें рдпे рд╣ेрдбिंрдЧ्рд╕ рдбाрд▓ рджें:
A1:
NSE CodeB1:
VolumeC1:
Close Price(рдХॉрд▓рдо D рд╕े рдЖрдЧे рд╣рдо 50 рдбीрдПрдордП 100 рдбीрдПрдордП 200 рдбीрдПрдордП рд╕ीрдПрдЖрд░ рдЖрджि рдХुрдЫ рдлाрд░्рдоूрд▓े рд▓рдЧाрдпेрдЧें рдЬो рдЗрд╕ рдкोрд╕्рдЯ рдоें рдЖрдЧे рд╕ीрдЦाрдпे рдЬाрдпेрдЧें рдЕрднी рдЖрдкрдХो рдЕрдкрдиा рдкूрд░ा рдлोрдХрд╕ рдПрдирдПрд╕рдИ рд╕े рд╕рдмрд╕े рдЬ्рдпाрджा рд╡ोрд▓्рдпूрдо рд╡ाрд▓े рдЯॉрдк 250 рд╕्рдЯॉрдХ्рд╕ рдХी рд▓िрд╕्рдЯ рд░ोрдЬ рдСрдЯोрдоेрдЯिрдХ рдиिрдХाрд▓рдиे рдХрд░рдиे рдкрд░ рд░рдЦрдиा рд╣ै।!)
рд╕्рдЯेрдк 2: рдЧूрдЧрд▓ рдХ्рд▓ाрдЙрдб (Google Cloud) рд╕े API 'рдЪाрдмी' рд▓ेрдиा
рд╣рдоाрд░ी рдкाрдпрдерди рд╕्рдХ्рд░िрдк्рдЯ рдХो рдЖрдкрдХी рд╢ीрдЯ рдоें рдбेрдЯा рд▓िрдЦрдиे рдХे рд▓िрдП рдПрдХ рд╕ुрд░рдХ्рд╖िрдд рд░ाрд╕्рддे рдХी реЫрд░ूрд░рдд рд╣ै। рдЗрд╕рдХे рд▓िрдП рд╣рдо рдПрдХ 'Service Account' (рд░ोрдмोрдЯ) рдмрдиाрдПंрдЧे।
рдкрд░ рдЬाрдПँ।Google Cloud Console API Library рд╕рд░्рдЪ рдмॉрдХ्рд╕ рдоें "Google Sheets API" рдвूँрдвें рдФрд░ рдЙрд╕े Enable рдХрд░ рджें।
рдлिрд░ рд╕े рд╕рд░्рдЪ рдХрд░ें "Google Drive API" рдФрд░ рдЙрд╕े рднी Enable рдХрд░ рджें।
рдЕрдм рдмाрдПँ рдоेрдиू рдоें "Credentials" рдкрд░ рдХ्рд▓िрдХ рдХрд░ें। рдКрдкрд░ "+ Create Credentials" рдкрд░ рдЬाрдПँ рдФрд░ "Service Account" рдЪुрдиें।
рдЗрд╕े рдиाрдо рджें (рдЬैрд╕े:
stock-updater-bot) рдФрд░ Create рдХрд░ рджें।рдЕрдм рд╕рд░्рд╡िрд╕ рдЕрдХाрдЙंрдЯ рдХी рд▓िрд╕्рдЯ рдоें рдЙрд╕ рдирдП рдЕрдХाрдЙंрдЯ рдХे Email ID (рдЬो
...iam.gserviceaccount.comрдЬैрд╕ा рд╣ोрдЧा) рдХो рдХॉрдкी рдХрд░ рд▓ें।рдЙрд╕ी рдИрдоेрд▓ рдкрд░ рдХ्рд▓िрдХ рдХрд░ें, Keys рдЯैрдм рдоें рдЬाрдПँ -> Add Key -> Create new key рдкрд░ рдХ्рд▓िрдХ рдХрд░ें। JSON рдЪुрдиें рдФрд░ рдбाрдЙрдирд▓ोрдб рдХрд░ рд▓ें। рдпрд╣ рдЖрдкрдХी рддिрдЬोрд░ी рдХी рдЪाрдмी рд╣ै!
реЫрд░ूрд░ी рдХाрдо: рдЕрдм рдЕрдкрдиी рдЧूрдЧрд▓ рд╢ीрдЯ рдкрд░ рд╡ाрдкрд╕ рдЖрдПँ। рдКрдкрд░ рджाрдИं рдУрд░ Share рдмрдЯрди рджрдмाрдПं рдФрд░ рдЙрд╕ рдХॉрдкी рдХी рд╣ुрдИ Service Account Email ID рдХो 'Editor' рдХा рдПрдХ्рд╕ेрд╕ рджेрдХрд░ рд╕ेрд╡ рдХрд░ рджें।
рд╕्рдЯेрдк 3: GitHub рдкрд░ рдЕрдкрдиा рдСрдЯोрдоेрд╢рди рд╕ेрдЯ рдЕрдк рдХрд░рдиा
рдЕрдм рд╣рдо рдЕрдкрдиे рдХोрдб рдХो рдПрдХ рдРрд╕े рд╕рд░्рд╡рд░ рдкрд░ рд░рдЦेंрдЧे рдЬो рд░ोрдЬ़ рд╢ाрдо рдХो рдЕрдкрдиे рдЖрдк рдЪрд▓ेрдЧा। рдЗрд╕рдХे рд▓िрдП GitHub (рдЬो рдмिрд▓्рдХुрд▓ рдл्рд░ी рд╣ै) рдХा рдЗрд╕्рддेрдоाрд▓ рдХрд░ेंрдЧे।
GitHub.com рдкрд░ рдЬाрдХрд░ рдЕрдкрдиा рдЕрдХाрдЙंрдЯ рдмрдиाрдПँ рдпा рд▓ॉрдЧिрди рдХрд░ें।
рджाрдПँ рдХोрдиे рдоें '+' рджрдмाрдПं рдФрд░ New repository рдЪुрдиें। рдиाрдо рджें (рдЬैрд╕े:
NSE-Auto-Sheet) рдФрд░ рдЗрд╕े Private рд░рдЦें।рдЕрдм рдЕрдкрдиी рд░िрдкॉрдЬिрдЯрд░ी рдХी Settings рдоें рдЬाрдПँ। рдмाрдПँ рдоेрдиू рдоें рдиीрдЪे Secrets and variables > Actions рдкрд░ рдХ्рд▓िрдХ рдХрд░ें।
New repository secret рдмрдЯрди рджрдмाрдПं। Name рдоें рд▓िрдЦें:
GCP_CREDENTIALS।рдЬो JSON рдлाрдЗрд▓ рдЖрдкрдиे рдбाрдЙрдирд▓ोрдб рдХी рдеी, рдЙрд╕े рдиोрдЯрдкैрдб (Notepad) рдоें рдЦोрд▓ें, рдЙрд╕рдХा рд╕ाрд░ा рдЯेрдХ्рд╕्рдЯ рдХॉрдкी рдХрд░ें рдФрд░ рдпрд╣ाँ Secret рдмॉрдХ्рд╕ рдоें рдкेрд╕्рдЯ рдХрд░рдХे рд╕ेрд╡ рдХрд░ рджें।
рд╕्рдЯेрдк 4: рдкाрдпрдерди рд╕्рдХ्рд░िрдк्рдЯ (Python Script) рдбाрд▓рдиा
рдЕрдм рд╣рдо рд╡рд╣ рдЬाрджुрдИ рдХोрдб рдбाрд▓ेंрдЧे рдЬो NSE рдХे рдирдП рд╕िрд╕्рдЯрдо рд╕े рдбेрдЯा рд▓ाрдПрдЧा।
рд░िрдкॉрдЬिрдЯрд░ी рдХे рдоुрдЦ्рдп рдкेрдЬ (Code рдЯैрдм) рдкрд░ Add file > Create new file рдкрд░ рдХ्рд▓िрдХ рдХрд░ें।
рдлाрдЗрд▓ рдХा рдиाрдо рджें:
update_sheet.pyрдиीрдЪे рджिрдпा рдЧрдпा рдкूрд░ा рдХोрдб рдХॉрдкी рдХрд░рдХे рдЙрд╕ рдмॉрдХ्рд╕ рдоें рдкेрд╕्рдЯ рдХрд░ рджें:
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 рдХे рд╕рд░्рд╡рд░ рдкрд░ рдЯ्рд░ैрдлिрдХ рди рдоिрд▓े।
рдЕрдкрдиे GitHub рдоें Actions рдЯैрдм рдкрд░ рдХ्рд▓िрдХ рдХрд░ें।
"set up a workflow yourself" рдкрд░ рдХ्рд▓िрдХ рдХрд░ें।
рдиीрдЪे рджिрдпा рдЧрдпा рдХोрдб рдкेрд╕्рдЯ рдХрд░ें:
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 рдоें рдпрд╣ рдлॉрд░्рдоूрд▓ा рдкेрд╕्рдЯ рдХрд░ें:
рд╕्рдЯेрдк 2: рдоूрд╡िंрдЧ рдПрд╡рд░ेрдЬ (50, 100 рдФрд░ 200 DMA)
рдЕрдм рд╣рдо рд╡ो рдЗंрдбिрдХेрдЯрд░्рд╕ рд▓рдЧाрдПंрдЧे рдЬो рд╕्рдЯॉрдХ рдХा рдЯ्рд░ेंрдб (Trend) рдмрддाрддे рд╣ैं।
рд╕ेрд▓ E2 (50 DMA) рдоें рдкेрд╕्рдЯ рдХрд░ें:
рд╕ेрд▓ F2 (100 DMA) рдоें рдкेрд╕्рдЯ рдХрд░ें:
рд╕ेрд▓ G2 (200 DMA) рдоें рдкेрд╕्рдЯ рдХрд░ें:
рд╕्рдЯेрдк 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 рдоें рдкेрд╕्рдЯ рдХрд░ें:
рд╕्рдЯेрдк 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) рддैрдпाрд░ рдХрд░рдиा
рдпрд╣ рдЗрд╕ рдкूрд░ी рдк्рд░ोрд╕ेрд╕ рдХा рд╕рдмрд╕े рдорд╣рдд्рд╡рдкूрд░्рдг рд╣िрд╕्рд╕ा рд╣ै। рдпрд╣ाँ рд╣рдо рдПрдХ рдоाрд╕्рдЯрд░ рдлॉрд░्рдоूрд▓े рдХी рдорджрдж рд╕े рдЕрдкрдиी рдкрд╕ंрдж рдХे рдмेрд╣рддрд░ीрди рд╕्рдЯॉрдХ्рд╕ рдХो рдЕрд▓рдЧ рдХрд░ेंрдЧे।
рд╢ीрдЯ рдХा рд╕ेрдЯрдЕрдк:
рдЕрдкрдиी 'Final List' рд╡ाрд▓ी рд╢ीрдЯ рдЦोрд▓ें।
рдкрд╣рд▓ी рд░ो (Row 1) рдоें рд╕ेрд▓ A1 рд╕े F1 рддрдХ рдХो рд╕ेрд▓ेрдХ्рдЯ рдХрд░ें рдФрд░ рд╣ेрдбिंрдЧ рджें: Stocks In Bull Run
рджूрд╕рд░ी рд░ो (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 рдоें рдпрд╣ рдлॉрд░्рдоूрд▓ा рдкेрд╕्рдЯ рдХрд░ें:
=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) рдмрдиाрдиा
рдЪूँрдХि рдЖрдк ,рдПрдХ рд╣ी рд╢ीрдЯ рдХा рдЗрд╕्рддेрдоाрд▓ рдХрд░ рд░рд╣े рд╣ैं। , рддो рд╕рдмрд╕े рдкрд╣рд▓े рдЖрдкрдХो рдЗрд╕рдоें рдЯрд░्рдирдУрд╡рд░ рдХा рдбेрдЯा рдоंрдЧाрдиे рдХे рд▓िрдП рдПрдХ рдЦाрд▓ी рдЬрдЧрд╣ рдмрдиाрдиी рд╣ोрдЧी:
рдЕрдкрдиी рдЙрд╕ी рдЧूрдЧрд▓ рд╢ीрдЯ рдХो рдЦोрд▓ें। рдЬो рдмрдиाрдпी рд╣ुрдпी рд╣ै। рдпрджि рдЯрд░्рдирдУрд╡рд░ рд╡ाрд▓ी рдмрдиाрдпी рд╣ुрдпी рд╣ै рддो рдЙрд╕ी рдХो рдЦोрд▓ें।
рдиीрдЪे '+' рдмрдЯрди рджрдмाрдХрд░ рдПрдХ рдирдпा рдЯैрдм (Sheet) рдмрдиाрдПँ рдФрд░ рдЙрд╕рдХा рдиाрдо рдмिрд▓्рдХुрд▓ рдпрд╣ рд░рдЦें:
Top 250 Turnover(рд╕्рдкेрд▓िंрдЧ рдФрд░ рд╕्рдкेрд╕ рдмिрд▓्рдХुрд▓ рдпрд╣ी рд░рдЦें рдХ्рдпोंрдХि рдХोрдб рдЗрд╕ी рдиाрдо рдХो рдвूँрдвेрдЧा)।рдЕрдм рдЕрдкрдиी рдкुрд░ाрдиी рд╢ीрдЯ
Top 250 StocksрдХी рдкрд╣рд▓ी рд▓ाрдЗрди (Row 1 рдХी рд╣ेрдбिंрдЧ्рд╕ A1 рд╕े рд▓ेрдХрд░ K1 рддрдХ) рдХॉрдкी рдХрд░ें рдФрд░ рдЗрд╕ рдирдИTop 250 Turnoverрд╢ीрдЯ рдХी Row 1 рдоें рдкेрд╕्рдЯ рдХрд░ рджें।(рд╡ैрдХрд▓्рдкिрдХ) рдЗрд╕ рдирдИ рд╢ीрдЯ рдХे B1 рдоें 'Volume' рдХी рдЬрдЧрд╣ 'Turnover (Lacs)' рд▓िрдЦ рд▓ें рддाрдХि рдХंрдл्рдпूрдЬрди рди рд░рд╣े।
рд╕्рдЯेрдк 2: рдЖрдкрдХा рдирдпा 'рдЯू-рдЗрди-рд╡рди' (2-in-1) рдкाрдпрдерди рдХोрдб
update_sheet.py рдл़ाрдЗрд▓ рдХो рдЦोрд▓рдХрд░ рдЙрд╕рдоें рдкрд╣рд▓े рд╕े рдоौрдЬूрдж рдкूрд░े рдХोрдб рдХो рдбिрд▓ीрдЯ (Delete) рдХрд░рдиा рд╣ै рдФрд░ рдпрд╣ рдирдпा рдоाрд╕्рдЯрд░ рдХोрдб рдкेрд╕्рдЯ рдХрд░рдиा рд╣ै। рдЗрд╕рдоें рдЬрд╣ां рд▓िрдЦा рд╣ै рдпрд╣ां рдкрд░ рдЕрдкрдиी рд╢ीрдЯ рдХी рдЖрдИрдбी рдбाрд▓े рд╡рд╣ां рдЖрдкрдХी рд╢ीрдЯ рдХी рдЖрдИрдбी рдбाрд▓рдиा рдордд рднुрд▓ें рдЖрдИрдбी рдХैрд╕े рдиिрдХाрд▓рддे рд╣ैं рдпрд╣ рд╡ीрдбिрдпो рдоें рдмрддाрдпा рд╣ै рдиीрдЪे рд╡ीрдбिрдпो рдХा рд▓िंрдХ рднी рдЖ рдЬाрдпेрдЧा। 50 рдк्рд░рддिрд╢рдд рдлॉрд▓ोрд╡рд░ рдЬिрдирдХे рдРрд░рд░ рдЖрддी рд╣ै рд╡ो рдпा рддो рд╢ीрдЯ рдХी рдЖрдИрдбी рдбाрд▓рдиा рд╣ी рднूрд▓ рдЬाрддे рд╣ै рдпा рдЖрдИрдбी рдбाрд▓рдиे рдоें рдХोрдИ рдЧрд▓рддी рдХрд░рддे рд╣ैं рдпा рдЖрдЗрдбी рдХे рдкाрд╕ рдЬो рдЗрди्рд╡рд░्рдЯेрдб рдХोрдоा рд╣ै рдЙрдирдХो рдбीрд▓ीрдЯ рдХрд░ рджेрддे рд╣ैं। рдЗрд╕рд▓िрдпे рдЖрдИрдбी рд╡ाрд▓ी рдЧрд▓рддी рдХा рдз्рдпाрди рдХрд░ рд▓ेрдиा।рдЕрдм рдЖрдкрдХो рдХ्рдпा рдХрд░рдиा рд╣ै?
рдЗрд╕ рдХोрдб рдХो GitHub рдоें рдкेрд╕्рдЯ рдХрд░рдХे Commit changes рдХрд░ рджें।
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 рдоें рдпрд╣ рдирдпा рдлॉрд░्рдоूрд▓ा рдкेрд╕्рдЯ рдХрд░ рджें:
| ЁЯЪА рдбेрдЯा рд▓ोрдб рд╣ो рд░рд╣ा рд╣ै, рдХृрдкрдпा рдк्рд░рддीрдХ्рд╖ा рдХрд░ें... |
рдорд╣рдд्рд╡рдкूрд░्рдг рдк्рд░рдХрдЯीрдХрд░рдг (Disclosure): рдоैं рдПрдХ SEBI рдкंрдЬीрдХृрдд рд░िрд╕рд░्рдЪ рдПрдиाрд▓िрд╕्рдЯ (SEBI Registered Research Analyst) рд╣ूँ। рдКрдкрд░ рджी рдЧрдИ рдЬाрдирдХाрд░ी, рддрдХрдиीрдХी рд╕ेрдЯрдЕрдк, рдлॉрд░्рдоूрд▓े рдФрд░ рд╕्рдЯॉрдХ्рд╕ рдХी рд╕ूрдЪी рдХेрд╡рд▓ рд╢ैрдХ्рд╖िрдХ рдФрд░ рдЕрдз्рдпрдпрди рдЙрдж्рджेрд╢्рдпों (Educational Purposes) рдХे рд▓िрдП рд╕ाрдЭा рдХी рдЧрдИ рд╣ै। рдХृрдкрдпा рдХोрдИ рднी рдиिрд╡ेрд╢ рдиिрд░्рдгрдп рд▓ेрдиे рд╕े рдкрд╣рд▓े рдЕрдкрдиे рд╡िрдд्рддीрдп рд╕рд▓ाрд╣рдХाрд░ рд╕े рдкрд░ाрдорд░्рд╢ рдЕрд╡рд╢्рдп рд▓ें।

