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) के लिए साझा की गई है। कृपया कोई भी निवेश निर्णय लेने से पहले अपने वित्तीय सलाहकार से परामर्श अवश्य लें।


115 comments:

  1. 1 error and warning

    update-sheet
    Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, actions/setup-python@v5. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

    ReplyDelete
    Replies
    1. सबसे पहले तो आप निश्चिंत रहें, यह कोई Error (खराबी) नहीं है, बल्कि GitHub की तरफ से सिर्फ एक पीली Warning (सूचना) है। चूँकि हम मई 2026 में हैं और GitHub 2 जून 2026 से अपने बैकग्राउंड सिस्टम (Node.js) को अपडेट करने वाला है, इसलिए वह हर यूज़र को यह सूचना दिखा रहा है। इस मैसेज के आने पर भी आपका और आपके फॉलोवर्स का डेटा 100% सही तरीके से अपडेट हो रहा है।
      ​📌 फॉलोवर्स के लिए रिप्लाई (Node.js Warning का समाधान):
      ​क्या आपको "Node.js 20 actions are deprecated" वाली Warning दिख रही है?
      ​घबराएं नहीं! यह कोई Error नहीं है जिससे आपका कोड रुकेगा। यह सिर्फ GitHub की तरफ से एक सूचना है कि वे 2 जून 2026 से अपने सिस्टम को अपडेट कर रहे हैं। आपका कोड इसके बावजूद बिल्कुल सही काम करेगा और शीट अपडेट होगी।

      Delete
    2. Error: Process completed with exit code 1.
      I AM RECEIVING THIS ERROR.PLEASE HELP.

      Delete
    3. sir mera last work fail huwa

      Delete
    4. sir sheet update nhi hui yahi wali same error aayi hai

      Delete
    5. SIR, Error: Process completed with exit code 1. yah error aa raha hai, please kya karna hai bataiye.

      Delete
    6. sir mera bhi aisa hi ayatha, i left it as it is but when i chcked in morning th sheet was updated, i hope this for same for all who have issue faced as error 1

      Delete
    7. Working Great Sir Thanks

      Delete
    8. Error: Process completed with exit code 2. ye error aa raha h

      Delete
    9. Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, actions/setup-python@v5. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

      warning or error, file did not autorun had to manually run the task, please guide, thank you

      Delete
    10. Got success sir ji thank u so much

      Delete
    11. Manually triggered 8 minutes ago
      @gcssshomegcssshome

      df9f69d
      main
      Status
      Failure
      Total duration
      32s
      Artifacts

      Delete

    12. Error: Process completed with exit code 1.
      I face this error

      Delete
    13. Thanks GuruJi :) eagerly waiting for further video.

      Delete
    14. Sir ji namaskar,
      Mera ek Vinamra nivedan tha ki company ke volume or turnover me se Kise prathmikta Dena chahie?
      Dhanyvad🙏

      Delete
  2. Error: Process completed with exit code 1.

    ReplyDelete
    Replies
    1. done error resolved

      Delete
    2. क्या आपके GitHub Actions में "Error 1" (Process completed with exit code 1) आ रहा है?
      यह एरर तब आता है जब GitHub को आपकी Google API की 'चाबी' (Credentials) नहीं मिल पाती। इसे ठीक करने के लिए कृपया ये 3 चीजें चेक करें:
      1. Secret के नाम की स्पेलिंग (सबसे बड़ी गलती):
      अपने GitHub रिपॉजिटरी की Settings > Secrets and variables > Actions में जाएँ।
      चेक करें कि आपने जो Secret बनाया है, उसका नाम बिल्कुल GCP_CREDENTIALS ही होना चाहिए (सब कुछ Capital letters में, कोई स्पेस नहीं)। अगर नाम में Credential (बिना S के) या स्माल लेटर लिखा है, तो कोड काम नहीं करेगा।
      2. JSON फाइल कॉपी करने में गलती:
      आपने जो चाबी (JSON फाइल) डाउनलोड की थी, क्या आपने उसका पूरा टेक्स्ट कॉपी किया था? शुरू का ब्रैकेट { और आखिरी ब्रैकेट } भी कॉपी होना ज़रूरी है। इसे दोबारा कॉपी करके Secret को 'Update' कर दें।
      3. YAML फाइल (.github/workflows/main.yml) में स्पेसिंग की गलती:
      YAML फाइल में स्पेस (Space) बहुत मायने रखता है। चेक करें कि आपके कोड में env: वाली लाइन बिल्कुल Run Python Script के नीचे होनी चाहिए, कुछ इस तरह:

      - name: Run Python Script
      env:
      GCP_CREDENTIALS: ${{ secrets.GCP_CREDENTIALS }}
      run: python update_sheet.py
      क्या करें? एक बार अपना पुराना Secret डिलीट करें, GCP_CREDENTIALS नाम से एक नया Secret बनाएँ, उसमें पूरा JSON कोड सावधानी से पेस्ट करें और फिर से 'Run workflow' करके देखें। आपका एरर 100% गायब हो जाएगा!
      99% मामलों में फॉलोवर्स ने GCP_CREDENTIALS की स्पेलिंग गलत लिखी होती है या YAML फाइल में कोड पेस्ट करते समय स्पेसिंग (Indentation) बिगाड़ दी होती है।

      Delete
    3. sir ji 03 baar check kar liya but update nahi ho raha

      Delete
    4. 14s
      1s
      Run python update_sheet.py
      Traceback (most recent call last):
      File "/home/runner/work/NSE-Auto-Sheet/NSE-Auto-Sheet/update_sheet.py", line 13, in
      creds_dict = json.loads(creds_json)
      File "/opt/hostedtoolcache/Python/3.10.20/x64/lib/python3.10/json/__init__.py", line 346, in loads
      return _default_decoder.decode(s)
      File "/opt/hostedtoolcache/Python/3.10.20/x64/lib/python3.10/json/decoder.py", line 337, in decode
      obj, end = self.raw_decode(s, idx=_w(s, 0).end())
      File "/opt/hostedtoolcache/Python/3.10.20/x64/lib/python3.10/json/decoder.py", line 355, in raw_decode
      raise JSONDecodeError("Expecting value", s, err.value) from None
      json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
      Error: Process completed with exit code 1.

      Delete
    5. 3. YAML फाइल (.github/workflows/main.yml) में स्पेसिंग की गलती:
      YAML फाइल में स्पेस (Space) बहुत मायने रखता है। चेक करें कि आपके कोड में env: वाली लाइन बिल्कुल Run Python Script के नीचे होनी चाहिए, कुछ इस तरह:

      - name: Run Python Script
      env:
      GCP_CREDENTIALS: ${{ secrets.GCP_CREDENTIALS }}
      run: python update_sheet.py Sir ye mujhe kahi nhi mila blog me na video me. kripya iska step batayen. baki sab thik kar liya hai manine .

      Delete
    6. Annotations
      1 error and 1 warning
      update-sheet
      Process completed with exit code 1.

      Delete
    7. Save Sheet as google sheet. This has resoled the issue, if everything is OK.

      Delete
    8. I had copy the error code to Chatgpt, that analysed & help me in correction.

      Delete
    9. Is we have to run every time to update sheet? as sheet is not showing any thing on opening.

      Delete
    10. Sir, the volume sheet is done, thank you very much. I learn a lot through your videos, thank you. I am getting an error in the turnover sheet. The coding on the blog and the sheet code shown in your video seem a little different at the end. Could that be why the problem is arising?

      Delete
    11. I also got error code 1 4-5 times, try one more thing. When you are done with what sir had explained , go to sheet and rename sheet again top 250 stocks with same name ( top 250 stocks) manually. I did this and it worked.

      Delete
  3. Thank you so much Sir for this invaluable knowledge and guidance 🙏

    ReplyDelete
  4. BAHUT ACHCHHE SE MERA DRONE AAPKE MARGDARSAN ME UDH CHUKA HAI SIR JEE

    ReplyDelete
  5. excellent, in one go it worked, amazing sir

    ReplyDelete
  6. sir ye error aa rhi hai
    Process completed with exit code 2.

    ReplyDelete
    Replies
    1. please click on the update-sheet , and then it will display the actual error message. paste that here and Sir/myself can help in the setup

      Delete

    2. update-sheet
      Process completed with exit code 1.


      update-sheet
      Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, actions/setup-python@v5. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

      please help - what to do

      Delete
    3. Brokerage plus charges both side formula samajh nahi aaya

      Delete
  7. THANK YOU SIR AAPNE BAHUT ACHA SIKHAYA UPDATE HONE THODI PROBLEM AA RAHI HAI MAGAR KOSHIS KARTE RAHENGE

    ReplyDelete

  8. update-sheet
    Process completed with exit code 1.
    update-sheet
    Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, actions/setup-python@v5. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

    ReplyDelete

  9. update-sheet
    Process completed with exit code 1.
    update-sheet
    Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, actions/setup-python@v5. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
    Chandan Kumar

    ReplyDelete
    Replies
    1. Please click on the red cross - wala update-sheet and you will get the actual error. paste that error here. the above message is a warning message and that is fine .

      Delete

  10. Annotations
    1 error and 1 warning
    update-sheet
    Process completed with exit code 1.
    update-sheet
    Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, actions/setup-python@v5. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
    Please Help Sir Chandan Kumar

    ReplyDelete
  11. Sir, apne ko sheet banaya uska link mujse nahi ban rahi hai

    ReplyDelete
  12. Sir , i am a software Engineer since last 16 years and never seen someone working so hard for the benefit of others without taking any fees and teaching something by which people can become self dependent financially. you are Awesome. May Krishna Bless you.

    ReplyDelete
  13. Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, actions/setup-python@v5. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

    ReplyDelete
  14. Sheet me stocks to aa rahe hai but 2nd sheet (finalsheeet)hai usk stocks nahi dik rahe hai sir ?aisa kyu?

    ReplyDelete
  15. Annotations
    1 error and 1 warning
    update-sheet
    Process completed with exit code 1.
    update-sheet
    Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, actions/setup-python@v5. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
    Please give the solution

    ReplyDelete
  16. Thanks a lot Mahesh ji for teaching this automation via Github. I just did it and finished entire set up in 15 mins. Truly appreciate you for the efforts , bahut bahut dhanyawaad!

    ReplyDelete
  17. Thankyou sir aapki videos bhot help krti h.

    ReplyDelete
  18. Thank you sir aapki videos bhot help krti h.

    ReplyDelete
  19. NAMASKAR SIR, MAINE SABKUCH KAR TO DIYA AUR MERE FINAL LIST ME 250 STOCKS BHI AA GAYE LEKIN FINAL LIST WALI SHEET EMPTY HI HAI, USKO KAISE SOLVE KAR SAKTE HAI, MERA EMAIL ADDRESS SHARE.DEMO14@GMAIL.COM HAI

    ReplyDelete
    Replies
    1. Part 2 ka video aayega, Usme batayege. Wait till date

      Delete
  20. Mahesh Sir !!! Working Great Thanks. From Gujarat

    ReplyDelete
  21. Sheet updated successfully..Waiting for further guidance for integration with CAR sheet

    ReplyDelete
  22. Sir, me apaka kamchor sishya meri bhi excel sheet 100 % ban gai

    ReplyDelete
  23. Annotations
    1 error and 1 warning
    update-sheet
    Process completed with exit code 1.
    update-sheet
    Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, actions/setup-python@v5. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
    Sir ye code aa raha hai bataye kya kare

    ReplyDelete
  24. Gurudev !!! Working Great Thanks.
    Sheet updated successfully..Waiting for next video....

    ReplyDelete
  25. sir , same error mujha bhi aay raha hai. but maine sahi kar liy ha
    problem code mai nhi hai , sheet mai hai
    sheet k name copy nhi kiya tha ish liya error aay rha tha ( Top 250 Stocks) rename kiya blog pai se copy kar k. ab sahi work kar raha hai. mera liya yeah work kar raha hai , hope aur sab k liya bhi kare,
    problem kaha hue
    ;- pehla mena sheet k name kuhd type kiya tha. (not copy paste)

    ReplyDelete
  26. Annotations
    1 error and 1 warning
    update-sheet
    Process completed with exit code 1.
    update-sheet
    Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, actions/setup-python@v5. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
    please give solution for this error

    ReplyDelete
  27. jahan pe wo 2 sheet banai thi aur ek ka naam Top 250 Stocks rakha tha , bs uski spelling check karo dekho ki kahin koi Small/Capital letters ki dikkat na ho usko exact match karo video k hisab se ...Thank You!!!

    ReplyDelete
  28. Meri sheet bhi nahi aa rahi thi maine ek galti kar di thi maine sheet ka name top 250 stock kar diya tha stock me 's' nahi lagaya tha maine stocks karke code wapis edit kar diya to meri sheet update ho gayi Thanks sir

    ReplyDelete
  29. Namaskar Sir, apane jo process se maine advance karke maine usme add pura 2256 stock huva aur uska Fundamental sara data download hota hai, 40 colomn hui, fundamental like Symbol Company Name Sector Industry Close (₹) Open (₹) High (₹) Low (₹) Prev Close (₹) Price Change (₹), Promoter% ........

    ReplyDelete
  30. नमस्कार सर, अपने जो प्रोसेस से मैंने एडवांस करके हमें ऐड पूरा 2256 स्टॉक हुवा और उसका फंडामेंटल सारा डेटा डाउनलोड होता है, 40 कॉलम हुई, फंडामेंटल जैसे सिंबल कंपनी का नाम सेक्टर इंडस्ट्री क्लोज (₹) ओपन (₹) हाई (₹) लो (₹) प्रीव क्लोज (₹) प्राइस चेंज (₹), प्रमोटर% ........ Fundamental sara data download hota hai, 40 colomn hui, fundamental like Symbol Company Name Sector Industry Close (₹) Open (₹) High (₹) Low (₹) Prev Close (₹) Price Change (₹), Promoter% ........

    ReplyDelete
  31. नमस्कार सर, अपने जो प्रोसेस से मैंने एडवांस करके हमें ऐड पूरा 2256 स्टॉक हुवा और उसका फंडामेंटल सारा डेटा डाउनलोड होता है, 40 कॉलम हुई, फंडामेंटल जैसे सिंबल कंपनी का नाम सेक्टर इंडस्ट्री क्लोज (₹) OPEN (₹) HIGH (₹) LOW (₹) Previous close (₹) प्राlprice change (₹), promoter % ........ बाद में मैने उसको Android app में ssynchronize कर दिया और ये app without problem मस्त चलती हैं, excel sheet hang होती थी पर app मस्त रीत से चलती है और google sheet में data change होता है वैसे 30 second में update data fatch हो जाता हैं thank you sir, very good morning sir 😊

    ReplyDelete
  32. Hello sir,
    github pr creating anew file click karte hi 404 aaa rha h

    ReplyDelete
  33. Sir waiting for the next video

    ReplyDelete
  34. MERA DRONE raat 1:37 pe launch ho raha hai??

    ReplyDelete
  35. SIR CODE MAI JAAKAR CREATE NEW FILE PAR CLICK KARNE K BAAD NEW FILE NAME KA KOI OPTION NHI AA RAHA AUR PYTHON KO PASTE KARNE KA BOX NHI AA RAHA

    ReplyDelete
    Replies
    1. same happed with me, tried multiple times, same result

      Delete
    2. Mera bhi create new file nehi horsha tha phir uska solution hain mere paas

      GitHub me copilot bolke ek help section hain usko bolo wo kar dega tumhe karna nehi parega

      Delete
  36. Mahesh Ji, one point in case if I change the coding for turnover strategy than i need to make a copy of this Volume based sheet and delete the code ? secondly if I delete this volume base code and update for turnover hope my volume base sheet will work without issue

    ReplyDelete
  37. H2 me code kane par Error aa raha hai

    ReplyDelete
  38. Sir maine Kaksha 1 puri video follow kia lekin last me github me code pe jake create new file pe click karne ke baad same page reload hua hai....I am stuck there only so not able to complete auto sheet, please help me.

    ReplyDelete
  39. Sir Ye error aa raha hai please guide, ab to turnover vala code delete ho gaya hai

    Process completed with exit code 1.
    update-sheet
    Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, actions/setup-python@v5. Ac

    ReplyDelete
    Replies
    1. Sir jo blog me code hai usme last 3 lines extra hai jo apki video vale code me hai uski vajah se to nahi hai ye error please aap ek baar check kariye because mene code blog se pura sahi copy kiya hai but apki video me uska last kuch alag hai

      Delete
  40. Sheet working Sir :)

    ReplyDelete
  41. Col Sanjay PuranikMay 16, 2026 at 10:03 PM

    Thanks for providing this useful sheet, But when we buy and sell that data is required to be linked with this sheet so please provide two linked sheets where buy and sell transactions cna be entered. This will make it complete sheet. Please consider this.

    ReplyDelete
  42. Sir, I really loved the idea that you are moving a huge population from manual (error) trading towards algo trading step by step. the way you are creating these classes even a class 6th student can also follow this a build a trading system which is far from human error and emotional trading. I hope I understand correctly you have helped us create a scanner now next step is profit booking based on trailing SL based on ATR, Position sizing, and automatic trade executions. Your vision and intention for greater good is commendable.
    My Name is Vineet Sharma I am on your whatsapp list, mu number ends with 5110, Please let me know If I can help you with any technical aspect of this project.

    ReplyDelete
  43. Hello Sir Thanks for great work. I really appreciate it. Some suggestions/queries if you may a) instead of top 250 why not top 500 shares nifty 50, next 50, mid 150, and small 250 b) its only highest traded volume/value shares on one particular day . Real breakout is only if average traded volume/value for the previous few days is broken substantially in the current traded day hope u can guide novice people like me . Thanks and again i really appreciate the hard work you you are doing for us.

    ReplyDelete
  44. sir creat a new file per click krne k baad next interface open nahi ho raha, jaha hamne code copy paste krna hai,? kya krna hoga koi alternate option nahi hai kya?

    ReplyDelete
  45. Sir, the code that you've pasted in the video is different from what is in your blog; hence, it's throwing an error. Please correct the code.

    ReplyDelete
  46. use this code, it will generate 2 sheet ByVolume and ByTurnover so that you can have both FINAL List (US Col A for ByVolume, Col H for ByTurnover):

    Code: update_sheet.py

    https://docs.google.com/document/d/1fqS2T-yMeog7LEfaf2DHSqvDi3mpkNdBecEJ2YbTlEY/edit?usp=sharing

    -----------------------------------------
    SHEET ID HERE - replace with your sheet id

    -Anil

    ReplyDelete
  47. sir aapki script kaam toh kar rahi thi lekin github ke saath error aa raha tha, maine kuch changes ke saath. Sirf google services or google cloud ka use karke hi sab aapne daily script run karna lekin shaam 7 baje kar diya hai.
    lekin aapka bhut bhut dhanayawaad sir, aapne itna sab hume apna gyan dene ke liye.

    ReplyDelete
  48. Sir agar volume ke jagape turnover pe kiya jaye uska code jo apne copy Kiya video me dikhaya hain uske baad 2 line apne alag se blog me add Kiya hain kya ???

    Kuki blog me extra 2 line dikh raha hain jo apki video me nehi tha

    ReplyDelete
  49. sir,error coming-creating a new file is not clickable in Code tab.

    ReplyDelete
  50. Annotations
    1 error and 1 warning
    update-sheet
    Process completed with exit code 1.
    update-sheet
    Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, actions/setup-python@v5. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

    SIR YE VOLUME WALI SHEET ME PROBLEM NAHI AA RAHI THI LAKIN AB TURNOVER WALI SHEET ME PROBLEM AA RAHI HAI

    ReplyDelete
  51. Meri sheet ban gai hai, thank you

    ReplyDelete
  52. SIR AAPKA JAWAB NAHI AAPNE ITNI MEHNAT KARTE HAI HUMARE LIYE WO BHI ITNE SALO SE MAIN APKO 2019 SE FOLLOW KAR RAHA HOON MAINE YE PURI 2IN 1SHEET BANA LI HAI APKI KIRPA SE

    ReplyDelete
  53. sir ye maha nalayko ko roj roj apke es blog par ake TOP VOLUMR PO TOP TURNOVER dekh na hoga

    ReplyDelete
  54. गुरुजी नमस्कार, यहां जो दो बटन दिए हैं, उनमें जो स्टॉक्स दिखते हैं क्या dma dma car की तर्ज पर दिखेंगे? यानि कि cmp असेंडिंग ऑर्डर में।

    ReplyDelete
  55. One can find common stocks in both sheets and sort them in third sheet using formula:

    case1:
    Common in Turnver and Volume

    =IFERROR(FILTER('Final List Turnover'!A3:A, COUNTIF('Final List Volume'!A3:A, 'Final List Turnover'!A3:A)), "कोई स्टॉक नहीं मिला")

    Case 2:
    Common in Volume and Turnover

    =IFERROR(FILTER('Final List Volume'!A3:A, COUNTIF('Final List Turnover'!A3:A, 'Final List Volume'!A3:A)), "कोई स्टॉक नहीं मिला")

    ReplyDelete
  56. thankyou guruji dono sheet work kar rahi hai

    ReplyDelete
  57. GURUJI aapne complex concept ko itna simple language m samjhaya h ki har koi kar pa raha h. thank you guruji

    ReplyDelete
  58. Sir,
    मैने दोनों sheet बनाली और उस sheet पर से Android app बनाली है, अब पूरी जिंदगी चलेगी 😂

    एक बात और है कि live share Market में volume और turnover की Google sheet बना सकते हैं क्या? पायथन कोड बताई प्लीज, मैने बनाई है पर डेटा नहीं आ रहा

    प्लीज इस पर सलाह दीजिए या पाईथन कोड बताईये

    ReplyDelete
  59. Pranam Sir, dono hi button mey "koi stock nahi mila" ye hi aa raha hai. Blog pe bhi aur meri sheet mey bhi....Final List mey hi hai ye problem, top 250 toh load ho rahey hain. Shayad is 2 in 1 code ke liye dono final list ke liye formula dubara dey dein toh ho jayega. Kyunki hamney pahley turnover wali hi bana li this phir kal 2 in 1 use kia to formula mey shayad koi mix-up ho gaya hai....

    ReplyDelete
  60. Abhi phir check kiya toh volume waley button mey toh aa gaye stock. Blog button pe bhi aur meri sheet mey bhi magar blog ke dusrey turnover button mey bhi "koi stock nahi mile" aur meri sheet mey bhi - Aisa possible toh nahi hona chahiye, isliye lag raha hai ki formulae mey kuch mix-up hai

    ReplyDelete
  61. Last updation date is 25th however it's 26th today

    ReplyDelete
  62. Dron nhi ud paya sir

    ReplyDelete
  63. Sir ji, output wale formula ke according 50 DMA aur 100 DMA, 200 DMA ke neeche ho sakte hain, lekin phir bhi price teeno DMA ke upar ho sakta hai. Kya aise case mein bhi stock ko bull run mein consider kiya jayega?

    Yeh formula aapki Nifty Ki Dukaan ke breakout version wale formula se thoda different lag raha hai. Kripya ek baar isko validate kar dijiye.

    Formula in this blog:
    =IF(AND(D2>E2, D2>F2, D2>G2, I2>=0.01, I2<=10), "In Bull Run",
    IF(AND(D2=-10, I2<=-0.01), "In Bear Run", "Unconfirmed"))
    (bull example: CMP>50 DMA, CMP>100 DMA, CMP >200 DMA)

    Formula in Nifty ki Dukaan
    =IF(AND(D2>E2, E2>F2, F2>G2, I2>=0.01, I2<=10), "In Bull Run",
    IF(AND(D2=-10, I2<=-0.01), "In Bear Run", "Unconfirmed"))
    (bull example: CMP>50 DMA, 50 DMA>100 DMA, 100 DMA >200 DMA)

    ReplyDelete
  64. बहुत बहुत धन्यवाद सर APNE मेरी ट्रैडिंग KO बहुत आसान कर दिया अब सोचना नहीं पड़ता है क्या करें क्या न करें सब ऑटोमैटिक तरीके से हो जाता है Compounding करना भी बहुत आसान हो गया वॉल्यूम और टर्न ओवर दोनों का एक ही शीट लाना बहुत बढ़िया हो गया. म इसका इंतज़ार था। मेरा ड्रोन बहुत अच्छे से उड़ रहा है सर । बहुत बहुत धन्यवाद आपका

    ReplyDelete
  65. बहुत बहुत धन्यवाद सर आपने मेरी ट्रैडिंग को बहुत आसान कर दिया अब सोचना नहीं पड़ता है क्या करें क्या न करें सब ऑटोमैटिक तरीके से हो जाता है. Compounding करना भी बहुत आसान हो गया. वॉल्यूम और टर्न ओवर दोनों का एक ही शीट में लाना बहुत बढ़िया हो गया. मुझे इसका इंतज़ार था। मेरा ड्रोन बहुत अच्छे से उड़ रहा है सर । बहुत बहुत धन्यवाद आपका.
    https ://jhakashLife.com

    ReplyDelete
  66. Sir ji namaskar,
    Mera ek Vinamra nivedan tha ki company ke volume or turnover me se Kise prathmikta Dena chahiye.
    dhanyvad🙏

    ReplyDelete
  67. Thanks for 2 special button. Being senior citizen
    I am feeling relief .I can't depend on my junior । सबसे बड़ा बात उनसे मेरा आत्म सम्मान जिंदा रहेगा। आप को कोटि कोटि धन्यवाद। ईश्वर आप को सदा अपने आशीर्वाद से नवाजे।

    ReplyDelete
  68. Sir, yaha pe click karate vakt stock kyu nahi dikhai dete

    ReplyDelete
  69. Sir aap wakai me mahan ho, aapke saare videos dekhe hain bahut hi gyan vardhak hain.
    Volume vaali file ready hai, value waali try karne ke liye waqt nahi mila.
    Bahut bahut dhanyawad,agli kaksha ka intezar rahega.

    ReplyDelete

Share Your View in Comment

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.