Logo UPTRADINGVN

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

Đẩy tín hiệu lên web/blog

Bước 1: Hướng dẫn tạo Firebase Realtime Database

1. Đăng nhập và tạo dự án:

  • Truy cập vào trang quản trị của Google: console.firebase.google.com (đăng nhập bằng tài khoản Gmail của bác).
  • Bấm vào ô Create a project (hoặc Add project).
  • Đặt tên dự án (ví dụ: uptradingvn-signals).
  • Bấm Continue. Ở bước hỏi về Google Analytics, bác có thể gạt tắt đi cho nhanh rồi bấm Create project. Đợi khoảng 30 giây để hệ thống thiết lập.

2. Tạo Cơ sở dữ liệu (Database):

  • Sau khi dự án tạo xong, bác nhìn sang cột menu bên trái, mở rộng mục Build (Xây dựng) và chọn Realtime Database.
  • Bấm vào nút Create Database ở giữa màn hình.
  • Bảng chọn vị trí máy chủ (Location) hiện ra, bác chọn Singapore (để tốc độ về Việt Nam nhanh nhất) rồi bấm Next.
  • Chọn Start in test mode (Bắt đầu ở chế độ thử nghiệm) rồi bấm Enable.

3. Mở khóa quyền Ghi/Đọc dữ liệu (Bắt buộc):

Để AmiBroker có thể tự do đẩy dữ liệu lên mà không bị chặn, chúng ta cần tinh chỉnh một chút ở lớp bảo mật.
  • Bác chuyển sang thẻ Rules (Quy tắc) ở ngay cạnh thẻ Data.
  • Sửa nội dung trong bảng code để cả read và write đều là true. Code sẽ trông chính xác như thế này:
JSON
{
  "rules": {
    ".read": true,
    ".write": true
  }
}
  • Bấm nút Publish (Xuất bản) để lưu lại.

4. Lấy đường link kết nối (API URL):

  • Bác quay trở lại thẻ Data (Dữ liệu).
  • Ngay ở giữa màn hình sẽ có một đường link kèm biểu tượng cái mắt xích (Ví dụ: https://uptradingvn-............firebasedatabase.app/). Bác hãy Copy toàn bộ đường link này. thay vào trong trang web

Bước 2: Mã nguồn cho trang web/blog

Download trang Trading Terminal

Bước 3: Tích hợp Đẩy tín hiệu lên telegram và web cùng lúc

Copy mã code cho amibroker bên dưới để sử dụng, nhớ thay  TeleToken (Bot API key) và TeleChatID (ID kênh).
// =========================================================================
// HỆ THỐNG XUẤT TÍN HIỆU LIVE LÊN FIREBASE & TELEGRAM (BẢN FULL CHUẨN)
// =========================================================================

// -------------------------------------------------------------------------
// 1. BỘ LỌC TÍN HIỆU 
// -------------------------------------------------------------------------
_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; 

// -------------------------------------------------------------------------
// 2. TỰ ĐỘNG DỌN RÁC FIREBASE KHI SANG NGÀY MỚI 
// -------------------------------------------------------------------------
if (Status("stocknum") == 0) {
    TodayNum = Now(3); 
    LastClearDate = Nz(StaticVarGet("LastClearDate"));

    if (TodayNum != LastClearDate) {
        FirebaseClearURL = "https://uptradingvn-signals-default-rtdb.asia-southeast1.firebasedatabase.app/signals.json";
        httpClear = CreateObject("MSXML2.XMLHTTP");
        if(httpClear) {
            httpClear.Open("DELETE", FirebaseClearURL, 0); 
            httpClear.Send();
            StaticVarSet("LastClearDate", TodayNum);
            _TRACE("SYSTEM: Da don dep sach se kho du lieu cho NGAY MOI.");
        }
    }
}

/// -------------------------------------------------------------------------
// 3. BẮN TÍN HIỆU LÊN FIREBASE & TELEGRAM (THÊM %, VOL, GTGD)
// -------------------------------------------------------------------------
LB = BarCount - 1; 

if (Filter[LB]) {
    ActionStr = "BAN";
    if (BuySig[LB]) ActionStr = "MUA";
    
    // 🧠 TẠO MÃ GHI NHỚ TRÁNH LẶP
    TodayNum = Now(3); 
    MemKey = "SENT_" + NumToStr(TodayNum, 1.0, False) + "_" + Name() + "_" + ActionStr;
    
    // 🛑 KIỂM TRA BỘ NHỚ
    if (Nz(StaticVarGet(MemKey)) == 0) {
        
        SigNameStr = "";
        if (isPocketPivot[LB]) SigNameStr = "Pocket Pivot Chan Song";
        else if (isVCPBreak[LB]) SigNameStr = "Breakout VCP Bung No Vol";
        else if (isSpring[LB]) SigNameStr = "Spring Ru Bo (Wyckoff)";
        else if (isUpthrust[LB]) SigNameStr = "Upthrust - Bay Tang Gia";

        // --- TÍNH TOÁN NGÀY GIỜ ---
        DateStrFull = NumToStr(TodayNum, 1.0, False);
        DayStr = StrRight(DateStrFull, 2);
        MonthStr = StrMid(DateStrFull, 4, 2);
        YearStr = StrLeft(DateStrFull, 4);
        DateDisplay = DayStr + "/" + MonthStr + "/" + YearStr;

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

// --- TÍNH TOÁN CÁC THÔNG SỐ NÂNG CAO ---
        // 1. Phần trăm thay đổi giá (Đã sửa lỗi cú pháp Ref)
        PrevClose = C[LB - 1]; // Giá đóng cửa phiên liền trước
        PctChange = (C[LB] - PrevClose) / PrevClose * 100;
        
        PctStrWeb = NumToStr(PctChange, 1.2) + "%";
        PctStrTele = NumToStr(PctChange, 1.2) + "%25"; // Dùng %25 thay cho % để không lỗi URL
        if (PctChange > 0) {
            PctStrWeb = "+" + PctStrWeb;
            PctStrTele = "%2B" + PctStrTele; // Dùng %2B thay cho dấu + để không lỗi URL
        }

        // 2. Khối lượng so với TB 20 phiên (VD: 2.5x)
        VolRatio = V[LB] / _V20[LB];
        VolRatioStr = NumToStr(VolRatio, 1.1) + "x";

        // 3. Giá trị giao dịch (Quy đổi ra Tỷ VNĐ)
        ValBil = (C[LB] * V[LB]) / 1000000;
        ValStr = NumToStr(ValBil, 1.1) + " Ty";

        // --- 3.1 GỬI LÊN WEB (FIREBASE) ĐÃ BỔ SUNG DATA ---
        JsonData = "{\"time\":\"" + TimeDisplay + "\",\"ticker\":\"" + Ticker + "\",\"action\":\"" + ActionStr + "\",\"signame\":\"" + SigNameStr + "\",\"price\":\"" + PriceStr + "\",\"pct\":\"" + PctStrWeb + "\",\"val\":\"" + ValStr + "\",\"volratio\":\"" + VolRatioStr + "\"}";
        FirebaseURL = "https://uptradingvn-signals-default-rtdb.asia-southeast1.firebasedatabase.app/signals.json";

        http = CreateObject("MSXML2.XMLHTTP");
        if(http) {
            http.Open("POST", FirebaseURL, 0); 
            http.SetRequestHeader("Content-Type", "application/json");
            http.Send(JsonData);
        }

        // --- 3.2 GỬI LÊN NHÓM TELEGRAM ---
        TeleToken = "xxxxxxxxxxx"; 
        TeleChatID = "xxxxxxxxxxx";
        
        TeleIcon = "%E2%9A%A0"; 
        if (BuySig[LB]) TeleIcon = "%F0%9F%9A%80"; 
        
        TeleMsg = "%F0%9F%9A%A8 TIN HIEU ROBOT UPTRADINGVN %F0%9F%9A%A8%0A%0A" + 
                  "%E2%8F%B0 Thoi gian: " + TimeDisplay + " (" + DateDisplay + ")%0A" +
                  TeleIcon + " Hanh dong: " + ActionStr + "%0A" +
                  "%F0%9F%8F%B7 Ma: " + Ticker + " (" + PctStrTele + ")%0A" +
                  "%F0%9F%93%9D Mo hinh: " + SigNameStr + "%0A" +
                  "%F0%9F%92%B2 Vung gia: " + PriceStr + "%0A" +
                  "%F0%9F%93%8A Vol vs MA20: " + VolRatioStr + "%0A" +
                  "%F0%9F%92%B0 GTGD: " + ValStr;
                  
        TeleURL = "https://api.telegram.org/bot" + TeleToken + "/sendMessage?chat_id=" + TeleChatID + "&text=" + TeleMsg;
        
        httpTele = CreateObject("MSXML2.XMLHTTP");
        if(httpTele) {
            httpTele.Open("GET", TeleURL, 0); 
            httpTele.Send();
            _TRACE("SUCCESS: Da ban Telegram ma " + Ticker);
        }

        // 🧠 LƯU VÀO SỔ TAY ĐỂ KHÔNG BÁO LẶP
        StaticVarSet(MemKey, 1);

        // 🛑 NGHỈ 1 GIÂY CHỐNG SPAM TELEGRAM
        wsh = CreateObject("WScript.Shell");
        if(wsh) {
            wsh.Run("ping 127.0.0.1 -n 2", 0, True); 
        }
    }
}

// -------------------------------------------------------------------------
// 4. HIỂN THỊ BẢNG AMIBROKER
// -------------------------------------------------------------------------
ActionCol = WriteIf(BuySig, "MUA", "BAN");
SigNameCol = WriteIf(isPocketPivot, "Pocket Pivot",
             WriteIf(isVCPBreak, "Breakout VCP",
             WriteIf(isSpring, "Spring Ru Bo",
             WriteIf(isUpthrust, "Upthrust", ""))));

AddTextColumn(ActionCol, "Hanh Dong", 1.0, colorWhite, IIf(BuySig, colorDarkGreen, colorDarkRed));
AddTextColumn(SigNameCol, "Tin Hieu", 1.0);
AddColumn(V, "Khoi Luong", 1.0);

/* Neu dung doan ma truc tiep tren ami thi:
 1.  xoa doan ma tren web: sendTelegramMessage(...)
 2. va doan sau:

// Cấu hình Telegram Bot
const TELEGRAM_TOKEN = 'ĐIỀN_TOKEN_CỦA_BOT_VÀO_ĐÂY';
const TELEGRAM_CHAT_ID = 'ĐIỀN_CHAT_ID_CỦA_NHÓM_VÀO_ĐÂY';

function sendTelegramMessage(ticker, action, signame, price) {
    const url = `https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage`;
    
    // Đổi màu icon cho trực quan
    const icon = (action && action.trim().toUpperCase() === "MUA") ? "🟢" : "🔴";
    
    // Soạn nội dung tin nhắn (Dùng HTML để in đậm/in nghiêng)
    const message = `
🚨 TÍN HIỆU ${action.toUpperCase()} 🚨
${icon} Mã cổ phiếu: ${ticker}
📌 Mô hình/Tín hiệu: ${signame}
💰 Mức giá: ${price}
⏱ Thời gian: ${new Date().toLocaleTimeString('vi-VN')}
    `;

    // Gửi request tới Telegram
    fetch(url, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
            chat_id: TELEGRAM_CHAT_ID,
            text: message,
            parse_mode: 'HTML'
        })
    }).catch(error => console.error("Lỗi gửi Telegram:", error));
}
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