วันอาทิตย์ที่ 21 พฤษภาคม พ.ศ. 2560

ตัวอย่างที่ 1 การเขียน EA โดยให้ทำการซื้อขายโดยใช้เส้น MA

หลักการของ EA ตัวนี้คือ

  • การใช้เส้น MA ที่จำนวน Period ต่างกันกล่าวคือ
    • หาก MA5 > MA10 > MA15 > MA20 ให้ทำการเปิด Order Buy
    • แต่หาก MA5 < MA10 < MA15 < MA20 ให้ทำการเปิด Order Sell
  • เมื่อ EA เริ่มทำงานจะรอจนกว่าจะเข้าเงื่อนไข จึงจะเปิด Order
  • EA จะทำการซื้อขายครั้งละ 1 Order เท่านั้น
  • EA จะปิด Order ก็ต่อเมื่อเงื่อนไขของเส้น MA กลับไปอีกด้านหนึ่งพร้อมทั้งเปิด Order ในด้านตรงข้ามทันที ทำแบบนี้สลับไปสลับมาจนกว่าเราจะหยุดการทำงานของ EA
extern double Lot=0.1;

int start()
  {   //Point 1
       double MA5  = iMA(NULL,0,5,0,MODE_SMMA,PRICE_CLOSE,0);
       double MA10 = iMA(NULL,0,10,0,MODE_SMMA,PRICE_CLOSE,0);
       double MA15 = iMA(NULL,0,15,0,MODE_SMMA,PRICE_CLOSE,0);
       double MA20 = iMA(NULL,0,20,0,MODE_SMMA,PRICE_CLOSE,0);
       
     //Point 2
        
      if(OrdersTotal()==0)
      { 
       
          if( ( MA5 > MA10 ) && (MA10 > MA15) && (MA15  > MA20 )  )
               {
        
      OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0,"EX1",0,0,Green);
               }
      
         if( ( MA5 < MA10 ) && (MA10 < MA15) && (MA15  < MA20 )  )
               {
       
      OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,"EX1",0,0,Red);
               }
      }
      
         //Point 3
          if(OrdersTotal()==1)
      { 
       
         if( ( MA5 > MA10 ) && (MA10 > MA15) && (MA15  > MA20 )  )
               { OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
                  if(OrderType()==OP_SELL)
                   OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
      
               }
      
          if( ( MA5 < MA10 ) && (MA10 < MA15) && (MA15  < MA20 )  )
               { OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
                  if(OrderType()==OP_BUY)
                   OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
      
               }
      }
      

   return(0);
  }

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

  1. จะเห็นว่าผล Back test ช่วงวันที่ 1/1/2017-30/4/2017 คู่เงิน EU : H1
    Win rate ต่ำมาก ขาดทุนเยอะ
    ยังไม่สามารถนำไปใช้ได้จะต้องปรับปรุงใหม่

    ตอบลบ
  2. extern double Lot=0.1; // ประกาศให้ Lot เป็นตัวแปรภายนอกที่ผู้ใช้งานสามารถป้อนค่าที่ต้องการได้

    ตอบลบ