Open Forex4you Account

Server รัน EA 1000 / ปี

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

Author Topic: ขอความช่วยเหลือแก้ไขอีเอ ที่สั่งให้เข้าทั้งBuyและSell พร้อมกันในเวลาเดียวกัน  (Read 10576 times)

fengfu9999

  • Newbie
  • *
  • Posts: 3
ผมเขียนอีเอ โดยมี Indicator คือ เส้น MA (period ที่เรากำหนดขึ้นเอง) 3เส้น และ 3 เส้นนี้เราสามารถเปิดใช้หรือไม่เปิดใช้ก็ได้ เช่น เราจะปิดไม่ใช้ MA เส้นที่ 2 แต่ให้ใช้ เส้นที่ 1 และ 3

วิธีการเข้า
ให้เข้าทั้งBuyและSell เมื่อแท่งเทียนไปชนเส้น MA ที่ 1 1ครั้งเท่านั้น
และเข้าทั้ง BuyและSell เมื่อแท่งเทียนไปชนเส้น MA ที่ 2 อีก 1ครั้งเท่านั้น
และเข้าทั้ง BuyและSell เมื่อแท่งเทียนไปชนเส้น MA ที่ 3 อีก 1ครั้ง เท่านั้น

การลง Lot ให้เรากำหนด Lot เองครับ และไม่มีการตั้ง SL,TP ครับ

แต่พอเทสแล้วกลับไม่เป็นอย่างนั้นครับ มันเริ่มที่ sell อย่างเดียวแล้วก็เข้าซื้อขายมั่วไปหมดเลยรบกวนช่วยเหลือแก้ไขหน่อยครับ


#property copyright ""
#property link      ""

extern double Lots=0.1;
extern int MA1_Period=50;
extern int MA2_Period=100;
extern int MA3_Period=200;
extern string MethodInfo="0=SMA 1=EMA";
extern int MA1_Method=1;
extern int MA2_Method=1;
extern int MA3_Method=1;

int LastBar,LastDay=0;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
 
  double ema1=iMA(Symbol(),0,MA1_Period,0,MA1_Method,0,0);
  double ema2=iMA(Symbol(),0,MA2_Period,0,MA2_Method,0,0);
  double ema3=iMA(Symbol(),0,MA3_Period,0,MA3_Method,0,0);
 
//----
   if(Day()!=LastDay || LastDay==0)
   {
      if((MA1_Period>0 && Close[0]>=ema1 && Open[0]<ema1) || (MA2_Period>0 && Close[0]>=ema2 && Open[0]<ema2) || (MA3_Period>0 && Close[0]>=ema3 && Open[0]<ema3))
      {
      OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,NULL,0,0,Blue);
      LastDay=Day();
      }
      if((MA1_Period>0 && Close[0]<=ema1 && Open[0]>ema1) || (MA2_Period>0 && Close[0]<=ema2 && Open[0]>ema2) || (MA3_Period>0 && Close[0]<=ema3 && Open[0]>ema3))
      {
      OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,NULL,0,0,Red);
      LastDay=Day();
      }
   }
//----
   return(0);
  }


ขอบคุณครับ







x-men

  • VIP
  • Full Member
  • *
  • Posts: 183
ผมเคยทำอีเอแนวนี้อยู่ครับ  ปัญหาทีมักพบ คือ พอแท่งเทียนชนและตัดMAเพียงแป๊ปเดืยว แล้ววิ่งกลับ (อีเอจะเปิด ออเดอร์ เพราะเข้าเงื่อนไข)  กรณีนี้จะเป็นช่วง Side Way ครับทำให้ติดลบเยอะและบ่อยมากๆ
ต้องเพิ่มเงื่อนไขครับว่าพอแท่งเทียนชนและตัดMA แล้วต้องรอไหม  รอนานเท่าไร หรือต้องให้เกิดแท่งเทียน 1แท่ง หรือ กี่แท่งก่อน จึงเปิดออเดอร์  หรือ พอเปิดออเดอแล้วต้องไม่เปิดอีก จนก่าวจะปิดออเดอนี้ก่อน เปิดออเดอใหม่

พอเป็นแนวทางครับ ประยุกต์ใช้แล้วกัน

fengfu9999

  • Newbie
  • *
  • Posts: 3
ครับ คือว่าผมมีแผนว่าจะให้ อีเอทำการเข้า position (เข้าทั้ง buy และ sell) เท่านั้น จากนั้นเราจะปิดขา(ด้าน)ที่ไม่ต้องการเมื่อเทรนออกครับเช่น เมื่อเทรนมันลง เราก็ปิดขา buy ทิ้งไป (ปิดมือ)ครับ

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
เท่าที่มองผ่านๆๆนะครับ ให้ใส่วงเล็บในเงื่อนไขมากกว่านี้หน่อยครับ
เช่น
if (  (MA1_Period>0 && Close[0]>=ema1 && Open[0]<ema1) ||    (MA2_Period>0 && Close[0]>=ema2 && Open[0]<ema2) ||    (MA3_Period>0 && Close[0]>=ema3 && Open[0]<ema3)    )

เป็น

if (  ( ( (MA1_Period>0 && Close[0]>=ema1  ) && Open[0]<ema1) ) ||   ( (  (MA2_Period>0 && Close[0]>=ema2 ) && Open[0]<ema2) )  ||  (  ( (MA3_Period>0 && Close[0]>=ema3 ) && Open[0]<ema3) )    )

แบบนี้จะเหลือชุดหรือ หลักแค่ 3 ชุด ครับเพราะ MQL4 มีความจำสั้นครับมักมีปัญหาเวลาที่ใช้เงื่อนไข ยาวๆๆแบบด้านบนครับ