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 . เข้านอน

Adz2you.