ภาพรวมของระบบสนับสนุนการซื้อขายหุ้น AI — ตั้งแต่การสกัด candidatae จนถึงการแจ้งผ่าน LINE และการเทรดแบบไร้ใบสั่ง
ยินดีที่ได้รู้จัก わい。「株取引を仕組み化するヲ」、สั้นๆ ว่า「するヲ」です。ในคันไซ ฉันทำงานเป็นพนักงานบริษัท และพัฒนาระบบสนับสนุนการซื้อขายหุ้นด้วย Python และ AI เพื่อใช้งานส่วนบุคคล
เหตุผลที่เริ่มทำคืออยากลดการซื้อขายที่อาศัยสัญชาตญาณหรืออารมณ์ในแต่ละวัน ไม่ใช่หาคำอธิบายเหตุผลในการซื้อเพียงอย่างเดียว แต่ยังต้องกำหนดเงื่อนไขในการเลี่ยงการซื้อและการเตรียมพร้อมรับมือกับขาดทุนไว้ล่วงหน้า
ครั้งนี้ จะแนะนำภาพรวมว่า system ที่ฉันสร้างทำอะไร ตั้งแต่การคัดเลือกหุ้นที่เป็นไปได้ การแจ้งเตือนผ่าน LINE จนถึงการทดสอบด้วยเอาท์เทรดแบบ dry-run
คัดกรอง候補ให้เหลือหลายข้อ ประเมินด้วยเงื่อนไขหลายอย่าง แล้วบันทึกผลลัพธ์ การตัดสินใจขั้นสุดท้ายจะทำโดยมนุษย์ ระบบนี้จึงเป็น「โครงสร้างที่ช่วยในการตัดสินใจและการตรวจสอบการซื้อขายหุ้น」
ณ เวลาที่เขียน บันทึกยังทดสอบด้วยเอาท์เทรดแบบเอาท์เทรดแบบไร้คำสั่ง (dry-run) และการตรวจสอบดูเนื้อหาก่อนสั่งจริง บันทึกการซื้อขายจำลองที่กล่าวถึงในบทความนี้ไม่ใช่การซื้อขายด้วยเงินจริง
(ยังไม่ถึงขั้นให้ AI หาเงินให้หมดในระหว่างที่นอนหลับนะคะ ฉันก็เคยคาดหวังเช่นกัน。)
แบ่งกระบวนการทั้งหมดออกเป็น 7 ขั้นตอน
กระบวนหลักมี 7 ขั้นตอนดังนี้
1.รวบรวมหุ้นที่เป็น候補จากตลาด
2.อัปเดตข้อมูลราคาย้อนหลังและสัญญาณทางเทคนิค
3.คัดกรอง候補ด้วยกฎการซื้อขาย
4.ประเมิน候補ด้วยการเรียนรู้ของเครื่อง
5.จัดหมวดหมู่เป็น Entry、Watch、Skip
6.แจ้งเตือนไปยัง LINE
7.ติดตามผลด้วยเอาท์เทรดแบบจำลอง
กระบวนการคือ候補รวบรวม → อัปเดตข้อมูล → ตัดสินด้วยกฎ → ประเมินด้วย AI → จำแนก → แจ้งเตือน → ตรวจสอบผล
เดิมที เริ่มจากสคริปต์เดียวที่ดึงข้อมูลราคาหุ้น จากนั้นจึงเพิ่มเติมการคัดเลือก候補 การแจ้งเตือน การเรียนรู้ของเครื่อง และการติดตามผล จนกลายเป็นเจ็ดขั้นตอนในที่สุด
(อยากให้ใช้งานสะดวกขึ้น แต่จำนวนเพิ่มขึ้นมาก)
1.รวบรวม候補จากตลาด
ตอนแรกจะรวบรวม候補ที่ต้องตรวจสอบในวันนี้
การตรวจสอบหุ้นของญี่ปุ่นทั้งหมดทีละตัวเป็นไปไม่ได้ ฉะนั้นระบบของฉันจึงใช้ข้อมูลอันดับจาก kabu Station API ที่ได้จากการสืบค้น เพื่อรวบรวมหุ้นที่มีการเคลื่อนไหวและปริมาณการซื้อขายที่เข้ากับเงื่อนไขที่กำหนด
API คือช่องทางสำหรับโปรแกรมในการดึงข้อมูล ที่นี่ใช้งานจาก Python เพื่อรวบรวม「候補วันนี้」เป็นจุดเริ่มต้น
ในขั้นตอนนี้จะลดจำนวน対象การตรวจสอบให้เป็นจำนวนที่สมเหตุสมผล ไม่ได้ตัดสินใจซื้อเพียงเพราะถูกเลือกเข้ามา หรือสั่งซื้ออัตโนมัติทันที การจัดอยู่ในประเภทนี้เป็นการคัดเลือกขั้นต้นเพื่อไปยังขั้นตอนถัดไป
2.อัปเดตข้อมูลราคาหุ้นและสัญญาณเทคนิค
เมื่อ候補ถูกสะสมแล้ว จะใช้ไลบรารี yfinance ของ Python เพื่ออัปเดตราคาย้อนหลังเป็นวันต่อวัน (日足データ) เพื่อเป็นข้อมูลสำหรับตรวจสอบในภายหลังในระบบของฉัน
เกี่ยวกับข้อมูลที่ได้มา จำเป็นต้องตรวจสอบเงื่อนไขการใช้งานจากแหล่งที่มาและเครื่องมือที่ใช้งาน บทความนี้จะไม่ขายหรือแจกจ่ายข้อมูลราคาหุ้นต้นฉบับ แต่จะอธิบายวิธีการพัฒนาและตรวจสอบของฉัน
นอกจากราคาปิดแล้ว ยังคำนวณค่า Moving Average, Bollinger Bands, ระยะห่างจากจุดสูงสุดล่าสุด และการเปลี่ยนแปลงของปริมาณการซื้อขาย เช่น จุดที่ดูอยู่ต่อไปนี้
・Moving average ระยะสั้นและระยะกลางอยู่ที่ตำแหน่งใด
・ปริมาณการซื้อขายสูงกว่าปกติหรือไม่
・ใกล้จุดสูงสุดล่าสุดหรือไม่
・หลังจากขึ้นราคา ไม่ร้อนเกินไปหรือไม่
・อยู่ในระดับที่เรียกว่า dip หรือไม่
ก่อนหน้านี้ ฉันดูกราฟเพื่อบอกว่า「ขึ้นอย่างไร้เหตุผล」 ตอนนี้ฉันพยายามแยกแยะจากตัวเลขให้มากที่สุด
การแปลงเป็นตัวเลขไม่ได้หมายความว่าจะถูกต้องเสมอไป แต่ช่วยให้สามารถเปรียบเทียบตามสภาวะอารมณ์เดิมได้อย่างชัดเจนขึ้น
3.คัดกรอง候補ด้วย rules การซื้อขาย
ใช้ตัวชี้วัดที่คำนวณแล้วเพื่อลด候補ลงอีก
สิ่งที่ดูเป็นหลักคือ「候補ที่กำลังเคลื่อนไหวขึ้นแรง」และ「候補ที่อยู่ในแนวโน้มขึ้นแต่มีการย่อตัวลงบ้าง」
ในทางกลับกัน候補ที่ขึ้นมากเกินไป มีการเคลื่อนไหวรุนแรงมาก หรือไม่ตรงกับจำนวนเงินที่สามารถซื้อได้ จะถูกตัดออกหรือถูกประเมินค่าต่ำลงในขั้นตอนนี้
สิ่งสำคัญคือการบันทึกเหตุผลในการไม่เลือกด้วย ไม่ใช่เพียงเหตุผลที่ดูน่าจะดี
เมื่อมนุษย์ดูกราฟ เรามักหาข้อมูลที่สนับสนุนการซื้อในช่วงที่เราอยากซื้อ
(อย่างน้อยฉันก็หามาก)
ดังนั้น หากไม่ตรงตามเงื่อนไขที่กำหนดไว้ล่วงหน้า จะให้มีการตัดสินใจเลี่ยงการตรวจสอบ
4.ประเมิน候補ด้วย machine learning
นอกจากการประเมินด้วยกฎการซื้อขายแล้ว ยังประเมิน候補ด้วยแบบจำลอง machine learning ชื่อ LightGBM บทความนี้พูดถึงการประเมิน AI เป็นส่วนหลัก
คำถามหลักคือ「ความน่าจะเป็นที่候補จะไปถึงการเคลื่อนไหวที่เป้าหหมายภายในช่วงเวลาหนึ่งๆ ประเมินอย่างไร」
โมเดลรวมข้อมูลการเคลื่อนไหวของแต่ละหุ้น สัญญาณเทคนิค และสภาวะตลาดโดยรวมเข้าไปด้วยบางส่วน
อย่างไรก็ตาม ความน่าจะเป็นที่โมเดลให้มานั้นเป็นค่าคาดการณ์ที่เรียนรู้จากข้อมูลในอดีต ค่าเหล่านั้นไม่รับประกันความสำเร็จในอนาคต หุ้น候補ที่ประเมินสูงอาจทำให้ผิดพลาด และ候補ที่ประเมินต่ำอาจพุ่งขึ้นก็มีได้
ดังนั้น outputs ของ ML จึงรวมกับการประเมินด้วยกฎการซื้อขายเพื่อใช้เป็นหนึ่งในข้อมูลประกอบการตัดสินใจ
5.分類เป็น Entry、Watch、Skip
รวมสัญญาณเทคนิค, กฎการซื้อขาย และการประเมินของ ML เพื่อตัด候補ออกเป็นสามประเภท
・Entry候補:対象ที่ควรตรวจสอบลำดับต้นๆ
・Watch候補:ตรวจสอบต่อไปเมื่อเงื่อนไขพร้อม
・Skip/参考:候補ที่เลี่ยงในกรณีนี้
ถึงชื่อว่า Entry แต่ความหมายคือ「候補ที่ควรตรวจสอบก่อน」 ไม่ใช่คำสั่งซื้อ
ยังคงรักษา Watch และ Skip ไว้เพื่อให้ตรวจสอบว่ากรณีที่เลี่ยงไปภายหลังเป็นอย่างไร การมีแค่ Entry อย่างเดียวทำให้เปรียบเทียบวิธีคัดเลือกได้ยาก
「หุ้นที่เลี่ยงไปขึ้นราคาก่อน」เป็นผลลัพธ์ที่ไม่อยากเห็น แต่ยังบันทึกไว้ด้วย
(ยิ่งไม่อยากเห็น ยิ่งเป็นแนวทางปรับปรุง)
6.แจ้งเตือนผลลัพธ์ไปยัง LINE
เมื่อการจำแนกเสร็จแล้ว จะส่ง候補ของวันนั้นไปยัง LINE ของตนเอง
เพื่อให้ไม่ต้องเปิดไฟล์ CSV ทุกครั้ง สามารถตรวจสอบภาพรวมของ Entry候補 และ Watch候補บนสมาร์ทโฟนได้ Notifications จะยืนยันการจำแนก ผลประเมินหลัก และแผนการซื้อขายที่คาดการณ์
การแจ้งเตือนเป็นประตูเข้าสู่「วันนี้มีสิ่งที่ควรตรวจสอบลำดับต้นๆ」 ไม่ได้สั่งดูด่วน แต่จะตรวจสอบข้อมูลเพิ่มเติมและแดชบอร์ด
ตอนเริ่มทำ บางทีการแจ้งเตือนมาก็ดูเหมือนทำให้เสร็จสมบูรณ์ขึ้นเล็กน้อย
(การแจ้งเตือนไม่ใช่กำไร ตรงนี้สำคัญจริงๆ)
7.ติดตามผลหลังด้วยเอาท์เทรดแบบจำลอง
หากแค่สร้าง候補แล้วจบ ไม่ทราบว่าแนวคิดนั้นดีจริงหรือไม่ ดังนั้นจึงมีการจำลองการซื้อไว้ และติดตามการเคลื่อนไหวหลังจากนั้น
ตรวจสอบรายการเช่น
・ถึงราคาซื้อที่คาดหวังหรือไม่
・ถึงระดับทำกำไรหรือจุดตัดขาดทุนหรือไม่
・ระหว่างการถือหุ้นขึ้นสูงหรือลงไปถึงไหน
・ความแตกต่างระหว่าง Entry候補 และ Watch候補มีผลต่อขายหรือไม่
・เงื่อนไขเข้มแข็งและอ่อนเปลี้ยทำให้ผลลัพธ์แตกต่างกันหรือไม่
วิธีขายหลังจากทำกำไรถึงระดับหนึ่ง และวิธีการตัดขาดทุนที่อัตโนมัติหรือขึ้นกับการเคลื่อนไหวนั้นถูกตรวจสอบด้วย
อย่างไรก็ตาม การบันทึกการไปถึงราคาก็ไม่ได้หมายความว่าจะสามารถซื้อขายจริงในเวลานั้นได้เสมอ ควรตรวจสอบด้วยว่าใช้ข้อมูลเวลาใดและราคาที่ใดในการสมมติการซื้อขาย
สิ่งสำคัญคือไม่ใช่แค่การเข้าถูกครั้งเดียว แต่ต้องดูเหตุผลเมื่อทำซ้ำกฎเดิมอีกครั้ง หากมีจำนวนมากขึ้น การอธิบายก็จะไม่พอ
(ข้อมูลนั้นรุนแรงมาก)
แม้จะอัตโนมัติ แต่ส่วนที่มนุษย์ยังตรวจสอบอยู่ยังคงมีอยู่
เก็บ候補 การอัปเดตข้อมูล การคำนวณดัชนี การประเมินด้วย ML การแจ้งเตือน และการบันทึกผลทั้งหมดส่วนใหญ่เป็นระบบอัตโนมัติ
แต่ในระหว่างที่จริงจังกับคำสั่งจริงก็จะมีมนุษย์ตรวจสอบในประเด็นต่อไปนี้
・ข้อมูลถูกอัปเดตถูกต้องหรือไม่
・ตลาดทั้งหมดมีความผิดปกติอย่างรุนแรงหรือไม่
・จำนวนขาดทุนที่คาดหวังอยู่ในขอบเขตที่รับได้หรือไม่
・ศักยภาพซื้อและหุ้นที่มีอยู่มีปัญหาหรือไม่
・สภาพคล่องและความผันผวนรุนแรงจะไม่ทำให้เกิดความผิดพลาดหรือไม่
・ระบบไม่อยู่ในสภาพที่ไม่คาดคิด
ยังมีเช็คที่ช่วยตรวจดูว่า dry-run ที่ไม่สั่งขายไม่ส่งคำสั่งซื้อจริง และตรวจสอบสถานะพร้อมใช้งานจริง
ต้องการให้งานที่ทำซ้ำทุกวันถูกปล่อยให้ระบบทำหน้าที่ เพื่อให้มนุษย์มีเวลาตรวจสอบข้อยกเว้นและความเสี่ยงมากขึ้น
หลังฉากมีการตรวจสอบที่เรียบง่ายกว่าแต่ทำงานอยู่
ในการพัฒนาจริง ใช้เวลามากในการตรวจสอบเพื่อให้ระบบทำงานอย่างมั่นคง
・ดึงข้อมูลจาก API ได้ถูกต้องหรือไม่
・ไฟล์ของวันนั้นถูกสร้างหรือไม่
・กระบวนการเดิมไม่ถูกทำซ้ำซ้อนหรือไม่
・เหตุผลที่候補เปลี่ยนก่อนปิดตลาดและหลังจากยืนยันวันหุ้นเป็นเหตุใด
・การ注文จำลองและการชำระเงินถูกบันทึกตามที่คาดไว้หรือไม่
・เมื่อเกิดข้อผิดพลาด สามารถหยุดกระบวนการได้หรือไม่
ความแม่นยำของโมเดลไม่ได้ตรวจสอบมากกว่าเวลาที่ใช้ในการตรวจสอบนี้
(ก่อน AI บางครั้งก็สงสัยวันที่ของไฟล์บ้าง)
ไม่หรูหรา แต่เป็นส่วนที่จำเป็นในการใช้งานประจำวันเพื่อเปรียบเทียบผลลัพธ์
สถานะปัจจุบันอยู่ในขั้นตอนการตรวจสอบก่อนใช้งานจริง
เวลาที่เขียนนี้ ใช้เอาท์เทรดและ dry-run เพื่อยืนยันเงื่อนไขก่อนการตรวจสอบด้วยเงินลงทุนจริง
ตรวจสอบว่าเป็นการบันทึกการซื้อจำลองได้มั่นคงหรือไม่ การทำกำไรหรือการตัดขาดทุนเป็นไปตามที่คาดไว้หรือไม่ และผลลัพธ์เปลี่ยนแปลงอย่างไรจากความแตกต่างของเงื่อนไข การตรวจสอบเช่นนี้กำลังสะสมอยู่
หากจะไปสู่การใช้งานจริง จะเริ่มต้นจากหุ้นจำนวนน้อย เงินทุนขั้นต่ำ และมีการตรวจสอบสุดท้ายโดยมนุษย์ในช่วงประมาณหนึ่ง ซึ่งก่อนหน้านี้ ฉันมีประสบการณ์ระงับการตัดขาดทุนและนำไปสะท้อนในระบบด้วย
ตอนเริ่มต้นคิดว่าการหาหุ้นขึ้นเป็นสิ่งที่สำคัญที่สุด ตอนนี้ นอกจากการคัด候補 ยังเน้นการบันทึกเหตุผลในการเลี่ยง การกำหนดเงื่อนไขลดขาดทุน และการบันทึกผลลัพธ์ภายใต้เงื่อนไขเดียวกัน และหยุดเมื่อเหตุการณ์ผิดปกติ
การมีเหตุผลประกอบการที่ชัดเจนทำให้สามารถอธิบายและทบทวนการตัดสินใจได้ดีขึ้น และฉันจะบันทึกสิ่งที่พบในการตรวจสอบและสิ่งที่ยังไม่สำเร็จต่อไป
※บทความนี้เป็นบันทึกการพัฒนาระบบและการทดสอบส่วนบุคคลของผู้เขียน ไม่ได้แนะนำการซื้อขายสินค้าทางการเงินใดๆ และไม่รับประกันผลการดำเนินงานในอนาคต ผลลัพธ์ของเอาท์เทรดแบบจำลองแตกต่างจากผลการซื้อขายจริง นักลงทุนควรดำเนินการตัดสินใจด้วยความรับผิดชอบของตนเอง