MyBanner

โฆษณา

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

การกำหนดขนาดล็อต (Lot size) และการกำหนดจำนวนตัดขาดทุน (Stop Loss) ของ My EMA200 SmoothedHighLowMA MACD and RSI Thai EA



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


การกำหนดขนาดล็อตในการเปิดคำสั่งซื้อ/ขายของ My EMA200 SmoothedHighLowMA MACD and RSI Thai EA จะเป็นระบบการคำนวณขนาดล็อตอัตโนมัติเช่นเดียวกับ EA สำหรับ FOREX อื่นๆ ที่ผู้เขียนจัดทำขึ้น โดยที่ผู้ที่นำไปใช้จะต้องกำหนดขนาดล็อตต่ำสุดที่ต้องการไว้ (MinumumLotSize) วิธีการคำนวณหาขนาดล็อตที่เหมาะสม จะใช้สูตรตามที่ได้เคยเสนอไว้ในบทความเรื่อง การคำนวณหาจำนวนล็อต (lots) ที่เหมาะสมสำหรับการเปิดคำสั่งซื้อ/ขายในตลาดฟอเร็กซ์
สำหรับจำนวนตัดขาดทุน หรือ Stop Loss ของ My EMA200 SmoothedHighLowMA MACD and RSI Thai EA ซึ่งจะเป็นข้อมูลอย่างหนึ่งที่จะต้องนำมาคำนวณหาขนาดล็อตที่เหมาะสม โดยในกรณีที่ผู้ใช้ไม่ได้กำหนดให้ EA หา จำนวนตัดขาดทุนอัตโนมัติ (กำหนดค่า UserAutoStopLoss = true) ตัว EA จะใช้ค่า 400 เป็นค่าตัดขาดทุนปริยายในการหาขนาดล็อตที่เหมาะสม
แต่ถ้าผู้ใช้กำหนดให้ EA คำนวนหาจำนวนตัดขาดทุนให้อัตโนมัติ EA จะใช้ค่าจากเส้นค่าเฉลี่ย EMA 200 เป็นเกณฑ์ หรือเป็นแนวต้านของการเปิดคำสั่งซื้อ/ขาย โดยจะแบ่งเป็น 2 กรณี ดังนี้
  • กรณีที่ EMA200 < Low[0] หรือ กรณีเป็นเทรนขาขั้น จะหาระยะสำหรับคำนวณหาจำนวนตัดขาดทุน จาก Close[0] มาที่เส้น EMA200
  • กรณีที่ EMA200 > High[0] หรือ กรณีที่เป็นเทรนขาลง จะหาระยะสำหรับคำนวณจำนวนตัดขาดทุน จาก EMA200 มาที่ Close[0]
หมายเหตุ การที่กำหนดค่าตัดขาดทุนปริยายไว้ที่ 400 pip นั้น เนื่องจากเป็นค่าที่ได้จากการศึกษาจากเว็บไซต์ต่างๆ เกี่ยวกับ FOREX ซึ่งพบว่าเป็นค่าของจำนวนตัดขาดทุนที่เหมาะสมสำหรับการใช้กลยุทธิ์การตัดกันของเส้นค่าเฉลี่ย (Moving Average crossover)

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

      if (UseAutoStopLoss) {

             if (EMA200 < Low[0]) //ขาขึ้น
            {
                        //ระยะจากราคาปัจจบันไปถึง EMA200
                        ระยะห่างจากราคาถึงแนวต้าน = ((Close[0] - EMA200) / Point);
             }

             if (EMA200 > High[0]) //ขาลง

            {
                        //ระยะจากราคาปัจจบันถึงราคาสูงสุดของแท่งราคา + ParabolicSAR
                       ระยะห่างจากราคาถึงแนวต้าน = ((EMA200 - Close[0]) / Point);
             }

             //กรณีได้ค่าติลบ

            if (ระยะห่างจากราคาถึงแนวต้าน < 0)
            {
                        ระยะห่างจากราคาถึงแนวต้าน = -(ระยะห่างจากราคาถึงแนวต้าน);
             }
           //แปลงให้เป็นจำนวนนับ
           จำนวนตัดขาดทุนที่คำนวณได้ = ((ระยะห่างจากราคาถึงแนวต้าน < 400) ? 400 : ระยะห่างจากราคาถึงแนวต้าน);
      }


return(จำนวนตัดขาดทุนที่คำนวณได้);
}


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


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


      //ตรวจหาคำว่า micro ในสัญลักษร์คู่เงิน
      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) && !UseAutoStopLoss) ?
                                            400 :
                        หาจำนวนตัดขาดทุนที่เหมาะสม(EMA200)))/มูลค่าต่อ1pip //หาร ด้วยจำนวน pip ที่ตัดขาดทุน
                                         , 2); //แปลงเป็นเลขทศนิยม 2 ตำแหน่ง
     } else {
                 ขนาดล็อตที่คำนวณได้ = 0.01;
     }
     //ถ้่า lots ที่คำนวณได้น้อยกว่า MinimumLotSize ให้ใช้ค่าใน MinimumLotSize แทน
     if (ขนาดล็อตที่คำนวณได้ < MinimumLotSize) ขนาดล็อตที่คำนวณได้ = MinimumLotSize;

      //ส่งค่าขนาล็ออตที่เหมาะสมกลับ

      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


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

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

วันศุกร์ที่ 11 มีนาคม พ.ศ. 2559

กลยุทธ์ในการเปิดคำสั่งซื้อขายของ My EMA200 SmoothedHighLowMA MACD and RSI Thai EA



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

อย่างที่ได้กล่าวไว้บ้างแล้ว Expert Adviser (EA) ที่ชื่อ My EMA200 SmoothedHighLowMA MACD and RSI Thai EA จะใช้อินดิเคเตอร์สำหรับฟอร์เร็กซ์ (FOREX indicator) รวม 5 ชุด ประกอบด้วย
  1. EMA200 (Exponential Moving Average 200 day) ใช้สำหรับบอกแนวโน้ม (Trend)
  2. เส้นค่าเฉลี่ยแบบ Smoothed 14 วันที่ระดับราคาสูงสุด (High Smoothed 14 MA) ใช้ยืนยันแนวโน้มขาขึ้น ซึ่งจะทำให้ EA เลือกเปิดคำสั่งซื้อขายเฉพาะคำสั่งขาย หรือ SELL เท่านั้น
  3. เส้นค่าเฉลี่ยแบบ Smoothed 14 วันที่ระดับราคาต่ำสุด (Low Smoothed 14 MA) ใช้ยืนยันแนวโน้มขาลง ซึ่งจะทำให้ EA เลือกเปิดคำสั่งซื้อขายเฉพาะคำสั่งซื้อ หรือ BUY เท่านั้น
  4. MACD ใช้ยืนยันแนวโน้มของราคา โดยถ้า MACD > 0 จะเป็นแนวโน้มขาขึ้น แต่ถ้า MACD < 0 จะเป็นแนวโน้มขาลง
  5. RSI ใช้ป้องกันการเปิดคำสั่งซื้อ ในเขตซื้อมากเกินไป หรือป้องกันการเปิดคำสั่งขายในเขตขายมากเกินไป
กลยุทธในการเปิดคำสั่งซื้อ (BUY)


เมื่ออินดิเคเตอร์บ่งบอกว่าเป็นแนวโน้มขาขึ้น EA จะทำการเปิดเฉพาะคำสั้่งซื้ออย่างเดียวโดยมีเงื่อนไขดังนี้
  1. HighSmoothed14MA > EMA200
  2. LowSmoothed14MAก่อนปัจจุบัน < LowSmoothed14MA(ปัจจุบัน)
  3. MACD > 0
  4. RSI < 80

โดยทุกเงื่อนไขจะต้องเกิดจขึ้นพร้อมกัน (ใช้โอเปอร์เรเตอร์ && เชื่อมเงื่อนไข) สำหรับเงื่อนไขที่ 2 LowSmoothed14MAก่อนปัจจุบัน < LowSmoothed14MA(ปัจจุบัน) จะใช้เป็นเครื่องยืนยันว่า เส้นค่าเฉลี่ย 14 วันมีลักษณะ ชันขึ้น ถ้าเส้นค่าเฉลี่ยชันลงในช่วงแนวโน้มขาขึ้น จะไม่เปิดคำสั่งซื้อ/ขาย

กลยุทธในการเปิดคำสั่งขาย (SELL)

เมื่ออินดิเคเตอร์บ่งบอกว่าเป็นแนวโน้มขาลง My EMA200 SmoothedHighLowMA MACD and RSI Thai EA จะเปิดเฉพาะคำสั่งขาย (SELL) เพียงอย่างเดียว โดยมีเงื่อนไขดังนี้
  1. LowSmoothed14MA < EMA200
  2. HighSmoothed14MAปัจจุบัน > HighSmoothed14MA(ปัจจุบัน)
  3. MACD < 0
  4. RSI > 20

โดยทุกเงื่อนไขจะต้องเกดขึ้นพร้อมกันเช่นเดียวกัน ส่วนเงื่อนไขที่ 2) HighSmoothed14MAก่อนปัจจุบัน > HighSmoothed14MA(ปัจจบัน) ใช้เป็นเครื่องยืนยันว่าเส้นค่าเฉลี่ยมีลักษณะ ชันลง ถ้าเส้นค่าเฉลี่ย ชันขึ้น ในช่วงแนวโน้มขาลง EA จะไม่เปิดคำสั่งซื้อขายเช่นเดียวกัน

/*+------------------------------------------------------------------+
     ฟังก์ชัน ตรวจสอบเปิดคำสั่งซื้อขาย();  ทำหน้าที่ตรวจสอบเงื่อนไข เพื่อเปิดคำสั่งซื้อขาย
  +------------------------------------------------------------------+*/
void ตรวจสอบเปิดคำสั่งซื้อขาย(double EMA200, 
                                                       double LowSmoothed14MAก่อนปัจจุบัน,
                                                       double LowSmoothed14MA, 
                                                      double HighSmoothed14MAก่อนปัจจุบัน,
                                                      double HighSmoothed14MA,
                                                      double RSI,
                                                      double MACD)
{
         int ticket;
         double จำนวนpipตัดขาดทุน;
         double จำนวนตัดขาดทุน = 0.0;
         int จำนวนคำสั่งซื้อขายที่เปิดใหม่ = 0;
         int จำนวนคำสั่งที่จะเปิด = 0;
         bool สถานะการเปิดคำสั่ง = false;

        จำนวนคำสั่งซื้อขายที่เปิดใหม่ = จำนวนคำสั่งซื้อขายที่เปิดค้างอยู่();
      
        จำนวนคำสั่งที่จะเปิด = ((OpenAllOrder)? MaxTrade : 1);
   
        //ตรวจสอบเงื่อนไขสำหรับการขายหรือเทรนขาลง (SELL)จะเปิด SELL เฉพาะเทรนขาลง
        if  ((((LowSmoothed14MA < EMA200) && (RSI > 20)) && 
              ((HighSmoothed14MAก่อนปัจจุบัน > HighSmoothed14MA) &&
              (High[0] <= HighSmoothed14MA))) &&
              (MACD < 0))
        {
                สถานะการเปิดคำสั่ง = true;
      
                 //งานแสดงข้อความบนจอ
                ข้อความแสดงบนจอ += "     *******เข้าเงื่อนไขการขาย SELL*********";
                Comment(ข้อความแสดงบนจอ);

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

        //ตรวจสอบเงื่อนไขสำหรับการซื้อ (BUY)จะเปิด BUY เฉพาะเทรนขาขึ้นเท่านั้น
       if  (((((HighSmoothed14MA > EMA200) && (RSI < 80)) &&
               (LowSmoothed14MAก่อนปัจจุบัน < LowSmoothed14MA)) &&
              (Low[0] >= LowSmoothed14MA)) &&
              (MACD > 0))
        {
                สถานะการเปิดคำสั่ง = true;
      
                //งานแสดงข้อความบนจอ
               ข้อความแสดงบนจอ += "     *******เข้าเงื่อนไขการซื้อ BUY*********";
                 Comment(ข้อความแสดงบนจอ);

                for(; จำนวนคำสั่งซื้อขายที่เปิดใหม่ < จำนวนคำสั่งที่จะเปิด;
                          จำนวนคำสั่งซื้อขายที่เปิดใหม่++) 

               {
                        //ปรับค่า StopLoss เป็นค่าที่เหมาะสม
                        จำนวนpipตัดขาดทุน = หาจำนวนตัดขาดทุนที่เหมาะสม(EMA200);
   
                        if (จำนวนpipตัดขาดทุน > 0)
                       {
                                 //คำนวณจำนวนตัดขาดทุนสำหรับการซื้อ
                                 จำนวนตัดขาดทุน = Bid - จำนวนpipตัดขาดทุน * Point;
                        }

                        //เปิดคำสั่งซื้อ
                        ticket = OrderSend( Symbol(), 
                                                            OP_BUY, 
                                                            หาจำนวนล็อตที่เหมาะสม(EMA200), 
                                                           Ask, 
                                                           3, 
                                                           จำนวนตัดขาดทุน, 
                                                           Ask + TakeProfit *Point, 
                                                           ชื่อEA, 
                                                          เลขประจำEA,
                                                          0, 
                                                          Blue );
               } 
        } else {
              สถานะการเปิดคำสั่ง = false;
        }
   
        if (!(สถานะการเปิดคำสั่ง))
        {
                ข้อความแสดงบนจอ += "     *********ยังไม่เข้าเงื่อนไขเปิดคำสั่งซื้อขาย******************";
                Comment(ข้อความแสดงบนจอ);
        }
}

บทความที่เกี่ยวข้อง
เขียน 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
การกำหนดขนาดล็อต (Lot size) และการกำหนดจำนวนตัดขาดทุน (Stop Loss) ของ My EMA200 SmoothedHighLowMA MACD and RSI Thai EA


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

เวลา
เหตุการณ์
06:00 . ตื่นนอน เตรียมอุปกรณ์ตัดปาล์ม
07:00 . 0.กินข้าวเช้า
07:30 .
งานของกิจกรรมอาชีพ กสิกรรมธรรมชาติ แปลงสวนปาล์ม (8/2557) : ตัดปาล์ม
10:30 . Note: แม่เล็ก น้อง ปุ๊ มาส่งปาล์ม และแวะมาที่บ้าน
12:00 . 0.กินข้าว พักผ่อน
12:30 .
งานของกิจกรรมอาชีพ กสิกรรมธรรมชาติ แปลงสวนปาล์ม (8/2557) : ตัดปาล์ม
17:30 . อาบน้ำ พักผ่อน
18:15 .
งานของกิจกรรมอาชีพ งานอินเตอร์เน็ต (18/2557) : โพสต์บทความเรื่องใหม่ และติดตั้ง Affiliate Program เพิ่ม
20:15 . 0.กินข้าว พักผ่อน
20:00 . เข้านอน

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

ต้นฉบับ โปรแกรมของ My EMA200 SmoothedHighLowMA MACD and RSI Thai EA



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



บทความที่เกี่ยวข้อง
เขียน 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
การกำหนดขนาดล็อต (Lot size) และการกำหนดจำนวนตัดขาดทุน (Stop Loss) ของ My EMA200 SmoothedHighLowMA MACD and RSI Thai EA

ต้นฉบับ โปรแกรม My EMA200 SmoothedHighLowMA MACD and RSI Thai EA
//+------------------------------------------------------------------+
//| My EMA200 SmoothedHighLowMA MACD and RSI Thai EA.mq4 |
//| Copyright 2016, ธาวินทร์ ลีลาคุณารักษ์ |
//| https://yesterday-in-my-life.blogsport.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, ธาวินทร์ ลีลาคุณารักษ์"
#property link "https://yesterday-in-my-life.blogsport.com"
#property version "1.00"
#property description "อนุญาตให้ปรับปรุงแก้ไข, คัดลอก, จำหน่าย, จ่าย, แจก, อธิบายรายละเอียด หรือเผยแพร่"
#property description "ได้อย่างถูกต้องตามกฏหมาย โดยไม่ต้องขออนุญาตจากผู้พัฒนา"
#property description "และไม่จำเป็นต้องแสดงรายละเอียดผู้พัฒนา"

string ปรับปรุงครั้งล่าสุด = "๑ มีนาคม พ.. ๒๕๕๙ เวลา ๑๗.๐๐ น.";

//--- input parameters
input double MinimumLotSize =0.01; //ขนาดล็อตต่ำสุดที่ต้องการ
input double MaximumRisk =0.02; //เปอร์เซ็นต์ความเสี่ยงที่ยอมรับได้
input int MaxTrade =3; //จำนวนคำสั่งซื้อ/ขายสูงสุด
input int TakeProfit =400; //จำนวน pip ที่ต้องการปิด order เมื่อมีกำไร
input int StopLoss =0; //จำนวน pip ที่ต้องการปิด order เมื่อขาดทุน
input bool UseAutoStopLoss =true; //ใช้ระบบตั้ง Stop Loss อัตโนมัติ
input int TrailingStopStart =150; //จุดเริ่มต้นตั้ง Trailing Stop นับจากเริ่มเปิดคำสั่งซื้อ/ขาย
input int TrailingStop =20; //ขนาดของ Trailing Stop หน่วยเป็น pip
input bool OpenAllOrder =true; //เปิดคำสังซื้อขายพร้อมกันทั้งหมด
input bool FridayNotOpenOrder =false; //ไม่เปิดคำสั่งซื้อขายในวันศุกร์
input bool FridayCloseAllPositiveOrder =true; //ปิดคำสั่งซื้อขายที่ได้กำไรในวันศุกร์
input bool AllProfitPositiveCloseAll =false; //ปิดคำสั่งซื้อขายถ้าผลกำไรเป็นบวกทั้งหมด

/*+------------------------------------------------------------------+
ตัวแปรรวม global variabel
+------------------------------------------------------------------+*/
string ชื่อEA = "MyEMA200SmHLMA_MACDRSI_ThaiEA"; //สำหรับใสใน Comment ตอนเปิดคำสั่งซื้อขาย
int เลขประจำEA = 022559; //เลข Magic Number ประจำ EA

string ข้อความแสดงบนจอ; //ใช้เก็บข้อความสำหรับแสดงสถานะการทำงานของ EA บนจอภาพ
string วันเดือนปีปัจจุบัน; //วันเดือนปีปัจจุบัน

/*+------------------------------------------------------------------+
ฟังก์ชัน หาจำนวนตัดขาดทุนที่เหมาะสม() ทำหน้าที่หาจำนวน pip สำหรับการตัดขาดทุน หรือ Stop Loss ใหม่
+------------------------------------------------------------------+*/
int หาจำนวนตัดขาดทุนที่เหมาะสม(double EMA200)
{
        int จำนวนตัดขาดทุนที่คำนวณได้ = StopLoss;
        int ระยะห่างจากราคาถึงแนวต้าน;
        if (UseAutoStopLoss) {
                if (EMA200 < Low[0]) //ขาขึ้น
                {
                        //ระยะจากราคาปัจจบันไปถึง EMA200
                        ระยะห่างจากราคาถึงแนวต้าน = ((Close[0] - EMA200) / Point);
                }
                if (EMA200 > High[0]) //ขาลง
               {
                        //ระยะจากราคาปัจจบันถึงราคาสูงสุดของแท่งราคา + ParabolicSAR
                       ระยะห่างจากราคาถึงแนวต้าน = ((EMA200 - Close[0]) / Point);
                }
                //กรณีได้ค่าติลบ
                if (ระยะห่างจากราคาถึงแนวต้าน < 0)
               {
                       ระยะห่างจากราคาถึงแนวต้าน = -(ระยะห่างจากราคาถึงแนวต้าน);
               }
                //แปลงให้เป็นจำนวนนับ
               จำนวนตัดขาดทุนที่คำนวณได้ = ((ระยะห่างจากราคาถึงแนวต้าน < 400) ? 400 : ระยะห่างจากราคาถึงแนวต้าน);
        }

        return(จำนวนตัดขาดทุนที่คำนวณได้);
}

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

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

        //ตรวจหาคำว่า micro ในสัญลักษร์คู่เงิน
        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) && !UseAutoStopLoss) ?
                                                                                 400 :
                                        หาจำนวนตัดขาดทุนที่เหมาะสม(EMA200)))/มูลค่าต่อ1pip //หาร ด้วยจำนวน pip ที่ตัดขาดทุน
                                       , 2); //แปลงเป็นเลขทศนิยม 2 ตำแหน่ง
        } else {
                ขนาดล็อตที่คำนวณได้ = 0.01;
        }
        //ถ้่า lots ที่คำนวณได้น้อยกว่า MinimumLotSize ให้ใช้ค่าใน MinimumLotSize แทน
        if (ขนาดล็อตที่คำนวณได้ < MinimumLotSize) ขนาดล็อตที่คำนวณได้ = MinimumLotSize;
        //ส่งค่าขนาล็ออตที่เหมาะสมกลับ
         return(ขนาดล็อตที่คำนวณได้);
 }

/*+------------------------------------------------------------------+
ฟังก์ชัน ตรวจสอบเปิดคำสั่งซื้อขาย(); ทำหน้าที่ตรวจสอบเงื่อนไข เพื่อเปิดคำสั่งซื้อขาย
+------------------------------------------------------------------+*/
void ตรวจสอบเปิดคำสั่งซื้อขาย(double EMA200,
                                                       double LowSmoothed14MAก่อนปัจจุบัน,
                                                       double LowSmooted14MA,
                                                       double HighSmoothed14MAก่อนปัจจุบัน,
                                                       double HighSmooted14MA,
                                                       double RSI,
                                                       double MACD)
{
        int ticket;
        double จำนวนpipตัดขาดทุน;
        double จำนวนตัดขาดทุน = 0.0;
        int จำนวนคำสั่งซื้อขายที่เปิดใหม่ = 0;
        int จำนวนคำสั่งที่จะเปิด = 0;
        bool สถานะการเปิดคำสั่ง = false;

        จำนวนคำสั่งซื้อขายที่เปิดใหม่ = จำนวนคำสั่งซื้อขายที่เปิดค้างอยู่();
        จำนวนคำสั่งที่จะเปิด = ((OpenAllOrder)? MaxTrade : 1);
        //ตรวจสอบเงื่อนไขสำหรับการขายหรือเทรนขาลง (SELL)จะเปิด SELL เฉพาะเทรนขาลง
        if ((((LowSmooted14MA < EMA200) && (RSI > 20)) &&
             ((HighSmoothed14MAก่อนปัจจุบัน > HighSmooted14MA) &&
             (High[0] <= HighSmooted14MA))) &&
              (MACD < 0))
        {
                 สถานะการเปิดคำสั่ง = true;
                 //งานแสดงข้อความบนจอ
                ข้อความแสดงบนจอ += " *******เข้าเงื่อนไขการขาย SELL*********";
                Comment(ข้อความแสดงบนจอ);

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

        //ตรวจสอบเงื่อนไขสำหรับการซื้อ (BUY)จะเปิด BUY เฉพาะเทรนขาขึ้นเท่านั้น
        if (((((HighSmooted14MA > EMA200) && (RSI < 80)) &&
              (LowSmoothed14MAก่อนปัจจุบัน < LowSmooted14MA)) &&
              (Low[0] >= LowSmooted14MA)) &&
              (MACD > 0))
       {
                สถานะการเปิดคำสั่ง = true;
                //งานแสดงข้อความบนจอ
                ข้อความแสดงบนจอ += " *******เข้าเงื่อนไขการซื้อ BUY*********";
                Comment(ข้อความแสดงบนจอ);

                for(; จำนวนคำสั่งซื้อขายที่เปิดใหม่ < จำนวนคำสั่งที่จะเปิด;
                         จำนวนคำสั่งซื้อขายที่เปิดใหม่++)

               {
                        //ปรับค่า StopLoss เป็นค่าที่เหมาะสม
                       จำนวนpipตัดขาดทุน = หาจำนวนตัดขาดทุนที่เหมาะสม(EMA200);
                       if (จำนวนpipตัดขาดทุน > 0)
                      {
                               //คำนวณจำนวนตัดขาดทุนสำหรับการซื้อ
                               จำนวนตัดขาดทุน = Bid - จำนวนpipตัดขาดทุน * Point;
                      }

                      //เปิดคำสั่งซื้อ
                      ticket = OrderSend( Symbol(),
                                                      OP_BUY,
                                                      หาจำนวนล็อตที่เหมาะสม(EMA200),
                                                      Ask,
                                                      3,
                                                     จำนวนตัดขาดทุน,
                                                     Ask + TakeProfit *Point,
                                                     ชื่อEA,
                                                     เลขประจำEA,
                                                      0,
                                                      Blue );
                }
        } else {
               สถานะการเปิดคำสั่ง = false;
        }
        if (!(สถานะการเปิดคำสั่ง))
        {
                 ข้อความแสดงบนจอ += " *********ยังไม่เข้าเงื่อนไขเปิดคำสั่งซื้อขาย******************";
                Comment(ข้อความแสดงบนจอ);
         }
}
/*+------------------------------------------------------------------+
ฟังก์ชัน ปิดคำสั่งซื้อ_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());
       }
}
/*+------------------------------------------------------------------+
ฟังก์ชัน ทำ_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;
                               }
                        }
               } else {
                       //กรณีเคยทำ Trailing Stop มาแล้ว เช็คระยะที่ 2.5 เท่่าของ Trailing Stop
                      if(Bid - OrderStopLoss()> (TrailingStop * 2.5)*Point)
                      {
                                 if (!OrderModify(OrderTicket(), OrderOpenPrice(),
                                          Bid - TrailingStop*Point, OrderTakeProfit(), 0, Blue))
                                {
                                           Print("OrderModify error ",GetLastError());
                                }
                                 return;
                        }
                }
        }
}

/*+------------------------------------------------------------------+
ฟังก์ชัน ปิดคำสั่งขาย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());
        }
}

/*+------------------------------------------------------------------+
ฟังก์ชัน ทำ_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;
                                 }
                        }
                } else {
                        //กรณีเคยเริ่มทำ Stop Loss มาแล้ว เช็คระยะที่ 2.5 เท่าของ ค่า Stop Loss
                        if(OrderStopLoss()-Ask > (TrailingStop*2.5)*Point)
                       {
                                 if(!OrderModify(OrderTicket(), OrderOpenPrice(),
                                         Ask + TrailingStop*Point, OrderTakeProfit(), 0, Red))
                                 {
                                           Print("OrderModify error ",GetLastError());
                                 }
                                 return;
                        }
                }
        }
}

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

/*+------------------------------------------------------------------+
ฟังก์ชัน จำนวนคำสั่งซื้อขายที่เปิดค้าอยู่() ทำหน้าที่นับจำนวนคำสั่งซื้อขายที่เปิดโดย EA ชุดนี้ที่ยังเปิดค้างอยู่
+------------------------------------------------------------------+*/
int จำนวนคำสั่งซื้อขายที่เปิดค้างอยู่()
{
        int ตัวนับจำนวนรอบการทำงานของการวนซ้ำ = 0;
        int จำนวนคำสั่งซื้อขายทั้งหมด = OrdersTotal();
        int จำนวนคำสั่งซื้อขายที่เปิดโดยEAชุดนี้ = 0;

       for (ตัวนับจำนวนรอบการทำงานของการวนซ้ำ = 0;
             ตัวนับจำนวนรอบการทำงานของการวนซ้ำ < จำนวนคำสั่งซื้อขายทั้งหมด;
             ตัวนับจำนวนรอบการทำงานของการวนซ้ำ++)
       {
                  //เลือกนับเฉพาะ Order ที่เปิดด้วย MyFastSlowMAThaiEA
                 if(!OrderSelect(ตัวนับจำนวนรอบการทำงานของการวนซ้ำ, SELECT_BY_POS, MODE_TRADES))
                           continue;
                 if ((OrderComment() == ชื่อEA)&& (OrderMagicNumber() == เลขประจำEA))
                 {
                          จำนวนคำสั่งซื้อขายที่เปิดโดยEAชุดนี้++;
                 }
         }
         return(จำนวนคำสั่งซื้อขายที่เปิดโดยEAชุดนี้);
}

//+------------------------------------------------------------------+
//| Expert function |
//+------------------------------------------------------------------+
void OnInit()
{
}

//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
        //ตัวแปรสำหรับเก็บค่าที่อ่านจากอินดิเคเตอร์
        double EMA200;
        double HighSmoothed14MAก่อนปัจจุบัน;
        double HighSmoothed14MA;
        double LowSmoothed14MAก่อนปัจจุบัน;
        double LowSmoothed14MA;
        double RSI;
        double MACD;
        //ตัวแปรเก็บค่าทั่วไป
        double ผลกำไรขาดทุนคำสั่งซื้อขายล่าสุด = 0;
        double วงเงินบัญชี = 0.0;
        int จำนวนคำสั่งซื้อขายที่เปิดไปแล้ว = 0;
         bool สถานะอนุญาตให้เปิดคำสั่ง = True;
        string เทรนปัจจุบัน = "";
        string ข้อความแสดงเทรน;

        //อ่านค่าจากอินดีเคเตอร์
        //อ่านค่า EMA 200
        EMA200 = iMA(NULL, 0, 200, 0, MODE_EMA, PRICE_CLOSE, 0);
        //อ่านค่าเส้นค่าเฉลี่ยจุดสูงสุดของ MA(14)คำนวณแบบ Smoothed ก่อนหน้า
        HighSmoothed14MAก่อนปัจจุบัน = iMA(NULL, 0, 14, 0, MODE_SMMA, PRICE_HIGH, 1);
        //อ่านค่าเส้นค่าเฉลี่ยจุดสูงสุดของ MA(14)คำนวณแบบ Smoothed
        HighSmoothed14MA = iMA(NULL, 0, 14, 0, MODE_SMMA, PRICE_HIGH, 0);
        //อ่านค่าเส้นค่าเฉลี่ยจุดต่ำสุดของ MA(14)คำนวณแบบ Smoothed ก่อนหน้า
        LowSmoothed14MAก่อนปัจจุบัน = iMA(NULL, 0, 14, 0, MODE_SMMA, PRICE_LOW, 1);
        //อ่านค่าเส้นค่าเฉลี่ยจุดต่ำสุดของ MA(14)คำนวณแบบ Smoothed
        LowSmoothed14MA = iMA(NULL, 0, 14, 0, MODE_SMMA, PRICE_LOW, 0);
        //อ่านค่า RSI  
        RSI = iRSI(NULL, 0, 14, PRICE_WEIGHTED, 0);
        //อ่านค่า MACD
        MACD = iMACD(NULL, 0, 12, 26, 9, PRICE_WEIGHTED, MODE_MAIN, 0);

        วงเงินบัญชี = ((StringFind(Symbol(), "micro", 0) != -1) ?
         AccountFreeMargin() * 100 :
         AccountFreeMargin());
        //ตรวจสอบเทรนและจัดประเภทคำสั่งซื้อขาย
        //กรณีคำสั่งขาย (SELL)
        if (HighSmoothed14MA < EMA200)
        {
                 ข้อความแสดงเทรน += "\n\n*****เส้นค่าเฉลี่ยราคาสูงสุด 14MA = " + HighSmoothed14MA + " <" +
                                                         " เส้นบอกเทรน EMA 200 = " + EMA200 + "****";

                ข้อความแสดงเทรน += "\n*****HighSmoothed14MAก่อนปัจจุบัน " +
                                                         ((HighSmoothed14MAก่อนปัจจุบัน < HighSmoothed14MA) ? "< " : "> ") +
                                                         "HighSmoothed14MA*******";
                เทรนปัจจุบัน = "ขาลง";
         }
         //กรณีคำสั่งซื้อ (BUY)
        if (LowSmoothed14MA > EMA200)
        {
               ข้อความแสดงเทรน += "\n\n*****เส้นค่าเฉลี่ยราคาต่ำสุด 14MA = " + LowSmoothed14MA + " >" +
                                                       " เส้นบอกเทรน EMA200 = " + EMA200 + "****";

                ข้อความแสดงเทรน += "\n*****LowSmoothed14MAก่อนปัจจุบัน " +
                                                        ((LowSmoothed14MAก่อนปัจจุบัน < LowSmoothed14MA) ? "< " : "> ") +
                                                       "LowSmoothed14MA*******";

                เทรนปัจจุบัน = "ขาขึ้น";
         }
        //งานแสดงข้อความบนจอ
         ข้อความแสดงบนจอ = "****ปรับปรุงครั้งสุดดท้ายเมื่อ : " + ปรับปรุงครั้งล่าสุด + "แนะนำให้ใช้กับ Time Frame : H1 ขึ้นไป ****";

        ข้อความแสดงบนจอ += "\n\n***เงื่อนไนการคำนวณ Stop Loss อัตโนมัติ : "
                                                 + (UseAutoStopLoss ? "True" : "False") + "***";

        ข้อความแสดงบนจอ += "\n***********Stop Loss : "
                                                  + ((StopLoss==0) ? ((!UseAutoStopLoss) ?
                                                    "ไม่ได้กำหนด Stop Losss"
                                                       : หาจำนวนตัดขาดทุนที่เหมาะสม(EMA200))
                                                      : StopLoss) + "***********";

         ข้อความแสดงบนจอ += ข้อความแสดงเทรน;
         ข้อความแสดงบนจอ += "\n*****เทรน " + เทรนปัจจุบัน + "************";

         ข้อความแสดงบนจอ += "\n*****RSI : " + RSI + "************";

         ข้อความแสดงบนจอ += "\n*****MACD : " + MACD + " ************";

         ข้อความแสดงบนจอ += "\n\n*****High[0]: " + High[0] + "*****";

         ข้อความแสดงบนจอ += "Low[0]: " + Low[0] + "*****";

        ข้อความแสดงบนจอ += " *****Open[0]: " + Open[0] + "*****";

        ข้อความแสดงบนจอ += "Close[0]: " + Close[0] + "*****";

        ข้อความแสดงบนจอ += "\n ====จำนวนเงินที่ใช้ได้ ==> " + วงเงินบัญชี + "====";

         ข้อความแสดงบนจอ += "\n***มูลค่าต่อ 1 pip==> " + MarketInfo(Symbol(), MODE_TICKVALUE) + "**";

        ข้อความแสดงบนจอ += "**จำนวนล็อต ในการสั่งซื้อรอบถัดไป ==> " + หาจำนวนล็อตที่เหมาะสม(EMA200) + "***";


          //ตรวจสอบจำนวนคำสั่งซื้อ/ขายที่เปิดค้างอยู่
           จำนวนคำสั่งซื้อขายที่เปิดไปแล้ว = จำนวนคำสั่งซื้อขายที่เปิดค้างอยู่();
           ข้อความแสดงบนจอ += "\n\n***จำนวนคำสั่งซื้อ/ขายที่เปิดไปแล้ว : " + จำนวนคำสั่งซื้อขายที่เปิดไปแล้ว + " คำสั่ง *****";


           Comment(ข้อความแสดงบนจอ);
           if(IsTradeAllowed())
          {
           //ตรวจสอบคำสั่งซื้อขายล่าสุดเป็นบวกหรือไม่ ถ้าเป็นบวกจึงเปิดคำสั่งซื้อขายใหม่
           if (จำนวนคำสั่งซื้อขายที่เปิดไปแล้ว > 0)
           {
                    ตรวจสอบปิดคำสั่งซื้อขาย(LowSmoothed14MAก่อนปัจจุบัน,
                                                                  LowSmoothed14MA,
                                                                 HighSmoothed14MAก่อนปัจจุบัน,
                                                                 HighSmoothed14MA);
            }
            //ตรวจสอบสถานะให้เปิดคำสั่งซื้อขายในววันศูกร์
            if ((FridayNotOpenOrder) && (DayOfWeek()==FRIDAY))
            {
                     สถานะอนุญาตให้เปิดคำสั่ง = False;
                    ข้อความแสดงบนจอ += " **********วันศุกร์ =>กำหนดไม่ให้เปิดคำสั่งซื้อขาย***************";
                    Comment(ข้อความแสดงบนจอ);
             }
              //ตรวจสอบจำนวนคำสั่งซื้อ/ขายว่าครบหรือยัง
              if (จำนวนคำสั่งซื้อขายที่เปิดไปแล้ว < MaxTrade)
              {
                      //เมื่ออนุญาตให้เปิดคำสั่ง
                      if (สถานะอนุญาตให้เปิดคำสั่ง)
                      {
                                    ตรวจสอบเปิดคำสั่งซื้อขาย(EMA200,
                                                                                 LowSmoothed14MAก่อนปัจจุบัน,
                                                                                 LowSmoothed14MA,
                                                                                 HighSmoothed14MAก่อนปัจจุบัน,
                                                                                 HighSmoothed14MA,
                                                                                 RSI,
                                                                                MACD);
                     }
              } else {
                    ข้อความแสดงบนจอ += " *********คำสั่งซื้อขายครบจำนวนแล้ว******************";
                   Comment(ข้อความแสดงบนจอ);
              }

        } else {
                ข้อความแสดงบนจอ += " **********ไม่ให้เปิดคำสั่งซื้อขาย***************";
                Comment(ข้อความแสดงบนจอ);
        }

         ข้อความแสดงบนจอ = "";
}
//+------------------------------------------------------------------+


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

Note
เข้าร่วมประชุมคณะกรรมการสถานศึกษา กศน. ด่านช้าง
เวลา
เหตุการณ์
05:00 . ตื่นนอน จับไก่ไปให้ลุงสิทธิ์-ป้าถันจำนวน 4 ตัว
06:00 . เตรียมเดินทางไปตลาดด่านช้าง
07:00 . 0.กินข้าวเช้า
08:00 . เดินทางไปตลาดด่านช้าง, เปลี่ยนโซ่และสเตอร์รถมอเตอร์ไซด์
09:00 .
งานของกิจกรรมอาชีพ งานวิทยากร/อาสาสมัคร (14/2557) : เข้าร่วมประชุมกรรมการสถานศึกษา
12:00 . ไปกินข้าวที่ร้านพี่แสง วิทยาลัยเกษตรฯ
13:00 . ไปพบรองฯ บุญทอง ในวิทยาลัยเกษตรฯ
14:00 .
แวะฝากเงินที่ตู้ฝากเงินหน้า ธ. กรุงไทย, แวะซื้อของในตลาด, ไปตลาดนัดคลองถม, เดินทางกลับแวะที่บ้านนาตาปิ่น
15:00 .
งานของกิจกรรมอาชีพ งานการตลาดและการลงทุน (20/2557) : ปิดสมัครสมาชิกชุด 3600 กับลุงสิทธิ์-ป้าถัน
18:00 . 0.อาบน้ำ กินข้าว พักผ่อน
20:00 . เข้านอน

Adz2you.