
การคำนวณ Position Size และ Price Action: อาวุธคู่ใจเทรดเดอร์ในยุคเทคโนโลยี
ในโลกของการเทรดที่ความผันผวนคือเรื่องปกติ การตัดสินใจเพียงสองอย่างที่สำคัญที่สุดอาจไม่ใช่ “ซื้อ” หรือ “ขาย” แต่คือ “เทรดอะไร” และ “เทรดขนาดเท่าไหร่” ข้อแรกตอบได้ด้วยการวิเคราะห์ตลาด ในขณะที่ข้อหลังต้องอาศัยวินัยและเครื่องมือที่แม่นยำ นี่คือจุดที่การจัดการความเสี่ยงและการคำนวณขนาดของตำแหน่ง (Position Sizing) เข้ามามีบทบาทชี้เป็นชี้ตายต่อพอร์ตการลงทุน อย่างไรก็ตาม การคำนวณขนาดตำแหน่งแบบตายตัวอาจไม่สอดคล้องกับสภาพตลาดจริงที่เปลี่ยนแปลงทุกวัน ดังนั้น การผสานแนวคิดการคำนวณขนาดตำแหน่งเข้ากับการวิเคราะห์ Price Action ประจำวัน (Daily Price Action) จึงกลายเป็นศาสตร์และศิลป์ที่เทรดเดอร์มืออาชีพให้ความสำคัญ และในยุคนี้ เทคโนโลยีคือตัวช่วยที่ทำให้กระบวนการนี้มีประสิทธิภาพ รวดเร็ว และปราศจากอารมณ์
- การคำนวณ Position Size และ Price Action: อาวุธคู่ใจเทรดเดอร์ในยุคเทคโนโลยี
- ทำความเข้าใจพื้นฐาน: Position Sizing และ Daily Price Action
- ออกแบบและสร้าง Position Size Calculator แบบไดนามิก
- เทคนิคขั้นสูงและการประยุกต์ใช้จริง
- การทดสอบย้อนหลัง (Backtesting) และการปรับปรุงกลยุทธ์
- การนำไปใช้จริงและข้อควรระวัง
- Summary
บทความเทคโนโลยีนี้จะเจาะลึกถึงการสร้างและประยุกต์ใช้เครื่องคำนวณขนาดตำแหน่ง (Position Size Calculator) ที่อิงตาม Price Action ประจำวัน เราจะสำรวจตั้งแต่แนวคิดพื้นฐาน สูตรคณิตศาสตร์ การเขียนโปรแกรมอัตโนมัติ ไปจนถึงการทดสอบย้อนหลัง (Backtesting) และการนำไปใช้จริงในตลาด โดยใช้ภาษา HTML, CSS, และ JavaScript เป็นหลักในการสาธิต
ทำความเข้าใจพื้นฐาน: Position Sizing และ Daily Price Action
ก่อนจะไปถึงการสร้างเครื่องมือ เราต้องทำความเข้าใจสองเสาหลักนี้ให้ชัดเจน
Position Sizing: ศาสตร์แห่งการอยู่รอดและเติบโต
Position Sizing คือกระบวนการกำหนดปริมาณหน่วย (เช่น จำนวนหุ้น, ล็อต, คอนแตรคต์) ที่จะซื้อหรือขายในการเทรดแต่ละครั้ง โดยมีเป้าหมายหลักคือการควบคุมความเสี่ยงต่อพอร์ตการลงทุนให้อยู่ในระดับที่ยอมรับได้ หลักการสำคัญคือการไม่เสี่ยงเงินทุนมากเกินไปในเทรดเดียว ซึ่งมักกำหนดเป็นเปอร์เซ็นต์ของพอร์ตทั้งหมด (เช่น 1-2% ต่อเทรด)
- ความเสี่ยงต่อเทรด (Risk per Trade): จำนวนเงินสูงสุดที่คุณยินดีจะสูญเสียในเทรดนั้น
- จุดตัดขาดทุน (Stop-Loss): ราคาที่คุณจะออกจากเทรดเพื่อจำกัดความเสียหาย
- ขนาดตำแหน่ง: จำนวนหน่วยที่คำนวณได้จากความเสี่ยงและจุดตัดขาดทุน
Daily Price Action: ศิลป์แห่งการตีความตลาด
Daily Price Action คือการศึกษาพฤติกรรมของราคาจากกราฟแท่งเทียนหรือบาร์ประจำวัน (Daily Chart) โดยไม่พึ่งพาอินดิเคเตอร์ที่ล้าหลังมากเกินไป มันมุ่งเน้นที่รูปแบบ (Patterns), ระดับคีย์ (Key Levels) เช่น สูงสุด-ต่ำสุดของวัน, จุดพีวิต (Pivot Points), แนวรับ-แนวต้าน และจิตวิทยาของตลาดที่สะท้อนผ่านรูปแท่งเทียน
- แท่งเทียน (Candlestick): แสดงราคาเปิด, สูงสุด, ต่ำสุด, ปิด ของวัน
- ระดับแนวรับ-แนวต้าน (Support/Resistance): บริเวณที่ราคามีแนวโน้มจะกระดอนหรือย้อนกลับ
- Volatility: ความผันผวนของราคาในวันนั้น ซึ่งส่งผลโดยตรงต่อการวางจุด Stop-Loss
การรวมกันของทั้งสองแนวคิดหมายความว่า: ขนาดของตำแหน่งที่คุณเทรดในวันนี้ ควรถูกปรับตามสภาพตลาดและโครงสร้าง Price Action ของวันนี้ ไม่ใช่ใช้ตัวเลขคงที่ตลอดเวลา
ออกแบบและสร้าง Position Size Calculator แบบไดนามิก
เครื่องคิดเลขพื้นฐานคำนวณจากสูตรง่ายๆ: Position Size = (Risk Amount) / (Entry Price - Stop Loss Price) แต่เครื่องมือของเราจะต้องไดนามิกกว่า โดยรับอินพุตจาก Price Action ของวัน
โครงสร้างข้อมูลและอินพุตจากผู้ใช้
เราจะออกแบบฟอร์มที่เก็บข้อมูลสำคัญต่อไปนี้:
- ข้อมูลพอร์ต: ขนาดพอร์ตทั้งหมด, %ความเสี่ยงต่อเทรด
- วันนี้สูงสุด (Today’s High)
- วันนี้ต่ำสุด (Today’s Low)
- ราคาปิดเมื่อวาน (Previous Close)
- ระดับแนวรับ-แนวต้านที่สำคัญ (Manual Input)
- กลยุทธ์การตั้ง Stop-Loss: ผู้ใช้สามารถเลือกได้ว่าจะตั้ง Stop-Loss แบบใด
ข้อมูลเทรด: ทิศทางเทรด (Long/Short), ราคาเข้าที่คาดการณ์
ข้อมูลจาก Daily Price Action:
ตัวอย่างโค้ด HTML โครงสร้างพื้นฐาน
<div id="calculator">
<h3>Position Size Calculator (Daily Price Action)</h3>
<form id="calcForm">
<h4>ข้อมูลพอร์ต</h4>
<label for="accountSize">ขนาดพอร์ต (บาท):</label>
<input type="number" id="accountSize" value="100000" step="1000" required>
<label for="riskPercent">% ความเสี่ยงต่อเทรด:</label>
<input type="number" id="riskPercent" value="1" step="0.1" min="0.1" max="5" required>
<h4>ข้อมูล Price Action ประจำวัน</h4>
<label for="todayHigh">วันนี้สูงสุด:</label>
<input type="number" id="todayHigh" step="0.01" required>
<label for="todayLow">วันนี้ต่ำสุด:</label>
<input type="number" id="todayLow" step="0.01" required>
<label for="prevClose">ราคาปิดเมื่อวาน:</label>
<input type="number" id="prevClose" step="0.01" required>
<h4>ข้อมูลเทรด</h4>
<label for="tradeDirection">ทิศทาง:</label>
<select id="tradeDirection">
<option value="long">Long (ซื้อ)</option>
<option value="short">Short (ขาย)</option>
</select>
<label for="entryPrice">ราคาเข้าเป้า:</label>
<input type="number" id="entryPrice" step="0.01" required>
<label for="stopLossMethod">วิธีตั้ง Stop-Loss:</label>
<select id="stopLossMethod">
<option value="atr">ใช้ ATR (ความผันผวน)</option>
<option value="keyLevel">ใช้ระดับคีย์จาก Price Action</option>
<option value="manual">กำหนดเอง</option>
</select>
<div id="manualStopLossSection" style="display:none;">
<label for="stopLossPrice">ราคา Stop-Loss (กำหนดเอง):</label>
<input type="number" id="stopLossPrice" step="0.01">
</div>
<button type="button" onclick="calculatePosition()">คำนวณขนาดตำแหน่ง</button>
</form>
<div id="results">
<h4>ผลลัพธ์การคำนวณ</h4>
<p>จำนวนเงินที่เสี่ยง: <span id="riskAmount">0</span> บาท</p>
<p>ราคา Stop-Loss ที่คำนวณ: <span id="calcStopLoss">0</span></p>
<p>ระยะห่าง Stop (Points/Pips): <span id="stopDistance">0</span></p>
<p><strong>ขนาดตำแหน่งที่แนะนำ (หน่วย): <span id="positionSize">0</span></strong></p>
</div>
</div>
อัลกอริทึมการคำนวณ Stop-Loss จาก Price Action
หัวใจของเครื่องคิดเลขนี้คือการกำหนดจุด Stop-Loss แบบไดนามิก เราเขียนฟังก์ชันใน JavaScript เพื่อคำนวณ
function calculateStopLoss(high, low, close, entry, direction, method) {
let stopLossPrice;
const atr = (high - low); // ATR แบบง่าย (ใช้ Range ของวัน)
switch(method) {
case 'atr':
// ตั้ง Stop ห่างจาก Entry ตามความผันผวน (เช่น 0.5 * ATR)
const atrMultiplier = 0.5;
const atrValue = atr * atrMultiplier;
if (direction === 'long') {
stopLossPrice = entry - atrValue;
} else {
stopLossPrice = entry + atrValue;
}
break;
case 'keyLevel':
// ใช้ระดับต่ำสุดของวันเป็น Stop สำหรับ Long, ระดับสูงสุดของวันสำหรับ Short
if (direction === 'long') {
stopLossPrice = low - (low * 0.001); // ห่างใต้ Low นิดหน่อย
} else {
stopLossPrice = high + (high * 0.001); // ห่างเหนือ High นิดหน่อย
}
break;
case 'manual':
// ใช้ค่าจากผู้ใช้ (จัดการในฟังก์ชันหลัก)
stopLossPrice = document.getElementById('stopLossPrice').value;
break;
default:
stopLossPrice = (direction === 'long') ? entry * 0.98 : entry * 1.02; // Default 2%
}
return parseFloat(stopLossPrice.toFixed(2));
}
function calculatePosition() {
// ดึงค่าจากฟอร์ม
const accountSize = parseFloat(document.getElementById('accountSize').value);
const riskPercent = parseFloat(document.getElementById('riskPercent').value);
const todayHigh = parseFloat(document.getElementById('todayHigh').value);
const todayLow = parseFloat(document.getElementById('todayLow').value);
const prevClose = parseFloat(document.getElementById('prevClose').value);
const direction = document.getElementById('tradeDirection').value;
const entryPrice = parseFloat(document.getElementById('entryPrice').value);
const method = document.getElementById('stopLossMethod').value;
// คำนวณ Stop-Loss
const stopLoss = calculateStopLoss(todayHigh, todayLow, prevClose, entryPrice, direction, method);
// คำนวณเงินที่เสี่ยง
const riskAmount = accountSize * (riskPercent / 100);
// คำนวณระยะห่างของ Stop
let stopDistance;
if (direction === 'long') {
stopDistance = entryPrice - stopLoss;
} else {
stopDistance = stopLoss - entryPrice;
}
// คำนวณขนาดตำแหน่ง (หน่วย)
// **สำคัญ: ในตลาดจริงต้องคำนึงถึง Lot Size, Contract Size ด้วย**
const positionSize = Math.floor(riskAmount / stopDistance);
// แสดงผล
document.getElementById('riskAmount').textContent = riskAmount.toFixed(2);
document.getElementById('calcStopLoss').textContent = stopLoss.toFixed(2);
document.getElementById('stopDistance').textContent = stopDistance.toFixed(2);
document.getElementById('positionSize').textContent = positionSize;
}
เทคนิคขั้นสูงและการประยุกต์ใช้จริง
เครื่องมือพื้นฐานทำงานได้ดี แต่เพื่อประสิทธิภาพสูงสุด เราต้องเพิ่มลอจิกที่ซับซ้อนและสอดคล้องกับสถานการณ์จริง
การปรับ Volatility ด้วย Average True Range (ATR)
การใช้เพียง Range ของวันเดียวอาจไม่เสถียร การคำนวณ ATR (ค่าเฉลี่ยของ True Range) ในช่วง 14 วันจะวัดความผันผวนได้ดีกว่า เราสามารถเขียนฟังก์ชันคำนวณ ATR จากข้อมูลย้อนหลัง และนำมาเป็นฐานตั้ง Stop-Loss
// ฟังก์ชันคำนวณ ATR แบบง่ายจากอาร์เรย์ของข้อมูลวัน (แต่ละ object มี high, low, close)
function calculateATR(priceData, period = 14) {
let trueRanges = [];
for (let i = 1; i sum + val, 0) / recentTRs.length;
return atr;
}
// ตัวอย่างการใช้งานในกลยุทธ์
const dailyData = [ /* อาร์เรย์ของข้อมูลราคาประจำวัน */ ];
const currentATR = calculateATR(dailyData);
// ตั้ง Stop-Loss ห่างจาก Entry 1.5 * ATR
const dynamicStopDistance = 1.5 * currentATR;
การผสมผสานกับ Pivot Points
Pivot Points เป็นระดับที่คำนวณจากราคาของวันก่อนหน้า มักใช้เป็นแนวรับแนวต้านในวันปัจจุบัน การใช้ระดับ S1 (Support 1) หรือ R1 (Resistance 1) เป็นจุด Stop-Loss เป็นกลยุทธ์ที่ใช้กันทั่วไป
| วิธีการ | การคำนวณ | จุดแข็ง | จุดอ่อน | เหมาะกับ |
|---|---|---|---|---|
| Fixed Percentage | % คงที่จาก Entry (เช่น -2%) | ง่าย, ไม่ต้องวิเคราะห์ | ไม่สัมพันธ์กับความผันผวนหรือโครงสร้างตลาด | มือใหม่, สินทรัพย์ที่ผันผวนต่ำ |
| ATR-Based | Entry ± (Multiplier x ATR) | ปรับตามความผันผวน, กำหนดความเสี่ยงเป็นหน่วยมาตรฐาน | อาจไม่เคารพระดับเทคนิคที่สำคัญ | เทรดเดอร์ที่เน้นความผันผวน, ทุกตลาด |
| Key Level (Price Action) | ต่ำกว่าด้านล่าง (Low) สำหรับ Long, สูงกว่าด้านบน (High) สำหรับ Short | เคารพโครงสร้างตลาด, จิตวิทยาเทรดเดอร์ | Stop อาจห่างมากในวันที่ผันผวนสูง | Price Action Trader, Swing Trader |
| Pivot Point Based | ใช้ระดับ S1, R1 หรือ Pivot หลัก | ใช้ระดับที่เทรดเดอร์หลายคนมอง, มีเหตุผลชัดเจน | อาจถูก “ล่า Stop” บ่อยหากเป็นระดับที่ชัดเจนเกินไป | เทรดเดอร์ช่วงรายวัน, ตลาด Forex และ Commodity |
การทดสอบย้อนหลัง (Backtesting) และการปรับปรุงกลยุทธ์
เครื่องคิดเลขที่ออกแบบมาอย่างดีต้องผ่านการทดสอบกับข้อมูลในอดีต เพื่อดูว่าการจัดการความเสี่ยงแบบนี้จะให้ผลลัพธ์อย่างไรกับระบบเทรดของเรา
ออกแบบระบบ Backtesting แบบง่าย
เราสามารถจำลองการเทรดโดยใช้ข้อมูลประวัติศาสตร์ โดยในแต่ละวันจะมีการคำนวณขนาดตำแหน่งใหม่ตาม Price Action ของวันนั้น
- ขั้นตอนที่ 1: รวบรวมข้อมูล OHLC (Open, High, Low, Close) ประจำวัน
- ขั้นตอนที่ 2: กำหนดกฎการเข้าออก (Entry/Exit Rules) ของระบบเทรด
- ขั้นตอนที่ 3: ในแต่ละสัญญาณเข้า ให้เรียกใช้ Position Size Calculator ของเรา โดยใช้ข้อมูล High, Low ของวันนั้น (หรือวันก่อนหน้า) มาคำนวณ Stop-Loss และขนาดตำแหน่ง
- ขั้นตอนที่ 4: บันทึกผลกำไรขาดทุนของแต่ละเทรด พร้อมกับขนาดตำแหน่งที่ใช้
- ขั้นตอนที่ 5: วิเคราะห์ผลลัพธ์ เช่น อัตราส่วนกำไรต่อขาดทุน (Profit Factor), การดรอว์ดาวน์สูงสุด (Max Drawdown), และการกระจายของผลตอบแทน
การวิเคราะห์และปรับพารามิเตอร์
หลัง backtest เราอาจพบว่า:
- การใช้ ATR Multiplier = 1.5 ทำให้ Stop ถูกตีบ่อยเกินไป → ลองปรับเป็น 2.0
- การเสี่ยง 2% ต่อเทรดทำให้ Drawdown สูงเกินความสบายใจ → ลดเหลือ 0.75%
- การตั้ง Stop ตามวันต่ำสุด/สูงสุด ให้ผลลัพธ์ดีกว่าในตลาด Trending แต่แย่ในตลาด Sideways → พัฒนากฎเพื่อแยกประเภทตลาด
กระบวนการนี้คือหัวใจของการทำ “Quantitative Trading” แบบง่ายๆ ที่任何人ก็เริ่มได้
การนำไปใช้จริงและข้อควรระวัง
การมีเครื่องมือที่ทรงพลังก็ต้องใช้ด้วยความเข้าใจและระมัดระวัง
กรณีศึกษา: การเทรดหุ้น SET50 ด้วย Price Action รายวัน
สมมติคุณเป็น Swing Trader มองหาโอกาส Long ในหุ้น AOT หลังจากพักฐาน
- วิเคราะห์ Price Action: วันนี้ราคาปิดเหนือแนวต้านสำคัญ และมีแท่งเทียนแบบ Bullish Engulfing บนกราฟรายวัน
- ป้อนข้อมูลใน Calculator:
- พอร์ต: 500,000 บาท, ความเสี่ยง: 1% (5,000 บาท)
- วันนี้สูงสุด: 62.50, วันนี้ต่ำสุด: 60.75, ปิดเมื่อวาน: 61.00
- ทิศทาง: Long, ราคาเข้าเป้า: 62.00 ( breakout retest )
- Stop-Loss Method: Key Level (ใช้ต่ำกว่าวันนี้ต่ำสุด)
- ผลลัพธ์: เครื่องคิดเลขคำนวณ Stop-Loss ที่ 60.50 (ต่ำกว่า Low วันนี้เล็กน้อย) ระยะห่าง Stop = 1.50 บาท ขนาดตำแหน่ง = 5,000 / 1.50 = 3,333 หุ้น (ต้องปรับเป็นหน่วยการซื้อขายที่ถูกต้อง)
ข้อควรระวังและข้อจำกัดของเทคโนโลยี
| ข้อจำกัด | ความเสี่ยง | แนวทางแก้ไข/การจัดการ |
|---|---|---|
| Gap เปิดตลาด | ราคาเปิดข้ามผ่าน Stop-Loss ที่คำนวณไว้ ทำให้ขาดทุนมากกว่าที่กำหนด | ใช้ Stop-Loss ประเภท Stop-Limit Order, ลดขนาดตำแหน่งลงในสภาวะที่มีข่าวสำคัญ, เพิ่ม Buffer ให้กับ Stop |
| Over-Optimization | ปรับพารามิเตอร์ของ Calculator ให้เข้ากับข้อมูลอดีตมากเกินไป จนทำงานได้แย่ในอนาคต | ใช้ข้อมูล Out-of-Sample ในการทดสอบสุดท้าย, ใช้พารามิเตอร์ที่เข้าใจได้ตามตรรกะ (ไม่ใช่แค่ตัวเลขวิเศษ), ทดสอบในหลายตลาด/หลายช่วงเวลา |
| ความล่าช้าและข้อผิดพลาดของข้อมูล | ข้อมูล High/Low ของวันอาจยังไม่สมบูรณ์หากเทรดก่อนตลาดปิด | ออกแบบให้ใช้ข้อมูลของวันก่อนหน้าเป็นหลักสำหรับการวางแผนเทรดวันต่อไป, อัพเดทข้อมูลแบบ Real-time ด้วย API จากโบรกเกอร์ |
| จิตวิทยาการเทรด | แม้เครื่องคิดเลขจะคำนวณมาแล้ว แต่เทรดเดอร์อาจไม่ยอมรับขาดทุนหรือปรับขนาดตำแหน่งตามอารมณ์ | ทำให้กระบวนการเป็นอัตโนมัติให้มากที่สุด (เช่น ใช้ Trading Bot ที่รับสัญญาณและคำนวณ Position อัตโนมัติ), ฝึกวินัยอย่างเคร่งครัด |
Summary
การสร้างและใช้ Position Size Calculator ที่ผสมผสานกับ Daily Price Action ไม่ใช่แค่การเขียนโค้ดหรือใช้สูตรคณิตศาสตร์ แต่มันคือการสร้างระบบจัดการความเสี่ยงที่ชาญฉลาดและตอบสนองต่อสภาพตลาดจริง เครื่องมือดังกล่าวช่วยแปลงแนวคิดการเทรดแบบ discretionary (ใช้ดุลยพินิจ) ให้มีโครงสร้างและวินัยที่ชัดเจน โดยเทคโนโลยีทำหน้าที่เป็นตัวกลางที่ปราศจากอารมณ์ ตั้งแต่การคำนวณ Stop-Loss แบบไดนามิกตามความผันผวน (ATR) หรือระดับคีย์ การกำหนดขนาดตำแหน่งที่สอดคล้องกับขนาดพอร์ตและระดับความเสี่ยงที่กำหนด ไปจนถึงการทดสอบย้อนหลังเพื่อหาพารามิเตอร์ที่เหมาะสม
ความสำเร็จไม่ได้อยู่ที่ความซับซ้อนของเครื่องคิดเลข แต่อยู่ที่ความเข้าใจในตรรกะเบื้องหลังและวินัยในการปฏิบัติตามระบบอย่างเคร่งครัด เทรดเดอร์ในยุคเทคโนโลยีควรมองว่าเครื่องมือนี้เป็น “ผู้ช่วยที่รอบคอบ” ที่คอยเตือนไม่ให้เราเสี่ยงมากเกินไปในวันที่ตลาดผันผวนสูง และช่วยให้เราได้ส่วนแบ่งที่เหมาะสมในเทรดที่มีโอกาสดี แม้ในที่สุดแล้ว การตัดสินใจและความรับผิดชอบยังคงอยู่ในมือของเทรดเดอร์ผู้เป็นนายของเครื่องมือนี้ การเริ่มต้นจากโค้ดพื้นฐานในบทความนี้ ปรับแต่งตามกลยุทธ์ส่วนตัว และทดสอบอย่างละเอียด จะนำไปสู่การพัฒนาระบบการเทรดที่แข็งแกร่งและยั่งยืนในระยะยาว
อ่านเพิ่มเติม
บทความที่เกี่ยวข้อง
📱 ดาวน์โหลดแอป iCafeFX ฟรี — รับสัญญาณเทรด Forex และทองคำ XAU/USD แบบ Real-time
ดาวน์โหลดเลย










TH ▼
English
Tiếng Việt
Indonesia
Melayu
ខ្មែរ
ລາວ
日本語
한국어
简体中文