Sponsored Ads

วันจันทร์ที่ 31 กรกฎาคม พ.ศ. 2560

เขียน EA แบบง่ายๆ ผ่าน Moving average

วันนี้เราลองมาเขียน EA  แบบง่ายๆ กันครับ ผ่าน indicator คือ EMA 

ผมเอา Code มาแปะให้ เพื่อให้เพื่อนๆได้ทำความเข้าใจว่าขั้นตอนในการเขียนมันมีหลักการเช็ค loop ยังไงบ้าง ผมเองตอนหัดเขียนใหม่ๆ ก็เจอปัญหาคือ มันส่ง Order ซ้ำ ลองเอา Code นี้ไปศึกษาดูนะครับ ผมไปเอามาจากตัวอย่างในหนังสือ แล้วพิมพ์หมายเหตุเป็นภาษาไทย เพื่อให้เข้าใจง่ายๆ ลองหัดเขียนแล้วเอาไปปรับใช้กันดูนะครับ




extern double TakeProfit = 250; 
extern double Lots = 0.1; 
extern double TrailingStop = 35.0; 

int Crossed(double line1, double line2) // ไว้เช็ค up / down trend
   {
      static int last_direction = 0 ; // ค่า direction เริ่มต้น = 0 
      static int current_direction = 0; 
      
      //สร้างเงื่อนไข Cross 
      
     // ถ้า line 1 > line 2 ให้ค่า current direction = 1 หมายถึง up 
           if(line1>line2) current_direction = 1; 
            if(line1<line2) current_direction = 2; // down
            
      // แก้ค่าตัวแปร ให้ curent = last direction
      
      if(current_direction != last_direction)
      {
         last_direction = current_direction; 
         return(last_direction); 
         
       }
       else 
       {
         return(0); 
       }
    } 
      
 //-----------------------------------------------------------------
 
 int start()
   {
      int cnt,ticket ,total; 
      double shortEma , longEma; 
      
      if(Bars<100)
         {
            Print("bar Less than 100") ; // bar น้อยกว่า 100 ข้อมูลน้อยไป 
         }
       // set ค่า EMA 
       
       shortEma = iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0);  //set EMA 8 
       longEma = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0); 
       
       //ใช้ฟังก์ชั่น cross ที่เขียนไว้ก่อนหน้า เพื่อดู trend 
       
       
       int isCrossed = Crossed(shortEma , longEma); 
       
       //เช็ค Order ทั้งหมด 
       
       total = OrdersTotal(); 
       if(total <1) // ถ้ายังไม่เปิด order  
       
         {  
            if(isCrossed ==1)  //ถ้า up 
            
              {
                //ส่ง Order 
                ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"My EA",0,Green); 
                
                
                   if(ticket>0) // ถ้าส่ง order ผ่าน 
                   
                    { 
                       if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))// เลือก order ได้ไหม 
                           Print("Buy Order Opened : ",OrderOpenPrice()); //ถ้าได้ให้ print เลข Order 
                    }
                    else // ถ้าไม่ได้ 
                        Print("error opening Buy");
                        return(0);
             }
            
              if(isCrossed == 2) // ถ้าลง เขียนเหมือน up
            {
               ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"My EA",12345,0,Red);
                  
                    if(ticket>0)
                        
                        {

                              if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
                                 Print("SELL order opened : ",OrderOpenPrice());

                        }
                              else 
                                 Print("Error opening SELL order : ",GetLastError());
                              return(0);
            }
            return(0);
            
       }
       
       
       //-------------------------------------------------------------------------------
       // เช้ค Order 
       
       for(cnt=0;cnt<total;cnt++)
            {
               OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
               
                  if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())   // ถ้าเป็น Order Buy or Sell 
                     
                     { 
                                 if(OrderType()==OP_BUY) // ถ้า Buy เปิดไว้ให้ปิด 
                        
                                       {

                                             if(isCrossed == 2)    // สัญญา downมา
                                          
                                                {
                                                         OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);   // ปิด
                                                         
                                                         return(0); // จบ
                                                 }
                                       }
                                      
                                 
                         else // go to short position
                             {
                                       // ถ้าขึ้น
                                       if(isCrossed == 1)
                                       {
                                                OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // ปิด long 
                                       
                                                  return(0); // จบ
                                        }
                                        
                               }
                       }
                       
                 
                  
                 }
                 
        return;
        
   }

4 ความคิดเห็น:

  1. แล้วจะเริ่มต้นเขียนอย่างไรดีครับ ถ้าไม่มีพื้นฐานเลย

    ตอบลบ
  2. สวัสดีที่รัก,

    ฉันชอบบล็อกของคุณมาก .. ฉันเห็นทุกบล็อกของคุณเป็นประโยชน์สำหรับฉัน

    สอนเขียนโปรแกรม

    สอนเขียนโปรแกรม รับสอนเขียนโปรแกรม สอนทำเว็บไซต์ อบรมการเขียนโปรแกรม เรียนการเขียนโปรแกรม สอนตั้งแต่พื้นฐาน ถึงระดับสูง หลักสูตรมากที่สุดในประเทศ

    เข้าชมเดี๋ยวนี้- http://www.สอนเขียนโปรแกรม.com/

    ตอบลบ
  3. สวัสดีครับ ขอบคุณสำหรับความรู้ทั้งบทความและในยูทูปนะครับ
    ไม่ทราบว่าตอนที่ 19 จะมีออกมาสอนเพิ่มหรือไม่ครับ
    ทางคุณสอนดีมาก น่าจะทำซีดีขายคอร์สสอนนะครับ
    เพราะจากที่เคยไปเรียนมาหลายๆที่ส่วนใหญ่จะไม่ละเอียดไล่ตั้งแต่ฟื้นฐานแบบของคุณ
    ขอบคุณมากครับมีประโยชน์มากจริงๆ

    ตอบลบ
  4. เขียนเร็วเกินไปครับ ผมเอาไป run แล้วไม่ผ่านหลายจุด ต้องแก้ไข บางจุดก็แก้ไขได้ บางจุดก็ยังแก้ไม่ได้เลย น่าจะตรวจสอบก่อนครับ แต่ก็ต้องขอบคุณที่แชร์ข้อมูล แต่ถ้าให้ดีต้องตรวจข้อมูลก่อนครับ คนที่นำไปใช้จะได้ทำงานได้จริง ;(

    ตอบลบ