Open Forex4you Account

Server รัน EA 1000 / ปี

สั่งชื้อคู่มือการโปรแรกม MQL4

Author Topic: EA แบบใช้เส้นema2เส้นตัดกัน เขียนแบบนี้ถูกรึเปล่าครับ (รายละเอียดด้านใน)  (Read 10670 times)

wannadies

  • Newbie
  • *
  • Posts: 5
//+------------------------------------------------------------------+
//|                                                         crossover.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""

extern int Timeframe=15;
extern double Lots=0.01;
extern int SL=25;
extern int ema5_shift=1;
extern int ema20_shift=1;


//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  
   double ema5=iMA(Symbol(),Timeframe,5,0,1,0,ema5_shift);
   double ema5s=iMA(Symbol(),Timeframe,5,0,1,0,ema5_shift+1);
   double ema20=iMA(Symbol(),Timeframe,20,0,1,0,ema20_shift);
   double ema20s=iMA(Symbol(),Timeframe,20,0,1,0,ema20_shift+1);
  
  
   if(OrdersTotal()==0 && ema5s<ema20s && ema5>ema20)
   {
   OrderSend(Symbol(),OP_BUY,Lots,Ask,3,LongSL(),0,NULL,0,0,Blue);
   }
   if(OrdersTotal()==0 && ema5s>ema20s && ema5<ema20)
   {
   OrderSend(Symbol(),OP_SELL,Lots,Bid,3,ShortSL(),0,NULL,0,0,Red);
   }
  
   if(OrdersTotal()>0)
   {
      for(int i=0;i<OrdersTotal();i++)
      {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderType()==OP_BUY && ema5<ema20)
         {
         OrderClose(OrderTicket(),OrderLots(),Bid,3,Black);
         }
         if(OrderType()==OP_SELL && ema5>ema20)
         {
         OrderClose(OrderTicket(),OrderLots(),Ask,3,Black);
         }
      }
   }
  
//----
   return(0);
  }
//+------------------------------------------------------------------+

double LongSL()
{
   if(SL==0){return(0);}
   if(SL>0){return(Bid-SL*Point);}
}
double ShortSL()
{
   if(SL==0){return(0);}
   if(SL>0){return(Ask+SL*Point);}
}
« Last Edit: พฤษภาคม 17, 2012, 11:38:44 am by wannadies »

wannadies

  • Newbie
  • *
  • Posts: 5
รายละเอียดนะครับ คือให้ซื้อเมื่อema5ตัดema20ขึ้น และขายเมื่อema5ตัดema20ลง ตอนปิดก็ตรงข้ามกัน

คือผมแก้มาจากeaที่มีอยู่แล้ว แต่อันเก่ามันเป็น3เส้นก็ลบเส้นที่ไม่ใช้ออก พอลองเอาตัวที่แก้ไปรันดู มันเปิดออเดอร์ตามเงื่อนไขจริง แต่มีออเดอร์แทรกมาที่ไม่ตรงเงื่อนไข รบกวนช่วยดูทีนะครับว่าต้องแก้ไขตรงไหน ขอบคุณครับ

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Order ที่มาแซงเป็นอย่างไครับ มันชื้อผิดเงื่อนไขหรือว่าอะไรครับขอรายละเอียดนิดหนึ่งครับ

wannadies

  • Newbie
  • *
  • Posts: 5
ขอโทษที่ตอบช้านะครับ คือตั้งไทม์เฟรมไว้60มิน ออดเอร์อื่นก็เปิดตอนครบพีเรียดแต่มีออเดอร์นึงมาตอน18.40 งี้ เล่นเอางงเลย แต่ก็ช่างมันละกันครับ ผมกำลังลองใช้ ระบบสร้างEAของทางเวบอยู่ สับสนอยู่บ้าง เด๋ซจะลองอัพไฟลืให้ดูนะครับ

wannadies

  • Newbie
  • *
  • Posts: 5
ผมลองใช้เครื่องมือช่วยเขียนEAของทางเวบดูนะครับ โดยตั้งเงื่อนไขคือ ถ้า
1.macd >0 และ ราคาปิดแท่งเทียน<ema20 ให้ซื้อ
2.macd<0 และ ราคาปิดแท่งเทียน>eam20 ให้ขาย

โดยกำหนด tp/sl ที่100/50  เซ็ทค่า shift=1แล้ว

แต่พอลองเอาไปเทส กลายเป็นมันเปิดออเดอร์รัวๆ เหมือนกับแค่ค่ามากกว่าปุ๊บ มันก้อเปิดไม่ยั้ง แทนที่จะรอให้ปิดแท่งเทียนซะก่อน ลองแก้ แม๊กออเดอร์ก็เหมือนเดิม ผมตั้งค่าอะไรพลาดไปรึเปล่า ขอบคุณครับ

wannadies

  • Newbie
  • *
  • Posts: 5
extern double lot =0.01;
extern double sl =50;
extern double tp =100;
extern double trailing =0;
extern int MaxOrder =0; 
int start() {
   double var1 = iMACD(NULL,60,12,26,9,0,0,1);
 double var2 =  iMA(NULL,60,20,8,0,4,1);
 double var3 = iClose(NULL,60,1);
 int var4 = 0;





     if(( var1 > var4) && ( var3 < var2)){
      OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-Point*sl,Ask+Point*tp,"EA Creator",123,0,Green);
 }
     if(( var1 < var4) && ( var3 > var2)){
      OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+Point*sl,Bid-Point*tp,"EA Creator",123,0,Green);
 }
return(0) ;
 }

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading

extern double lot =0.01;
extern double sl =50;
extern double tp =100;
extern double trailing =0;
extern int MaxOrder =0; 
int start() {
   double var1 = iMACD(NULL,60,12,26,9,0,0,1);
 double var2 =  iMA(NULL,60,20,8,0,4,1);
 double var3 = iClose(NULL,60,1);
 int var4 = 0;



if( OrdersTotal()>=MaxOrder ) return(0) ;

     if(( var1 > var4) && ( var3 < var2)){
      OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-Point*sl,Ask+Point*tp,"EA Creator",123,0,Green);
 }
     if(( var1 < var4) && ( var3 > var2)){
      OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+Point*sl,Bid-Point*tp,"EA Creator",123,0,Green);
 }
return(0) ;
 }

เห็นท่าน Admin บอกว่า maxorder เป็นบั๊กนานละครับ  สงสัยลืมแก้

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
ใช้ครับ maxorder เป็น bug ครับผมยังไม่มีเวลาไปนั้งแก้เลยครับ  ถ้าแก้เองก็ตามท่าน D_Diamond เลยครับ เห็นแค่นั่น PHP ก็เกือบๆ 6000 บรรทัดนะครับ

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
ใช้ครับ maxorder เป็น bug ครับผมยังไม่มีเวลาไปนั้งแก้เลยครับ  ถ้าแก้เองก็ตามท่าน D_Diamond เลยครับ เห็นแค่นั่น PHP ก็เกือบๆ 6000 บรรทัดนะครับ

เวนกำ