MyBanner

โฆษณา

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

ต้นฉบับโปรแกรม (Source Code) ของ My Fast Slow Moving Average Thai EA


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


บทความที่เกี่ยวข้อง
 เขียน 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

แฟ้ม : My Fast Slow Moving Average Thai EA.mq4

//+------------------------------------------------------------------+
//|                              Fast Slow Moing Average 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.01;   //เปอร์เซ็นต์กำไรที่ต้องการ
input int      MaxTrade                   =3;      //จำนวนคำสั่งซื้อ/ขายสูงสุด
input double   TakeProfit                 =500;    //จำนวน pip ที่ต้องการปิด order เมื่อมีกำไร
input double   StopLoss                   =0;      //จำนวน pip ที่ต้องการปิด order เมื่อขาดทุน
input bool     CalculateNewStopLoss       =True;   //ให้โปรแกรมคำนวน Stop Loss ใหม่
input int      TrailingStop               =10;     //จำนวน pip ที่จ้องการปิด order เมื่อราคากลับทาง
input bool     ProfitPositiveCheck        =True;   //ต้องการปิด order เฉพาะที่มีกำไรหรือไม่
input int      FastMovingAverage          =28;     //เส้น MA จำนวนวันน้อยหรือเดินเร็ว
input int      SlowMovingAverage          =180;    //เส้น MA จำนวนวันมากหรือเดินช้า
input bool     FridayNotOpenOrder         =False;  //ไม่เปิดคำสั่งซื้อขายในวันศุกร์
input bool     FridayClosePositiveOrder   =True;   //ปิดคำสั่งซื้อขายที่ได้กำไรในวันศุกร์

/*+------------------------------------------------------------------+
      ตัวแปรรวม global variabel                        
  +------------------------------------------------------------------+*/
string ชื่อEA = "MyFastSlowMAThaiEA";  //สำหรับใสใน Comment ตอนเปิดคำสั่งซื้อขาย
int เลขประจำEA = 122558;               //เลข Magic Number ประจำ EA
string เทรนเก่า = "";                   //เก็บชื่อรูปแบบของเทรนที่ผ่านมา
string ข้อความแสดงบนจอ;                 //ใช้เก็บข้อความสำหรับแสดงสถานะการทำงานของ EA บนจอภาพ

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

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

/*+------------------------------------------------------------------+
     ฟังก์ชัน หาจำนวนล็อตที่เหมาะสม() ทำหน้าที่หาจำนวนล็อตที่เหมาะสมต่อกันเปิด 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(ขนาดล็อตที่คำนวณได้);
}

/*+------------------------------------------------------------------+
     ฟังก์ชัน ตรวจสอบเปิดคำสั่งซื้อขาย();  ทำหน้าที่ตรวจสอบเงื่อนไข เพื่อเปิดคำสั่งซื้อขาย
  +------------------------------------------------------------------+*/
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;
   }
}
/*+------------------------------------------------------------------+
     ฟังก์ชัน ปิดคำสั่งซื้อ_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() ทำหน้าที่ปิดคำสั่งซื้อ (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;            
            }
         }           
      }
   }
   
   เทรนเก่า = "ขาลง";
}

/*+------------------------------------------------------------------+
     ฟังก์ชัน ตรวจสอบเปิดคำสั่งซื้อขาย();  ทำหน้าที่ตรวจสอบเงื่อนไข เพื่อเปิดคำสั่งซื้อขาย
  +------------------------------------------------------------------+*/
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(เส้นค่าเฉลี่ยเคลื่อนเร็ว);
               }
            }
         }  
      }
   }
}

//+------------------------------------------------------------------+
//| Expert OnDeinit function                                         |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   //ลบข้อความที่ค้างบนจอออก
   Comment("");
}

/*+------------------------------------------------------------------+
     ฟังก์ชัน จำนวนคำสั่งซื้อขายที่เปิดค้าอยู่()  ทำหน้าที่นับจำนวนคำสั่งซื้อขายที่เปิดโดย 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 tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   double เส้นค่าเฉลี่ยเคลื่อนเร็ว;
   double เส้นค่าเฉลี่ยเคลื่อนช้า;
   double ผลกำไรขาดทุนคำสั่งซื้อขายล่าสุด = 0;
   int จำนวนคำสั่งซื้อขายที่เปิดไปแล้ว = 0;
   bool สถานะอนุญาตให้เปิดคำสั่ง = True;
   string เทรนปัจจุบัน = "";

   //อ่านเส้นค่าเฉลี่ยเคลื่อนที่เร็ว
   เส้นค่าเฉลี่ยเคลื่อนเร็ว = iMA(NULL, 0, FastMovingAverage, 6, MODE_SMA, PRICE_CLOSE, 0);
   //อ่านเส้นค่าเฉลี่ยเคลื่อนที่ช้า 
   เส้นค่าเฉลี่ยเคลื่อนช้า = iMA(NULL, 0, SlowMovingAverage, 6, MODE_SMA, PRICE_CLOSE, 0);
   
   //งานแสดงข้อความบนจอ
   ข้อความแสดงบนจอ = "\n****ปรับปรุงครั้งสุดดท้ายเมื่อ : " + ปรับปรุงครั้งล่าสุด + "****";

   ข้อความแสดงบนจอ += "\n\n***เงื่อนไขปิดคำสั่งซื้อขายเฉพาะที่มีกำไร  :  "
                  + (ProfitPositiveCheck ? "True" : "False") + "***";

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

   ข้อความแสดงบนจอ += "\n\n***Stop Loss : "
                  + ((StopLoss==0) ? ((!ProfitPositiveCheck ? 
                                       "ใช้การกลับเทรนเป็น Stop Loss" : 
                                       (!CalculateNewStopLoss ? "ไม่ได้กำหนด Stop Loss" 
                                                              : "Auto Stop Loss" )))
                                   : StopLoss) + "***";

   //ตรวจสอบเงื่อนไขสำหรับการขาย (SELL)
   if (เส้นค่าเฉลี่ยเคลื่อนเร็ว < เส้นค่าเฉลี่ยเคลื่อนช้า)
   {
      ข้อความแสดงบนจอ += "\n\n****FastMA = " + เส้นค่าเฉลี่ยเคลื่อนเร็ว  + "  <" +
                     "  SlowMA = " + เส้นค่าเฉลี่ยเคลื่อนช้า + "****";
      เทรนปัจจุบัน = "ขาลง";
   } else {
      ข้อความแสดงบนจอ += "\n\n****FastMA = " + เส้นค่าเฉลี่ยเคลื่อนเร็ว  + "  >" +
                     "  SlowMA = " + เส้นค่าเฉลี่ยเคลื่อนช้า + "****";
      เทรนปัจจุบัน = "ขาขึ้น";
   }
   
   ข้อความแสดงบนจอ += "\n\n*************เทรน " + เทรนปัจจุบัน + "************";   
   ข้อความแสดงบนจอ += "\n\n ราคาปิดหลังสุด : " + DoubleToStr(Close[1],4) + 
                  (((Close[1] - เส้นค่าเฉลี่ยเคลื่อนเร็ว) >= 0) ? " > ":" < ") + 
                  "เส้นค่าเฉลี่ยเครื่อนเร็ว";

   ข้อความแสดงบนจอ += "\n\n ====จำนวนเงินที่ใช้ได้ ==>  " +
                  ((StringFind(Symbol(), "micro", 0) != -1) ?  
                                 AccountFreeMargin() * 100 : 
                                 AccountFreeMargin() ) + "====";
   ข้อความแสดงบนจอ += "\n\n***มูลค่าต่อ 1 pip==> " + MarketInfo(Symbol(), MODE_TICKVALUE) + "***";
   ข้อความแสดงบนจอ += "\n\n***จำนวนล็อต ในการสั่งซื้อรอบถัดไป  ==> " + หาจำนวนล็อตที่เหมาะสม(เส้นค่าเฉลี่ยเคลื่อนช้า) + "***";

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

   //ตรวจสอบจำนวนคำสั่งซื้อ/ขายที่เปิดค้างอยู่

   int ตัวนับจำนวนรอบการทำงานของการวนซ้ำ = 0;
   int จำนวนคำสั่งซื้อขายทั้งหมด = OrdersTotal();

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

         ผลกำไรขาดทุนคำสั่งซื้อขายล่าสุด = OrderProfit() + OrderSwap() + OrderCommission();

         if (ผลกำไรขาดทุนคำสั่งซื้อขายล่าสุด <= 0)
         {
            สถานะอนุญาตให้เปิดคำสั่ง = False;
         }
      }
   }
   
   if(IsTradeAllowed())
   {
      //ตรวจสอบคำสั่งซื้อขายล่าสุดเป็นบวกหรือไม่ ถ้าเป็นบวกจึงเปิดคำสั่งซื้อขายใหม่
      if (จำนวนคำสั่งซื้อขายที่เปิดไปแล้ว > 0)
      {
         ตรวจสอบปิดคำสั่งซื้อขาย(เส้นค่าเฉลี่ยเคลื่อนเร็ว);
      }
      
      //ถ้าเป็นแทรนใหม่ ให้เปิดคำสั่งซื้อ/ขายใหม่ได้
      if (StringCompare (เทรนปัจจุบัน, เทรนเก่า) != 0)
      {
         สถานะอนุญาตให้เปิดคำสั่ง = True;                    
      } else {
         สถานะอนุญาตให้เปิดคำสั่ง = False;
      }
      
      //ตรวจสอบสถานะให้เปิดคำสั่งซื้อขายในววันศูกร์
      if ((FridayNotOpenOrder) && (DayOfWeek()==FRIDAY))
      {
         สถานะอนุญาตให้เปิดคำสั่ง = False;
         
         ข้อความแสดงบนจอ += "\n\n**********วันศุกร์ =>กำหนดไม่ให้เปิดคำสั่งซื้อขาย***************";
         Comment(ข้อความแสดงบนจอ);
      }     
               
      //ตรวจสอบจำนวนคำสั่งซื้อ/ขายว่าครบหรือยัง
      if (จำนวนคำสั่งซื้อขายที่เปิดไปแล้ว < MaxTrade)
      {
         //เปิดคำสั่งซื้อขายเฉพาะเมื่อเกิดแท่งราคาแท่งแท่งใหม่
         if ((!(Volume[0] > 1)) && สถานะอนุญาตให้เปิดคำสั่ง)
         {
            ตรวจสอบเปิดคำสั่งซื้อขาย(เส้นค่าเฉลี่ยเคลื่อนเร็ว, เส้นค่าเฉลี่ยเคลื่อนช้า);      
         }
      } else {
         ข้อความแสดงบนจอ += "\n\n**********คำสั่งซื้อขายครบจำนวนแล้ว******************";
         Comment(ข้อความแสดงบนจอ);
      }
   } else {
      ข้อความแสดงบนจอ += "\n\n**********ไม่ให้เปิดคำสั่งซื้อขาย***************";
      Comment(ข้อความแสดงบนจอ);
   }

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

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

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

Adz2you.