ข้ามไปที่เนื้อหา

S6 · สถิติที่ต้องใช้ทุกครั้ง

▶ clip: https://youtu.be/q1TRhOrO7Fc

จบบทนี้แล้วทำได้:

  • แปลงผลแต่ละ trade เป็น R และรายงาน E[R] พร้อมช่วงความเชื่อมั่น (CI) แทน mean ตัวเดียว
  • บอกได้ว่า n ที่ใช้คิดสถิติคือจำนวนวัน ไม่ใช่จำนวน trade และใช้ mc --daily
  • ตั้ง risk จาก drawdown หาง (p95) ของ shuffle ไม่ใช่จาก drawdown ที่เกิดจริง
  • คำนวณ win rate คุ้มทุนจาก payoff ก่อนอ่าน win rate ในรายงาน

ต้องมีก่อน: S5 · รายงานที่ใช้อยู่ใน kit ที่ lab\reports\tick-quality\ ไม่ต้อง run backtest เอง


1 · R และ E[R]

S6-1

R = net profit ÷ (ระยะ SL × lot × contract size)

ตัวหารคือเงินที่เสี่ยงไว้ใน trade นั้น trade ที่แพ้เต็ม SL จึงได้ −1R พอดี trade ที่ได้กำไรสองเท่าของที่เสี่ยงได้ +2R

E[R] คือค่าเฉลี่ย (mean) ของ R ต่อ trade — ไม่ใช่ median

ทำไมใช้ R ไม่ใช้เงิน: R ตัดเรื่องขนาดทุน ขนาด lot และ contract size ออกไปแล้ว จึงเทียบข้ามทุน ข้าม broker ข้าม lot ได้ เงินโตขึ้นได้เพียงเพราะ lot ใหญ่ขึ้นโดยไม่มี edge เลย · case จริง: sweep ที่ lot คงที่ทำให้ stop กว้างดูชนะ +200% พอคิดเป็น risk% ข้อได้เปรียบนั้นหายหมด

อ่าน histogram บนจอ

กราฟคือ R ของ 256 trade จาก lab\reports\tick-quality\Robo\A1-base.htm:

  • E[R] +0.163 แต่ CI −0.054 ถึง +0.400 คร่อมศูนย์ → ยังบอกไม่ได้ว่ามี edge
  • แท่งที่สูงที่สุดอยู่ที่ −1R (แพ้เต็ม SL) และแท่งสีน้ำตาลฝั่งลบรวมกันเป็นส่วนใหญ่ — trade ส่วนใหญ่แพ้
  • ค่าเฉลี่ยเป็นบวกเพราะหางขวาไม่กี่ trade · แค่ 3 trade บนสุดรวมได้ 25.5R จากผลรวม 41.8R

นี่คือเหตุผลที่ต้องรายงานพร้อม CI และดู distribution ไม่ใช่ mean ตัวเดียว: E[R] +0.163 ที่มาจาก "trade ส่วนใหญ่บวกนิดหน่อย" กับที่มาจาก "หางบนไม่กี่ trade" เขียนเป็นตัวเลขเดียวกันได้ แต่ความเสี่ยงต่างกันมาก แบบหลังถ้าหาง trade ใหญ่ไม่มาในช่วงข้อมูลใหม่ ผลจะกลายเป็นลบ

2 · n ที่มีผลคือจำนวนวัน

S6-2

สถิติทุกตัว (CI, t) ขึ้นกับว่ามีข้อมูลอิสระกี่ชิ้น EA ที่ยิงหลาย trade พร้อมกันหรือในวันเดียวกัน trade เหล่านั้นตอบสนองต่อตลาดชุดเดียวกัน จึงไม่อิสระกัน ถ้านับเป็นตัวอย่างแยก CI จะแคบเกินจริง

นับ trade ข้อมูลอิสระจริง
case ใน project ของผู้สอน 1,133 358
lab Robo A1-base.htm 256 trade 86 วัน

ความต่างนี้เรียกว่า design effect วัดได้ 2.13–4.61 เท่า

ทางแก้: bootstrap ทั้งวัน ด้วย --daily ของ mc · พอแก้แล้ว CI ของ 14 จาก 23 ชุดผลคร่อมศูนย์ ตัวที่เคยผ่านหายไปหลายตัว

เทียบสองโหมดบนรายงาน Robo ตัวเดียวกัน (ผลจริงจาก mc):

โหมด n win E[R] bootstrap 95%
ราย trade (ไม่ใส่ --daily) trades 256 43.0% +0.163 −0.054 .. +0.400
รายวัน (--daily) days 86 46.5% +0.486 −0.224 .. +1.178

ในโหมดรายวัน E[R] คือ R รวมต่อวัน ไม่ใช่ต่อ trade และ win คือ % ของวันที่บวก · ทั้งสองโหมด CI คร่อมศูนย์ · ตัวที่ถูกต้องคือแบบรายวัน

3 · DD จากลำดับจริงไม่ใช่เพดาน

S6-3

drawdown ในรายงานมาจากลำดับ trade ที่เกิดขึ้นจริง ซึ่งเป็นแค่เส้นทางเดียว อยู่ใกล้ค่ากลาง (p50) ไม่ใช่เพดาน ถ้าสลับลำดับ trade 2,000 รอบ จะเห็นว่าลำดับที่โชคร้ายกว่านี้พาไปได้ลึกแค่ไหน

EA-A DD จริง shuffle p90 shuffle p99
risk 3% 27% 39% 48%
risk 6% 48% 65% 76%

lab Exness A1-base.htm ที่ risk 3% (mc แบบราย trade): DD จริง 13% · shuffle p95 26% — สองเท่า

ตั้ง risk จาก tail เช่น p95 ไม่ใช่จากค่าที่เกิดจริง เหตุผลคือข้อมูลช่วงถัดไปจะมาในลำดับที่เราไม่รู้ ลำดับที่เคยเกิดไม่มีอะไรรับประกันว่าจะเกิดซ้ำ

วิธีอ่านตาราง mc: column actual sequence → DD คือลำดับจริง · column shuffle → DD p50 / DD p95 คือผลจากการสลับลำดับ · หนึ่งแถวต่อหนึ่งระดับ risk

ข้อควรระวัง: กฎนี้กลับด้านกับ EA ที่ trade เกาะกลุ่ม เช่น EA-B ที่ DD จริงไปอยู่ระหว่าง p93 ถึง p99.5 ของ shuffle · รายละเอียดอยู่ใน Advanced A7

4 · win rate สูงมาจากรูปทรง

S6-4

win% คุ้มทุน = 1 / (1 + payoff)        payoff = Average profit trade ÷ |Average loss trade|

win rate สูงไม่ได้แปลว่ามี edge ถ้า EA ตั้ง trailing ใกล้แต่ SL ไกล payoff จะต่ำ และ win rate จะสูงเองจากรูปทรงของระยะเข้า-ออก ไม่ได้มาจากฝีมือ

ฐานคุ้มทุน ชนะจริง อ่านว่า
Fortune (lock กำไร 2.50 USD · SL 10 USD) 80% 81.5% (Axi) · 74.8% (Exness) ชนะ 82% แทบไม่บอกอะไร · Exness ต่ำกว่าฐานด้วยซ้ำ
lab Robo 39.3% 45.7% เหนือเส้นเล็กน้อย
lab Exness 26.9% 52.9% เหนือเส้นมาก

ที่ต้องดูคือระยะที่อยู่เหนือเส้น ไม่ใช่ความสูงของจุด บนกราฟ Fortune อยู่สูงสุดแต่แทบอยู่บนเส้น ส่วน Exness อยู่ต่ำกว่าแต่ห่างจากเส้นมากที่สุด

คำนวณฐานจากรายงาน lab ได้เอง เช่น Robo: Average profit trade 401.25 · Average loss trade −259.35 → payoff 1.547 → ฐาน 1 / 2.547 = 39.26%

คำนวณฐานก่อนอ่านรายงานทุกครั้ง


Lab · mc บนรายงานจริง

S6-5

ต่อจากขั้นที่ 3 ของ lab S5 · ใช้รายงาน Robo ใน lab

bt\ea-bt.exe mc lab\reports\tick-quality\Robo\A1-base.htm --daily

ตอบสี่ข้อ:

  1. n ที่มีผลเท่าไร
  2. E[R] พร้อม CI เป็นเท่าไร
  3. DD p95 ที่ risk 1% และ 3% เป็นเท่าไร เทียบกับ DD ที่เกิดจริง
  4. win rate เกินฐานรูปทรงไหม (ใช้ตัวเลขจาก .htm คำนวณฐาน)

ใส่คำตอบต่อท้าย file research\4-backtest\_lab\<ชื่อคุณ>\L1.md เดิมจาก S5 · ทุกตัวเลขบอกว่ามาจากบรรทัดไหน

ตัวเลข bootstrap จะขยับเล็กน้อยทุกครั้งที่ run เป็นเรื่องปกติ

เฉลย — ทำเองก่อนแล้วค่อยเปิด

บรรทัดหัวที่ได้:

days 86 · win 46.5% · E[R] +0.486 (bootstrap 95% -0.224..+1.178) · sd 3.26 · t 1.38  FAIL G4
risk growth x DD (actual) shuffle DD p50 shuffle DD p95
1% 1.45 16% 19% 26%
2% 1.92 32% 36% 46%
3% 2.30 47% 51% 63%
5% 2.24 74% 78% 87%
  1. n = 86 วัน ไม่ใช่ 256 trade
  2. E[R] ต่อวัน +0.486 · CI −0.224 ถึง +1.178 คร่อมศูนย์ ยังบอกไม่ได้ว่ามี edge
  3. DD p95 ที่ risk 1% = 26% · ที่ 3% = 63% ขณะที่ DD จริงแค่ 16% และ 47% · ถ้าตั้ง risk จากค่าจริงจะประเมินความเสี่ยงต่ำไป
  4. win rate ต่อ trade 43.0% ถ้านับด้วย mc (ไม่ใส่ --daily) หรือ 45.7% ตาม Profit Trades ของ MT5 — ต่างกันเพราะจับคู่ deal เข้า-ออกคนละวิธี · เทียบฐาน 39.3% = เกินฐานไม่มาก · win 46.5% ในบรรทัด --daily เป็น % ของวัน ห้ามเอามาเทียบฐาน

ข้อควรระวัง: ตัดช่วงวันที่ด้วย mc --from / --to ใช้ได้เฉพาะ EA ที่ไม่มีสถานะข้าม trade คือไม่หยุดหลังแพ้ ไม่มีเพดานรายวัน และไม่ทบ lot · EA ที่มีสถานะแบบนี้ trade หลังจุดตัดขึ้นกับ trade ก่อนจุดตัด ต้อง run จริงในช่วงนั้น


จุดที่มักพลาด

พลาด ผลที่ตามมา ทางกัน
รายงาน E[R] ตัวเดียวไม่มี CI เชื่อ edge ที่อาจเป็นศูนย์ รายงาน CI ทุกครั้ง · CI คร่อมศูนย์ = ยังบอกไม่ได้
ดูแค่ mean ไม่ดู distribution ไม่รู้ว่าผลมาจากหางไม่กี่ trade ดู histogram และผลรวมของ trade บนสุด
ใช้ n = จำนวน trade CI แคบเกินจริง ผ่านทั้งที่ไม่ควรผ่าน mc --daily
ตั้ง risk จาก DD ที่เกิดจริง DD จริงในอนาคตลึกกว่าที่เตรียมไว้ ใช้ shuffle p95
เห็น win rate สูงแล้วเชื่อ หลงกับรูปทรง trailing ใกล้ SL ไกล คำนวณ 1 / (1 + payoff) ก่อน
เอา win ของโหมด --daily ไปเทียบฐาน เทียบ % ของวันกับเกณฑ์ราย trade ใช้ Profit Trades จาก .htm
ใช้ --from / --to กับ EA ที่มีสถานะข้าม trade ผลไม่ตรงกับที่ EA จะทำจริง run จริงในช่วงนั้น

ทวนท้ายบท

S6-Q

  1. EA ที่ยิงหลาย trade พร้อมกัน มี 1,133 trade ใช้ n = 1,133 คิด CI ได้ไหม
  2. drawdown จากลำดับ trade ที่เกิดจริงคือ 27% ที่ risk 3% เอา 27% ไปตั้ง risk ได้ไหม
  3. EA ชนะ 82% บอกได้ไหมว่ามี edge
เฉลย
  1. ไม่ได้ trade ที่เปิดพร้อมกันไม่อิสระกัน 1,133 trade มีข้อมูลอิสระจริงแค่ 358 ต้อง bootstrap ทั้งวัน
  2. ไม่ได้ ลำดับจริงเป็นแค่เส้นทางเดียว ใกล้ p50 · การสลับลำดับให้ p90 39% และ p99 48% ต้องตั้ง risk จาก tail
  3. ไม่ได้ ต้องคำนวณฐาน 1 / (1 + payoff) ก่อน · case Fortune ฐาน 80% ชนะจริง 81.5% และ 74.8% · trailing ใกล้กับ SL ไกลให้ win rate สูงโดยไม่ต้องมี edge