การจำลอง Monte Carlo ของกลยุทธ์ — ความเสี่ยงที่การทดสอบย้อนหลังครั้งเดียวซ่อนไว้

ตรวจสอบล่าสุด: · เนื้อหาระยะยาวที่ยังคงทันสมัย
คำเตือนความเสี่ยง · YMYL บทความนี้จัดทำขึ้นเพื่อการศึกษาเท่านั้น และไม่ถือเป็นคำแนะนำการลงทุน การซื้อขายในตลาด Forex มีความเสี่ยงสูงที่อาจสูญเสียเงินทุน — ESMA รายงานว่าบัญชีรายย่อย 74–89% ขาดทุน

ครั้งหนึ่งมีผู้อ่านส่งผลการทดสอบย้อนหลัง (backtesting) ที่เขาภูมิใจมาให้ผม อัตราชนะ 55 เปอร์เซ็นต์ ลำดับ ลำดับ ลำดับ ลำดับ ลำดับชนะเฉลี่ย 100 ยูโร ลำดับขาดทุนเฉลี่ย 80 ยูโร คิดเป็นกำไรที่คาดหวังบนกระดาษราว 3,800 ยูโรต่อปี ตัวเลขดูแน่นพอสมควร เขาจึงเปิดบัญชีจริง เสี่ยงห้าเปอร์เซ็นต์ต่อการเทรดหนึ่งครั้ง และล้างพอร์ตภายในหกเดือน เขาถามว่าผิดพลาดตรงไหน ความผิดพลาดไม่ได้อยู่ที่กลยุทธ์ แต่อยู่ที่การมองผลการทดสอบย้อนหลังเพียงครั้งเดียวว่าเป็นความจริงเดียว ทั้งที่ Monte Carlo จะบอกเขาได้ว่าความได้เปรียบเดียวกันที่ขนาดสถานะนั้นมีโอกาสราว 25 เปอร์เซ็นต์ที่จะทำลายบัญชี บทสนทนานั้นคือเหตุผลที่ผมเขียนบทความนี้

การจำลอง Monte Carlo ของกลยุทธ์คืออะไรกันแน่

Monte Carlo เป็นวิธีการเชิงความน่าจะเป็นที่ตั้งชื่อตามคาสิโนในโมนาโก ในการเทรดแนวคิดนั้นเรียบง่ายอย่างน่าประหลาดใจ แทนที่จะมองดูเส้นทุน (equity curve) เพียงเส้นเดียวที่ประวัติศาสตร์บังเอิญสร้างขึ้น คุณสร้างลำดับใหม่ขึ้นมาหนึ่งพันชุดด้วยสถิติชุดเดียวกันแต่เรียงลำดับต่างกัน แต่ละชุดวาดภาพบัญชีที่ต่างออกไป และเมื่อรวมกันก็ก่อตัวเป็นกลุ่มเมฆของความเป็นไปได้ที่การทดสอบย้อนหลังเพียงครั้งเดียวไม่อาจเผยให้เห็นได้ การฝึกฝนเช่นนี้เป็นหัวใจของการเทรดเชิงปฏิบัติอย่างเป็นระบบ

การทดสอบย้อนหลังเพียงครั้งเดียวคือการเกิดขึ้นจริงเพียงหนึ่งครั้งของกระบวนการสุ่ม ความแปรปรวนรอบ ๆ มันอาจมหาศาล นั่นคือพฤติกรรมของเกมที่เล่นซ้ำ ๆ ภายใต้ความได้เปรียบ Monte Carlo เปลี่ยนความแปรปรวนนั้นให้เป็นตัวเลขรูปธรรมที่คุณนำไปใช้ตัดสินใจได้

คำถามใดบ้างที่ Monte Carlo ตอบได้จริง

การจำลองให้สามสิ่งที่การทดสอบย้อนหลังครั้งเดียวให้ไม่ได้ สิ่งแรกคือการลดลงของเงินทุน (drawdown) ที่สมจริงที่ระดับความเชื่อมั่น 95 เปอร์เซ็นต์ ซึ่งคือความลึกที่คุณไม่ทะลุใน 95 จาก 100 การจำลอง สิ่งที่สองคือความน่าจะเป็นที่จะสูญเสียบัญชีส่วนสำคัญ เช่น การลดลงต่ำกว่าครึ่งหนึ่งของเงินทุน สิ่งที่สามคือช่วงของผลลัพธ์รายปีที่เป็นไปได้ ในขณะที่ความได้เปรียบยังคงที่

ในสถานการณ์ตัวอย่างของผม (ซึ่งเป็นสมมติฐานอย่างชัดเจน) กลยุทธ์ที่มีอัตราชนะ 55 เปอร์เซ็นต์ ลำดับชนะเฉลี่ย 100 ยูโร ลำดับขาดทุนเฉลี่ย 80 ยูโร และ 200 การเทรดต่อปี มีค่าคาดหวัง (expectancy) ราว 19 ยูโรต่อการเทรด คิดเป็น 3,800 ยูโรบนกระดาษ การจำลองหนึ่งพันรอบให้ค่ามัธยฐาน (median) ใกล้ 3,750 ยูโร ห้าเปอร์เซ็นต์ที่แย่ที่สุดจบลงราว 500 ยูโรของกำไร หนึ่งเปอร์เซ็นต์ที่แย่ที่สุดขาดทุน 800 ยูโร และห้าเปอร์เซ็นต์ที่ดีที่สุดอยู่ที่ 7,500 ยูโร ความได้เปรียบเดียวกัน แต่ช่องว่างห้าเท่า

วิธีรันการจำลองใน Excel

เวอร์ชันที่ไม่ใช้แมโครก็เพียงพอต่อการทำความเข้าใจกลยุทธ์ของคุณเอง ในเซลล์ A1 ถึง A5 คุณใส่พารามิเตอร์ ได้แก่ อัตราชนะ 0.55 ลำดับชนะเฉลี่ย 100 ลำดับขาดทุนเฉลี่ย -80 จำนวนการเทรด 200 และเงินทุนเริ่มต้น 10,000 ในเซลล์ B1 คุณป้อน =IF(RAND()<A1, A2, A3) ฟังก์ชัน RAND ของ Excel คืนค่าระหว่างศูนย์กับหนึ่ง และเมื่อใดที่ค่าตกต่ำกว่าอัตราชนะ คุณจะได้ลำดับชนะ มิฉะนั้นจะได้ลำดับขาดทุน

ในเซลล์ C1 คุณบวกเงินทุนเริ่มต้นเข้ากับค่าใน B1 ซึ่งคือจุดแรกของเส้นทุน B2 ใช้สูตรเดียวกันซ้ำ และ C2 บวกค่าใน C1 เข้ากับ B2 ลากทั้งสองคอลัมน์ลงไปจนถึงแถวที่ 200 นั่นคือการสร้างลำดับรายปีที่สมบูรณ์หนึ่งชุด

การคัดลอกสองคอลัมน์นั้นไปด้านข้างหนึ่งพันครั้ง (B–C, D–E, F–G และต่อ ๆ ไป) ทำให้คุณได้เส้นทุนอิสระหนึ่งพันเส้น จากค่าสุดท้าย คุณอ่าน =PERCENTILE.INC(range, 0.5) เพื่อหาค่ามัธยฐาน จากนั้น 0.05 และ 0.01 สำหรับห้าและหนึ่งเปอร์เซ็นต์ที่แย่ที่สุด การกด F9 จะคำนวณค่าสุ่มทุกค่าใหม่ ดังนั้นการกดแต่ละครั้งจึงกลายเป็นการศึกษาหนึ่งพันรอบครั้งใหม่ เท่านี้ก็เพียงพอจริง ๆ

วิธีทำสิ่งเดียวกันใน Python ด้วย bootstrap

Python ให้สองสิ่งที่ Excel ให้ไม่ได้ อย่างแรกคือความเร็ว การรันหลายพันรอบใช้เวลาเพียงไม่กี่วินาที อย่างที่สองซึ่งสำคัญกว่าคือมันให้คุณทำ bootstrap ได้ นั่นคือการสุ่มไม่ใช่จากพารามิเตอร์ที่สมมติขึ้น แต่จากรายการการเทรดในประวัติจริงของคุณ

คุณนำเข้า NumPy โหลดค่ากำไรขาดทุน (P/L) จริง 100 ค่าหรือมากกว่าจากบันทึกการเทรด แล้วเขียน new_sequence = np.random.choice(history, size=200, replace=True) ฟังก์ชัน np.cumsum เปลี่ยนรายการค่า P/L ให้เป็นเส้นทุน และวงวน (loop) รอบ ๆ มันให้คุณได้การรันอิสระหนึ่งพันรอบ คุณอ่านเปอร์เซ็นไทล์ด้วย np.percentile และใช้ Matplotlib วาด spaghetti plot ซึ่งคือเส้นทั้งหนึ่งพันเส้นซ้อนทับกันโดยเน้นค่ามัธยฐานและแถบเปอร์เซ็นไทล์ที่ 5 ถึง 95

Bootstrap รักษาส่วนหางที่แท้จริงของการกระจายตัวของคุณไว้ ทั้งการขาดทุนหนัก การเคลื่อนไหวที่กระจุกตัว และลำดับชนะสถิติเป็นครั้งคราวในสัปดาห์ที่ผันผวน สมมติฐานเชิงพารามิเตอร์ทำเช่นนั้นไม่ได้ เพราะมันไม่ได้สมมติการกระจายตัวที่การเทรดของคุณมีอยู่จริง

"อัตราส่วนผลตอบแทนต่อความเสี่ยงแทบไม่มีความหมายเลยหากไม่นำการกำหนดขนาดสถานะเข้ามาในสมการ ผ่านการกำหนดขนาดสถานะ คุณสามารถบรรลุเป้าหมายแทบทุกอย่างที่ต้องการได้" — Van K. Tharp, 2007

ขีดจำกัดที่ต้องพูดตามตรง สิ่งที่ Monte Carlo ทำไม่ได้

การจำลองเชิงพารามิเตอร์ตั้งอยู่บนสมมติฐานสองข้อ คือการเทรดเป็นอิสระต่อกัน และการกระจายตัวของผลลัพธ์คงที่ (stationary) ทั้งสองข้อพังพร้อมกันในตลาดจริง การขาดทุนมักกระจุกตัว เมื่อระบอบตลาดเปลี่ยน การเทรดหลายครั้งติดต่อกันอาจเคลื่อนไปทางเดียวกัน ซึ่งโมเดลที่สุ่มตัวอย่างอิสระไม่อาจจำลองได้ การลดลงของเงินทุนในการเทรดจริงจึงมักดูแย่กว่าเปอร์เซ็นไทล์ที่ 1 เปอร์เซ็นต์จาก Monte Carlo ไม่ใช่ดีกว่า

ปัญหาที่สองคือการจำลองใช้ประวัติชุดเดียวกับที่คุณป้อนเข้าไป หากการเทรด 100 ครั้งของคุณครอบคลุมเพียงแนวโน้มขาขึ้นใน EUR/USD Monte Carlo จะไม่บอกอะไรคุณเลยเกี่ยวกับพฤติกรรมของกลยุทธ์ในช่วงสะสมพลัง (consolidation) ยาว ๆ หรือการเคลื่อนไหว 200 pip อย่างรุนแรงหลังข้อมูลสหรัฐฯ ด้วยเหตุนี้จึงคุ้มค่าที่จะจับคู่การจำลองกับการวิเคราะห์แบบ walk-forward ซึ่งทดสอบกลยุทธ์ข้ามหน้าต่างเวลาที่เลื่อนไป และจับการเสื่อมของความได้เปรียบได้ ดูเพิ่มเติมเรื่องการออกแบบและทดสอบกลยุทธ์

การลดลงของเงินทุนที่ดำมืดที่สุดมักขุดลึกกว่าเปอร์เซ็นไทล์ที่ 1 เปอร์เซ็นต์จากการรัน Monte Carlo ที่สะอาดเรียบร้อย จงปฏิบัติต่อการจำลองในฐานะพื้นเชิงความน่าจะเป็น ไม่ใช่เพดาน และอ่านควบคู่ไปกับเนื้อหาการบริหารความเสี่ยงที่กว้างขึ้นเพื่อบริบทระยะยาว

สามขั้นตอนปฏิบัติเพื่อนำสิ่งนี้ไปใช้จริง

  1. ดึงประวัติการเทรดที่ปิดแล้วอย่างน้อย 100 ครั้งจากบันทึกการเทรดหรือไฟล์ส่งออกจากแพลตฟอร์มของคุณ จำนวนที่ต่ำกว่า 100 ทำให้สถิติมีสัญญาณรบกวนมากเกินไปจน Monte Carlo บอกอะไรที่มีประโยชน์เกี่ยวกับส่วนหางไม่ได้ หากคุณมีน้อยกว่านั้น ให้เทรดต่ออีกหกถึงสิบสองสัปดาห์ แล้วกลับมาทำแบบฝึกหัดนี้ด้วยตัวอย่างที่สมบูรณ์ขึ้น
  2. เปิดแผ่นงาน Excel เปล่าและสร้างเวอร์ชันเชิงพารามิเตอร์ตามที่อธิบายไว้ข้างต้น ใส่อัตราชนะ ลำดับชนะเฉลี่ย ลำดับขาดทุนเฉลี่ย และเงินทุนของคุณเอง คัดลอกคอลัมน์หนึ่งพันครั้ง กด F9 และศึกษาการกระจายของค่าสุดท้าย หนึ่งชั่วโมงของงานนั้นเผยให้เห็นว่าช่วงที่อยู่เบื้องหลัง "ปีโดยเฉลี่ย" ของคุณนั้นกว้างเพียงใด
  3. อ่านค่าเปอร์เซ็นไทล์ที่ 5 เปอร์เซ็นต์ของการลดลงสูงสุดจากการจำลองหนึ่งพันครั้งนั้น หากมันชี้ไปที่การลด 30 เปอร์เซ็นต์ ในขณะที่ความทนทานทางจิตใจของคุณสิ้นสุดราว 15 เปอร์เซ็นต์ ปัญหาไม่ได้อยู่ที่กลยุทธ์แต่อยู่ที่ขนาดสถานะ ลดความเสี่ยงต่อการเทรดลงครึ่งหนึ่งและรันใหม่จนกว่าพื้นที่ 5 เปอร์เซ็นต์จะอยู่ในขีดความเจ็บปวดของคุณ
  4. หลังจากเทรดจริงครบหนึ่งปี ให้รันการจำลองอีกครั้งด้วยประวัติใหม่และเปรียบเทียบกับปีก่อน หากค่ามัธยฐานเลื่อนลงและส่วนหางกว้างขึ้น ความได้เปรียบของคุณกำลังเสื่อม นั่นคือจังหวะที่ต้องถามว่ากลยุทธ์ยังใช้ได้อยู่หรือไม่ ไม่ใช่แค่ถามว่าจะประคองมันต่อไปอย่างไร
Jarosław Wasiński
เกี่ยวกับผู้เขียน

Jarosław Wasiński

บรรณาธิการบริหาร MyBank.pl · นักวิเคราะห์การเงินและตลาด

นักวิเคราะห์และผู้ปฏิบัติงานอิสระที่มีประสบการณ์กว่า 20 ปีในภาคการเงิน ผู้ก่อตั้งและบรรณาธิการบริหารของ MyBank.pl ที่ดำเนินงานมาตั้งแต่ปี 2004 วิเคราะห์ปัจจัยพื้นฐานตลาดอัตราแลกเปลี่ยนและมหภาคตั้งแต่ปี 2007 เขียนจากมุมมองตลาดโลก การเทรด Forex แบบ leverage มีความเสี่ยงสูง อยู่ภายใต้การกำกับดูแลของ ก.ล.ต. ในประเทศไทย

แหล่งอ้างอิงและบรรณานุกรม

  1. Bank for International Settlements Minimum capital requirements for market risk (d457) · Bazylejski standard pokazujący, jak instytucje liczą ryzyko rynkowe za pomocą expected shortfall i historycznej symulacji — analog Monte Carlo dla portfela. www.bis.org ↗
  2. Van Tharp Institute About Van K. Tharp · Strona biograficzna potwierdzająca autorstwo książki „Trade Your Way to Financial Freedom" (McGraw-Hill) i jego pracę nad position sizingiem oraz symulacją Monte Carlo dla traderów detalicznych. www.vantharp.com ↗
  3. NumPy Developers numpy.random.choice — Random sampling · Oficjalna dokumentacja funkcji losowania z powtórzeniami; podstawowe narzędzie do bootstrap resampling listy transakcji w Pythonie. numpy.org ↗
  4. Python Software Foundation random — Generate pseudo-random numbers · Oficjalna dokumentacja biblioteki standardowej Pythona z funkcjami random.choices i random.sample, używanymi do prostych symulacji Monte Carlo bez NumPy. docs.python.org ↗

คำถามที่พบบ่อย

การจำลอง Monte Carlo ของกลยุทธ์การเทรดคืออะไร?

Monte Carlo เป็นวิธีการเชิงความน่าจะเป็นที่ตั้งชื่อตามคาสิโนในโมนาโก ในการเทรดคุณนำรายการการเทรดในประวัติหรือพารามิเตอร์ของกลยุทธ์ ได้แก่ อัตราชนะ ลำดับชนะเฉลี่ย ลำดับขาดทุนเฉลี่ย และแทนที่จะมองเส้นทุนเพียงเส้นเดียวที่ประวัติศาสตร์บังเอิญสร้างขึ้น คุณสร้างลำดับใหม่หนึ่งพันชุดในลำดับสุ่ม แต่ละชุดมีสถิติเดียวกันแต่เรียงลำดับการชนะและการขาดทุนต่างกัน จึงวาดภาพบัญชีที่ต่างออกไป ทำไมต้องทำ: การทดสอบย้อนหลังครั้งเดียวคือการเกิดขึ้นจริงเพียงครั้งเดียว ความแปรปรวนรอบ ๆ มันอาจมหาศาล กลยุทธ์เดียวกันที่มีค่าคาดหวังราว 19 ยูโรต่อการเทรดและ 200 การเทรดต่อปีอาจให้ค่ามัธยฐาน Monte Carlo ใกล้ 3,750 ยูโร แต่เปอร์เซ็นไทล์ 5 เปอร์เซ็นต์ที่แย่ที่สุดลดลงเหลือ 500 ยูโร และ 5 เปอร์เซ็นต์ที่ดีที่สุดพุ่งขึ้นถึง 7,500 ยูโร ช่วงนั้นกว้างแม้ความได้เปรียบจะคงที่ ความเข้าใจผิดที่พบบ่อยที่สุด: "ปีที่แล้วกลยุทธ์ทำได้ 5,000 ยูโร ดังนั้นปีนี้ก็ควรได้พอ ๆ กัน" Monte Carlo แสดงว่าเมื่อความได้เปรียบคงที่ ช่วงที่สมจริงอาจยืดจาก 1,000 ถึง 10,000 ยูโร และไม่มีอะไรผิดปกติในเรื่องนั้นเลย มันเป็นเพียงความแปรปรวนทางสถิติเท่านั้น

จะทำการจำลอง Monte Carlo ใน Excel อย่างไร?

เวอร์ชันที่ง่ายที่สุดไม่ต้องใช้แมโครหรือ VBA ในเซลล์ A1 ถึง A5 คุณใส่พารามิเตอร์ ได้แก่ อัตราชนะ (เช่น 0.55) ลำดับชนะเฉลี่ย (เช่น 100) ลำดับขาดทุนเฉลี่ย (เช่น -80) จำนวนการเทรดในหนึ่งลำดับ (เช่น 200) และเงินทุนเริ่มต้น (เช่น 10,000) ในเซลล์ B1 คุณป้อน =IF(RAND()<A1, A2, A3) ซึ่งจำลองการเทรดหนึ่งครั้ง ฟังก์ชัน RAND คืนค่าระหว่างศูนย์กับหนึ่ง และหากตกต่ำกว่าอัตราชนะ คุณจะได้ลำดับชนะ มิฉะนั้นได้ลำดับขาดทุน ในเซลล์ C1 คุณบวกเงินทุนเริ่มต้นเข้ากับผลลัพธ์ของ B1 B2 และ C2 ใช้รูปแบบเดียวกัน แต่ C2 อ้างอิงถึง C1 ลากทั้งสองคอลัมน์ลงไปจนถึงแถวที่ 200 นั่นคือการสร้างลำดับรายปีที่สมบูรณ์หนึ่งชุด คัดลอกสองคอลัมน์นั้นไปด้านข้างหนึ่งพันครั้ง แล้วคุณจะได้เส้นทุนอิสระหนึ่งพันเส้น จากค่าสุดท้ายคุณคำนวณ =PERCENTILE.INC(range, 0.5) สำหรับค่ามัธยฐาน และ 0.05 กับ 0.01 เพื่อดูผลลัพธ์ห้าและหนึ่งเปอร์เซ็นต์ที่แย่ที่สุด การกด F9 คำนวณค่าสุ่มทุกค่าใหม่ ดังนั้นการกดแต่ละครั้งจึงให้การศึกษาหนึ่งพันรอบครั้งใหม่ Excel จัดการสิ่งนี้ได้อย่างราบรื่นและเพียงพอต่อการทำความเข้าใจกลยุทธ์ของคุณเองอย่างซื่อตรง

จะนำ Monte Carlo ไปใช้ใน Python อย่างไร?

Python ทำงานเดียวกันได้เร็วกว่าและช่วยให้คุณทำ bootstrap คือสุ่มจากรายการการเทรดในประวัติจริง ไม่ใช่เพียงจากพารามิเตอร์ที่สมมติขึ้น คุณนำเข้า NumPy โหลดค่า P/L จริง 100 ค่าหรือมากกว่าจากบันทึกการเทรด แล้วเขียน new_sequence = np.random.choice(history, size=200, replace=True) ฟังก์ชัน np.cumsum เปลี่ยนรายการ P/L ให้เป็นเส้นทุน และวงวนรอบ ๆ มันให้การรันอิสระหนึ่งพันรอบ คุณอ่านเปอร์เซ็นไทล์ด้วย np.percentile และใช้ Matplotlib วาด spaghetti plot ซึ่งคือเส้นทั้งหนึ่งพันเส้นซ้อนทับกันโดยเน้นค่ามัธยฐานและแถบเปอร์เซ็นไทล์ที่ 5 ถึง 95 Bootstrap รักษาส่วนหางที่แท้จริงของการกระจายตัวไว้ ทั้งการขาดทุนหนัก การเคลื่อนไหวที่กระจุกตัว และลำดับชนะสถิติเป็นครั้งคราวในสัปดาห์ที่ผันผวนสูง สมมติฐานเชิงพารามิเตอร์ทำเช่นนั้นไม่ได้ เพราะมันไม่ได้สมมติการกระจายตัวที่การเทรดของคุณมีอยู่จริง ภาพเพียงภาพเดียวเผยให้เห็นความเสี่ยงของกลยุทธ์มากกว่าตารางสิบตาราง

ข้อจำกัดของ Monte Carlo ในการเทรดมีอะไรบ้าง?

Monte Carlo ไม่ใช่การทำนาย และควรพูดเรื่องนี้ออกมาตรง ๆ สมมติฐานพื้นฐานของการจำลองเชิงพารามิเตอร์คือการเทรดเป็นอิสระต่อกันและการกระจายตัวของผลลัพธ์คงที่ ในตลาดจริงทั้งสองเงื่อนไขมักพังพร้อมกัน การขาดทุนมักกระจุกตัว เมื่อระบอบตลาดเปลี่ยน การเทรดหลายครั้งติดต่อกันอาจเคลื่อนไปทางเดียวกัน ซึ่งโมเดลที่สุ่มตัวอย่างอิสระไม่อาจจำลองได้ ด้วยเหตุนี้การลดลงของเงินทุนที่ดำมืดที่สุดในการเทรดจริงจึงมักดูแย่กว่าเปอร์เซ็นไทล์ที่ 1 เปอร์เซ็นต์จาก Monte Carlo ไม่ใช่ดีกว่า ปัญหาที่สอง คือการจำลองใช้สถิติชุดเดียวกับที่คุณดึงออกมาจากประวัติ หากประวัติของคุณครอบคลุมเพียงแนวโน้มขาขึ้นใน EUR/USD Monte Carlo จะไม่บอกอะไรคุณเลยเกี่ยวกับพฤติกรรมของกลยุทธ์ในช่วงสะสมพลังยาว ๆ ผลที่ตามมาในทางปฏิบัติ: จงปฏิบัติต่อผลลัพธ์ Monte Carlo ในฐานะพื้นเชิงความน่าจะเป็น ไม่ใช่เพดาน หากสถานการณ์ 5 เปอร์เซ็นต์ที่แย่ที่สุดชี้ไปที่การลดลง 30 เปอร์เซ็นต์ ให้สมมติว่าในสนามจริงคุณจะเห็นที่ลึกกว่านั้น กำหนดขนาดสถานะตามพื้นเชิงความน่าจะเป็นนั้น ไม่ใช่ตามผลลัพธ์ที่คาดหวังโดยเฉลี่ย แล้วความพ่ายแพ้จริงจะไม่เขี่ยคุณออก

เจาะลึกเพิ่มเติม · คู่มือฉบับสมบูรณ์