- Một bot Python bất đồng bộ trên các thị trường dự đoán có/không phi thể thao của Polymarket, tự động chỉ mua vị thế ‘No’, được cung cấp cho mục đích giải trí
- Phân biệt chế độ giao dịch mô phỏng và giao dịch thật; khi giao dịch thật, bắt buộc phải thiết lập nhiều biến môi trường và khóa riêng tư
- Theo dõi trạng thái qua giao diện dashboard, và khi bật gửi lệnh thì lưu trạng thái khôi phục theo thời gian thực
- Bao gồm các script triển khai Heroku để tự động hóa việc kiểm tra trạng thái ứng dụng, xem log, chuyển sang giao dịch thật và dừng tiến trình
- Có kèm công cụ kiểm thử và quản lý dữ liệu, giúp chạy và xác minh an toàn trên cả môi trường cục bộ lẫn đám mây
Tổng quan
- Nothing Ever Happens là một bot Python bất đồng bộ luôn mua vị thế ‘No’ trên các thị trường dự đoán có/không phi thể thao của nền tảng Polymarket
- Được cung cấp cho mục đích giải trí, và không có bảo đảm hay trách nhiệm pháp lý; người dùng tự chịu rủi ro khi sử dụng
- Kho mã được tổ chức thành các thư mục
bot/, scripts/, tests/, lần lượt chứa logic giao dịch, script vận hành và mã kiểm thử
Cấu trúc runtime
- Runtime sẽ quét các thị trường độc lập, tìm các mục ‘No’ có giá không vượt quá mức trần đã cấu hình và theo dõi các vị thế
- Hiển thị trạng thái qua dashboard, và lưu trạng thái khôi phục theo thời gian thực nếu việc gửi lệnh được bật
- Mô-đun thực thi là
nothing_happens; ở chế độ không hoạt động, nó sử dụng PaperExchangeClient
Mô hình an toàn
- Để gửi lệnh thật, phải thiết lập đồng thời cả ba biến môi trường sau
BOT_MODE=live
LIVE_TRADING_ENABLED=true
DRY_RUN=false
- Nếu thiếu bất kỳ điều kiện nào ở trên, hệ thống sẽ chuyển sang chế độ giao dịch mô phỏng
- Trong chế độ giao dịch thật, còn cần thêm các biến môi trường sau
PRIVATE_KEY
FUNDER_ADDRESS (cho kiểu ký 1, 2)
DATABASE_URL
POLYGON_RPC_URL (để phê duyệt ví proxy và redeem)
Thiết lập và cấu hình
- Cài đặt bằng
pip install -r requirements.txt, sau đó sao chép tệp cấu hình mẫu để dùng làm cấu hình cục bộ
config.json chứa cấu hình runtime không phải bí mật, còn .env chứa khóa bí mật và cờ thực thi
- Cấu hình runtime nằm dưới
strategies.nothing_happens, và có thể chỉ định tệp cấu hình khác bằng biến môi trường CONFIG_PATH
Chạy cục bộ
- Trên máy cục bộ, có thể chạy bằng lệnh
python -m bot.main
- Dashboard sẽ bind vào biến môi trường
$PORT hoặc DASHBOARD_PORT
Quy trình triển khai Heroku
- Trong môi trường Heroku, sử dụng
HEROKU_APP_NAME hoặc truyền rõ tham số tên ứng dụng
- Các script được cung cấp:
alive.sh: kiểm tra trạng thái ứng dụng
logs.sh: xem log
live_enabled.sh / live_disabled.sh: chuyển chế độ giao dịch thật
kill.sh: dừng tiến trình
- Quy trình triển khai thông thường như sau
- Thiết lập biến môi trường (
BOT_MODE, DRY_RUN, LIVE_TRADING_ENABLED, PRIVATE_KEY, FUNDER_ADDRESS, POLYGON_RPC_URL, DATABASE_URL)
git push heroku <branch>:main
heroku ps:scale web=1 worker=0
- Tiến trình
worker được thiết kế để nhanh chóng thất bại nếu vô tình bị chạy
Kiểm thử
- Kiểm thử sử dụng
pytest để thực hiện xác minh đơn vị và hồi quy
- Lệnh:
python -m pytest -q
Các script đi kèm
-
scripts/db_stats.py
- Kiểm tra số lượng bảng trong cơ sở dữ liệu thời gian thực và hoạt động gần đây
-
scripts/export_db.py
- Xuất các bảng từ
DATABASE_URL hoặc từ ứng dụng Heroku
-
scripts/wallet_history.py
- Tra cứu vị thế, giao dịch và số dư của ví đã cấu hình
-
scripts/parse_logs.py
- Chuyển đổi log JSON của Heroku sang định dạng terminal hoặc HTML
Quản lý kho mã
- Cấu hình cục bộ, sổ cái, dữ liệu xuất ra, báo cáo, sản phẩm triển khai... đều mặc định bị loại trừ khỏi git
- Kho mã được tổ chức để tách biệt rõ ràng giữa môi trường vận hành và môi trường cục bộ
1 bình luận
Ý kiến Hacker News
Nhìn vào tweet này, có ghi rõ là không hứa hẹn lợi nhuận hay hoàn tiền
Có vẻ đây chỉ là một dự án code dựa trên meme làm cho vui. Cảm giác giống một thử nghiệm hài hước hơn là lừa đảo
Có thống kê cho thấy khoảng 73% thị trường trên Polymarket thực sự kết thúc bằng ‘No’
Nếu quan tâm đến phân tích dữ liệu, có thể tham khảo bộ dữ liệu Hugging Face
Do thiên kiến lạc quan của con người, phía ‘Yes’ có thể bị định giá quá cao, nhưng Polymarket đã được các trader theo dõi sát nên giá vẫn hình thành khá thực tế
Nếu có thể cược vào các đồng coin đang giảm thì sẽ thú vị đấy, nhưng những thị trường như vậy cuối cùng cũng sẽ được điều chỉnh giá một cách hiệu quả
Điểm thú vị là dự án này dành cho thị trường phi thể thao
Trong cá cược thể thao cũng có quan điểm cho rằng phía ‘No’ thường có lợi suất cao hơn. ‘Yes’ hấp dẫn hơn nên thu hút nhiều người hơn
Cuối cùng, những kèo cược nhàm chán có thể mang lại lợi nhuận tốt hơn trong dài hạn
Có vẻ những góc nhìn kinh tế học hành vi tích lũy từ cá cược thể thao cũng có thể áp dụng sang các thị trường phi thể thao
Cuối cùng sẽ hình thành một vòng lặp phản hồi đưa giá về đúng vị trí
Vì vậy nếu thật sự tìm được chiến lược có lãi thì tốt nhất đừng open source, cứ âm thầm chạy sẽ khôn ngoan hơn
Ý tưởng “luôn cược vào No” thì thú vị, nhưng thực tế có sinh lời đến đâu vẫn cần được kiểm chứng
Ngoài đời, thanh khoản thấp và chỉ một lần thua cũng có thể xóa sạch lợi nhuận của nhiều lần thắng
Thị trường thể thao lại dễ dự đoán hơn nhờ thời điểm kết thúc rõ ràng và khối lượng giao dịch lớn
Không phải cứ đặt No cho mọi mục, mà nếu đánh No vào những mục liên quan ngay khi tin tức vừa bắt đầu xuất hiện thì có thể tạo ra lợi nhuận khá ổn định
Tôi xem đây là một dạng arbitrage của trí tưởng tượng con người
Con người thích những kịch bản giật gân, nhưng thực tế thì phần lớn đều nhàm chán
Tôi cũng từng kiếm được lợi nhuận bằng cách tận dụng mô thức này trong khủng hoảng tài chính và thời COVID
Hiện tôi lo về bong bóng AI, nhưng có lẽ nó sẽ hạ nhiệt từ từ thay vì lao dốc đột ngột, nên tôi đã tăng tỷ trọng trái phiếu và tiền mặt
Có ý kiến cho rằng cược vào ‘No’ thực chất tương đương với cược ‘Yes’ vào mọi kết quả khác
Tài liệu Polymarket có phần phép tính liên quan
Chiến lược này giống như nhặt đồng xu trước đầu tàu
Lặp đi lặp lại các khoản lãi nhỏ, rồi một sự kiện đuôi dài duy nhất có thể cuốn sạch tất cả
Có nghiên cứu liên quan là Prediction Market Microstructure
(thảo luận trước đó: link HN)
Tôi nghĩ thị trường đã phản ánh vào giá từ trước rồi
Có thể xem tweet liên quan
Link tham khảo
Rốt cuộc thì biến động thực tế theo thời gian thường có xu hướng thấp hơn biến động hàm ý
Tất nhiên, chỉ cần một lần nổ là cũng có thể lỗ rất nặng
Không phải cứ ‘No’ ra 70% là sẽ kiếm được tiền
Đây là kiểu toán tệ hại điển hình. Một chiến lược kiểu ‘nhặt đồng xu trước xe lu’
Chỉ là những thị trường kém hiệu quả như vậy nhỏ và hiếm, nên rốt cuộc có thể chỉ “nhặt được xu thì vẫn chỉ là xu”
Ngay cả khi theo tiêu chuẩn Kelly, nếu cược ngẫu nhiên thì cuối cùng vẫn có khả năng cạn vốn. Cần thẩm định kỹ lưỡng (DD) cho từng thị trường