การเขียนโปรแกรมภาษา ที่ดีที่สุด สำหรับ ขั้นตอน ระบบการซื้อขาย




การเขียนโปรแกรมภาษาที่ดีที่สุดสำหรับขั้นตอนระบบการซื้อขาย? โดยไมเคิลฮอลล์มัวร์เมื่อวันที่ 26 กรกฎาคม 2013 หนึ่งในคำถามที่พบบ่อยที่สุดที่ฉันได้รับในกระเฺป๋าไปรษณีย์ QS คือ "อะไรคือสิ่งที่ภาษาการเขียนโปรแกรมที่ดีที่สุดสำหรับการซื้อขายอัลกอริทึม?" คำตอบสั้น ๆ ว่าไม่มี "ดีที่สุด" ภาษา พารามิเตอร์กลยุทธ์, การทำงาน, ต้นแบบการพัฒนาความยืดหยุ่นและค่าใช้จ่ายทั้งหมดจะต้องได้รับการพิจารณา บทความนี้จะร่างองค์ประกอบที่จำเป็นของสถ​​าปัตยกรรมระบบการซื้อขายขั้นตอนและวิธีการดำเนินการตัดสินใจเกี่ยวกับผลต่อการเลือกภาษา ประการแรกองค์ประกอบที่สำคัญของระบบการซื้อขายอัลกอริทึมจะได้รับการพิจารณาเช่นเครื่องมือการวิจัยการเพิ่มประสิทธิภาพผลงานผู้จัดการความเสี่ยงและการดำเนินการของเครื่องมือ ต่อมากลยุทธ์การซื้อขายที่แตกต่างกันจะได้รับการตรวจสอบและวิธีที่พวกเขาส่งผลกระทบต่อการออกแบบของระบบ โดยเฉพาะอย่างยิ่งความถี่ของการซื้อขายและปริมาณการซื้อขายมีแนวโน้มที่จะมีการหารือทั้งสอง เมื่อกลยุทธ์การซื้อขายได้รับเลือกก็มีความจำเป็นต้องสถาปนิกทั้งระบบ ซึ่งรวมถึงทางเลือกของฮาร์ดแวร์ระบบปฏิบัติการ (s) และความยืดหยุ่นของระบบกับหายากเหตุการณ์ภัยพิบัติที่อาจเกิดขึ้น ในขณะที่สถาปัตยกรรมจะถูกพิจารณาทั้งนี้โดยคำนึงจะต้องจ่ายให้ประสิทธิภาพ - ทั้งเพื่อเป็นเครื่องมือในการวิจัยเช่นเดียวกับสภาพแวดล้อมการดำเนินการถ่ายทอดสด สิ่งที่เป็นระบบการซื้อขายพยายามที่จะทำอะไร? ก่อนที่จะตัดสินใจที่ "ดีที่สุด" ภาษาที่จะเขียนระบบการซื้อขายอัตโนมัติมันเป็นสิ่งจำเป็นในการกำหนดความต้องการ เป็นระบบจะต้องดำเนินการอย่างหมดจดตาม? จะต้องมีระบบการบริหารความเสี่ยงหรือโมดูลก่อสร้างผลงาน? ระบบจะต้องมี backtester ประสิทธิภาพสูง? สำหรับกลยุทธ์ระบบการซื้อขายมากที่สุดที่สามารถแบ่งออกเป็นสองประเภท: วิจัยและสัญญาณรุ่น การวิจัยที่เกี่ยวข้องกับการประเมินผลการดำเนินงานกลยุทธ์มากกว่าข้อมูลทางประวัติศาสตร์ กระบวนการของการประเมินกลยุทธ์การซื้อขายในช่วงก่อนที่ข้อมูลการตลาดที่เป็นที่รู้จักกัน backtesting ขนาดและความซับซ้อนของข้อมูลอัลกอริทึมจะมีผลกระทบอย่างมากต่อความเข้มของการคำนวณของ backtester ความเร็ว CPU และการทำงานพร้อมกันมักจะเป็นปัจจัยที่ จำกัด ในการเพิ่มประสิทธิภาพการดำเนินงานวิจัยความเร็ว รุ่นสัญญาณที่เกี่ยวข้องกับการสร้างชุดของสัญญาณซื้อขายจากอัลกอริทึมและการส่งคำสั่งดังกล่าวไปยังตลาดที่มักจะผ่านนายหน้า สำหรับกลยุทธ์บางอย่างในระดับสูงของประสิทธิภาพการทำงานที่จำเป็นต้องมี I / O ประเด็นต่าง ๆ เช่นแบนด์วิธเครือข่ายและแฝงมักจะเป็นปัจจัยในการเพิ่มประสิทธิภาพระบบการดำเนินการ ดังนั้นทางเลือกของภาษาสำหรับองค์ประกอบของระบบทั้งหมดของคุณแต่ละคนอาจจะแตกต่างกันมาก ประเภทความถี่และปริมาณของกลยุทธ์ ประเภทของกลยุทธ์ขั้นตอนการจ้างงานจะมีผลกระทบอย่างมีนัยสำคัญในการออกแบบของระบบ มันจะมีความจำเป็นที่จะต้องพิจารณาตลาดการซื้อขายการเชื่อมต่อไปยังผู้ขายข้อมูลภายนอกความถี่และปริมาณของกลยุทธ์การค้าออกระหว่างความสะดวกในการพัฒนาและการเพิ่มประสิทธิภาพการปฏิบัติเช่นเดียวกับฮาร์ดแวร์ที่กำหนดเองใด ๆ รวมทั้งร่วมอยู่ที่กำหนดเอง เซิร์ฟเวอร์ GPUs หรือ FPGAs ที่อาจจะมีความจำเป็น เทคโนโลยีทางเลือกสำหรับกลยุทธ์ความถี่ต่ำหุ้นสหรัฐจะเป็นอย่างมากมายแตกต่างจากผู้ที่มีความถี่สูงซื้อขายกลยุทธ์การเก็งกำไรทางสถิติในตลาดฟิวเจอร์ส ก่อนที่จะมีทางเลือกของหลายภาษาผู้ขายข้อมูลจะต้องได้รับการประเมินที่เกี่ยวข้องกับกลยุทธ์ที่อยู่ในมือ มันจะมีความจำเป็นที่จะต้องพิจารณาการเชื่อมต่อไปยังผู้ขายโครงสร้างของ API ใด ๆ ทันเวลาของข้อมูลที่ต้องการจัดเก็บข้อมูลและความยืดหยุ่นในการเผชิญกับผู้ขายจะเป็นแบบออฟไลน์ นอกจากนี้ยังควรที่จะมีการเข้าถึงอย่างรวดเร็วไปยังผู้ขายหลาย! เครื่องมือต่าง ๆ ทุกคนมีนิสัยใจคอการจัดเก็บข้อมูลของตัวเองตัวอย่างแห่งซึ่งรวมถึงสัญลักษณ์หลายตราสารทุนและวันหมดอายุสำหรับฟิวเจอร์ส (ไม่พูดถึงข้อมูลที่เฉพาะเจาะจงใด ๆ OTC) นี้จะต้องมีปัจจัยในการออกแบบแพลตฟอร์ม ความถี่ของกลยุทธ์การมีแนวโน้มที่จะเป็นหนึ่งในคนขับรถที่ใหญ่ที่สุดของวิธีการที่สแต็คเทคโนโลยีจะถูกกำหนด กลยุทธ์การจ้างข้อมูลบ่อยกว่านาทีหรือประการที่สองบาร์ต้องมีการพิจารณาอย่างมีนัยสำคัญเกี่ยวกับผลการดำเนินงาน กลยุทธ์เกินประการที่สองบาร์ (เช่นข้อมูลติ๊ก) นำไปสู่​​การออกแบบที่มีประสิทธิภาพการขับเคลื่อนเป็นความต้องการหลัก สำหรับกลยุทธ์ที่มีความถี่สูงจำนวนมากของข้อมูลการตลาดจะต้องมีการจัดเก็บและการประเมินผล ซอฟแวร์เช่น HDF5 หรือ KDB + มักใช้สำหรับบทบาทเหล่านี้ เพื่อดำเนินการปริมาณที่กว้างขวางของข้อมูลที่จำเป็นสำหรับการใช้งาน HFT การเพิ่มประสิทธิภาพอย่างกว้างขวาง backtester และการดำเนินการระบบจะต้องนำมาใช้ C / C ++ (อาจจะมีบางส่วนประกอบ) มีแนวโน้มที่จะเป็นผู้สมัครที่แข็งแกร่งภาษา กลยุทธ์ความถี่สูงพิเศษเกือบจะแน่นอนจะต้องใช้ฮาร์ดแวร์ที่กำหนดเองเช่น FPGAs แลกเปลี่ยน co-location และ kernal / จูนเชื่อมต่อเครือข่าย ระบบวิจัย ระบบการวิจัยมักจะเกี่ยวข้องกับการพัฒนาส่วนผสมของการโต้ตอบและการเขียนสคริปต์อัตโนมัติ อดีตมักจะเกิดขึ้นภายใน IDE เช่น Visual Studio, MatLab หรือ R สตูดิโอ หลังที่เกี่ยวข้องกับการคำนวณตัวเลขที่กว้างขวางมากกว่าพารามิเตอร์จำนวนมากและจุดข้อมูล นี้นำไปสู่​​ทางเลือกภาษาให้สภาพแวดล้อมที่ตรงไปตรงมารหัสการทดสอบ แต่ยังมีประสิทธิภาพเพียงพอที่จะประเมินกลยุทธ์มากกว่าพารามิเตอร์หลายมิติ IDEs ทั่วไปในพื้นที่นี้รวมถึง Microsoft Visual c ++ / C # ซึ่งมีสาธารณูปโภคการแก้จุดบกพร่องที่ครอบคลุมและมีความสามารถในการจบรหัส (ผ่าน "Intellisense") และภาพรวมตรงไปตรงมาของกองโครงการทั้งหมด (ผ่านการออมฐานข้อมูล LINQ); MatLab ซึ่งถูกออกแบบมาสำหรับพีชคณิตเชิงเส้นที่กว้างขวางตัวเลขและการดำเนินงาน vectorised แต่ในลักษณะที่คอนโซลโต้ตอบ; สตูดิโออาร์ ซึ่งตัดคอนโซลภาษา R สถิติใน IDE ที่เต็มเปี่ยม; Eclipse IDE สำหรับ Linux Java และ C ++; และ IDEs กึ่งกรรมสิทธิ์เช่น Enthought หลังคาสำหรับหลามซึ่งรวมถึงการวิเคราะห์ข้อมูลห้องสมุดเช่น NumPy SciPy scikit เรียนรู้และหมีแพนด้าในการโต้ตอบเดียว (คอนโซล) สภาพแวดล้อม สำหรับ backtesting ตัวเลขทั้งหมดของภาษาดังกล่าวข้างต้นมีความเหมาะสมแม้ว่ามันจะไม่จำเป็นที่จะต้องใช้ GUI / IDE เป็นรหัสจะถูกดำเนินการ "ในพื้นหลัง" การพิจารณาที่สำคัญในขั้นตอนนี้คือการดำเนินการของความเร็ว ภาษารวบรวม (เช่น C ++) มักจะเป็นประโยชน์ถ้าขนาด backtesting พารามิเตอร์ที่มีขนาดใหญ่ โปรดจำไว้ว่ามันเป็นสิ่งจำเป็นที่จะต้องระวังระบบดังกล่าวถ้าเป็นกรณีที่! แปลภาษาเช่นงูใหญ่มักจะทำให้การใช้งานของห้องสมุดที่มีประสิทธิภาพสูงเช่น NumPy / หมีแพนด้าสำหรับขั้นตอน backtesting เพื่อที่จะรักษาระดับที่เหมาะสมของการแข่งขันที่มีการรวบรวมเทียบเท่า ในท้ายที่สุดภาษาที่เลือกสำหรับ backtesting ที่จะถูกกำหนดโดยความต้องการของอัลกอริทึมที่เฉพาะเจาะจงเช่นเดียวกับช่วงของห้องสมุดที่มีอยู่ในภาษา (เพิ่มเติมว่าด้านล่าง) แต่ภาษาที่ใช้สำหรับ backtester และสภาพแวดล้อมการวิจัยสามารถเป็นอิสระอย่างสมบูรณ์ของผู้ใช้ในการก่อสร้างผลงานการบริหารความเสี่ยงและส่วนประกอบการดำเนินการตามที่จะเห็น ผลงานการก่อสร้างและการบริหารความเสี่ยง ผลงานการก่อสร้างและส่วนประกอบการบริหารความเสี่ยงมักจะมองข้ามโดยผู้ค้าปลีกอัลกอริทึม นี้มักจะผิดพลาด เครื่องมือเหล่านี้มีกลไกที่เงินทุนจะได้รับการเก็บรักษาไว้ พวกเขาไม่เพียงความพยายามที่จะลดจำนวนของการเดิมพัน "ความเสี่ยง" แต่ยังลดการปั่นของธุรกิจการค้าของตัวเองลดต้นทุนการทำธุรกรรม รุ่นที่มีความซับซ้อนขององค์ประกอบเหล่านี้จะมีผลอย่างมีนัยสำคัญกับคุณภาพและการทำกำไร consistentcy มันเป็นเรื่องง่ายที่จะสร้างความมั่นคงของกลยุทธ์การเป็นกลไกในการก่อสร้างผลงานและผู้จัดการความเสี่ยงที่สามารถได้รับการแก้ไขที่จะจัดการกับระบบต่างๆ ดังนั้นพวกเขาควรจะได้รับการพิจารณาองค์ประกอบที่สำคัญเริ่มแรกของการออกแบบของระบบซื้อขายอัลกอริทึมที่ งานของระบบการก่อสร้างผลงานคือการใช้ชุดของการซื้อขายที่ต้องการและผลิตชุดของการซื้อขายที่เกิดขึ้นจริงที่ลดปั่นรักษาความเสี่ยงปัจจัยต่างๆ (เช่นภาคสินทรัพย์ ฯลฯ ผันผวน) และเพิ่มประสิทธิภาพการจัดสรรเงินทุนเพื่อต่างๆ กลยุทธ์ในการลงทุน ผลงานการก่อสร้างมักจะลดปัญหาพีชคณิตเชิงเส้น (เช่น factorisation เมทริกซ์) และประสิทธิภาพการทำงานเป็นอย่างมากจึงขึ้นอยู่กับประสิทธิภาพของพีชคณิตเชิงเส้นเชิงตัวเลขการดำเนินงานที่มีอยู่ ห้องสมุดที่พบบ่อย ได้แก่ uBLAS LAPACK และจู้จี้สำหรับ C ++ MatLab ยังมีการเพิ่มประสิทธิภาพการดำเนินงานอย่างกว้างขวางเมทริกซ์ งูหลามใช้ NumPy / SciPy สำหรับการคำนวณดังกล่าว ผลงานที่พบบ่อยปรับสมดุลจะต้องมีการรวบรวม (และดีที่สุด!) ห้องสมุดเมทริกซ์ที่จะดำเนินการขั้นตอนนี้ออกมาเพื่อที่จะไม่คอขวดระบบการซื้อขาย การบริหารความเสี่ยงเป็นอีกส่วนหนึ่งที่สำคัญมากของระบบซื้อขายอัลกอริทึม ความเสี่ยงสามารถมาในหลายรูปแบบ: ความผันผวนที่เพิ่มขึ้น (! แม้ว่านี้อาจจะเห็นเป็นที่พึงประสงค์สำหรับกลยุทธ์บางอย่าง) เพิ่มขึ้นความสัมพันธ์ระหว่างสินทรัพย์เริ่มต้นนับเป็นบุคคลที่ขาดเซิร์ฟเวอร์ "Black Swan" เหตุการณ์ที่เกิดขึ้นและข้อบกพร่องที่ตรวจไม่พบในรหัสซื้อขาย เพื่อชื่อไม่กี่ องค์ประกอบการบริหารความเสี่ยงและพยายามคาดว่าจะมีผลกระทบจากความผันผวนมากเกินไปและความสัมพันธ์ระหว่างสินทรัพย์และผลกระทบที่ตามมาของพวกเขา (s) ในเมืองหลวงซื้อขาย บ่อยครั้งนี้จะช่วยลดการชุดของการคำนวณทางสถิติเช่น Monte Carlo "การทดสอบความเครียด" นี้จะคล้ายกับความต้องการการคำนวณของเครื่องยนต์การกำหนดราคาสัญญาซื้อขายล่วงหน้าและเป็นเช่นนี้จะเป็น CPU ผูกพัน แบบจำลองเหล่านี้เป็น parallelisable สูง (ดูด้านล่าง) และในระดับหนึ่งก็เป็นไปได้ที่จะ "โยนฮาร์ดแวร์ที่ปัญหา" ระบบการดำเนินการ การทำงานของระบบการดำเนินการคือการรับสัญญาณซื้อขายกรองผลงานจากการก่อสร้างและส่วนประกอบการบริหารความเสี่ยงและส่งพวกเขาไปยังนายหน้าซื้อขายหลักทรัพย์หรือวิธีการอื่นในการเข้าถึงตลาด สำหรับส่วนใหญ่ของกลยุทธ์การซื้อขายอัลกอริทึมค้าปลีกนี้เกี่ยวข้องกับการเชื่อมต่อ API หรือการแก้ไขไปยังนายหน้าซื้อขายหลักทรัพย์เช่นโบรกเกอร์ Interactive การพิจารณาหลักเมื่อตัดสินใจเมื่อภาษารวมถึงคุณภาพของ API ที่ว่างภาษาห่อสำหรับ API ความถี่การดำเนินการและคาดว่าจะเลื่อนหลุด "คุณภาพ" ของ API หมายถึงวิธีการที่เอกสารที่ดีมันเป็นสิ่งที่จัดเรียงของประสิทธิภาพการทำงานจะให้ไม่ว่าจะเป็นความต้องการซอฟต์แวร์แบบสแตนด์อโลนที่จะเข้าถึงหรือไม่ว่าประตูสามารถจะจัดตั้งขึ้นในแฟชั่นหัวขาด (เช่นไม่มี GUI) ในกรณีที่โบรกเกอร์โต้ตอบเครื่องมือ WorkStation ผู้ซื้อขายจะต้องมีการทำงานในสภาพแวดล้อม GUI เพื่อให้สามารถเข้าถึง API ของพวกเขา ผมเคยมีการติดตั้งรุ่นอูบุนตูสก์ท็อปบนเซิร์ฟเวอร์เมฆ Amazon ในการเข้าถึงอินเตอร์แอคทีโบรกเกอร์จากระยะไกลได้อย่างหมดจดด้วยเหตุนี้! APIs ส่วนใหญ่จะให้ C ++ และ / หรืออินเตอร์เฟซ Java มันมักจะขึ้นให้กับชุมชนในการพัฒนาห่อภาษาเฉพาะสำหรับ C #, Python, R, Excel และ MatLab โปรดสังเกตว่าทุกครั้งที่ใช้ปลั๊กอินเพิ่มเติม (โดยเฉพาะห่อ API) มีขอบเขตสำหรับข้อผิดพลาดที่จะเล็ดลอดเข้ามาในระบบ เสมอปลั๊กอินทดสอบของการจัดเรียงนี้และให้แน่ใจว่าจะเก็บรักษาไว้อย่างแข็งขัน มาตรวัดที่คุ้มค่าคือการดูจำนวนการปรับปรุงใหม่เพื่อ codebase ได้รับการทำในเดือนที่ผ่านมา ความถี่ในการดำเนินการมีความสำคัญสูงสุดในขั้นตอนวิธีการดำเนินการ โปรดทราบว่าหลายร้อยของการสั่งซื้ออาจถูกส่งไปทุกนาทีและในขณะที่ผลการดำเนินงานดังกล่าวเป็นสิ่งสำคัญ เลื่อนหลุดจะเกิดขึ้นผ่านระบบการดำเนินการที่มีประสิทธิภาพไม่ดีและจะมีผลกระทบอย่างมากในการทำกำไร ภาษาแบบคงที่พิมพ์ (ดูด้านล่าง) เช่น C ++ / Java มักจะมีที่ดีที่สุดสำหรับการดำเนินการ แต่มีการออกในเวลาในการพัฒนาการทดสอบและความสะดวกในการบำรุงรักษา แบบไดนามิกพิมพ์ภาษาเช่นงูหลามและ Perl อยู่ในขณะนี้โดยทั่วไป "เร็วพอ" เสมอให้แน่ใจว่าองค์ประกอบที่ได้รับการออกแบบในแฟชั่นแบบแยกส่วน (ดูด้านล่าง) เพื่อให้พวกเขาสามารถ "สลับออก" ออกมาเป็นเครื่องชั่งระบบ สถาปัตยกรรมและการวางแผนการพัฒนากระบวนการ ส่วนประกอบของระบบการซื้อขายความถี่และความต้องการปริมาณที่ได้รับการกล่าวถึงข้างต้น แต่ระบบโครงสร้างพื้นฐานที่ยังไม่ได้รับการคุ้มครอง ผู้ที่ทำหน้าที่เป็นผู้ประกอบการค้าปลีกหรือการทำงานในกองทุนรวมที่มีขนาดเล็กมีแนวโน้มที่จะได้รับการ "สวมหมวกหลายคน" มันจะจำเป็นที่จะต้องครอบคลุมรูปแบบอัลฟา, การบริหารความเสี่ยงและพารามิเตอร์การดำเนินการและยังดำเนินงานขั้นสุดท้ายของระบบ ก่อน delving เป็นภาษาเฉพาะของการออกแบบสถาปัตยกรรมระบบที่ดีที่สุดจะมีการหารือ ความกังวลเกี่ยวกับการแยก หนึ่งในการตัดสินใจที่สำคัญที่สุดที่จะต้องทำในตอนแรกเป็นวิธีการ "แยกความกังวล" ของระบบการซื้อขาย ในการพัฒนาซอฟต์แวร์นี้เป็นหลักหมายถึงวิธีการที่จะเลิกด้านต่างๆของระบบการซื้อขายแบบแยกส่วนเป็นส่วนประกอบที่แยกต่างหาก โดยการเปิดเผยการเชื่อมต่อในแต่ละองค์ประกอบมันเป็นเรื่องง่ายที่จะสลับออกชิ้นส่วนของระบบสำหรับรุ่นอื่น ๆ ที่ผลการดำเนินงานช่วยเหลือน่าเชื่อถือหรือการบำรุงรักษาโดยไม่ต้องแก้ไขรหัสการพึ่งพาภายนอกใด ๆ นี่คือ "การปฏิบัติที่ดีที่สุด" สำหรับระบบดังกล่าว สำหรับกลยุทธ์ที่ความถี่ต่ำปฏิบัติดังกล่าวจะได้รับคำแนะนำ สำหรับการซื้อขายความถี่สูงเป็นพิเศษอาจจะมีกฎหมายที่จะละเลยที่ค่าใช้จ่ายในการปรับเปลี่ยนระบบให้มีประสิทธิภาพมากยิ่งขึ้น ระบบควบคู่แน่นมากขึ้นอาจจะเป็นที่น่าพอใจ สร้างแผนที่องค์ประกอบของระบบการซื้อขายอัลกอริทึมที่มีมูลค่าบทความในตัวเอง แต่ที่ดีที่สุดวิธีการคือการทำให้แน่ใจว่ามีส่วนประกอบที่แยกต่างหากสำหรับตลาดทางประวัติศาสตร์และเวลาจริงปัจจัยการผลิตข้อมูลการจัดเก็บข้อมูลการเข้าถึงข้อมูล API, backtester พารามิเตอร์กลยุทธ์การก่อสร้างผลงานการบริหารความเสี่ยงและระบบการดำเนินการโดยอัตโนมัติ ตัวอย่างเช่นถ้าการจัดเก็บข้อมูลที่มีการใช้งานอยู่ในขณะนี้ผลการดำเนินงานแม้ในระดับที่มีนัยสำคัญของการเพิ่มประสิทธิภาพก็สามารถสลับออกมาพร้อมกับปรับเปลี่ยนน้อยที่สุดกับการบริโภคข้อมูลหรือการเข้าถึงข้อมูล API เท่าที่เป็น backtester และส่วนประกอบที่ตามมามีความกังวลไม่มีความแตกต่าง ประโยชน์ของการแยกส่วนประกอบก็คือว่ามันจะช่วยให้ความหลากหลายของการเขียนโปรแกรมภาษาที่จะใช้ในระบบโดยรวม ไม่จำเป็นต้องถูก จำกัด ให้เป็นภาษาเดียวถ้าวิธีการสื่อสารขององค์ประกอบที่เป็นภาษาอิสระ นี้จะเป็นกรณีที่หากพวกเขาจะสื่อสารผ่าน TCP / IP ZeroMQ หรือบางโปรโตคอลภาษาอิสระอื่น ๆ ในฐานะที่เป็นตัวอย่างที่เป็นรูปธรรมพิจารณากรณีของระบบ backtesting ที่ถูกเขียนใน C ++ สำหรับ "จำนวนกระทืบ" ผลการดำเนินงานในขณะที่ผลงานของผู้จัดการและระบบการดำเนินการจะถูกเขียนในหลามใช้ SciPy และ IBPy การพิจารณาผลการปฏิบัติงาน ผลการดำเนินงานคือการพิจารณาที่สำคัญที่สุดสำหรับกลยุทธ์การซื้อขาย สำหรับกลยุทธ์ความถี่สูงก็เป็นปัจจัยที่สำคัญที่สุด "ผลการดำเนินงาน" ครอบคลุมหลากหลายของปัญหาเช่นความเร็วการดำเนินการขั้นตอนแฝงเครือข่ายแบนด์วิดธ์ข้อมูล I / O พร้อมกัน / ความเท่าเทียมและปรับ แต่ละพื้นที่เหล่านี้ได้รับความคุ้มครองเป็นรายบุคคลโดยตำราที่มีขนาดใหญ่ดังนั้นบทความนี้จะมีเพียงรอยขีดข่วนบนพื้นผิวของแต่ละหัวข้อ สถาปัตยกรรมและการเลือกภาษาในขณะนี้จะมีการหารือในแง่ของผลกระทบต่อประสิทธิภาพการทำงานของพวกเขา ภูมิปัญญาที่เกิดขึ้นดังกล่าวโดยโดนัลด์ Knuth หนึ่งในบิดาของวิทยาการคอมพิวเตอร์คือว่า "การเพิ่มประสิทธิภาพก่อนวัยอันควรเป็นรากของความชั่วร้ายทั้งหมด" นี้เกือบจะทุกกรณี - ยกเว้นเมื่อมีการสร้างอัลกอริทึมซื้อขายความถี่สูง! สำหรับผู้ที่มีความสนใจในกลยุทธ์ความถี่ที่ต่ำกว่าวิธีร่วมกันคือการสร้างระบบในวิธีที่ง่ายที่สุดที่เป็นไปได้และมีเพียงเพิ่มประสิทธิภาพเป็นคอขวดที่เริ่มปรากฏให้เห็น เครื่องมือ profiling จะใช้ในการตรวจสอบที่เกิดคอขวด โปรไฟล์สามารถทำทั้งหมดของปัจจัยดังกล่าวข้างต้นอย่างใดอย่างหนึ่งใน MS Windows หรือสภาพแวดล้อมลินุกซ์ มีระบบปฏิบัติการจำนวนมากและเครื่องมือภาษาพร้อมที่จะทำเช่นนั้นเช่นเดียวกับสาธารณูปโภคของบุคคลที่สาม ทางเลือกที่ภาษาในขณะนี้จะมีการหารือในบริบทของการทำงาน C ++, Java, Python, R และ MatLab ทั้งหมดมีห้องสมุดที่มีประสิทธิภาพสูง (ไม่ว่าจะเป็นส่วนหนึ่งของมาตรฐานหรือภายนอกของพวกเขา) สำหรับโครงสร้างข้อมูลพื้นฐานและการทำงานของอัลกอริทึม C ++ เรือกับแม่แบบไลบรารีมาตรฐานในขณะที่งูใหญ่มี NumPy / SciPy งานทางคณิตศาสตร์ทั่วไปจะพบในห้องสมุดเหล่านี้และมันจะเป็นประโยชน์ไม่ค่อยจะเขียนการดำเนินงานใหม่ ยกเว้นคือถ้าปรับสูงสถาปัตยกรรมฮาร์ดแวร์ที่จำเป็นและขั้นตอนวิธีคือการทำให้การใช้งานที่กว้างขวางของนามสกุลที่เป็นกรรมสิทธิ์ (เช่นแคชที่กำหนดเอง) แต่มักจะ "คิดค้นสิ่งใหม่ ๆ ของล้อ" เสียเวลาที่อาจจะดีกว่าการใช้จ่ายและเพิ่มประสิทธิภาพการพัฒนาส่วนอื่น ๆ ของโครงสร้างพื้นฐานด้านการซื้อขาย เวลาในการพัฒนามีค่าอย่างมากโดยเฉพาะอย่างยิ่งในบริบทของการพัฒนา แต่เพียงผู้เดียว แฝงมักจะเป็นปัญหาของระบบการดำเนินการเป็นเครื่องมือในการวิจัยมักจะตั้งอยู่ในเครื่องเดียวกัน สำหรับอดีตแฝงสามารถเกิดขึ้นได้หลายจุดตามเส้นทางการดำเนินการ ฐานข้อมูลจะต้องมีการปรึกษาหา​​รือ (ดิสก์ / แฝงเครือข่าย) สัญญาณจะต้องมีการสร้าง (syste ปฏิบัติการแฝงส่งข้อความ kernal) สัญญาณการค้าส่ง (แฝง NIC) และคำสั่งประมวลผล (ระบบแลกเปลี่ยนแฝงภายใน) สำหรับการดำเนินงานความถี่สูงก็เป็นสิ่งจำเป็นที่จะกลายเป็นสนิทสนมคุ้นเคยกับการเพิ่มประสิทธิภาพ kernal เช่นเดียวกับการเพิ่มประสิทธิภาพของการส่งผ่านเครือข่าย ซึ่งเป็นพื้นที่ที่ลึกและอย่างมีนัยสำคัญเกินขอบเขตของบทความ แต่ถ้าอัลกอริทึม UHFT เป็นที่ต้องการแล้วจะตระหนักถึงความลึกของความรู้ที่จำเป็น! แคชมีประโยชน์มากในเครื่องมือของนักพัฒนาเชิงปริมาณการซื้อขาย แคชหมายถึงแนวคิดของการจัดเก็บข้อมูลการเข้าถึงบ่อยในลักษณะที่ช่วยให้การเข้าถึงที่มีประสิทธิภาพที่สูงขึ้นของค่าใช้จ่ายของความเก่าที่มีศักยภาพของข้อมูล กรณีการใช้งานทั่วไปที่เกิดขึ้นในการพัฒนาเว็บเมื่อถ่ายข้อมูลจากฐานข้อมูลเชิงสัมพันธ์ดิสก์ได้รับการสนับสนุนและวางไว้ในหน่วยความจำ การร้องขอใด ๆ ตามมาสำหรับข้อมูลที่ไม่ต้อง "ตีฐานข้อมูล" และเพื่อเพิ่มประสิทธิภาพการทำงานอย่างมีนัยสำคัญ สำหรับการซื้อขายแคชสถานการณ์ที่สามารถเป็นประโยชน์อย่างมาก ยกตัวอย่างเช่นสถานะปัจจุบันของผลงานกลยุทธ์สามารถเก็บไว้ในแคชจนกว่าจะมีการปรับสมดุลเช่นว่ารายการไม่ได้จำเป็นที่จะต้องอาศัยอยู่กับวงของขั้นตอนวิธีการซื้อขายแต่ละ การฟื้นฟูดังกล่าวมีแนวโน้มที่จะเป็น CPU สูงหรือดิสก์ I / O การทำงาน อย่างไรก็ตามแคชไม่ได้โดยไม่มีปัญหาของตัวเอง ฟื้นฟูแคชของข้อมูลทั้งหมดในครั้งเดียวเนื่องจากลักษณะของการจัดเก็บ volatilie แคชสามารถวางความต้องการอย่างมีนัยสำคัญในโครงสร้างพื้นฐาน ปัญหาก็คือสุนัขที่เสาเข็ม ที่หลายรุ่นของสำเนาแคชใหม่จะดำเนินการภายใต้ภาระที่สูงมากซึ่งนำไปสู่​​ความล้มเหลวของน้ำตก แบบไดนามิกจัดสรรหน่วยความจำเป็นงานที่มีราคาแพงในการดำเนินการซอฟแวร์ ดังนั้นจึงมีความจำเป็นสำหรับการใช้งานซื้อขายผลการดำเนินงานที่สูงขึ้นเพื่อจะตระหนักดีว่าหน่วยความจำจะถูกจัดสรรและ deallocated ระหว่างการไหลของโปรแกรม บทความที่ใหม่กว่ามาตรฐานภาษาเช่น Java, C # และ Python ทั้งหมดดำเนินการเก็บขยะอัตโนมัติ ซึ่งหมายถึงการ deallocation ของหน่วยความจำจัดสรรแบบไดนามิกเมื่อวัตถุออกไปจากขอบเขต เก็บขยะมีประโยชน์อย่างมากในระหว่างการพัฒนาที่จะช่วยลดข้อผิดพลาดและช่วยให้สามารถอ่านได้ แต่ก็มักจะย่อยที่ดีที่สุดสำหรับกลยุทธ์การซื้อขายความถี่สูงบางอย่าง เก็บขยะที่กำหนดเองมักจะเป็นที่ต้องการสำหรับกรณีนี้ ใน Java เช่นโดยการปรับการเก็บขยะและการกำหนดค่ากองก็เป็นไปได้ที่จะได้รับที่มีประสิทธิภาพสูงสำหรับกลยุทธ์ HFT C ++ ไม่ได้ให้เก็บขยะพื้นเมืองและดังนั้นจึงเป็นสิ่งที่จำเป็นในการจัดการการจัดสรรหน่วยความจำทั้งหมด / deallocation เป็นส่วนหนึ่งของการดำเนินงานของวัตถุ ในขณะที่ข้อผิดพลาดที่อาจเกิดขึ้นได้ง่าย (อาจนำไปสู่​​การชี้ห้อย) จะเป็นประโยชน์อย่างยิ่งที่จะมีการควบคุมที่ละเอียดของวิธีการที่วัตถุที่ปรากฏบนกองสำหรับการใช้งานบางอย่าง เมื่อเลือกภาษาให้แน่ใจว่าจะศึกษาวิธีการเก็บขยะการทำงานและไม่ว่าจะสามารถปรับเปลี่ยนเพื่อเพิ่มประสิทธิภาพสำหรับการใช้งานโดยเฉพาะอย่างยิ่งกรณีที่ การดำเนินงานจำนวนมากในระบบการซื้อขายที่มีอัลกอริทึมคล้อยตาม parallelisation นี้หมายถึงแนวความคิดของการดำเนินการการดำเนินงานหลายโปรแกรมในเวลาเดียวกันเช่นใน "คู่ขนาน" ที่เรียกว่า "embarassingly ขนาน" ขั้นตอนวิธีการรวมถึงขั้นตอนที่สามารถคำนวณได้อย่างเต็มที่เป็นอิสระจากขั้นตอนอื่น ๆ สถิติการดำเนินงานบางอย่างเช่น Monte Carlo จำลองเป็นตัวอย่างที่ดีของอัลกอริทึมแบบขนาน embarassingly เป็นวาดแต่ละแบบสุ่มและการดำเนินงานเส้นทางที่ตามมาสามารถคำนวณได้โดยปราศจากความรู้ของเส้นทางอื่น ๆ ขั้นตอนวิธีการอื่น ๆ เป็นเพียงบางส่วน parallelisable พลศาสตร์ของไหลแบบจำลองดังกล่าวตัวอย่างที่โดเมนของการคำนวณที่สามารถแบ่ง แต่ในท้ายที่สุดโดเมนเหล่านี้จะต้องสื่อสารกับแต่ละอื่น ๆ และทำให้การดำเนินงานมีความต่อเนื่องบางส่วน ขั้นตอนวิธีการ Parallelisable อยู่ภายใต้กฎหมายของดาห์ล ซึ่งมีขีด จำกัด บนทฤษฎีที่จะเพิ่มประสิทธิภาพการทำงานของอัลกอริทึม parallelised เมื่อเรื่องถึง $ N $ กระบวนการแยกต่างหาก (เช่นในแกน CPU หรือด้าย) parallelisation ได้กลายเป็นสิ่งสำคัญมากขึ้นเป็นวิธีของการเพิ่มประสิทธิภาพความเร็วสัญญาณนาฬิกาตั้งแต่โปรเซสเซอร์คงที่เป็นหน่วยประมวลผลรุ่นใหม่ที่มีจำนวนมากที่มีแกนซึ่งการดำเนินการคำนวณแบบขนาน การเพิ่มขึ้นของฮาร์ดแวร์กราฟิกผู้บริโภค (predominently สำหรับวิดีโอเกม) ได้นำไปสู่​​การพัฒนาของหน่วยประมวลผลกราฟิก (GPUs) ซึ่งมีหลายร้อยของ "แกน" สำหรับการดำเนินงานพร้อมกันสูง GPUs ดังกล่าวอยู่ในขณะนี้ไม่แพงมาก กรอบระดับสูงเช่น Nvidia CUDA ได้นำไปสู่​​การยอมรับอย่างกว้างขวางในภาคการศึกษาและการเงิน ฮาร์ดแวร์ GPU ดังกล่าวโดยทั่วไปเพียงเหมาะสำหรับด้านการวิจัยเชิงปริมาณของเงินทุนในขณะที่คนอื่น ๆ ฮาร์ดแวร์เฉพาะมากขึ้น (รวมถึงสนาม Programmable อาร์เรย์ประตู - FPGAs) จะใช้สำหรับ (U) HFT ปัจจุบัน langauges ที่ทันสมัย​​ที่สุดสนับสนุนระดับของการเห็นพ้อง / multithreading ดังนั้นมันจึงเป็นเรื่องง่ายที่จะเพิ่มประสิทธิภาพ backtester เนื่องจากการคำนวณทั้งหมดโดยทั่วไปจะมีความเป็นอิสระของคนอื่น ๆ ปรับในวิศวกรรมซอฟต์แวร์และการดำเนินงานหมายถึงความสามารถของระบบในการจัดการที่เพิ่มขึ้นอย่างต่อเนื่องโหลดในรูปแบบของการร้องขอมากขึ้น, ใช้หน่วยประมวลผลที่สูงขึ้นและการจัดสรรหน่วยความจำเพิ่มเติม อัลกอริทึมในการซื้อขายเป็นกลยุทธ์ที่มีความสามารถในการปรับขนาดถ้ามันสามารถรับปริมาณมากของเงินทุนและผลตอบแทนยังคงผลิตที่สอดคล้องกัน ถูกปรับขนาดสแต็คเทคโนโลยีซื้อขายถ้ามันสามารถทนปริมาณการค้าขนาดใหญ่และความล่าช้าที่เพิ่มขึ้นโดยไม่ต้อง bottlenecking ในขณะที่ระบบต้องได้รับการออกแบบมาเพื่อปรับขนาดก็มักจะเป็นเรื่องยากที่จะคาดการณ์ล่วงหน้าที่คอขวดจะเกิดขึ้น เข้าสู่ระบบอย่างเข้มงวดการทดสอบโปรไฟล์และการตรวจสอบจะช่วยอย่างมากในการช่วยให้ระบบการขยายขนาด ภาษาที่ตัวเองมักจะอธิบายว่า "เข้าไปไม่ได้" ซึ่งมักจะเป็นผลมาจากข้อมูลที่ผิดมากกว่าความเป็นจริงยาก มันเป็นกองรวมเทคโนโลยีที่ควรมีการตรวจสอบสำหรับการขยายขนาดไม่ได้ภาษา เห็นได้ชัดว่าบางภาษามีประสิทธิภาพมากขึ้นกว่าคนอื่น ๆ ในกรณีการใช้งานโดยเฉพาะอย่างยิ่งภาษาหนึ่ง แต่ไม่เคยมี "ดี" กว่าที่อื่นในทุกความรู้สึก วิธีการหนึ่งในการจัดการระดับคือความกังวลแยกตามที่ระบุไว้ข้างต้น เพื่อที่จะแนะนำต่อความสามารถในการจัดการกับ "แหลม" ในระบบ (เช่นความผันผวนอย่างฉับพลันซึ่งก่อให้เกิดแพของการซื้อขาย) ก็จะเป็นประโยชน์ในการสร้าง "ข้อความเข้าคิวสถาปัตยกรรม" นี้ก็หมายถึงการวางระบบคิวข้อความระหว่างส่วนประกอบเพื่อให้คำสั่งมี "ซ้อนกันขึ้น" ถ้าส่วนหนึ่งไม่สามารถที่จะดำเนินการร้องขอหลาย มากกว่าการร้องขอการสูญเสียพวกเขาก็จะถูกเก็บไว้ในกองจนกว่าจะมีข้อความจะถูกจัดการ นี้จะเป็นประโยชน์โดยเฉพาะอย่างยิ่งสำหรับการส่งไปยังเครื่องมือการซื้อขายประหาร ถ้าเครื่องยนต์เป็นทุกข์แฝงอยู่ภายใต้หนักแล้วมันจะสำรองการซื้อขาย คิวระหว่างกำเนิดสัญญาณการค้าและการดำเนินการ API จะช่วยบรรเทาปัญหานี้ค่าใช้จ่ายของการเลื่อนหลุดของการค้าที่มีศักยภาพ ดีที่เคารพนับถือที่มาเปิดนายหน้าคิวข้อความเป็น RabbitMQ ฮาร์ดแวร์และระบบปฏิบัติการ ฮาร์ดแวร์ทำงานกลยุทธ์ของคุณสามารถมีผลกระทบต่อการทำกำไรของอัลกอริทึมของคุณ นี้ไม่ได้เป็นปัญหาที่ถูก จำกัด ให้กับผู้ค้าที่มีความถี่สูงอย่างใดอย่างหนึ่ง ทางเลือกที่ดีในด้านฮาร์ดแวร์และระบบปฏิบัติการที่สามารถนำไปสู่​​ความผิดพลาดของเครื่องหรือรีบูตในขณะที่ไม่เหมาะสมที่สุด ดังนั้นมันจึงเป็นสิ่งที่จำเป็นที่จะต้องพิจารณาใบสมัครของคุณที่จะอยู่ ทางเลือกโดยทั่วไประหว่างเครื่องคอมพิวเตอร์ส่วนบุคคล, เซิร์ฟเวอร์ระยะไกลเป็น "เมฆ" ผู้ให้บริการหรือการแลกเปลี่ยนเซิร์ฟเวอร์ร่วมอยู่ เครื่องสก์ท็อปที่ง่ายต่อการติดตั้งและการบริหารจัดการโดยเฉพาะอย่างยิ่งกับผู้ใช้ระบบปฏิบัติการรุ่นใหม่ที่เป็นมิตรเช่น Windows 08/07, Mac OSX และ Ubuntu ระบบเดสก์ท็ทำมีข้อบกพร่องที่สำคัญบางอย่าง แต่ สำคัญที่สุดคือการที่รุ่นของระบบปฏิบัติการที่ออกแบบมาสำหรับเครื่องเดสก์ทอปมีแนวโน้มที่จะต้องเรียบ / ปะ (และมักจะที่เลวร้ายที่สุดครั้ง!) พวกเขายังใช้ทรัพยากรคอมพิวเตอร์โดยอาศัยอำนาจตามที่ต้องการติดต่อผู้ใช้แบบกราฟิก (GUI) Utilising ฮาร์ดแวร์ในบ้าน (หรือสำนักงานท้องถิ่น) สภาพแวดล้อมที่สามารถนำไปสู่​​การเชื่อมต่ออินเทอร์เน็ตและปัญหา uptime อำนาจ ประโยชน์หลักของระบบคอมพิวเตอร์คือแรงม้าคำนวณอย่างมีนัยสำคัญสามารถซื้อส่วนของค่าใช้จ่ายของเซิร์ฟเวอร์ทุ่มเทระยะไกล (หรือระบบคลาวด์เบส) ความเร็วเทียบได้ ทุ่มเทเซิร์ฟเวอร์หรือเครื่องเมฆที่ใช้ในขณะที่มักจะมีราคาแพงกว่าตัวเลือกเดสก์ทอปช่วยให้โครงสร้างพื้นฐานที่ซ้ำซ้อนอย่างมีนัยสำคัญมากขึ้นเช่นการสำรองข้อมูลอัตโนมัติความสามารถในการตรงไปตรงมามากขึ้นให้ uptime และตรวจสอบระยะไกล พวกเขามีความยากในการจัดการตั้งแต่ที่พวกเขาจำเป็นต้องมีความสามารถในการใช้ความสามารถในการเข้าสู่ระบบจากระยะไกลของระบบปฏิบัติการ ใน Windows นี้โดยทั่วไปผ่านทาง GUI Remote Desktop Protocol (RDP) ในระบบปฏิบัติการ Unix-based บรรทัดคำสั่ง Secure Shell (SSH) ถูกนำมาใช้ โครงสร้างพื้นฐานของเซิร์ฟเวอร์ Unix-based เป็นเกือบทุกบรรทัดคำสั่งตามที่แสดงผลทันทีเครื่องมือการเขียนโปรแกรมตาม GUI (เช่น MatLab หรือ Excel) จะเป็นไปไม่ได้ เซิร์ฟเวอร์ร่วมอยู่เป็นวลีที่ใช้ในตลาดทุนเป็นเพียงเซิร์ฟเวอร์เฉพาะที่อยู่ภายในการแลกเปลี่ยนเพื่อลดความล่าช้าของขั้นตอนวิธีการซื้อขาย นี้เป็นสิ่งจำเป็นอย่างยิ่งสำหรับความถี่สูงบางกลยุทธ์การซื้อขายซึ่งพึ่งพา latency ต่ำเพื่อที่จะสร้างอัลฟา ด้านสุดท้ายที่จะพบกับทางเลือกฮาร์ดแวร์และทางเลือกของการเขียนโปรแกรมภาษาเป็นแพลตฟอร์มอิสระ มีความจำเป็นสำหรับรหัสเพื่อใช้ในระบบปฏิบัติการที่แตกต่างกันหลาย ๆ หรือไม่? เป็นรหัสที่ออกแบบมาเพื่อทำงานในประเภทเฉพาะของสถ​​าปัตยกรรมหน่วยประมวลผลเช่นอิน​​เทล x86 / x64 หรือมันจะเป็นไปได้ที่จะดำเนินการเกี่ยวกับการประมวลผล RISC เช่นผู้ผลิตโดย ARM? ปัญหาเหล​​่านี้จะสูงขึ้นอยู่กับความถี่และชนิดของกลยุทธ์ที่ถูกนำมาใช้ ความยืดหยุ่นและการทดสอบ หนึ่งในวิธีที่ดีที่สุดที่จะสูญเสียเงินเป็นจำนวนมากเกี่ยวกับการซื้อขายขั้นตอนคือการสร้างระบบที่มีความยืดหยุ่นไม่มี นี้หมายถึงความทนทานของระบบไฟฟ้าโซลาร์เมื่อเรื่องกับเหตุการณ์ที่หายากเช่นการล้มละลายนายหน้าผันผวนเกินฉับพลันหยุดทำงานภูมิภาคกว้างสำหรับผู้ให้บริการคลาวด์เซิร์ฟเวอร์หรืออุบัติเหตุการลบฐานข้อมูลการซื้อขายทั้งหมด ปีที่ผ่านมาของกำไรก็จะถูกกำจัดภายในไม่กี่วินาทีที่มีสถาปัตยกรรมการออกแบบที่ไม่ดี มันเป็นสิ่งจำเป็นอย่างยิ่งที่จะต้องพิจารณาประเด็นต่าง ๆ เช่น debuggng การทดสอบการเข้าสู่ระบบการสำรองข้อมูลพร้อมใช้งานสูงและการตรวจสอบที่เป็นส่วนประกอบหลักของระบบของคุณ มันมีโอกาสที่ในกำหนดเองใด ๆ ที่มีความซับซ้อนพอสมควรการประยุกต์ใช้การค้าเชิงปริมาณอย่างน้อย 50% ของเวลาในการพัฒนาจะใช้ในการแก้จุดบกพร่องการทดสอบและการบำรุงรักษา การเขียนโปรแกรมเกือบทุกภาษาทั้งเรือที่มีบั๊กที่เกี่ยวข้องหรือครอบครองดีเคารพทางเลือกของบุคคลที่สาม ในสาระสำคัญดีบักช่วยให้การทำงานของโปรแกรมที่มีการแทรกของจุดพักโดยพลการในเส้นทางรหัสซึ่งหยุดดำเนินการชั่วคราวเพื่อตรวจสอบสถานะของระบบ ประโยชน์หลักของการแก้จุดบกพร่องคือว่ามันเป็นไปได้ที่จะตรวจสอบการทำงานของรหัสก่อนที่จะมีจุดผิดพลาดที่รู้จักกัน การแก้จุดบกพร่องเป็นองค์ประกอบสำคัญในกล่องเครื่องมือสำหรับการวิเคราะห์ข้อผิดพลาดของการเขียนโปรแกรม แต่พวกเขาจะใช้กันอย่างแพร่หลายในภาษาเรียบเรียงเช่น C ++ หรือ Java เป็นภาษาตีความเช่นงูใหญ่มักจะง่ายต่อการแก้ปัญหาเนื่องจากการ LOC น้อยลงและงบน้อยอย่างละเอียด แม้จะมีงูหลามแนวโน้มนี้จะมาพร้อมกับ PDB ซึ่งเป็นเครื่องมือที่มีการแก้จุดบกพร่องที่มีความซับซ้อน ไมโครซอฟท์ Visual c ++ IDE มีสาธารณูปโภคที่กว้างขวาง GUI แก้จุดบกพร่องในขณะที่สำหรับบรรทัดคำสั่ง Linux C ++ เขียนโปรแกรมดีบัก gdb ที่มีอยู่ การทดสอบในการพัฒนาซอฟแวร์หมายถึงกระบวนการของการใช้พารามิเตอร์ที่รู้จักกันและผลการทำงานที่เฉพาะเจาะจงวิธีการและวัตถุภายใน codebase ในการสั่งซื้อเพื่อจำลองพฤติกรรมและการประเมินหลายรหัสเส้นทางเพื่อช่วยให้แน่ใจว่าระบบจะทำงานตามที่ควร กระบวนทัศน์เมื่อเร็ว ๆ นี้เป็นที่รู้จักกันทดสอบขับเคลื่อนการพัฒนา (TDD) ซึ่งรหัสการทดสอบได้รับการพัฒนากับอินเตอร์เฟซที่ระบุมีการดำเนินการไม่ได้ ก่อนที่จะเสร็จสิ้นการ codebase ที่เกิดขึ้นจริงการทดสอบทั้งหมดจะล้มเหลว ในฐานะที่เป็นรหัสถูกเขียนไปยัง "กรอกในช่องว่าง" การทดสอบจะทั้งหมดในที่สุดก็ผ่านที่ควรพัฒนาจุดยุติ TDD ต้องมีการออกแบบที่กว้างขวางข้อกำหนดล่วงหน้าเช่นเดียวกับในระดับที่ดีต่อสุขภาพของตัวเองในการที่จะดำเนินการประสบความสำเร็จ ใน C ++ Boost ให้กรอบการทดสอบหน่วย ใน Java ห้องสมุด JUnit ที่มีอยู่เพื่อตอบสนองวัตถุประสงค์เดียวกัน งูใหญ่ยังมีโมดูล UnitTest เป็นส่วนหนึ่งของห้องสมุดมาตรฐาน อีกหลายภาษาที่มีกรอบการทดสอบหน่วยและมักจะมีหลายตัวเลือก ในสภาพแวดล้อมการผลิตเข้าสู่ระบบที่มีความซับซ้อนเป็นสิ่งจำเป็นอย่างยิ่ง เข้าสู่ระบบหมายถึงกระบวนการของการแสดงผลข้อความที่มีองศาต่างๆของความรุนแรงเกี่ยวกับพฤติกรรมการทำงานของระบบไปยังแฟ้มแบนหรือฐานข้อมูล บันทึกเป็น "บรรทัดแรกของการโจมตี" เมื่อการล่าสัตว์สำหรับพฤติกรรมรันไทม์โปรแกรมที่ไม่คาดคิด แต่น่าเสียดายที่ข้อบกพร่องของระบบมีแนวโน้มที่จะเข้าสู่ระบบเท่านั้นที่จะถูกค้นพบหลังจากที่ความจริง! เช่นเดียวกับการสำรองข้อมูลที่กล่าวถึงด้านล่างระบบเข้าสู่ระบบควรจะได้รับการพิจารณาก่อนที่จะเกิดจากระบบที่ได้รับการออกแบบ ทั้ง Microsoft Windows และ Linux มาพร้อมกับความสามารถในการเข้าสู่ระบบระบบอย่างกว้างขวางและการเขียนโปรแกรมภาษามีแนวโน้มที่จะมาพร้อมกับการเข้าสู่ระบบห้องสมุดมาตรฐานที่ครอบคลุมมากที่สุดในกรณีการใช้งาน มันมักจะฉลาดที่จะรวบรวมข้อมูลเข้าสู่ระบบเพื่อที่จะวิเคราะห์ในภายหลังเพราะมันมักจะนำไปสู่​​ความคิดเกี่ยวกับการปรับปรุงประสิทธิภาพหรือลดข้อผิดพลาดที่เกือบจะแน่นอนจะมีผลกระทบในเชิงบวกต่อผลตอบแทนการค้าของคุณ ในขณะที่การเข้าสู่ระบบของระบบจะให้ข้อมูลเกี่ยวกับสิ่งที่ได้ transpired ในอดีตที่ผ่านมาการตรวจสอบของโปรแกรมจะให้ความเข้าใจในสิ่งที่เกิดขึ้นในขณะนี้ ทุกแง่มุมของระบบควรได้รับการพิจารณาสำหรับการตรวจสอบ ตัวชี้วัดระดับระบบเช่นการใช้งานดิสก์, หน่วยความจำ, แบนด์วิดธ์ของเครือข่ายและการใช้งาน CPU ให้ข้อมูลพื้นฐานในการโหลด ตัวชี้วัดการซื้อขายเช่นราคาที่ผิดปกติ / ปริมาณเบิกถอนอย่างรวดเร็วฉับพลันและบัญชีเปิดรับสำหรับภาคที่แตกต่างกัน / ตลาดควรที่จะตรวจสอบอย่างต่อเนื่อง นอกจากนี้ระบบการเกณฑ์ควรจะบ้าจี้ที่ให้การแจ้งเตือนเมื่อมีตัวชี้วัดบางละเมิดยกระดับวิธีการแจ้งเตือน (ส่งอีเมล์, SMS, โทรศัพท์อัตโนมัติ) ขึ้นอยู่กับความรุนแรงของตัวชี้วัดที่ ระบบการตรวจสอบมักจะเป็นโดเมนของผู้ดูแลระบบหรือผู้จัดการการดำเนินงาน แต่เป็นนักพัฒนาซื้อขาย แต่เพียงผู้เดียว, ตัวชี้วัดเหล่านี้จะต้องได้รับการยอมรับในฐานะที่เป็นส่วนหนึ่งของการออกแบบที่มีขนาดใหญ่ หลายโซลูชั่นสำหรับการตรวจสอบอยู่: เป็นกรรมสิทธิ์เป็นเจ้าภาพและโอเพนซอร์สที่ช่วยให้การปรับแต่งมากมายของตัวชี้วัดสำหรับกรณีการใช้โดยเฉพาะอย่างยิ่ง การสำรองข้อมูลและความสูงที่ควรจะเป็นความกังวลที่สำคัญของระบบการซื้อขาย สรุป