ไม่มีอะไรเกิดขึ้นเลย: บอตที่ซื้อ ‘No’ ตลอดเวลาในตลาด Polymarket แบบไม่ใช่กีฬา
(github.com/sterlingcrispin)- บอต Python แบบอะซิงโครนัสสำหรับตลาดทำนายผลแบบใช่/ไม่ใช่ของ Polymarket ที่ ไม่ใช่กีฬา โดยจะ ซื้อเฉพาะโพสิชัน ‘No’ อัตโนมัติ และมีไว้เพื่อความบันเทิง
- แยก โหมดเทรดจำลองและโหมดเทรดจริง ออกจากกัน และเมื่อเทรดจริงจำเป็นต้องตั้งค่า ตัวแปรสภาพแวดล้อมหลายรายการและ private key
- มี อินเทอร์เฟซแดชบอร์ด สำหรับติดตามสถานะ และเมื่อเปิดใช้งานการส่งคำสั่งซื้อ จะ บันทึกสถานะการกู้คืนแบบเรียลไทม์
- มี สคริปต์ดีพลอยบน Heroku สำหรับทำงานอัตโนมัติ เช่น ตรวจสอบสถานะแอป ดูล็อก สลับเป็นโหมดเทรดจริง และหยุดโปรเซส
- มี เครื่องมือสำหรับทดสอบและจัดการข้อมูล ทำให้สามารถรันและตรวจสอบได้อย่างปลอดภัยทั้งในเครื่องและบนคลาวด์
ภาพรวม
- Nothing Ever Happens เป็นบอตที่พัฒนาด้วย Python แบบอะซิงโครนัส ซึ่งในตลาดทำนายผลแบบใช่/ไม่ใช่ของ Polymarket ที่ ไม่ใช่กีฬา จะคอย ซื้อโพสิชัน ‘No’ เสมอ
- ให้บริการเพื่อ วัตถุประสงค์ด้านความบันเทิง และ ไม่มีการรับประกันหรือความรับผิดใด ๆ โดยผู้ใช้ต้องรับความเสี่ยงเอง
- รีโพซิทอรีประกอบด้วยไดเรกทอรี
bot/,scripts/,tests/ซึ่งเก็บ ตรรกะการเทรด, สคริปต์ปฏิบัติการ, และโค้ดทดสอบ ตามลำดับ
โครงสร้างรันไทม์
- รันไทม์จะ สแกนตลาดแบบอิสระ และค้นหา รายการ ‘No’ ที่มีราคาไม่เกินเพดานราคาที่ตั้งไว้เพื่อติดตามโพสิชัน
- แสดงสถานะผ่าน แดชบอร์ด และ จะบันทึกสถานะการกู้คืนแบบเรียลไทม์เมื่อเปิดใช้งานการส่งคำสั่งซื้อ
- โมดูลที่ใช้รันคือ
nothing_happensและใน โหมดไม่ทำงานจริง จะใช้PaperExchangeClient
โมเดลความปลอดภัย
- หากต้องการส่งคำสั่งซื้อจริง ต้องตั้งค่าตัวแปรสภาพแวดล้อมทั้งสามรายการต่อไปนี้ครบถ้วน
BOT_MODE=liveLIVE_TRADING_ENABLED=trueDRY_RUN=false
- หากขาดเงื่อนไขข้อใดข้อหนึ่ง จะสลับไปเป็น โหมดเทรดจำลอง
- ในโหมดเทรดจริง ยังต้องมีตัวแปรสภาพแวดล้อมเพิ่มเติมดังนี้
PRIVATE_KEYFUNDER_ADDRESS(สำหรับ signature type 1, 2)DATABASE_URLPOLYGON_RPC_URL(สำหรับการอนุมัติกระเป๋าแบบพร็อกซีและการแลกคืน)
การตั้งค่าและคอนฟิก
- การติดตั้งทำได้ด้วย
pip install -r requirements.txtจากนั้นคัดลอกไฟล์คอนฟิกตัวอย่างมาใช้เป็นการตั้งค่าในเครื่อง config.jsonมีไว้สำหรับ การตั้งค่ารันไทม์ที่ไม่เป็นความลับ ส่วน.envใช้เก็บ คีย์ลับและแฟล็กการทำงาน- การตั้งค่ารันไทม์อยู่ภายใต้
strategies.nothing_happensและสามารถระบุไฟล์คอนฟิกอื่นได้ผ่านตัวแปรสภาพแวดล้อมCONFIG_PATH
การรันในเครื่อง
- ในเครื่องสามารถรันได้ด้วยคำสั่ง
python -m bot.main - แดชบอร์ดจะ bind กับตัวแปรสภาพแวดล้อม
$PORTหรือDASHBOARD_PORT
เวิร์กโฟลว์การดีพลอยบน Heroku
- ในสภาพแวดล้อม Heroku สามารถใช้
HEROKU_APP_NAMEหรือส่งอาร์กิวเมนต์ชื่อแอปแบบระบุชัดเจนได้ - สคริปต์ที่มีให้:
alive.sh: ตรวจสอบสถานะแอปlogs.sh: ดูล็อกlive_enabled.sh/live_disabled.sh: สลับโหมดเทรดจริงkill.sh: หยุดโปรเซส
- ขั้นตอนการดีพลอยทั่วไปมีดังนี้
- ตั้งค่าตัวแปรสภาพแวดล้อม (
BOT_MODE,DRY_RUN,LIVE_TRADING_ENABLED,PRIVATE_KEY,FUNDER_ADDRESS,POLYGON_RPC_URL,DATABASE_URL) git push heroku <branch>:mainheroku ps:scale web=1 worker=0
- ตั้งค่าตัวแปรสภาพแวดล้อม (
- โปรเซส
workerถูกออกแบบให้ ล้มเหลวอย่างรวดเร็วหากถูกรันโดยไม่ตั้งใจ
การทดสอบ
- การทดสอบใช้
pytestเพื่อตรวจสอบแบบ unit และ regression - คำสั่ง:
python -m pytest -q
สคริปต์ที่รวมมาให้
-
scripts/db_stats.py- ตรวจสอบจำนวนตารางในฐานข้อมูลแบบเรียลไทม์และกิจกรรมล่าสุด
-
scripts/export_db.py- ส่งออกตารางจาก
DATABASE_URLหรือจากแอป Heroku
- ส่งออกตารางจาก
-
scripts/wallet_history.py- ดูโพสิชัน ธุรกรรม และยอดคงเหลือของกระเป๋าที่ตั้งค่าไว้
-
scripts/parse_logs.py- แปลงล็อก JSON ของ Heroku เป็น รูปแบบเทอร์มินัลหรือ HTML
การจัดการรีโพซิทอรี
- การตั้งค่าในเครื่อง เลดเจอร์ ข้อมูลที่ส่งออก รายงาน และอาร์ติแฟกต์จากการดีพลอย จะ ถูกยกเว้นจาก git โดยค่าเริ่มต้น
- รีโพซิทอรีถูกจัดโครงสร้างให้ แยกสภาพแวดล้อมการปฏิบัติการและสภาพแวดล้อมในเครื่องออกจากกันอย่างชัดเจน
1 ความคิดเห็น
ความเห็นจาก Hacker News
ถ้าดู ทวีตนี้ ก็มีระบุชัดว่าไม่ได้รับประกันผลตอบแทนหรือการคืนเงิน
ดูเหมือนเป็นโปรเจ็กต์ที่ทำขึ้นขำ ๆ ด้วย โค้ดสายมีม มากกว่า
ให้ความรู้สึกเหมือนการทดลองตลก ๆ มากกว่าจะเป็นการหลอกลวง
มีสถิติว่าใน Polymarket ประมาณ 73% ลงท้ายด้วย ‘No’ จริง ๆ
ถ้าสนใจวิเคราะห์ข้อมูล ลองดู ชุดข้อมูลบน Hugging Face ได้
เพราะอคติด้านการมองโลกในแง่ดีของมนุษย์ ฝั่ง ‘Yes’ อาจถูกประเมินมูลค่าสูงเกินจริงได้ แต่ใน Polymarket ก็มีเทรดเดอร์จับตาอยู่แล้ว เลยทำให้ราคาออกมาค่อนข้างสมจริง
ถ้าสามารถเดิมพันกับเหรียญที่กำลังลงได้ก็น่าสนใจ แต่ตลาดแบบนั้นสุดท้ายก็น่าจะถูกปรับราคาอย่างมีประสิทธิภาพอยู่ดี
น่าสนใจที่โปรเจ็กต์นี้ทำมาสำหรับ ตลาดที่ไม่ใช่กีฬา
ในการเดิมพันกีฬาก็เป็นที่รู้กันว่าฝั่ง ‘No’ มักให้ผลตอบแทนดีกว่าในหลายกรณี เพราะฝั่ง ‘Yes’ ดูน่าตื่นเต้นกว่าและดึงคนเข้าไปมากกว่า
สุดท้ายแล้ว การเดิมพันที่น่าเบื่อ อาจให้ผลตอบแทนระยะยาวดีกว่า
ข้อค้นพบเชิง เศรษฐศาสตร์พฤติกรรม ที่สั่งสมมาจากการเดิมพันกีฬาอาจนำมาใช้กับตลาดที่ไม่ใช่กีฬาได้เหมือนกัน
สุดท้ายจะเกิด วงจรป้อนกลับ ที่ทำให้ราคากลับไปอยู่ในระดับเหมาะสม
เพราะงั้นถ้าเจอกลยุทธ์ที่ทำกำไรได้จริง ก็อย่าเอาไปโอเพนซอร์ส ปล่อยให้มันรันเงียบ ๆ จะฉลาดกว่า
ไอเดีย “เดิมพันฝั่ง No ตลอด” ฟังดูสนุกดี แต่ในทางปฏิบัติจะ ทำกำไรได้แค่ไหน ยังต้องพิสูจน์กันอีก
ในโลกจริงสภาพคล่องต่ำ และการขาดทุนครั้งเดียวอาจล้างกำไรจากหลายครั้งก่อนหน้าได้
ตลาดกีฬากลับคาดเดาได้มากกว่า เพราะมีเวลาจบที่ชัดเจนและมีปริมาณการซื้อขายสูง
ไม่ใช่แค่ลง No ทุกอันแบบสุ่ม ๆ แต่ถ้าลง No ในหัวข้อที่เกี่ยวข้องตั้งแต่ตอนที่ข่าวเพิ่งเริ่มออก อาจทำกำไรได้ค่อนข้างสม่ำเสมอ
ผมมองว่ามันคือ การเก็งกำไรจากจินตนาการของมนุษย์
คนชอบสถานการณ์หวือหวา แต่ความจริงส่วนใหญ่มักน่าเบื่อ
ผมเองก็เคยทำกำไรจากแพตเทิร์นนี้ตอนวิกฤตการเงินกับช่วงโควิด
ตอนนี้ก็กังวลเรื่องฟองสบู่ AI แต่คิดว่าคงไม่ได้พังฮวบ แค่น่าจะค่อย ๆ เย็นลง เลยเพิ่มสัดส่วนพันธบัตรกับเงินสดไว้
มีคนบอกว่าการเดิมพันฝั่ง ‘No’ ก็เท่ากับเดิมพัน ‘Yes’ กับผลลัพธ์อื่นทั้งหมดนั่นเอง
ใน เอกสารของ Polymarket มีการคำนวณที่เกี่ยวข้องอยู่
กลยุทธ์นี้เหมือน เก็บเหรียญหน้าารถไฟ
ได้กำไรเล็ก ๆ ซ้ำ ๆ แต่เจอเหตุการณ์หางยาวครั้งเดียวก็อาจเสียหมด
มีงานวิจัยที่เกี่ยวข้องคือ Prediction Market Microstructure
(การถกเถียงก่อนหน้า: ลิงก์ HN)
ผมคิดว่าตลาด สะท้อนราคา ไปหมดแล้ว
ดู ทวีตที่เกี่ยวข้อง
ดู ลิงก์อ้างอิง
สุดท้ายแล้ว ความผันผวนที่เกิดขึ้นจริง มักมีแนวโน้มต่ำกว่า ความผันผวนโดยนัย เมื่อเวลาผ่านไป
แน่นอนว่าถ้าเกิดเหตุหนักขึ้นมาครั้งหนึ่งก็อาจขาดทุนหนักได้
แค่เพราะ ‘No’ ออกมา 70% ไม่ได้แปลว่าจะทำเงินได้
นี่เป็น คณิตศาสตร์ที่ผิดพลาด แบบคลาสสิก เป็นกลยุทธ์แนว “เก็บเหรียญหน้า steamroller”
แต่ตลาดที่ไม่มีประสิทธิภาพแบบนี้ มีขนาดเล็กและพบได้น้อย สุดท้ายอาจเป็นแค่ “เก็บได้ก็แค่เหรียญไม่กี่เหรียญ”
ต่อให้ใช้เกณฑ์ Kelly ถ้าลงแบบสุ่ม ๆ สุดท้ายก็มีโอกาสสูงที่เงินทุนจะหมดอยู่ดี ต้องทำ การวิเคราะห์เชิงลึก (DD) แยกเป็นแต่ละตลาด