MyBanner

โฆษณา

วันอาทิตย์ที่ 3 เมษายน พ.ศ. 2559

เงื่อนไขการปิดคำสั่ง ซื้อ/ขาย ของ My EMA200 SmoothedHighLowMA MACD and RSI Thai EA



ดาวน์โหลดแฟ้ม EA
My EMA200 SmoothedHighLowMA MACD and RSI Thai EA Unstable
ปรับปรุงครั้งล่าสุดเมื่อ : ๑๙ มีนาคม พ.. ๒๕๕๙ เวลา ๒๓.๐๐ น.
ไม่รับประกันความเสียหายอันเนื่องมาจากการทำงานของ EA ชุดนี้
ขออภัย ต้นฉบับ EA ชุดนี้สูญหายทั้งหมด หากมีเวลาจะรื้อฟิ้นกลับมาให้ใหม่



โดยปรกติการใช้กลยุทธ์การตัดกันของเส้นค่าเฉลี่ย (Moving Average Crossover) จะใช้การตัดกลับทางของเส้นค่าเฉลี่ย ซึ่งในกรณีดังกล่าว ถ้าเป็นการตรวจดูด้วยสายตา เราจะทราบว่าควรจะปิดคำสั่งซื้อ/ขายช่วงไหน แต่กรณีของการทำเป็น EA ถ้ารอให้ถึงจุดกลับกันของเส้นค่าเฉลี่ยค่อยปิดคำสั่งซื้อ/ขาย จะให้เกิดการขาดทุนจำนวนมาก จากรูปข้างต้น จุดหมายเลข 1 เป็นจุดที่เราตัดสินใจเปิดคำสั่งขาย (SELL) จุดหมายเลข 2 เป็นจุดที่เปิดคำสั่งซื้อ/ขายได้ ซึ่งถ้าเรารอให้ถึงจุดที่ 3 แล้วค่อยปิดคำสั่งซื้อขาย จะเห็นว่าจะมีโอกาสขาดทุน ช่วงที่แสดงในหมายเลขที่ 4 ในรูป จะเป็นช่วงที่จะขาดทุนต่อเนื่อง
ในกรณีของ My EMA200 SmoothedHighLowMA MACD and RSI Thai EA จะพยายามสร้างเงื่อนไขการปิดคำสั่งซื้อ/ขายเฉพาะ เพื่อลดปริมาณการขาดทุนลงโดยแบ่งเป็น 2 กรณี คือ กรณีของการปิดคำสั่งซื้อ (BUY) และกรณีของการปิดคำสั่งขาย (SELL)

การปิดคำสั่งซื้อ (BUY)



การปิดคำสั่งซื้อ (BUY) ของ My EMA200 SmoothedHighLowMA MACD and RSI Thai EAจะใช้เงื่อนไขในการปิดคำสั่งดังนี้
  1. เมื่อ High[1] น้อยกว่า เส้นค่าเฉลี่ย LowSmoothed14MA
  2. เมื่อ ค่าของเส้นค่าเฉลี่ย LowSmoothed14MAกอนปัจจุบัน มากกว่า ค่าของเส้นค่าเฉลี่ย LowSmoothed14MA
  3. เมื่อ High[0] น้อยกว่า เส้นค่าเฉลี่ย LowSmoothed14MA
โดยทุกเงื่อนไขต้องเกิดขึ้นพร้อมกัน

/*+------------------------------------------------------------------+
ฟังก์ชัน ปิดคำสั่งซื้อ_BUY() ทำหน้าที่ปิดคำสั่งซื้อ (BUY)
+------------------------------------------------------------------+*/
void ปิดคำสั่งซื้อ_BUY(double LowSmoothed14MAก่อนปัจจุบัน,
                                       double LowSmoothed14MA)
{
           //ปิดคำสั่ง BUY ด้วยเงื่อนไขคาดว่าจะกลับเทรน
           if (((High[1] < LowSmoothed14MA) &&
               (LowSmoothed14MAก่อนปัจจุบัน > LowSmoothed14MA)) &&
               (High[0] < LowSmoothed14MA))
           {
           if(!OrderClose(OrderTicket(), OrderLots(), Bid, 0, White))
                    Print("OrderClose error ",GetLastError());
            }
}

การปิดคำสั่งขาย (SELL)


การปิดคำสั่งขาย (SELL) ของ My EMA200 SmoothedHighLowMA MACD and RSI Thai Eaจะใช้เงื่อนไขในการปิดคำสั่งดังนี้
  1. เมื่อ Low[1] มากกว่า เส้นค่าเฉลี่ย HighSmoothed14MA
  2. เมื่อ ค่าของเส้นค่าเฉลี่ย HighSmoothed14MAก่อนปัจจุบัน น้อยกว่า เส้นค่าเฉลี่ย HighSmoothed14MA
  3. เมื่อ Low[0] มากกว่า เส้นค่าเฉลี่ย HighSmoothed14MA
โดยทุกเงื่อนไขต้องเกิดขึ้นพร้อมกัน

/*+------------------------------------------------------------------+
ฟังก์ชัน ปิดคำสั่งขายSELL() ทำหน้าที่ปิดคำสั่งซื้อ (SELL)
+------------------------------------------------------------------+*/
void ปิดคำสั่งขาย_SELL(double HighSmoothed14MAก่อนปัจจุบัน,
                                         double HighSmoothed14MA)
{
           //ปิดคำสั่ง SELL เมื่อคาดว่าจะกลับเทรน
            if (((Low[1] > HighSmoothed14MA) &&
                (HighSmoothed14MAก่อนปัจจุบัน < HighSmoothed14MA)) &&
                (Low[0] > HighSmoothed14MA))
            {
                    if(!OrderClose(OrderTicket(), OrderLots(), Ask, 0, White))
                             Print("OrderClose error ",GetLastError());
                   }
}

โดยปรกติฟังก์ชัน ตรวจสอบปิดคำสั่งซื้อขาย() จะเป็นฟังก์ชันหลักในการตรวจการปิดคำสั่งซื้อ/ขายของ My EMA200 SmoothedHighLowMA MACD and RSI Thai EA โดยงานในฟังก์ชันดังกล่าวจะมีการตรวจการปิดคำสั่งซื้อ/ขายเฉพาะคำสั่งที่มีกำไรในททุก ๆ วันศุกร์ ก่อนปิดตลาด ซึ่งการทำงานดังกล่าวจะทำเฉพาะกรณีที่ผู้ใช้กำหนดค่าของ FridayCloseAllPositiveOrder เป็น true ตอนเริ่มใช้ EA โดย EA จะตรวจสอบเงื่อนไขนี้ก่อน จากนั้นทำการตรวจสอบทำ Trailing Stop (ทำ_TrailingStop_สำหรับคำสั่งขาย_SELL() หรือ ทำ_TrailingStop_สำหรับคำสั่งซื้อ_BUY()) ก่อนที่จะตรวจสอบและเลือกฟังก์ชัน ปิดคำสั่งซื้อ_SELL() หรือ ฟังก์ชัน ปิดคำสั่งขาย_BUY() ตามลำดับ ในตอนท้ายของฟังก์ชัน ตรวจสอบปิดคำสั่งซื้อขาย() จะมีการเรียกฟังก์ชัน ปิดคำสั่งซื้อขายที่เป็นบวกหลายรายการ() โดยฟังก์ชันดังกล่าวจะทำการตรวจสอบปิดคำสั่งซื้อ/ขายที่ผลกำไรเป็นบวก โดยฟังก์ชันนี้จะทำงานเมื่อผู้ใช้งานกำหนดค่าของ AllProfitPositiveCloseAll เป็น true เท่านั้น รายละเอียดของทั้งสองฟังก์ชันมีดังนี้

/*+------------------------------------------------------------------+
ฟังก์ชัน ปิดคำสั่งซื้อขายที่เป็นบวกหลายรายการ() ทำหน้าที่ปิดคำสั่งซื้อขายที่เป็นบวกพร้อมกันหลายรายการ
+------------------------------------------------------------------+*/
void ปิดคำสั่งซื้อขายที่เป็นบวกหลายรายการ(int จำนวนคำสั่งซื้อขายที่มีกำไร)
{
           double ผลกำไรขาดทุนของคำสั่งซื้อขาย;
           if (AllProfitPositiveCloseAll)
          {
                     //ถ้าจำนวนคำสั่งซื้อขายที่ได้กำไรเกิน 2 ใน 3 ปิดคำสั่งซื้อที่ได้กำไรทั้งหมด
                    if (จำนวนคำสั่งซื้อขายที่เปิดค้างอยู่() == จำนวนคำสั่งซื้อขายที่มีกำไร)
                   {
                              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();

                                                 if (ผลกำไรขาดทุนของคำสั่งซื้อขาย > 0.5)
                                                 {
                                                        //ตรวจสอบกรณีคำสั่งซื้อ (BUY)
                                                        if (OrderType()==OP_BUY)
                                                        {
                                                                //ปิดคำสั่ง BUY
                                                                if(!OrderClose(OrderTicket(), OrderLots(), Bid, 0, White))
                                                                              Print("OrderClose error ",GetLastError());
                                                        }
                                                        //ตรวจสอบกรณีคำสั่งขาย (SELL)
                                                        if (OrderType()==OP_SELL)
                                                        {
                                                               //ปิดคำสั่ง SELL
                                                               if(!OrderClose(OrderTicket(), OrderLots(), Ask, 0, White))
                                                                        Print("OrderClose error ",GetLastError());
                                                        }
                                                 }
                                          }
                                    }
                            }

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

      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();
                           if (ผลกำไรขาดทุนของคำสั่งซื้อขาย > 0)
                           {
                                     คำสั่งซื้อขายที่ได้กำไร += 1;
                           }
                           //ตรวจสอบกรณีคำสั่งซื้อ (BUY)
                           if (OrderType()==OP_BUY)
                           {
                                      //ปิดคำสั่ง BUY ที่มีกำไรในวันศุกร์
                                      if (((FridayCloseAllPositiveOrder && (DayOfWeek()==FRIDAY)) &&
                                         (TimeHour(TimeCurrent()) >= TimeHour(StringToTime("21:00:00")))) &&
                                         (ผลกำไรขาดทุนของคำสั่งซื้อขาย > 0))
                                      {
                                          ข้อความแสดงบนจอ += "\n\n***ทุกวันศุกร์ปิดคำสั่งซื้อที่ผลกำไรเป็น บวก ตั้งแต่เวลา ๒๑.๐๐ น. เป็นต้นไป ***";
                                                Comment(ข้อความแสดงบนจอ);
                                               //ปิดคำสั่ง BUY
                                               if(!OrderClose(OrderTicket(), OrderLots(), Bid, 0, White))
                                                            Print("OrderClose error ",GetLastError());
                                       }
                                      //กรณีปรกติ
                                      //ทำ TrailingStop ถ้าทำได้
                                      ทำ_TrailingStop_สำหรับคำสั่งซื้อ_BUY();

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

      //ปิดคำสั่งที่มีกำไรหากจำนวนเงิน 2 ใน 3 ของคำสั่งซื้อขายทั้งหมด
      ปิดคำสั่งซื้อขายที่เป็นบวกหลายรายการ(คำสั่งซื้อขายที่ได้กำไร);
}

ฟังก์ชัน ทำ_TrailingStop_สำหรับคำสั่งซื้อ_BUY()
/*+------------------------------------------------------------------+
ฟังก์ชัน ทำ_TrailingStop_สำหรับคำสั่งซื้อ_BUY() ทำหน้าที่ทำ Trailling stop สำหรับคำสั่ง BUY
+------------------------------------------------------------------+*/
void ทำ_TrailingStop_สำหรับคำสั่งซื้อ_BUY(){         
       //ตรวจสอบทำ TrailingStop สำหรับการซื้อ BUY         
       if (TrailingStop>0)         
       {          
             if (OrderStopLoss() < OrderOpenPrice())        
             {            
                   //กรณีไม่เคยทำ Trailing Stop มาก่อน 
                  //รอจนกว่าราคาจะวิ่งถึงจุดที่กำหนด 150 จุด จากราคาเปิด
                  if(Bid - OrderOpenPrice() >= TrailingStopStart*Point) 
                  {                                         
                           if(Bid - OrderStopLoss()> TrailingStop*Point)                                         
                           {                                                          
                                    if (!OrderModify(OrderTicket(), OrderOpenPrice(),  
                                           Bid - TrailingStop*Point, OrderTakeProfit(), 0, Blue))      
                                    {                                                                       
                                           Print("OrderModify error ",GetLastError());       
                                    }                                                           
                                    return;                                          
                            }                               
                    }                    
              }        
      }
}

ฟังกชัน ทำ_TrailingStop_สำหรับคำสั่งขาย_SELL()
/*+------------------------------------------------------------------+
ฟังก์ชัน ทำ_TrailingStop_สำหรับคำสั่งขาย_SELL() ทำหน้าที่ทำ Trailling stop สำหรับคำสั่ง SELL
+------------------------------------------------------------------+*/
void ทำ_TrailingStop_สำหรับคำสั่งขาย_SELL()
{                
         if (TrailingStop > 0)               
      {                  
                 if (OrderStopLoss() > OrderOpenPrice())                                      
                 {
                    //กรณียังไม่เคยทำ Stop Loss มาก่อน
                    //รอจนกว่าราคาจะวิ่งถึงจุดที่กำหนด 150 จุด จากราคาเปิดด
                          if(OrderOpenPrice() - Ask > TrailingStopStart * Point) 
                         {
                                    if(OrderStopLoss()-Ask > TrailingStop*Point) 
                                    {
                                 if(!OrderModify(OrderTicket(), OrderOpenPrice(),
                                                   Ask + TrailingStop*Point, OrderTakeProfit(), 0, Red))
                                            {
                                                    Print("OrderModify error ",GetLastError());
                                 }
                                 return;
                            }
                         }
                  }
          }
}

บทความที่เกี่ยวข้อง
เขียน EA สำหรับ FOREX ใช้เองจะดีไหม ตอน My EMA200 SmoothedHighLowMA MACD and RSI Thai EA
การกำหนดค่าเริ่มต้นสำหรับ My EMA200 SmoothedHighLowMA MACD and RSI Thai EA
ต้นฉบับ โปรแกรมของ My EMA200 SmoothedHighLowMA MACD and RSI Thai EA
กลยุทธ์ในการเปิดคำสั่งขายของ My EMA200 SmoothedHighLowMA MACD and RSI Thai EA
การกำหนดขนาดล็อต (Lot size) และการกำหนดจำนวนตัดขาดทุน (Stop Loss) ของ My EMA200 SmoothedHighLowMA MACD and RSI Thai EA


บันทึกประจำวันที่ 1 สิงหาคม พ.. 2557 (2014)

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

Adz2you.