1 điểm bởi GN⁺ 8 ngày trước | 1 bình luận | Chia sẻ qua WhatsApp
  • 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

    • Đúng vậy. Bot này hoàn toàn không có quản trị rủi ro, và trên GitHub cũng ghi rõ là meme
      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
    • Vậy tức là đây không phải một chiến lược giao dịch thực sự hữu dụng
      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ả
    • Khi người ta tìm ra một chiến lược có lãi thật sự, họ thường không chia sẻ rộng rãi
    • Cụm “code dựa trên meme” buồn cười quá. Có lẽ chính kiểu trò đùa đậm chất nerd này đã khiến cuộc thảo luận bùng nổ
    • Nhiều thị trường có liên kết với nhau nên việc ‘No’ xuất hiện nhiều hơn là điều đương nhiên. Ví dụ nếu có 10 ứng viên thì 9 người sẽ kết thúc bằng ‘No’
  • Đ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

    • Xét theo cấu trúc backend của Polymarket thì cá cược thể thao về thực chất cũng ở dạng Yes/No, nên ranh giới này khá mơ hồ
    • Những chiến lược như vậy ban đầu có thể có kỳ vọng dương (EV), nhưng khi nhiều người nhận ra thì thị trường sẽ điều chỉnh lại một cách hiệu quả
      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

    • Tôi cũng đã backtest thử, và dù trông như APR 100% thì có phần gian lận vì đã biết trước thời điểm kết quả xảy ra
      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
    • Tôi cũng thích thị trường dự đoán nên đã thử nhiều chiến lược, và thời điểm vào lệnh là yếu tố cốt lõi
      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

    • Mọi người thường đánh giá thấp các sự kiện thiên nga đen, nhưng khi chúng thật sự xảy ra thì lại phản ứng quá mức
      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
    • Nhưng nếu bot kiểu này được áp dụng vào các sự kiện quân sự hay chính trị, có thể sẽ tạo ra động cơ để ai đó biến phía ‘Yes’ thành hiện thực
    • Đó cũng là lý do thị trường không được định giá đồng đều
    • Vấn đề là logic này trên thực tế lại không hoạt động tốt như một chiến lược
  • 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

    • Nhưng đó là hiểu nhầm. Ví dụ “Joe Dart đắc cử tổng thống Y/N” và “Cory Wong đắc cử tổng thống Y/N” là hai biến độc lập
    • Đúng vậy. Mỗi kết quả không liên quan đến nhau
  • 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ó vẻ tác giả cũng không đưa nó ra như một chiến lược nghiêm túc, mà chỉ làm như một dự án mang tính meme
    • Nếu không all-in vào một sự kiện duy nhất thì khoản lỗ sẽ bị giới hạn ở số tiền đặt cượ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

    • Tác giả cũng có nhắc là “về dài hạn phải mua ở dưới 0,73”
      Có thể xem tweet liên quan
    • Nhưng chính sự tồn tại của thị trường lại có thể kích hoạt availability heuristic, khiến mọi người đánh giá xác suất cao hơn thực tế
      Link tham khảo
    • Câu “không có gì xảy ra cả” thật sự rất chuẩn
    • Benjamin à, một nhắc đến khá thú vị
  • 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 ý

    • Mọi người trả quá nhiều tiền cho bảo vệ skew, và bán thứ đó ra thì có thể kiếm lời đều đặn
      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’

    • Có lẽ chẳng ai bị lừa đâu. Có vẻ tác giả cũng chỉ làm như một trò đùa
    • Nếu không dùng đòn bẩy thì rủi ro của chiến lược này là có giới hạn
      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”
    • Có lãi hay không còn phụ thuộc vào các biến số như giá vào lệnh, kỳ vọng, thời gian còn lại
      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