MyBanner

โฆษณา

วันเสาร์ที่ 23 มกราคม พ.ศ. 2559

การปิดคำสั่งซื้อขาย และการทำ Trailing Stop ของ My Fast Slow Moving Average Thai EA



ดาวน์โหลดแฟ้ม EA
ปรับปรุงครั้งล่าสุดเมื่อ :๑๖ มกราคม พ.ศ. ๒๕๕๙ เวลา ๑๒.๐๐ น. Unstable
ไม่รับประกันความเสียหายอันเนื่องมาจากการทำงานของ EA ชุดนี้


การปิดคำสั่งซื้อขาย

การปิดคำสั่งซื้อขายของ My Fast Slow Moving Average Thai EA นอกจากจะปิดคำสั่งซื้อขายโดยการที่ราคาวิ่งชน T/P (Take Porfit) หรือ S/L (Stop Loss) ตามปรกติแล้ว ในระหว่างที่ราคายังวิ่งไม่ถึง T/P หรือ S/L โปรแกรม Export Adviser ที่ชื่อ My Fast Slow Moving Average Thai EA ยังสามารถปิดคำสั่งซื้อขายด้วยเงื่อนไขอื่นๆ ซึ่งจะแบ่งเป็น 3 กรณี ดังนี้
      1. กรณีคำสั่งซื้อขายเป็นคำสั่งซื้อ (BUY) หรือขณะอยู่ในเทรนขาขึ้น My Fast Slow Moving Average Thai EA จะทำการปิดคำสั่งดังกล่าว หากราคามาเปิดที่ใต้เส้นค่าเฉลี่ยเคลื่อนเร็ว
      2. กรณีคำสั่งซื้อขายที่เปิดเป็นคำสั่ง ขาย (SELL) หรือขณะอยู่ในเทรนขาลง My Fast Slow Moving Average Thai EA จะทำการปิดคำสั่งซื้อขายดังกล่าว ถ้าราคามาเปิดที่เหนือเส้นค่าเฉลี่ยเคลื่อนเร็ว
      3. ในกรณีกำหนดค่า FridayClosePositiveOrder เป็น True จะเป็นการกำหนดให้ EA ตรวจสอบิดคำสั่งซื้อขายที่มีผลกำไรขาดทุนเป็นบวกในทุกๆ วันศุกร์
ในกรณีที่ 1) และ 2) ถ้าเรากำหนดค่า ProfitPositiveCheck เป็น False จะเป็นการกำหนดให้ EA ปิดคำสั่งซื้อขายที่ตรงตามเงื่อนไขที่กล่าวมาในข้างต้น แต่ถ้ากำหนดค่า ProfitPositiveCheck เป็น True ตัว EA จะเลือกปิดเฉพาะคำสั่งซื้อขายที่มีผลกำไรขาดทุนเป็นบวกเท่านั้น แต่อย่างไรก็ดี การปิดคำสั่งซื้อขายตามเงื่อนไขดังกล่าวไม่จำเป็นเสมอไปว่าจะต้องเป็นการเปลี่ยนเทรน

การทำ Trailing Stop

การทำ Trailing Stop ของ My Fast Slow Moving Average Thai EA จะทำในกรณีที่ ราคาวิ่งไปถูกทางแต่ยังไม่ถึง TP เมื่อราคาเคลื่อนถึงจุดที่กำหนดโดยในที่นี้กำหนดไว้ที่ 150 pip จากราคาที่เปิดคำสั่งซื้อขาย ซึ่ง My Fast Slow Moving Average Thai EA จะทำใส่ Trailing Stop ตามระยะที่ระบุใน Trailing Stop + 150 pip ซึ่งเมื่อราคาวิ่งมาชน Trailing Stop ก็จะเป็นการปิดคำสั่งซื้อขายอีกรูปแบบหนึ่ง
สำหรับเหตุผลที่ต้องเริ่มต้นทำ Trailing Stop ที่ระยะ 150 pip จากราคาที่เปิดคำสั่งซื้อขาย เนื่องจากหากนำ EA ชุดนี้ไปใช้กับโบรกเกอร์ XM จะทำให้ได้ผลตอบแทนอย่างน้อย 1 cent ซึ่งถ้ากำหนดระยะใกล้กว่านี้จะทำให้ผลตอบแทนเป็น 0

สำหรับฟังก์ชันที่เกี่ยวข้องกับงานข้างต้นของ My Fast Slow Moving Average จะประกอบด้วยฟังก์ชันต่างๆ ดังนี้
    • ฟังก์ชัน ตรวจสอบปิดคำสั่งซื้อขาย() ทำหน้าตรวจสอบและสั่งปิดคำสั่งซื้อขายตามเงื่อนไขต่าง ๆ ตามที่กล่าวในข้างต้น
    • ฟังก์ชัน ปิดคำสั่งซื้อ_BUYหรือทำ_TrailingStop() ทำหน้าที่ปิดคำสั่ง ซื้อ (Buy) และทำ Traling Stop
    • ฟังก์ชั้น ปิดคำสั่งขาย_SELLหรือทำ_TrailingStop() ทำหน้าที่ปิดคำสั่ง ขาย (Sell) และทำ Trailing Stop

รายละเอียดของฟังก์ชัน ตรวจสอบปิดคำสั่งซื้อขาย()
/*+------------------------------------------------------------------+
ฟังก์ชัน ตรวจสอบเปิดคำสั่งซื้อขาย(); ทำหน้าที่ตรวจสอบเงื่อนไข เพื่อเปิดคำสั่งซื้อขาย
+------------------------------------------------------------------+*/
void ตรวจสอบปิดคำสั่งซื้อขาย(double เส้นค่าเฉลี่ยเคลื่อนเร็ว)
{
        double ผลกำไรขาดทุนของคำสั่งซื้อขาย; //สำหรับเก็บค่ากำไรขาดทุนของ Order

        for(int i=0;i<OrdersTotal();i++)
       {
                //กรณีไม่มีคำสั่งซื้อขาย
                if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                {
                        //เลือกลบเฉพาะที่เปิดด้วย EA ชุดนี้เท่านั้น
                        if ((OrderMagicNumber() == เลขประจำEA) &&
                             (OrderComment() == ชื่อEA) &&
                             (OrderSymbol() == Symbol()))
                        {
                                 //หาค่ากำไร/ขาดทุนของ Order
                         ผลกำไรขาดทุนของคำสั่งซื้อขาย = OrderProfit() + OrderSwap() + OrderCommission();

                                //ตรวจสอบกรณีคำสั่งซื้อ (BUY)
                                if (OrderType()==OP_BUY)
                                {
                                        //ปิดคำสั่ง BUY ที่มีกำไรในวันศุกร์
                                        if (FridayClosePositiveOrder &&
                                            (DayOfWeek()==FRIDAY) &&
                                            ((TimeHour(TimeCurrent())) > StringToTime("14:00:00")) &&
                                            (ผลกำไรขาดทุนของคำสั่งซื้อขาย > 0))
                                       {
                                                 ข้อความแสดงบนจอ += "\n\n***ทุกวันศุกร์ปิดคำสั่งซื้อที่ผลกำไรเป็น บวก ตั้งแต่เวลา ๑๔.๐๐ น. เป็นต้นไป ***";
                                                Comment(ข้อความแสดงบนจอ);

                                                //ปิดคำสั่ง BUY
                                                if(!OrderClose(OrderTicket(), OrderLots(), Bid, 3, White))
                                                        Print("OrderClose error ",GetLastError());
                                        }

                                        //กรณีปรกติ
                                        //ตรวจสอบเงื่อนไขกรณีปิดคำสั่งซื้อขายเฉพาะที่มีกำไร
                                        if (ProfitPositiveCheck)
                                        {
                                               //ถ้าค่ากำไร/ขาดทุนของ Order ยังติดลบยังไม่ปิด Order
                                                if (ผลกำไรขาดทุนของคำสั่งซื้อขาย > 0)
                                               {
                                                       ปิดคำสั่งซื้อ_BUYหรือทำ_TrailingStop(เส้นค่าเฉลี่ยเคลื่อนเร็ว);
                                               }
                                        } else { //กรณีกำหนดให้ผลของคำสั่งซื้อขาย ไม่จำเป็นต้องมีกำไร
                                               ปิดคำสั่งซื้อ_BUYหรือทำ_TrailingStop(เส้นค่าเฉลี่ยเคลื่อนเร็ว);
                                        }
                                 }
                                 //ตรวจสอบกรณีคำสั่งขาย (SELL)
                                if (OrderType()==OP_SELL)
                                {
                                       //ปิดคำสั่ง BUY ที่มีกำไรในวันศุกร์
                                       if (FridayClosePositiveOrder &&
                                           (DayOfWeek()==FRIDAY) &&
                                           (TimeHour(TimeCurrent()) > StringToTime("14:00:00")) &&
                                           (ผลกำไรขาดทุนของคำสั่งซื้อขาย > 0))
                                       {
                                                   ข้อความแสดงบนจอ += "\n\n***ทุกวันศุกร์ปิดคำสั่งซื้อที่ผลกำไรเป็น บวก ตั้งแต่เวลา ๑๔.๐๐ น. เป็นต้นไป ***";
                                                Comment(ข้อความแสดงบนจอ);
                                                 //ปิดคำสั่ง SELL
                                                 if(!OrderClose(OrderTicket(), OrderLots(), Ask, 3, White))
                                                        Print("OrderClose error ",GetLastError());
                                        }
                                        //ตรวจสอบเงื่อนไขกรณีปิดคำสั่งซื้อขายเฉพาะที่มีกำไร
                                        if (ProfitPositiveCheck)
                                        {
                                                //ถ้าค่ากำไร/ขาดทุนของ Order ยังติดลบยังไม่ปิด Order
                                                if (ผลกำไรขาดทุนของคำสั่งซื้อขาย > 0)
                                               {
                                                       ปิดคำสั่งขาย_SELLหรือทำ_TrailingStop(เส้นค่าเฉลี่ยเคลื่อนเร็ว);
                                                }
                                         } else { //กรณีไม่ตรวจสอบผลกำไร
                                                ปิดคำสั่งขาย_SELLหรือทำ_TrailingStop(เส้นค่าเฉลี่ยเคลื่อนเร็ว);
                                         }
                               }
                       }
               }
        }
}

รายละเอียดของฟังก์ชัน ปิดคำสั่งซื้อ_BUYหรือทำ_TrailingStop()
/*+------------------------------------------------------------------+
ฟังก์ชัน ปิดคำสั่งซื้อ_BUYหรือทำ_TrailingStop() ทำหน้าที่ปิดคำสั่งซื้อ (BUY) หรือทำ Trailing Stop
+------------------------------------------------------------------+*/
void ปิดคำสั่งซื้อ_BUYหรือทำ_TrailingStop(double เส้นค่าเฉลี่ยเคลื่อนเร็ว)
{
        //ปิดคำสั่ง BUY เมื่อ ราคาของแท่งราคาที่ผ่านมาเปิดใต้ เส้นค่าเฉลี่ยเคลื่อนเร็ว
        if (Open[0] < เส้นค่าเฉลี่ยเคลื่อนเร็ว)
        {
                if(!OrderClose(OrderTicket(), OrderLots(), Bid, 3, White))
                        Print("OrderClose error ",GetLastError());
        } else {
                //ตรวจสอบทำ TrailingStop สำหรับการซื้อ BUY
                if (TrailingStop>0)
                {
                        //รอจนกว่าราคาจะวิ่งถึงจุดที่กำหนด 150 จุด จากราคาเปิดด
                       if(Bid - OrderOpenPrice() >= 150*Point)
                       {
                                if(OrderStopLoss()==0 ||
                                    (Bid - OrderStopLoss()> TrailingStop*Point))
                               {
                                        if (!OrderModify(OrderTicket(), OrderOpenPrice(),
                                                    Bid - TrailingStop*Point, OrderTakeProfit(), 0, Blue))
                                        {
                                                  Print("OrderModify error ",GetLastError());
                                        }
                                         return;
                               }
                        }
                }
         }
         เทรนเก่า = "ขาขึ้น";
}

รายละเอียดของฟังก์ชัน ปิดคำสั่งขาย_SELLหรือทำ_TrailingStop()
/*+------------------------------------------------------------------+
ฟังก์ชัน ปิดคำสั่งขายSELLหรือทำ_TrailingStop() ทำหน้าที่ปิดคำสั่งซื้อ (BUY) หรือทำ Trailing Stop
+------------------------------------------------------------------+*/
void ปิดคำสั่งขาย_SELLหรือทำ_TrailingStop(double เส้นค่าเฉลี่ยเคลื่อนเร็ว)
{
        //ปิดคำสั่ง SELL เมื่อราคาแท่งที่ผ่านมาเปิดเหนือเส้นค่าเฉลี่ยเคลื่อนเร็ว
        if (Open[0] > เส้นค่าเฉลี่ยเคลื่อนเร็ว)
        {
                if(!OrderClose(OrderTicket(), OrderLots(), Ask, 3, White))
                       Print("OrderClose error ",GetLastError());
         } else {
                 //ทำ TrailingStop สำหรับการขาย (SELL)
                if (TrailingStop > 0)
                {
                        //รอจนกว่าราคาจะวิ่งถึงจุดที่กำหนด 150 จุด จากราคาเปิดด
                        if(OrderOpenPrice() - Ask > 150*Point)
                       {
                                if(OrderStopLoss() == 0 ||
                                    OrderStopLoss()-Ask > TrailingStop*Point)
                                {
                                         if(!OrderModify(OrderTicket(), OrderOpenPrice(),
                                             Ask + TrailingStop*Point, OrderTakeProfit(), 0, Red))
                                        {
                                                     Print("OrderModify error ",GetLastError());
                                         }
                                         return;
                                }
                       }
               }
        }
        เทรนเก่า = "ขาลง";
}


บทความที่เกี่ยวข้อง
เขียน EA สำหรับForex ใช้เองจะดีไหมตอน My Fast Slow Moving Average Thai EA (บทนำ)
วิธีตั้งค่าสำหรับการเริ่มใช้ My Fast Slow Moving Average Thai EA
กระบวนการทำงานของ My Fast Slow Moving Average Thai EA
กลยุทธ์ในการเปิดคำสั่งซื้อขายของ My Fast Slow Moving Average Thai EA



บันทึกประจำวันที่ 25 กรกฎาคม พ.. 2557 (2014)

เวลา
เหตุการณ์
06:00 . ตื่นนอน อ่านวารสารไมโครคอมพิวเตอร์
07:00 .
0.กินข้าวเช้า 1.กับข้าว:ผัดหน่อไม้ต้ม, น้ำพริก, แกงป่ามะเขือ
07:30 .
งานของกิจกรรมอาชีพ กสิกรรมธรรมชาติ บ้านแม่ทำ สีทา (3/2557) : ปลูกข้าวโพดข้าวเหนียว
13:00 .
0.อาบน้ำ กินข้าว พักผ่อน 1.กับข้าว:หมี่น้ำใส
14:00 .
แต่งปั้มชัก เนื่องจากซีนก้านชักหลุด และสูบน้ำใช้ด้วยปั้มชักพลังงานโซลาร์เซลล์
16:00 . ซ่อมโคมไฟตุกตา และดวงไฟ LED
18:00 . พักผ่อน
19:00 .
0.อาบน้ำ กินข้าว พักผ่อน 1.กับข้าว:ผัดฝักมะรุมอ่อน, แกงมะเขือ
20:15 . ทำบัญชีครัวเรือน ทำบันทึกประจำวันของวันก่อน
20:45 . งานของกิจกรรมอาชีพ งานอินเตอร์เน็ต (18/2557):ทำแฟ้มโครงสร้างต้นฉบับบทความ
22:00 . เข้านอน

วันอาทิตย์ที่ 17 มกราคม พ.ศ. 2559

กลยุทธ์ในการเปิดคำสั่งซื้อขายของ My Fast Slow Moving Average Thai EA



ดาวน์โหลดแฟ้ม EA
ปรับปรุงครั้งล่าสุดเมื่อ :๑๖ มกราคม พ.ศ. ๒๕๕๙ เวลา ๑๒.๐๐ น. Unstable
ไม่รับประกันความเสียหายอันเนื่องมาจากการทำงานของ EA ชุดนี้



สำหรับกลยุทธ์ (Strategy) ในการเปิดคำสั่งซื้อ/ขายของ My Fast Slow Moving Average Thai EA นั้น จะเป็นระบบที่เปิดคำสั่งซื้อ/ขายตามเทรน (Trend) โดยใช้เส้นค่าเฉลี่ยของราคา หรือที่เรียกว่า Moving Average : MA เป็นตัวกำหนดเทรน ซึ่งใน EA ชุดนี้จะใช้เส้นค่าเฉลี่ยจำนวน 2 เส้น คือ เส้นค่าเฉลี่ยเคลื่อนเร็ว (Fast Moving Average) ซึ่งค่าที่ใชึ้คือ MA (28) หรือเส้นค่าเฉลี่ยของราคาจำนวน 28 วันที่ผ่านมา และเส้นค่าเฉลี่ยเคลื่อนช้า (Slow Moving Average) ซึ่งค่าที่ใช้คือ MA (180) หรือเส้นค่าเฉลี่ยของราคาของราคาจำนวน 180 วันที่ผ่านมา โดยชนิดของเส้นค่าเฉลี่ยที่ใช้จะเป็นแบบ Simple ทั้งหมด


ในการกำหนดจุดสำหรับทำการเปิดคำสั่งซื้อ/ขาย จะใช้การดูจากการตัดกันของเส้นค่าเฉลี่ยของทั้งสองเส้น โดยถ้า เส้นค่าเฉลี่ยเคลื่อนเร็ว ตัด เส้นค่าเฉลี่ยเคลื่อนช้า ขึ้น จะแสดงถึงการเคลื่อนของราคากำลังอยู่ในทิศทางขาขึ้น (Up Trend) แต่ถ้าเส้นค้าเฉลี่ยเคลื่อนเร็ว ตัด เส้นค่าเฉลี่ยเคลื่อนช้า ลง จะแสดงถึงการเคลื่อนของราคากำลังอยู่ในทิศทางขาลง (Down Trend)
แต่เนื่องจากการตรวจสอบจุดตัดกันของเส้นค่าเฉลี่ยทั้งสองเส้น ในแง่ของการเขียนโปรแกรม จะทำได้ยาก วิธีที่ง่ายที่สุด คือการดูความแตกต่างของเส้นค่าเฉลี่ยของทั้งสองเส้น หรือนำค่าของเส้นค่าเฉลี่ยมาเปรียบเทียบกัน ซึ่งค่าของเส้นค่าเฉลี่ยดังกล่าวก็คือราคาเฉลี่ยตามจำนวนวันที่กำหนด ณ เวลาขณะที่กำลังตรวจสอบ โดย ถ้า ค่าของเส้นค่าเฉลี่ยเคลื่อนเร็ว มากกว่า ค่าของเส้นค่าเฉลี่ยเคลื่อนช้า จะแสดงว่าเป็น เทรนขาขึ้น แต่ถ้า ค่าของเส้นค่าเฉลี่ยเคลื่อนเร็ว น้อยกว่า ค่าของเส้นค่าเฉลี่ยเคลื่อนช้า จะแสดงว่าเป็น เทรนขาลง นอกจากนี้ยังใช้ราคาปิดของราคาแท่งที่ผ่านมา และราคาเปิดของแท่งราคาปัจจุบันยืนยันการเปิดคำสั่งซื้อขายอีกชั้นหนึ่ง ตามเงื่อนไขดังนี้

กรณีการเปิดคำสั่ง ซื้อ หรือ BUY (ขาขึ้น)
      1. เส้นค่าเฉลี่ยเคลื่อนเร็ว > เส้นค่าเฉลี่ยเคลื่อนช้า
      2. ราคาปิดของแท่งราคาแท่งที่ผ่านมา > เส้นค่าเฉลี่ยเคลื่อนเร็ว และ ราคาเปิดของแท่งราคาแท่งปัจจุบัน > เส้นค่าเฉลี่ยเคลื่อนเร็ว

กรณีการเปิดคำสั่ง ขาย หรือ SELL (ขาลง)
      1. เส้นค่าเฉลี่ยเคลื่อนเร็ว < เส้นค่าเฉลี่ยเคลื่อนช้า
      2. ราคาปิดของแท่งราคาแท่งที่ผ่านมา < เส้นค่าเฉลี่ยเคลื่อนเร็ว และราคาเปิดของแท่งราคาปัจจุบัน < เส้นค่าเฉลี่ยเคลื่อนเร็ว

สำหรับกลไกของ My Fast Slow Moving Average Thai EA ที่ทำหน้าที่การเปิดคำสั่งซื้อ/ขายตามที่กล่าวมาในข้างต้น จะเป็นหน้าที่ของฟังก์ชัน “ตรวจสอบเปิดคำสั่งซื้อขาย()” ซี่งมีเนื้อหาของฟังก์ชันดังนี้

/*+------------------------------------------------------------------+
ฟังก์ชัน ตรวจสอบเปิดคำสั่งซื้อขาย(); ทำหน้าที่ตรวจสอบเงื่อนไข เพื่อเปิดคำสั่งซื้อขาย
+------------------------------------------------------------------+*/
void ตรวจสอบเปิดคำสั่งซื้อขาย(double เส้นค่าเฉลี่ยเคลื่อนเร็ว, double เส้นค่าเฉลี่ยเคลื่อนช้า)
{
        int ticket;
        double จำนวนpipตัดขาดทุน;
        double จำนวนตัดขาดทุน = 0.0;

        //ปรับค่า StopLoss เป็นค่าที่เหมาะสม
        จำนวนpipตัดขาดทุน = หาจำนวนตัดขาดทุนที่เหมาะสม(เส้นค่าเฉลี่ยเคลื่อนช้า);

       //ตรวจสอบเงื่อนไขสำหรับการขาย (SELL)
       if ((เส้นค่าเฉลี่ยเคลื่อนเร็ว < เส้นค่าเฉลี่ยเคลื่อนช้า) &&
           ((Close[1] < เส้นค่าเฉลี่ยเคลื่อนเร็ว) && (Open[0] < เส้นค่าเฉลี่ยเคลื่อนเร็ว)))
        {
                 //งานแสดงข้อความบนจอ
                ข้อความแสดงบนจอ += "\n\n*******เข้าเงื่อนไขการขาย SELL*********";

                Comment(ข้อความแสดงบนจอ);
                if (StopLoss > 0)
                {
                        จำนวนpipตัดขาดทุน = StopLoss;
                }
                //คำนวณจำนวนตัดขาดทุนสำหรับการขาย
                จำนวนตัดขาดทุน = (Bid - Ask) + Ask + จำนวนpipตัดขาดทุน * Point;
                //เปิดคำสั่งขาย
                ticket = OrderSend( Symbol(),
                                      OP_SELL,
                                     หาจำนวนล็อตที่เหมาะสม(เส้นค่าเฉลี่ยเคลื่อนช้า),
                                     Bid,
                                     3,
                                     จำนวนตัดขาดทุน,
                                     Bid-TakeProfit*Point,
                                     ชื่อEA,
                                     เลขประจำEA,
                                     0,
                                     Red);
              เทรนเก่า = "ขาลง";
              return;
        }

        //ตรวจสอบเงื่อนไขสำหรับการซื้อ (BUY)
        if ((เส้นค่าเฉลี่ยเคลื่อนเร็ว > เส้นค่าเฉลี่ยเคลื่อนช้า) &&
            ((Close[1] > เส้นค่าเฉลี่ยเคลื่อนเร็ว) && (Open[0] > เส้นค่าเฉลี่ยเคลื่อนเร็ว)))
        {
                //งานแสดงข้อความบนจอ
                ข้อความแสดงบนจอ +="\n\n*******เข้าเงื่อนไขการซื้อ BUY*********";

               Comment(ข้อความแสดงบนจอ);

                if (StopLoss > 0)
                {
                         จำนวนpipตัดขาดทุน = StopLoss;
                }
                //คำนวณจำนวนตัดขาดทุนสำหรับการซื้อ
                จำนวนตัดขาดทุน = Bid - จำนวนpipตัดขาดทุน * Point;
                //เปิดคำสั่งซื้อ
               ticket = OrderSend( Symbol(),
                                  OP_BUY,
                                  หาจำนวนล็อตที่เหมาะสม(เส้นค่าเฉลี่ยเคลื่อนช้า),
                                 Ask,
                                 3,
                                 จำนวนตัดขาดทุน,
                                 Ask+TakeProfit*Point,
                                 ชื่อEA,
                                 เลขประจำEA,
                                 0,
                                 Blue);
                เทรนเก่า = "ขาขึ้น";
               return;
        }
}

ฟังก์ชัน “ตรวจสอบเปิดคำสั่งซื้อขาย()” จะเรียกใช้ฟังก์ชันภายนอกอีก 2 ฟังก์ชัน คือ ฟังก์ชัน “หาจำนวนตัดขาดทุนที่เหมาะสม()” และฟังก์ชัน “หาจำนวนล็อตที่เหมาะสม()” โดยฟังก์ชัน หาจำนวนตัดขาดทุนที่เหมาะสม() จะทำหน้าที่คำนวณหาค่า Stop Loss (หน่วยเป็น pip) โดยในกรณีของ My Fast Slow Moving Average Thai EA จะใช้ค่าของเส้นค่าเฉลี่ยเคลื่อนช้า ซึ่งทำหน้าที่เสมือนแนวต้านของราคาเป็นค่าของ Stop Loss แต่เมื่อคำนวณแล้วต้องไม่น้อยกว่า 100 pip สำหรับรายละเอียดของฟังก์ชัน หาจำนวนตัดขาดทุนที่เหมาะสม() มีดังนี้

/*+------------------------------------------------------------------+
ฟังก์ชัน หาจำนวนตัดขาดทุนที่เหมาะสม() ทำหน้าที่หาจำนวน pip สำหรับการตัดขาดทุน หรือ Stop Loss ใหม่
+------------------------------------------------------------------+*/
int หาจำนวนตัดขาดทุนที่เหมาะสม(double เส้นค่าเฉลี่ยเคลื่อนช้า)
{
      int จำนวนตัดขาดทุนที่คำนวณได้ = StopLoss;
      int ระยะห่างของราคากับเส้นค่าเฉลี่ยเคลื่อนช้า;

       if (CalculateNewStopLoss) {
               ระยะห่างของราคากับเส้นค่าเฉลี่ยเคลื่อนช้า = (Close[0] - เส้นค่าเฉลี่ยเคลื่อนช้า) / Point;
               //กรณีได้ค่าติดลบ ปรับให้เป็น บวก ก่อน
               if (ระยะห่างของราคากับเส้นค่าเฉลี่ยเคลื่อนช้า < 0)
               {
                     ระยะห่างของราคากับเส้นค่าเฉลี่ยเคลื่อนช้า = -(ระยะห่างของราคากับเส้นค่าเฉลี่ยเคลื่อนช้า);
                }
                //ใช้เส้นค่าเฉลี่ยเคลื่อนช้าเป็นแนวต้นหรือ Stop Loss แต่ต้องไม่น้อยกว่า 100
               จำนวนตัดขาดทุนที่คำนวณได้ =
                                 ((ระยะห่างของราคากับเส้นค่าเฉลี่ยเคลื่อนช้า < 100) ? 100 : ระยะห่างของราคากับเส้นค่าเฉลี่ยเคลื่อนช้า);
        }
        return(จำนวนตัดขาดทุนที่คำนวณได้);
}

ส่วนฟังก์ชัน หาจำนวนล็อตที่เหมาะสม() จะทำหน้าที่คำนวณหา ขนาดของล็อตที่เหมาะสมสำหรับการเปิดคำสั่งซื้อ/ขายครั้งนั้นๆ โดยใช้จำนวนเงินที่ใช้ได้ในบัญชีมาหาจำนวนเงินที่ใช้คำนวณขนาดของล็อต (ไม่เกินระดับความเสี่ยงที่กำหนดใน MaximumRisk) แล้วนำมาหาจำนวน ล็อต ตามวิธีที่กล่าวไว้ในบทความเรื่อง การคำนวณหาจำนวนล็อต (lots)ที่เหมาะสมสำหรับการเปิดคำสั่งซื้อ/ขายในตลาดฟอเร็กซ์ซึ่งรายละเอียดดังนี้

/*+------------------------------------------------------------------+
ฟังก์ชัน หาจำนวนล็อตที่เหมาะสม() ทำหน้าที่หาจำนวนล็อตที่เหมาะสมต่อกันเปิด order
+------------------------------------------------------------------+*/
double หาจำนวนล็อตที่เหมาะสม(double เส้นค่าเฉลี่ยเคลื่อนช้า)
{
        double ขนาดล็อตที่คำนวณได้;
        double จำนวนเงินทุนที่ใช้ได้;

        //หาวงเงินในบัญชีที่เปิดคำสั่งซื้อ/ขายได้
        double จำนวนเงินในบัญชี = AccountFreeMargin();

        if (StringFind(Symbol(), "micro", 0) != 0)
        {
                จำนวนเงินในบัญชี = AccountFreeMargin() * 100;
        }

        //หามูลค่้าต่อ 1 pip
        double มูลค่าต่อ1pip = MarketInfo(Symbol(), MODE_TICKVALUE);

        //ถ้าทุนมากกว่า 200 จึงจะคำนวนตามสูตร
        if (จำนวนเงินในบัญชี > 200)
        {
                //นำจำนวนเงินในบัญชีมาคำนวณหายอดเงินที่ใช้ได้โดยดูจาก MaximumRisk
                จำนวนเงินทุนที่ใช้ได้ = จำนวนเงินในบัญชี * MaximumRisk;
                //หาขขนาดล็อตที่เหมาะสม
                ขนาดล็อตที่คำนวณได้ = NormalizeDouble((
                                          (จำนวนเงินทุนที่ใช้ได้ * //จำนวนเงินที่มี
                                          MaximumRisk) / //คูณ เปอร์เซ็นกำไรที่ต้องการ
                                           (((StopLoss==0) && !CalculateNewStopLoss) ?
                                                                                                                100 :
                  หาจำนวนตัดขาดทุนที่เหมาะสม(เส้นค่าเฉลี่ยเคลื่อนช้า)))/มูลค่าต่อ1pip //หาร ด้วยจำนวน pip ที่ตัดขาดทุน
                                            , 2); //แปลงเป็นเลขทศนิยม 2 ตำแหน่ง
         } else {
                ขนาดล็อตที่คำนวณได้ = 0.01;
         }
         //ถ้า lots ที่คำนวณได้น้อยกว่า MinimumLotSize ให้ใช้ค่าใน MinimumLotSize แทน
         if (ขนาดล็อตที่คำนวณได้ < MinimumLotSize) ขนาดล็อตที่คำนวณได้ = MinimumLotSize;
         //ส่งค่าขนาล็ออตที่เหมาะสมกลับ
         return(ขนาดล็อตที่คำนวณได้);
}

ข้อจำกัดของการใช้กลยุทธ์ Fast Slow Moving Average

กลยุทธ์ Fast Slow Moving Average จะใช้ได้ดีหากการเคลื่อนไหวของอัตราแลกเปลี่ยนของคู่เงินนั้นๆ อยู่ในสภาวะที่มีการเคลื่อนไปในทิศทางขึ้นหรือลงที่ชัดเจน หรือ เป็นเทรน แต่จะมีปัญหาหากตลาดนิ่ง หรืออยู่ในสภาวะ side way จะทำให้เกิดการตัดขาดทุนบ่อยๆ โดยเฉพาะการใช้ Export Adviser หรือ EA ในการซื้อ/ขาย เพราะ EA จะแยกไม่ออกว่าช่วงไหนเป็นเทรน ช่วงไหนเป็น side way แนวทางแก้ไข คือเลือกใช้ Time frame ที่ใหญ่ขึ้นซึ่งขนาดของ Side way จะกว้างขึ้นพอทำกำไรได้


บทความที่เกี่ยวข้อง
เขียน EA สำหรับForex ใช้เองจะดีไหมตอน My Fast Slow Moving Average Thai EA (บทนำ)
วิธีตั้งค่าสำหรับการเริ่มใช้ My Fast Slow Moving Average Thai EA
กระบวนการทำงานของ My Fast Slow Moving Average Thai EA
การปิดคำสั่งซื้อขาย และการทำ Trailing Stop ของ My Fast Slow Moving Average Thai EA


บันทึกประจำวันที่ 24 กรกฎาคม พ.. 2557 (2014)

เวลา
เหตุการณ์
06:00 .
งานของกิจกรรมอาชีพ งานการตลาดและการลงทุน (20/2557) : เชื่อมต่ออินเตอร์เน็ต ค้นข้อมูลเกี่ยวกับร้านค้าบนอินเตอร์เน็ต และจัดการร้านค้า หมอดิน YIC นาโน
07:00 .
0.กินข้าวเช้า 1.กับข้าว:ไข่เจียว, น้ำพริกปลา, ผักรวก
07:30 .
งานของกิจกรรมอาชีพ กสิกรรมธรรมชาติ บ้านแม่ทำ สีทา (3/2557) : ปลูกข้าวโพดข้าวเหนียว
11:00 . ปรับแต่งปั้มน้ำ และสูบน้ำใช้ด้วยปั้มชักพลังงานโซลาร์เซลล์
11:30 . อาบน้ำ
12:00 .
0.กินข้าว พักผ่อน 1.กับข้าว:ไข่เจียว, น้ำพริกปลา, ผักรวก, ผัดหน่อไม้
13:00 . เอาน้ำราดพื้น, พักผ่อน
15:00 . ทำบัญชีครัวเรือน ทำบันทึกประจำวันของวันก่อน
14:30 .
งานของกิจกรรมอาชีพ งานการตลาดและการลงทุน (20/2557) : ไปพิมพ์เอกสารที่วัดเขาแก้ว
16:30 .
งานของกิจกรรมอาชีพ กสิกรรมธรรมชาติ บ้านแม่ทำ สีทา (3/2557) : ปลูกข้าวโพดข้าวเหนียว
19:00 .
0.อาบน้ำ กินข้าว พักผ่อน 1.กับข้าว:แกงป่ามะเขือ, หน่อไม้ต้ม, น้ำพริก
21:00 . เข้านอน

Adz2you.