ต้องการอ่านเรื่องนี้เป็น ภาษาอังกฤษ หรือไม่ ไป ที่นี่
VeighNa เป็นกรอบการพัฒนาระบบการซื้อขายเชิงปริมาณแบบโอเพ่นซอร์สที่ใช้ Python อย่างต่อเนื่อง ด้วยการสนับสนุนอย่างต่อเนื่องจากชุมชนโอเพ่นซอร์ส จึงค่อยๆ เติบโตเป็นแพลตฟอร์มการซื้อขายเชิงปริมาณแบบมัลติฟังก์ชั่น นับตั้งแต่เปิดตัว มีผู้ใช้จำนวนมากจากสถาบันการเงินหรือที่เกี่ยวข้อง รวมถึงกองทุนส่วนบุคคล บริษัทหลักทรัพย์ บริษัทซื้อขายล่วงหน้า ฯลฯ
[VeighNa Elite Quantitative Terminal] สำหรับเทรดเดอร์มืออาชีพเปิดตัวอย่างเป็นทางการแล้ว โดยให้การสนับสนุนที่สมบูรณ์แบบสำหรับความต้องการของเทรดเดอร์มืออาชีพในแง่ของการใช้กลยุทธ์พร้อมกันจำนวนมาก การเปลี่ยนตำแหน่งอย่างชาญฉลาด การดำเนินการแยกอัลกอริทึม และการสนับสนุนการซื้อขายหลายบัญชี สำหรับข้อมูลโดยละเอียดเพิ่มเติม โปรดสแกนโค้ด QR ด้านล่างเพื่อติดตามและคลิก [การสื่อสารชุมชน -> บริการสมาชิกระดับ Elite] ในแถบเมนู :
หากคุณมีคำถามใดๆ ในระหว่างกระบวนการใช้ VeighNa สำหรับการพัฒนาขั้นที่สอง (กลยุทธ์ โมดูล ฯลฯ) โปรดตรวจสอบ เอกสารประกอบโครงการ VeighNa หากคุณไม่สามารถแก้ไขปัญหาได้ โปรดไปที่ส่วน [ถามและช่วยเหลือ] ของ เจ้าหน้าที่ ฟอรัมชุมชน เพื่อขอความช่วยเหลือ คุณยังยินดีต้อนรับสู่ [การแบ่งปันประสบการณ์] แบ่งปันประสบการณ์ของคุณโดยใช้ส่วนนี้!
ต้องการข้อมูลเพิ่มเติมเกี่ยวกับ VeighNa หรือไม่? โปรดสแกนโค้ด QR ด้านล่างเพื่อเพิ่มผู้ช่วยเพื่อเข้าร่วม [กลุ่มการสื่อสารชุมชน VeighNa WeChat]:
แพลตฟอร์มการซื้อขายเชิงปริมาณแบบมัลติฟังก์ชั่น (Trader) ซึ่งรวมอินเทอร์เฟซการซื้อขายที่หลากหลาย และมอบ API ที่เรียบง่ายและใช้งานง่ายสำหรับอัลกอริธึมกลยุทธ์เฉพาะและการพัฒนาฟังก์ชัน เพื่อสร้างแอปพลิเคชันการซื้อขายเชิงปริมาณอย่างรวดเร็วตามที่เทรดเดอร์ต้องการ
อินเทอร์เฟซการซื้อขาย (เกตเวย์) ครอบคลุมผลิตภัณฑ์การซื้อขายต่อไปนี้ที่เป็นเจ้าของในประเทศและต่างประเทศ:
ตลาดภายในประเทศ
CTP (ctp): ฟิวเจอร์สในประเทศและตัวเลือก
CTP Mini (มินิ): ฟิวเจอร์สในประเทศและตัวเลือก
หลักทรัพย์ CTP (sopt): ตัวเลือก ETF
Femas: อนาคตภายในประเทศ
Hang Seng UFT (uft): ฟิวเจอร์สในประเทศ, ตัวเลือก ETF
esunny: ฟิวเจอร์สในประเทศ, ทองคำ TD
Apex Feichuang (วินาที): ตัวเลือก ETF
จุดสุดยอด HTS (hts): ตัวเลือก ETF
Zhongtai XTP (xtp): หลักทรัพย์ในประเทศ (หุ้น A), ตัวเลือก ETF
Huaxin Singularity (tora): หลักทรัพย์ในประเทศ (หุ้น A), ตัวเลือก ETF
Guotai Junan (hft): หลักทรัพย์ในประเทศ (หุ้น A, บริการทางการเงิน)
Topix OST (ost): หลักทรัพย์ในประเทศ (หุ้น A)
Oriental Fortune EMT (emt): หลักทรัพย์ในประเทศ (หุ้น A)
Flying Squirrel (sgit): TD ทอง, ฟิวเจอร์สในประเทศ
ksgold: โกลด์ TD
การจัดการสินทรัพย์ Lei Xing (lstar): การจัดการสินทรัพย์ฟิวเจอร์ส
Rohon: การจัดการสินทรัพย์ฟิวเจอร์ส
jees: การจัดการสินทรัพย์ฟิวเจอร์ส
จงฮุย ยี่ต้า (comstar): ตลาดระหว่างธนาคาร
นักเก็ต (gm): หลักทรัพย์ในประเทศ (จำลอง)
Hang Seng Cloud UF (uf): หลักทรัพย์ในประเทศ (จำลอง)
TTS (tts): ฟิวเจอร์สในประเทศ (จำลอง)
ตลาดต่างประเทศ
Interactive Brokers (ib): หลักทรัพย์ในต่างประเทศ ฟิวเจอร์ส ออปชั่น โลหะมีค่า ฯลฯ
ดิสก์ภายนอก Yisheng 9.0 (แตะ): ฟิวเจอร์สต่างประเทศ
ไดเร็คฟิวเจอร์ส (da): ฟิวเจอร์สต่างประเทศ
แอปพลิเคชั่นพิเศษ
ราคา RQData (rqdata): ราคาแบบเรียลไทม์ในตลาดต่างๆ (หุ้น, ดัชนี, ETF, ฟิวเจอร์ส)
ราคาของ Xun Touyan (xt): ราคาเสนอแบบเรียลไทม์ในตลาดต่างๆ (หุ้น, ดัชนี, พันธบัตรแปลงสภาพ, ETF, ฟิวเจอร์ส, ออปชั่น)
บริการ RPC (rpc): อินเทอร์เฟซการสื่อสารข้ามกระบวนการสำหรับสถาปัตยกรรมแบบกระจาย
แอปพลิเคชันการซื้อขาย (แอป) ครอบคลุมกลยุทธ์เชิงปริมาณประเภทต่อไปนี้:
cta_strategy: โมดูลกลไกกลยุทธ์ CTA ในขณะที่ยังคงใช้งานง่าย ช่วยให้ผู้ใช้ดำเนินการควบคุมอย่างละเอียดเกี่ยวกับพฤติกรรมการรายงานและการถอนที่ได้รับมอบหมายในระหว่างการดำเนินการของกลยุทธ์ CTA (ลดการเลื่อนหลุดของธุรกรรมและใช้กลยุทธ์ความถี่สูง)
cta_backtester: โมดูล backtest กลยุทธ์ CTA โดยไม่ต้องใช้ Jupyter Notebook จะใช้อินเทอร์เฟซแบบกราฟิกโดยตรงเพื่อทำการวิเคราะห์ backtest กลยุทธ์ การเพิ่มประสิทธิภาพพารามิเตอร์ และงานอื่นๆ ที่เกี่ยวข้อง
Spread_trading: โมดูลการซื้อขายแบบกระจาย รองรับสเปรดแบบกำหนดเอง การคำนวณราคาและสถานะสเปรดแบบเรียลไทม์ รองรับการซื้อขายอัลกอริธึมสเปรดและโหมดกลยุทธ์สเปรดอัตโนมัติ
option_master: โมดูลการซื้อขายออปชั่น ออกแบบมาสำหรับตลาดออปชั่นในประเทศ รองรับโมเดลการกำหนดราคาออปชั่นหลายรูปแบบ การคำนวณพื้นผิวความผันผวนโดยนัย การติดตามความเสี่ยงด้านมูลค่ากรีก และฟังก์ชันอื่นๆ
Portfolio_strategy: โมดูลกลยุทธ์พอร์ตโฟลิโอสำหรับกลยุทธ์เชิงปริมาณ (อัลฟ่า การเก็งกำไรออปชั่น ฯลฯ) ที่ซื้อขายสัญญาหลายฉบับพร้อมกัน ให้การทดสอบย้อนหลังข้อมูลในอดีตและฟังก์ชันการซื้อขายอัตโนมัติแบบเรียลไทม์
algo_trading: โมดูลการซื้อขายอัลกอริทึม นำเสนออัลกอริธึมการซื้อขายอัจฉริยะที่ใช้กันทั่วไปที่หลากหลาย: TWAP, Sniper, Iceberg, BestLimit ฯลฯ
script_trader: โมดูลกลยุทธ์สคริปต์ ออกแบบมาสำหรับกลยุทธ์เชิงปริมาณหลายมาตรฐานและงานการคำนวณ นอกจากนี้ยังสามารถใช้ธุรกรรมในรูปแบบของคำสั่ง REPL บนบรรทัดคำสั่ง มันไม่รองรับการทดสอบย้อนกลับ
paper_account: โมดูลการจำลองท้องถิ่น ฟังก์ชันการซื้อขายจำลองเฉพาะท้องถิ่น การจับคู่ที่ได้รับความไว้วางใจตามเงื่อนไขตลาดแบบเรียลไทม์ที่ได้รับจากอินเทอร์เฟซการซื้อขาย และมาพร้อมกับบันทึกธุรกรรมและตำแหน่งที่ได้รับมอบหมาย
chart_wizard: โมดูลกราฟ K-line ซึ่งรับข้อมูลในอดีตตามบริการข้อมูล RQData (ฟิวเจอร์ส) หรืออินเทอร์เฟซการซื้อขาย และแสดงการเปลี่ยนแปลงของตลาดแบบเรียลไทม์รวมกับ Tick push
Portfolio_manager: โมดูลการจัดการพอร์ตโฟลิโอการซื้อขายซึ่งอิงตามพอร์ตโฟลิโอการซื้อขายเชิงกลยุทธ์อิสระ (บัญชีย่อย) ให้การจัดการบันทึกธุรกรรมที่ได้รับมอบหมาย การติดตามสถานะการซื้อขายอัตโนมัติ และสถิติแบบเรียลไทม์ของผลกำไรและขาดทุนรายวัน
rpc_service: โมดูลบริการ RPC ซึ่งช่วยให้กระบวนการบางอย่างสามารถเริ่มต้นได้ในฐานะเซิร์ฟเวอร์ เนื่องจากเป็นตลาดแบบครบวงจรและช่องทางการกำหนดเส้นทางธุรกรรม จึงอนุญาตให้ไคลเอนต์หลายรายเชื่อมต่อพร้อมกันเพื่อใช้ระบบกระจายแบบหลายกระบวนการ
data_manager: โมดูลการจัดการข้อมูลในอดีต ดูภาพรวมข้อมูลที่มีอยู่ในฐานข้อมูลผ่านไดเร็กทอรีแบบต้นไม้ เลือกข้อมูลในช่วงเวลาใดก็ได้เพื่อดูรายละเอียดฟิลด์ รองรับการนำเข้าข้อมูลและส่งออกไฟล์ CSV
data_recorder: โมดูลการบันทึกตลาด กำหนดค่าตามอินเทอร์เฟซแบบกราฟิก บันทึกสภาวะตลาด Tick หรือ K-line แบบเรียลไทม์ไปยังฐานข้อมูลตามความต้องการ สำหรับการทดสอบกลยุทธ์ย้อนหลังหรือการเริ่มต้นตลาดจริง
excel_rtd: บริการข้อมูลแบบเรียลไทม์ของ Excel RTD (ข้อมูลเรียลไทม์) อิงตามโมดูล pyxll เพื่อรับการอัปเดตแบบพุชแบบเรียลไทม์ของข้อมูลต่างๆ (ตลาด สัญญา ตำแหน่ง ฯลฯ) ใน Excel
Risk_manager: โมดูลการจัดการความเสี่ยง ซึ่งให้ข้อมูลสถิติและข้อจำกัดเกี่ยวกับการควบคุมโฟลว์ธุรกรรม ปริมาณการสั่งซื้อ การมอบหมายกิจกรรม จำนวนการยกเลิกคำสั่งซื้อทั้งหมด และกฎอื่นๆ ทำให้ทราบถึงฟังก์ชันการควบคุมความเสี่ยงส่วนหน้าได้อย่างมีประสิทธิภาพ
web_trader: โมดูลบริการเว็บ ออกแบบมาสำหรับข้อกำหนดสถาปัตยกรรม BS ใช้เว็บเซิร์ฟเวอร์ที่ให้การเรียกใช้ฟังก์ชันที่ใช้งาน (REST) และการพุชข้อมูลแบบพาสซีฟ (Websocket)
การห่อหุ้มอินเทอร์เฟซ API ของธุรกรรม Python (api) จัดเตรียมการใช้งานการเชื่อมต่อพื้นฐานของอินเทอร์เฟซธุรกรรมข้างต้น
ไคลเอนต์ REST (ส่วนที่เหลือ): ไคลเอนต์ REST API ประสิทธิภาพสูงที่ใช้ IO แบบอะซิงโครนัส coroutine โดยใช้โมเดลการเขียนโปรแกรมลูปข้อความเหตุการณ์เพื่อรองรับการส่งคำขอธุรกรรมแบบเรียลไทม์ที่ทำงานพร้อมกันสูง
Websocket Client (websocket): ไคลเอนต์ Websocket API ประสิทธิภาพสูงที่ใช้ coroutine asynchronous IO ซึ่งรองรับการรันลูปเหตุการณ์ที่แชร์พร้อมกันกับ REST Client
เอ็นจิ้นที่ขับเคลื่อนด้วยเหตุการณ์ที่เรียบง่ายและใช้งานง่าย (เหตุการณ์) ทำหน้าที่เป็นแกนหลักของโปรแกรมการซื้อขายที่ขับเคลื่อนด้วยเหตุการณ์
อินเทอร์เฟซอะแดปเตอร์สำหรับเชื่อมต่อฐานข้อมูลต่างๆ (ฐานข้อมูล):
คลาส SQL
SQLite (sqlite): ฐานข้อมูลไฟล์เดียวน้ำหนักเบา ไม่จำเป็นต้องติดตั้งและกำหนดค่าโปรแกรมบริการข้อมูล ตัวเลือกเริ่มต้นของ VeighNa เหมาะสำหรับผู้ใช้มือใหม่
MySQL (mysql): ฐานข้อมูลเชิงสัมพันธ์แบบโอเพ่นซอร์สกระแสหลักพร้อมเอกสารประกอบที่หลากหลายมาก และสามารถแทนที่การใช้งานอื่นๆ ที่เข้ากันได้กับ NewSQL (เช่น TiDB)
PostgreSQL (postgresql): ฐานข้อมูลเชิงสัมพันธ์แบบโอเพ่นซอร์สพร้อมคุณสมบัติที่สมบูรณ์ยิ่งขึ้น รองรับฟังก์ชันใหม่ผ่านปลั๊กอินส่วนขยาย ขอแนะนำสำหรับผู้ใช้ที่มีประสบการณ์เท่านั้น
คลาส NoSQL
DolphinDB (dolphindb): ฐานข้อมูลอนุกรมเวลาแบบกระจายประสิทธิภาพสูง เหมาะสำหรับงานที่มีความหน่วงต่ำหรืองานเรียลไทม์ที่มีความต้องการความเร็วสูงมาก
Arctic (อาร์กติก): ฐานข้อมูลอนุกรมเวลาทางการเงินประสิทธิภาพสูงที่ใช้โซลูชันการเพิ่มประสิทธิภาพ เช่น Block Storage และการบีบอัด LZ4 เพื่อให้การอ่านและการเขียนข้อมูลอนุกรมเวลามีประสิทธิภาพ
TDengine (taos): ฐานข้อมูลอนุกรมเวลาแบบกระจาย ประสิทธิภาพสูง และรองรับ SQL พร้อมด้วยแคชในตัว การประมวลผลแบบสตรีมมิ่ง การสมัครสมาชิกข้อมูล และฟังก์ชันระบบอื่นๆ ซึ่งสามารถลดความซับซ้อนของการวิจัยและพัฒนา ตลอดจนการดำเนินงานและการบำรุงรักษาได้อย่างมาก
TimescaleDB (timescaledb): ฐานข้อมูลอนุกรมเวลาที่พัฒนาโดยใช้ PostgreSQL ได้รับการติดตั้งเป็นส่วนขยายปลั๊กอินและรองรับการแบ่งพาร์ติชันข้อมูลอัตโนมัติตามพื้นที่และเวลา
MongoDB (mongodb): ฐานข้อมูลเอกสารตามพื้นที่จัดเก็บไฟล์แบบกระจาย (รูปแบบ bson) แคชหน่วยความจำข้อมูลร้อนในตัวให้ความเร็วในการอ่านและเขียนที่เร็วขึ้น
InfluxDB (influxdb): ฐานข้อมูลอนุกรมเวลาที่ออกแบบมาเป็นพิเศษสำหรับข้อมูล TimeSeries โดยให้ประสิทธิภาพการอ่านและเขียนที่สูงมาก และแอปพลิเคชันการวิเคราะห์อุปกรณ์ต่อพ่วง
LevelDB (leveldb): ฐานข้อมูลคีย์/ค่าประสิทธิภาพสูงที่เปิดตัวโดย Google ใช้กลไกการจัดเก็บข้อมูลในกระบวนการโดยใช้อัลกอริธึม LSM และรองรับข้อมูลขนาดใหญ่นับพันล้าน
อินเทอร์เฟซอะแดปเตอร์ (ฟีดข้อมูล) สำหรับการเชื่อมต่อบริการข้อมูลประเภทต่อไปนี้:
การวิจัยการลงทุน Xun (xt): หุ้น ฟิวเจอร์ส ทางเลือก กองทุน พันธบัตร
MiKang RQData (rqdata): หุ้น ฟิวเจอร์ส ออปชั่น กองทุน พันธบัตร ทองคำ TD
หวิงชุนปรมาจารย์ (โวลเทรดเดอร์): ฟิวเจอร์ส, ทางเลือก
Hang Seng UData (udata): หุ้น, ฟิวเจอร์ส, ออปชั่น
TuShare (tushare): หุ้น ฟิวเจอร์ส ออปชั่น กองทุน
ลม (ลม): หุ้น ฟิวเจอร์ส กองทุน พันธบัตร
Tinysoft (tinysoft): หุ้น ฟิวเจอร์ส กองทุน พันธบัตร
Flush iFinD (ifind): หุ้น ฟิวเจอร์ส กองทุน พันธบัตร
Tianqin TQSDK (tqsdk): ฟิวเจอร์ส
ส่วนประกอบมาตรฐานการสื่อสารข้ามกระบวนการ (rpc) ใช้ในการปรับใช้ระบบการซื้อขายที่ซับซ้อนพร้อมการใช้งานแบบกระจาย
แผนภูมิ K-line ประสิทธิภาพสูงของ Python รองรับการแสดงแผนภูมิปริมาณข้อมูลขนาดใหญ่และฟังก์ชันอัปเดตข้อมูลแบบเรียลไทม์
ฟอรัมชุมชนและคอลัมน์ Zhihu มีบทช่วยสอนการพัฒนาเกี่ยวกับโครงการ VeighNa และการวิจัยเกี่ยวกับการประยุกต์ใช้ Python ในด้านการซื้อขายเชิงปริมาณ
กลุ่มการสื่อสารอย่างเป็นทางการ 262656087 (QQ) ได้รับการจัดการอย่างเข้มงวด (สมาชิกที่เป็นนักดำน้ำมาเป็นเวลานานจะถูกลบออกเป็นประจำ) และค่าธรรมเนียมแรกเข้ากลุ่มจะบริจาคให้กับกองทุนชุมชน VeighNa
หมายเหตุ: คำอธิบายคุณลักษณะการทำงานข้างต้นขึ้นอยู่กับสถานการณ์ ณ เวลาที่เผยแพร่เอกสาร และอาจมีการอัปเดตหรือปรับเปลี่ยนในอนาคต หากคำอธิบายฟังก์ชันแตกต่างจากที่มีอยู่จริง โปรดติดต่อเราผ่านประเด็นเพื่อปรับเปลี่ยน
ดาวน์โหลดเวอร์ชัน Release ที่นี่ แตกไฟล์แล้วรันคำสั่งต่อไปนี้เพื่อติดตั้ง:
หน้าต่าง
install.bat
อูบุนตู
bash install.sh
มาคอส
bash install_osx.sh
หมายเหตุ: ไลบรารีที่ขึ้นต่อกันซึ่งจำเป็นสำหรับการติดตั้งเฟรมเวิร์ก VeighNa จะแสดงอยู่ใน setup.cfg และเวอร์ชันการติดตั้งที่แนะนำของไลบรารีที่ขึ้นต่อกันเหล่านี้มีให้ใน Requirement.txt
ลงทะเบียนบัญชีจำลอง CTP ที่ SimNow และรับรหัสนายหน้าและที่อยู่เซิร์ฟเวอร์ราคาซื้อขายในหน้านี้
ลงทะเบียนในฟอรัมชุมชน VeighNa เพื่อรับบัญชีและรหัสผ่านสถานี VeighNa (บัญชีฟอรัมและรหัสผ่านเหมือนกัน)
เริ่มสถานี VeighNa (ทางลัดจะถูกสร้างขึ้นโดยอัตโนมัติบนเดสก์ท็อปหลังจากติดตั้ง VeighNa Studio) ใส่บัญชีและรหัสผ่านจากขั้นตอนก่อนหน้าเพื่อเข้าสู่ระบบ
คลิกปุ่ม VeighNa Trader ที่ด้านล่างเพื่อเริ่มการซื้อขายของคุณ! - -
สังเกต:
นอกเหนือจากวิธีการเริ่มต้นระบบแบบกราฟิกโดยใช้สถานี VeighNa แล้ว คุณยังสามารถสร้าง run.py ในไดเร็กทอรีใดก็ได้และเขียนโค้ดตัวอย่างต่อไปนี้:
from vnpy . event import EventEngine
from vnpy . trader . engine import MainEngine
from vnpy . trader . ui import MainWindow , create_qapp
from vnpy_ctp import CtpGateway
from vnpy_ctastrategy import CtaStrategyApp
from vnpy_ctabacktester import CtaBacktesterApp
def main ():
"""Start VeighNa Trader"""
qapp = create_qapp ()
event_engine = EventEngine ()
main_engine = MainEngine ( event_engine )
main_engine . add_gateway ( CtpGateway )
main_engine . add_app ( CtaStrategyApp )
main_engine . add_app ( CtaBacktesterApp )
main_window = MainWindow ( main_engine , event_engine )
main_window . showMaximized ()
qapp . exec ()
if __name__ == "__main__" :
main ()
เปิด CMD ในไดเรกทอรีนี้ (กด Shift->คลิกขวาที่เมาส์ -> เปิดหน้าต่างคำสั่ง/PowerShell ที่นี่) และเรียกใช้คำสั่งต่อไปนี้เพื่อเริ่ม VeighNa Trader:
python run.py
VeighNa ใช้ Github เพื่อโฮสต์ซอร์สโค้ด หากคุณต้องการสนับสนุนโค้ด โปรดใช้กระบวนการ PR (Pull Request) ของ github:
สร้างปัญหา - สำหรับการเปลี่ยนแปลงที่ใหญ่ขึ้น (เช่น คุณสมบัติใหม่ การปรับโครงสร้างใหม่ขนาดใหญ่ ฯลฯ) ขอแนะนำให้เปิดปัญหาเพื่อหารือกันก่อน สำหรับการปรับปรุงเล็กๆ น้อยๆ (เช่น การปรับปรุงเอกสาร การแก้ไขข้อบกพร่อง ฯลฯ) ส่ง PR โดยตรง
Fork VeighNa - คลิกปุ่ม Fork ที่มุมขวาบน
โคลนส้อมของคุณเอง: git clone https://github.com/$userid/vnpy.git
สร้างสาขาคุณลักษณะของคุณเองจาก dev : git checkout -b $my_feature_branch dev
แก้ไข $my_feature_branch และพุชการเปลี่ยนแปลงไปที่ทางแยกของคุณ
สร้าง [คำขอดึง] จากสาขา $my_feature_branch ของ fork ของคุณไปยังสาขา dev ของโปรเจ็กต์หลัก - คลิก เปรียบเทียบข้ามส้อม ที่นี่ เลือกส้อมและสาขาที่ต้องการเพื่อสร้าง PR
รอการตรวจสอบ จำเป็นต้องปรับปรุงต่อไป หรือจะรวมเข้าด้วยกัน!
เมื่อส่งรหัส โปรดปฏิบัติตามกฎต่อไปนี้เพื่อปรับปรุงคุณภาพรหัส:
flake8
ในไดเร็กทอรีรูทของโปรเจ็กต์ เอ็มไอที