แต่ละองค์ประกอบ พี ไอ เจ พี_{ไอ เจ} พีไอเจ คำนวณได้ดังนี้:
ขั้นตอนที่ 4: ใช้ Markov Chain สำหรับการทำนาย
ใช้เมทริกซ์ความน่าจะเป็นของการเปลี่ยนผ่านเพื่อทำนายสถานะในอนาคต เมื่อพิจารณาจากสถานะปัจจุบัน ความน่าจะเป็นของสถานะในอนาคตสามารถคำนวณได้โดยการคูณเวกเตอร์สถานะปัจจุบันกับเมทริกซ์การเปลี่ยนผ่าน
หากเวกเตอร์สถานะปัจจุบันเป็น โซ0
ขั้นตอนที่ 5: พัฒนากลยุทธ์การซื้อขาย
พัฒนากลยุทธ์การซื้อขายโดยอิงจากสถานะในอนาคตที่คาดการณ์ไว้ ตัวอย่างเช่น หากแบบจำลองคาดการณ์ว่าราคามีแนวโน้มเพิ่มขึ้นสูง (เปลี่ยนไปสู่สถานะที่เพิ่มขึ้น) คุณอาจตัดสินใจซื้อ ในทางกลับกัน หากคาดการณ์ว่าราคาจะลดลง คุณอาจตัดสินใจขายหรือขายชอร์ตสินทรัพย์
ตัวอย่างใน MQL5
ด้านล่างนี้เป็นตัวอย่างวิธีการนำกลยุทธ์แบบ Markov Chain ง่ายๆ ไปใช้ใน MQL5:
enum PriceState { DECREASE_SIGNIFICANTLY, DECREASE_SLIGHTLY, STABLE, INCREASE_SLIGHTLY, INCREASE_SIGNIFICANTLY }; PriceState GetState(double priceChange) { if (priceChange < -0.5) return DECREASE_SIGNIFICANTLY; if (priceChange < -0.1) return DECREASE_SLIGHTLY; if (priceChange < 0.1) return STABLE; if (priceChange < 0.5) return INCREASE_SLIGHTLY; return INCREASE_SIGNIFICANTLY; } double transitionMatrix(5)(5) = { {0.2, 0.3, 0.2, 0.2, 0.1}, {0.1, 0.3, 0.4, 0.1, 0.1}, {0.1, 0.2, 0.4, 0.2, 0.1}, {0.1, 0.1, 0.3, 0.4, 0.1}, {0.1, 0.1, 0.2, 0.3, 0.3} }; PriceState PredictNextState(PriceState currentState) { double rnd = MathRand() / (double)RAND_MAX; double cumulativeProbability = 0.0; for (int i = 0; i < 5; i++) { cumulativeProbability += transitionMatrix(currentState)(i); if (rnd <= cumulativeProbability) { return (PriceState)i; } } return currentState; } void OnTick() { static PriceState currentState = STABLE; static double previousClose = 0.0; double currentClose = iClose(Image(), PERIOD_M1, 0); if (previousClose != 0.0) { double priceChange = (currentClose - previousClose) / previousClose * 100; currentState = GetState(priceChange); PriceState nextState = PredictNextState(currentState); if (nextState == INCREASE_SIGNIFICANTLY || nextState == INCREASE_SLIGHTLY) { if (PositionSelect(Image()) == false) { OrderSend(Image(), OP_BUY, 0.1, Ask, 2, 0, 0, "Purchase Order", 0, 0, Inexperienced); } } else if (nextState == DECREASE_SIGNIFICANTLY || nextState == DECREASE_SLIGHTLY) { if (PositionSelect(Image()) == true) { OrderSend(Image(), OP_SELL, 0.1, Bid, 2, 0, 0, "Promote Order", 0, 0, Purple); } } } previousClose = currentClose; }
จุดสำคัญ:
- การกำหนดสถานะ: ขึ้นอยู่กับการเปลี่ยนแปลงราคา.
- คำนวณความน่าจะเป็นในการเปลี่ยนแปลง:จากข้อมูลในอดีต
- ทำนายสถานะในอนาคต:การใช้เมทริกซ์การเปลี่ยนผ่าน
- พัฒนากลยุทธ์:ซื้อหรือขายตามสถานะที่คาดการณ์
การใช้โซ่มาร์คอฟช่วยในการจับภาพความน่าจะเป็นของการเคลื่อนไหวของราคา และสามารถเป็นเครื่องมือที่มีประโยชน์ในการพัฒนากลยุทธ์การซื้อขาย