Open Forex4you Account

Server รัน EA 1000 / ปี

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

Author Topic: อยากให้เปิดแท่งละ 1 ออเดอร์  (Read 18572 times)

be

  • Newbie
  • *
  • Posts: 32
อยากให้เปิดแท่งละ 1 ออเดอร์
« on: กุมภาพันธ์ 05, 2013, 03:10:57 pm »
คือ ผมหัดเขียน ea แบบนี้ครับ
ถ้าแท่งที่แล้วปิดบวก แท่งปัจจุบันให้เปิด บาย
ถ้าแท่งที่แล้วปิดลบ แท่งปัจจุบันให้เปิด เซล
 ไปเรื่อยๆ

แต่ปัญหาที่ผมพบคือ หลังจากเข้าเงื่อนไข ea กลับเปิดออเดอร์แท่งเดียวถี่ๆ

code ที่ผมเขียนเป็นแบบนี้ครับ

int start()

{
double openprice; 
openprice=iOpen( NULL,0,1);

double closeprice;
closeprice=iClose( NULL,0,1);
 
{
     
     if(closeprice>openprice) 
     {
     
 
     OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-100*Point,Ask+100*Point,"My order",123,0,Green);
   
     
   
      }
      if(closeprice<openprice)
     
      OrderSend(Symbol(),OP_SELL,0.01,Bid,3,Bid+100*Point,Bid-100*Point,"My order",321,0,Pink);
      }
       return(0);
  }

รบกวนช่วยดูหรือแก้ไขให้หน่อยครับ

ขอบคุณครับ  :'( :'(
« Last Edit: กุมภาพันธ์ 05, 2013, 04:21:28 pm by be »

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: อยากให้เปิดแท่งละ 1 ออเดอร์
« Reply #1 on: กุมภาพันธ์ 05, 2013, 04:31:05 pm »
ก่อนจะบายจะเซลก็นับก่อนครับว่ามีออเดอร์เปิดอยู่กี่ออเดอร์  ถ้านับได้ 0 ค่อยเปิดออเดอร์

be

  • Newbie
  • *
  • Posts: 32
Re: อยากให้เปิดแท่งละ 1 ออเดอร์
« Reply #2 on: กุมภาพันธ์ 05, 2013, 05:04:17 pm »
ก่อนจะบายจะเซลก็นับก่อนครับว่ามีออเดอร์เปิดอยู่กี่ออเดอร์  ถ้านับได้ 0 ค่อยเปิดออเดอร์

ยังไงหรอครับ ผมลองไปเรีื่อยดู มันก็เปิดออเดอร์ติดๆกันหลายออเดอร์ ภายในแท่งเดียวอยู่ดี

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
Re: อยากให้เปิดแท่งละ 1 ออเดอร์
« Reply #3 on: กุมภาพันธ์ 05, 2013, 05:31:42 pm »
เอาง่ายๆก็แบบนี้ครับ

if ( OrdersTotal() == 0 )
 OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-100*Point,Ask+100*Point,"My order",123,0,Green);

hyperxeon

  • Newbie
  • *
  • Posts: 11
Re: อยากให้เปิดแท่งละ 1 ออเดอร์
« Reply #4 on: กุมภาพันธ์ 05, 2013, 05:35:02 pm »
int start() -> จะ Run ทุกครั้งเมื่อราคาขยับ
จาก Code ที่คุณเขียนมา ทุกครั้งที่ราคาขยับ มันจะสั่งให้เปิด Order ทุกครั้ง นั่นจึงเป็นสาเหตุว่าทำไม ใน 1 แท่งเทียนจึงมีหลาย Orders มาก
วิธีแก้ : ต้องตรวจสอบว่า แท่งเทียนเปลี่ยนไปหรือยัง โดยใช้ Bars ซึ่งเป็นค่าแสดงลำดับที่ของแท่งเทียน (แต่ไม่ต้องสนว่ามันแท่งที่เท่าไหร่)

int oldBars;   // Set เป็น Global (ก่อนฟังก์ชั่น init())

// ในฟังก์ชั่น init()
int init()
{
   oldBars = Bars - 1; // เพื่อให้ทำงานทันทีที่ EA เริ่ม Run
}

int start()
{
   if(Bars > oldBars){   // แท่งเทียนเปลี่ยนหรือยัง ?
   double openprice;
   openprice=iOpen( NULL,0,1);

   double closeprice;
   closeprice=iClose( NULL,0,1);

   if(closeprice>openprice)
   {   
 
   OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-100*Point,Ask+100*Point,"My order",123,0,Green);

   }

   if(closeprice<openprice){
     
   OrderSend(Symbol(),OP_SELL,0.01,Bid,3,Bid+100*Point,Bid-100*Point,"My order",321,0,Pink);
   }
   oldBars = Bars; // แทนค่าลำดับแท่งเทียนปัจจุบัน เพื่อไม่ให้เปิดเพิ่มอีกในแท่งเทียนนี้
   }


          return(0);
  }

เมื่อแก้โค๊ดตามนี้แล้ว EA จะเปิดเพียง 1 ครั้ง ต่อ 1 แท่งเทียนไปเรื่อยๆ ทุกแท่งครับ ลองดูครับ

be

  • Newbie
  • *
  • Posts: 32
Re: อยากให้เปิดแท่งละ 1 ออเดอร์
« Reply #5 on: กุมภาพันธ์ 05, 2013, 06:38:54 pm »
ผมน้องใหม่จิงๆครับ ไม่มีประสบการเกี่ยวกับการเขียนโปรแกรมคอมมาก่อนเลย
อาศัยอ่านแล้วหัดเขียนเองเลยครับ

code ที่ท่าน hyperxeon แก้ให้
ใช้ได้แล้วครับ

ต้องขอขอบคุณท่าน D_Diamond และท่าน hyperxeon ที่เข้ามาตอบครับ