Hướng dẫn đẩy tín hiệu từ amibroker lên zalo

    Một sự thật khá "phũ phàng" về hệ thống của Zalo: Zalo API khắc nghiệt và đóng kín hơn Telegram gấp 100 lần!

🛑 SỰ KHÁC BIỆT GIỮA TELEGRAM VÀ ZALO

  • Telegram: Cực kỳ hào phóng. Nó cho bạn 1 đoạn mã Token vĩnh viễn, bạn ném vào AmiBroker là nó bắn tin nhắn ầm ầm trọn đời.
  • Zalo: Không cho phép tạo Bot cá nhân miễn phí. Để gửi tin nhắn tự động qua API, bạn bắt buộc phải có Zalo Official Account (Zalo OA - Tài khoản doanh nghiệp) đã được xác thực. Quan trọng nhất là "Chìa khóa" (Access Token) của Zalo chỉ sống được tối đa 24 giờ. Hết 24 giờ lại phải dùng code để xin cấp khóa mới. AmiBroker (AFL) là ngôn ngữ đơn giản, không đủ sức để làm cái quy trình xin khóa liên tục này.

🛠️ 2 GIẢI PHÁP ĐỂ VƯỢT ẢI ZALO

    Vì AmiBroker không thể "nói chuyện" trực tiếp với Zalo, chúng ta bắt buộc phải dùng một "kẻ môi giới" đứng ở giữa. Hiện tại trong giới code chứng khoán VN, có 2 cách giải quyết:
Cách 1: Nuôi một con Robot Python gõ phím hộ (Khuyên dùng cho Room Cá Nhân)
    Cách hoạt động: bạn cài một đoạn code ngôn ngữ Python chạy ngầm trên máy tính. Trong AmiBroker, cứ có tín hiệu là nó lưu ra một file văn bản (Notepad). Con Robot Python sẽ canh chừng cái file đó, hễ có chữ mới là nó tự động copy, nhảy vào cửa sổ phần mềm Zalo trên máy tính của bạn, tìm đúng tên Group và tự động gõ phím Ctrl+V rồi Enter để gửi đi.
  • Ưu điểm: Miễn phí 100%, dùng luôn nick Zalo cá nhân của bạn, gửi vào bất kỳ nhóm nào cũng được.
  • Nhược điểm: Phải cài thêm Python, và lúc máy tính đang bắn lệnh thì máy tính không được tắt phần mềm Zalo.
Cách 2: Dùng Server Trung Gian (Make.com) + Zalo OA Doanh Nghiệp
    Cách hoạt động: AmiBroker sẽ bắn tín hiệu lên trang web Make.com. Make.com là một hệ thống siêu mạnh, nó sẽ tự động tính toán, xin cấp khóa liên tục từ Zalo, rồi thay mặt bạn gửi tin nhắn vào Zalo OA.
  • Ưu điểm: Chạy hoàn toàn trên mây, cực kỳ ổn định và chuyên nghiệp.
  • Nhược điểm: bạn bắt buộc phải đăng ký Zalo OA (cần giấy phép kinh doanh/hộ kinh doanh) và mất phí gửi tin nhắn (Zalo ZNS) cho nền tảng Zalo.

Bây giờ tôi sẽ đi từng bước hướng dẫn theo cách 1

    Nguyên lý hoạt động của hệ thống này sẽ là: AmiBroker chép tín hiệu ra một tờ giấy nháp (File Text) ➡️ Robot Python canh chừng tờ giấy đó ➡️ Thấy có chữ mới là nó tự động copy, mở Zalo lên và dán vào Group.
Để làm được điều này, chúng ta cần thực hiện 3 bước.

⚙️ BƯỚC 1: Cập nhật code AmiBroker (Ghi ra file thay vì gửi Telegram)

  • Ưu điểm tuyệt vời của cách này là bạn được phép dùng Tiếng Việt có dấu và Emoji thật (Zalo và Python đọc được hết, không bị lỗi font như AmiBroker bắn API).
  • Bạn vào ổ C:\ trên máy tính, tạo một thư mục mới tinh và đặt tên là ZaloSignal. (Đường dẫn chuẩn sẽ là C:\ZaloSignal).
  • Sau đó, bạn mở code AmiBroker lên và copy đoạn mã tôi viết sẵn dưới đây.
_V20 = MA(V, 20);
_C20 = MA(C, 20);

VolDownMax10 = HHV( IIf(C < Ref(C, -1), V, 0), 10 );
isPocketPivot = C > Ref(C, -1) AND V > VolDownMax10 AND C > _C20 AND Ref(C,-1) <= _C20*1.02;
isVCPBreak = Cross(C, HHV(Ref(H, -1), 20)) AND V > _V20 * 1.5 AND C == H;
isSpring = L < Ref(LLV(L, 20), -1) AND C > O AND C > (H+L)/2 AND V > _V20;
isUpthrust = H > Ref(HHV(H, 20), -1) AND C < (H+L)/2 AND V > _V20 * 1.5;

BuySig = isPocketPivot OR isVCPBreak OR isSpring;
SellSig = isUpthrust;

Filter = BuySig OR SellSig; 


LB = BarCount - 1; 

if (Filter[LB]) {
    ActionStr = "BÁN";
    if (BuySig[LB]) ActionStr = "MUA";
    

    TodayNum = Now(3); 
    MemKey = "SENT_ZALO_" + NumToStr(TodayNum, 1.0, False) + "_" + Name() + "_" + ActionStr;
    

    if (Nz(StaticVarGet(MemKey)) == 0) {
        
        SigNameStr = "";
        if (isPocketPivot[LB]) SigNameStr = "Pocket Pivot Chân Sóng";
        else if (isVCPBreak[LB]) SigNameStr = "Breakout VCP Bùng Nổ Vol";
        else if (isSpring[LB]) SigNameStr = "Spring Rũ Bỏ (Wyckoff)";
        else if (isUpthrust[LB]) SigNameStr = "Upthrust - Bẫy Tăng Giá";


        vDay = TodayNum % 100;
        vMonth = int((TodayNum % 10000) / 100);
        vYear = int(TodayNum / 10000) + 1900;
        DateDisplay = StrFormat("%02.0f/%02.0f/%04.0f", vDay, vMonth, vYear);

        vTimeNum = Now(4); 
        TimeStrFull = StrFormat("%06.0f", vTimeNum); 
        TimeDisplay = StrLeft(TimeStrFull, 2) + ":" + StrMid(TimeStrFull, 2, 2);
        
        PriceStr = NumToStr(C[LB], 1.2);
        Ticker = Name();

        PrevClose = C[LB - 1]; 
        PctChange = (C[LB] - PrevClose) / PrevClose * 100;
        
        PctStrZalo = NumToStr(PctChange, 1.2) + "%"; 
        if (PctChange > 0) {
            PctStrZalo = "+" + PctStrZalo; 
        }

        VolRatio = V[LB] / _V20[LB];
        VolRatioStr = NumToStr(VolRatio, 1.1) + "x";

        ValBil = (C[LB] * V[LB]) / 1000000;
        ValStr = NumToStr(ValBil, 1.1) + " Tỷ";

 
        ZaloIcon = "⚠️"; 
        if (BuySig[LB]) ZaloIcon = "🚀"; 
        
        ZaloMsg = "🚨 TÍN HIỆU ROBOT UPTRADINGVN 🚨\n\n" + 
                  "⏰ Thời gian: " + TimeDisplay + " (" + DateDisplay + ")\n" +
                  ZaloIcon + " Hành động: " + ActionStr + "\n" +
                  "🏷 Mã: " + Ticker + " (" + PctStrZalo + ")\n" +
                  "📝 Mô hình: " + SigNameStr + "\n" +
                  "💲 Vùng giá: " + PriceStr + "\n" +
                  "📊 Vol vs MA20: " + VolRatioStr + "\n" +
                  "💰 GTGD: " + ValStr;
                  
        fh = fopen("C:\\ZaloSignal\\signal.txt", "a"); // Mở file để viết nối tiếp
        if (fh) {
            fputs(ZaloMsg + "\n---END---\n", fh);
            fclose(fh);
            _TRACE("SUCCESS: Đã xuất tín hiệu mã " + Ticker + " ra file cho Zalo!");
        }

        StaticVarSet(MemKey, 1);
    }
}

ActionCol = WriteIf(BuySig, "MUA", "BÁN");
SigNameCol = WriteIf(isPocketPivot, "Pocket Pivot",
             WriteIf(isVCPBreak, "Breakout VCP",
             WriteIf(isSpring, "Spring Ru Bo",
             WriteIf(isUpthrust, "Upthrust", ""))));

AddTextColumn(ActionCol, "Hành Động", 1.0, colorWhite, IIf(BuySig, colorDarkGreen, colorDarkRed));
AddTextColumn(SigNameCol, "Tín Hiệu", 1.0);
AddColumn(V, "Khối Lượng", 1.0);

🐍 BƯỚC 2: Chuẩn bị "Bộ não" Python cho máy tính

   Máy tính của bạn cần được cài ngôn ngữ Python để chạy con Robot này.
  • Bạn vào web python.org tải bản mới nhất về và cài đặt. (Cực kỳ quan trọng: Ở màn hình cài đặt đầu tiên, bạn BẮT BUỘC phải tích vào ô "Add Python to PATH" ở dưới cùng).
  •  Trường hợp bạn đang tải bản cài đặt dạng gói của Windows (.msix hoặc từ Microsoft Store) chứ không phải bản cài đặt truyền thống (.exe). Sự khác biệt là bản Windows Store này cực kỳ thông minh: Nó đã tự động ngầm thêm Python vào PATH cho bạn luôn rồi, nên bạn sẽ không thấy cái ô "Add Python to PATH" để tích vào nữa. Quá tiện luôn!
  • Bạn bấm phím Windows trên bàn phím, gõ chữ cmd và ấn Enter để mở bảng đen Command Prompt.
  • Gõ lệnh này và ấn Enter: python --version
  • Nếu nó hiện ra dòng chữ kiểu như Python 3.12.x thì xin chúc mừng, máy bạn đã nhận Python thành công rực rỡ!
  • bạn copy nguyên dòng lệnh này dán vào cái bảng đen cmd đó rồi ấn Enter: pip install pyautogui pyperclip pygetwindow
  • Máy tính sẽ chạy các dòng chữ tải về loằng ngoằng một lúc. Khi nào nó dừng lại và hiện chữ Successfully installed... là xong.
  • Trường hợp bạn chạy xuất hiện lỗi 'pip' is not recognized...Thì bạn copy nguyên dòng lệnh này dán vào Command Prompt và Enter nhé: python -m pip install pyautogui pyperclip pygetwindow

🤖 BƯỚC 3: Triển khai Robot Zalo

Bạn mở ứng dụng Notepad (hoặc bất kỳ phần mềm gõ văn bản nào) trên máy tính, copy toàn bộ đoạn code dưới đây dán vào.
Chú ý: Bạn nhớ sửa lại cái dòng GROUP_NAME thành tên chính xác 100% của cái Group Zalo bạn muốn bắn vào nhé.
import os
import time
import pyperclip
import pyautogui
import pygetwindow as gw

FILE_PATH = r"C:\ZaloSignal\signal.txt"
GROUP_NAME = "Room VIP Uptradingvn" # <--- SỬA TÊN NHÓM ZALO CỦA bạn Ở ĐÂY

def send_to_zalo(text):
    try:
        # 1. Tìm và đưa cửa sổ Zalo lên màn hình
        zalo_windows = gw.getWindowsWithTitle('Zalo')
        if not zalo_windows:
            print("❌ Không tìm thấy Zalo! bạn hãy mở phần mềm Zalo PC lên nhé.")
            return
        
        zalo_win = zalo_windows[0]
        if zalo_win.isMinimized:
            zalo_win.restore()
        zalo_win.activate()
        time.sleep(0.5)
        
        # 2. Tìm Group (Mô phỏng gõ phím Ctrl+F)
        pyautogui.hotkey('ctrl', 'f')
        time.sleep(0.5)
        pyperclip.copy(GROUP_NAME)
        pyautogui.hotkey('ctrl', 'v')
        time.sleep(1) # Chờ Zalo load kết quả 1 giây
        pyautogui.press('enter') # Bấm Enter để chui vào Group
        time.sleep(0.5)
        
        # 3. Dán tín hiệu và Gửi
        pyperclip.copy(text)
        pyautogui.hotkey('ctrl', 'v')
        time.sleep(0.5)
        pyautogui.press('enter')
        
        print("✅ Đã bắn tín hiệu thành công lên Zalo!")
        
    except Exception as e:
        print(f"⚠️ Lỗi khi gửi Zalo: {e}")

print("🤖 ROBOT ZALO ĐANG CANH GÁC... (Nhấn Ctrl+C ở đây để tắt robot)")

while True:
    if os.path.exists(FILE_PATH):
        with open(FILE_PATH, "r", encoding="utf-8") as f:
            content = f.read().strip()
        
        if content:
            # Xóa sạch file ngay lập tức để không đọc lặp lại mã cũ
            open(FILE_PATH, "w", encoding="utf-8").close()
            
            # Cắt các tín hiệu ra (đề phòng AmiBroker bắn 4 mã cùng lúc)
            signals = content.split("---END---")
            for sig in signals:
                sig = sig.strip()
                if sig:
                    send_to_zalo(sig)
                    time.sleep(1.5) # Nghỉ 1.5s giữa các mã để Zalo không báo Spam
                    
    time.sleep(1) # Cứ 1 giây ngó tờ giấy nháp 1 lần
Bạn lưu file này lại với tên là bot_zalo.py (lưu ngoài Desktop cho dễ tìm).

🚀 BƯỚC CUỐI: CHẠY THỬ ROBOT

  • Mở phần mềm Zalo PC của bạn lên (để nó nằm đó, thu nhỏ xuống taskbar cũng được).
  • Kiểm tra Unikey ở góc phải màn hình chữ E (Tiếng Anh) để Robot lúc copy/paste không bị dính dấu tiếng Việt lằng nhằng.
  • Bạn ra ngoài Desktop, click đúp chuột vào file bot_zalo.py mà bạn đã lưu ban nãy. Lúc này một cái bảng đen sẽ hiện ra với dòng chữ "🤖 ROBOT ZALO ĐANG CANH GÁC...".
  • Bạn mở AmiBroker lên, bấm nút Explore.
Ngay lập tức bạn sẽ thấy một Cửa sổ Zalo tự động bật lên, tự động gõ tên Group, tự động dán tín hiệu siêu đẹp có đủ Emoji vào và gửi đi thoăn thoắt!

Tool Uptradingvn_ZaloBot

    Nếu anh chị cảm thấy làm theo hướng dẫn khó khăn quá thì có thể liên hệ mình, mình đã tạo sẵn một tool, chỉ cần cài đặt->nhập tên group zalo-> chọn đường dẫn zalo->chọn chế độ gửi ( chỉ text hay cả text và hình ảnh)-> nhấn bắt đầu đẩy tín hiệu. Việc tiếp theo của bạn là để cho amibroker tự động chạy.
Link download tool: Uptradingvn_ZaloBot
Chia sẻ:
×
Zoomed Image
Trang Chủ Từ Điển Checklist VIP

Đăng nhập thành công!

Chào mừng Khách hàng VIP đến với
Kho tàng Uptrading.

Zalo Hỗ trợ Zalo Cộng đồng Telegram