EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: dimdio on ธันวาคม 08, 2011, 02:02:40 am

Title: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: dimdio on ธันวาคม 08, 2011, 02:02:40 am
ผมอยากจะได้ rsi ในแบบ ea น่ะครับ อยากจะลองเก็บสถิติดูครับ

โดยใช้เส้น rsi 2 ค่าที่ตัดกันเป็นสัญญาณซื้อขาย โดยตั้งค่าได้ดังนี้ครับ

ค่า rsi  ตัวที่ 1 ใส่ค่า...วัน

ค่า rsi  ตัวที่ 2 ใส่ค่า ...วัน

กำหนด Lot .....

กำหนดให้ใช้หรือไม่ใช้ TP และตั้งค่าTP ได้ ....

กำหนดให้ใช้หรือไม่ใช้ SL และตั้งค่าSL ได้ ....

กำหนดให้ใช้หรือไม่ใช้ trailingstop ได้และตั้งค่า trailingstop ได้  ....  

**** สัญญาณ ซื้อ คือ เมื่อ rsi เส้นที่มีค่าน้อย*ตัดปิด*เหนือเส้นที่มีค่ามากให้ซื้อ และเมื่อออเดอถูกปิดไป
        ไม่ว่าจะกำไรหรือขาดทุน **จะไม่มีการเปิดออเดอต่อในขณะที่เส้น rsi ที่มีค่าน้อยอยู่เหนือเส้นที่มีค่ามาก**

**** สัญญาณ ขาย คือ เมื่อ rsi เส้นที่มีค่าน้อย*ตัดปิด*ต่ำกว่าเส้นที่มีค่ามากให้ขาย และเมื่อออเดอถูกปิดไป
        ไม่ว่าจะกำไรหรือขาดทุน **จะไม่มีการเปิดออเดอต่อในขณะที่เส้น rsi ที่มีค่าน้อยอยู่ต่ำกว่าเส้นที่มีค่ามาก**

*** คือซื้อเมื่อเส้นrsi *ตัดกัน*จริงๆ น่ะครับ ไม่เปิดออเดอต่อเรื่อยๆ ในขณะที่เส้นrsi ที่มีค่าน้อยอยู่เหนือหรือต่ำกว่าเส้นที่มีค่ามากเพราะปกติเว็บเขียนอีเอออกมามันจะเป็นแบบนั้น ***

รบกวนผู้เชี่ยวชาญในการเขียน ea ช่วยผมหน่อยนะครับ ต้องการจริงๆ ขอบคุณครับ

Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: kimkimkung on ธันวาคม 08, 2011, 09:19:14 am
อยากได้เช่นกันครับจะนำไปประยุกกับของผมพอดี
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: dimdio on ธันวาคม 08, 2011, 05:59:27 pm
มีใครอาสาเขียนให้มั้ยครับ  :)
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: noei333 on ธันวาคม 08, 2011, 07:08:48 pm
ลองใช้ระบบสร้าง EA ของเวบดูสิค่ะ http://www.thaiforexea.com/mt4/
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: dimdio on ธันวาคม 09, 2011, 04:36:13 pm
ขอบคุณครับ ลองดูแล้วครับแล้วถ้าจะให้มันเข้าเปิดออเดอร์ แค่ครั้งเดียว  เช่น ตอนrsi เส้นค่าน้อยตัดค่าเส้นมากขึ้นครั้งแรกเปิดออเดอเป็น buy แล้วพอออเดอร์นี้ปิดลง ไม่ต้องให้มันเปิดออเดอร์เพิ่มจนกว่าrsi จะตัดกันอีกรอบต้องทำไงอ่ะครับ  ใครแนะนำได้บ้างครับ
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: preeyada on ธันวาคม 09, 2011, 04:39:35 pm
เคลียร์ค่า ตัวแปรหลังจากที่เปิด Order หรือยังครับ
เพื่อให้มันเปิด เฉพาะตอนตัดกันไง  :D
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: dimdio on ธันวาคม 09, 2011, 07:21:05 pm
คุณ preeyada เคลียร์ยังไงอ่ะครับ  ??? ใช่หมายถึงที่สร้างในเว็บหรือเปล่่า ผมมือใหม่นะครับ ช่วยสอนที ขอบคุณครับ
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: Redbull on ธันวาคม 10, 2011, 11:13:28 pm
นั่นนะสิครับ...เคลียร์ยังไงครับ...
ทุกวันนี้ผมลองเขียนมาหลายแบบก็ติดปัญหานี้เหมือนกันครับ...
รบกวนช่วยชี้แนะข้าน้อยด้วยครับ....
....ขอบคุณมากมายล่วงหน้าครับ..../^_^/" ??? :-\ ;D :-*
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: preeyada on ธันวาคม 11, 2011, 10:27:58 am
คือ ผมหมายถึงว่าอย่างนี้ครับ
เมื่อมีการตัดกันเกิดขึ้น ให้เก็บค่าลงตัวแปรว่าให้ Buy หรือ Sell  
เช่น ประกาศตัวแปร ชื่อ OrderBS
เมื่อเข้าจังหวะ Buy ก็ให้ OrderBS=1
เมื่อเข้าจังหวะ Sell ก็ให้ OrderBS=2
จากนั้นก็เอาค่าจากตัวแปรไปสั่งให้เปิด Order อีกที
เมื่อมีการปิด Order ก็ให้เคลียร์ค่าตัวแปรอย่างที่บอก เช่น ให้ OrderBS=0
ก็จะไม่เปิด Order อีก จนกว่าจะมีการตัดกันเกิดขึ้นครั้งต่อไป

ประมาณนี้ครับ   :D
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: Redbull on ธันวาคม 11, 2011, 07:10:43 pm
อ๋อ...มันป็นจั่งสั้น...
ที่ท่านอธิบายมาผมพอเข้าใจครับ...
แต่ปัญหาของผมคือเรื่องคำสั่งต่างๆ ที่จะนำมาใช้น่ะครับ...(ไม่เคยเรียนภาษา C มาก่อน เรียนแต่ PLC 555)
ไม่เป็นไรครับ...เดี๋ยวผมลองดูก่อนครับ...
ติดตรงไหนเดี๋ยวลองรบกวนอีกครั้งครับ...
....ขอบคุณมากมายครับ...(*_*) :-* ;D :o
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: preeyada on ธันวาคม 11, 2011, 08:24:22 pm
ยินดีครับ  :D

ในบอร์ดนี้มีคนเก่งๆมากมายครับ 
ถามมามีคนตอบแน่นอน ฟันธง 55
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: admin on ธันวาคม 11, 2011, 08:53:20 pm
ผมอยากจะได้ rsi ในแบบ ea น่ะครับ อยากจะลองเก็บสถิติดูครับ

โดยใช้เส้น rsi 2 ค่าที่ตัดกันเป็นสัญญาณซื้อขาย โดยตั้งค่าได้ดังนี้ครับ

ค่า rsi  ตัวที่ 1 ใส่ค่า...วัน

ค่า rsi  ตัวที่ 2 ใส่ค่า ...วัน

กำหนด Lot .....

กำหนดให้ใช้หรือไม่ใช้ TP และตั้งค่าTP ได้ ....

กำหนดให้ใช้หรือไม่ใช้ SL และตั้งค่าSL ได้ ....

กำหนดให้ใช้หรือไม่ใช้ trailingstop ได้และตั้งค่า trailingstop ได้  ....  

**** สัญญาณ ซื้อ คือ เมื่อ rsi เส้นที่มีค่าน้อย*ตัดปิด*เหนือเส้นที่มีค่ามากให้ซื้อ และเมื่อออเดอถูกปิดไป
        ไม่ว่าจะกำไรหรือขาดทุน **จะไม่มีการเปิดออเดอต่อในขณะที่เส้น rsi ที่มีค่าน้อยอยู่เหนือเส้นที่มีค่ามาก**

**** สัญญาณ ขาย คือ เมื่อ rsi เส้นที่มีค่าน้อย*ตัดปิด*ต่ำกว่าเส้นที่มีค่ามากให้ขาย และเมื่อออเดอถูกปิดไป
        ไม่ว่าจะกำไรหรือขาดทุน **จะไม่มีการเปิดออเดอต่อในขณะที่เส้น rsi ที่มีค่าน้อยอยู่ต่ำกว่าเส้นที่มีค่ามาก**

*** คือซื้อเมื่อเส้นrsi *ตัดกัน*จริงๆ น่ะครับ ไม่เปิดออเดอต่อเรื่อยๆ ในขณะที่เส้นrsi ที่มีค่าน้อยอยู่เหนือหรือต่ำกว่าเส้นที่มีค่ามากเพราะปกติเว็บเขียนอีเอออกมามันจะเป็นแบบนั้น ***

รบกวนผู้เชี่ยวชาญในการเขียน ea ช่วยผมหน่อยนะครับ ต้องการจริงๆ ขอบคุณครับ

ยอมเปิดเป็น Open source ไหมหละครับถ้ายอมเดียวผมเขียนให้ดู
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: preeyada on ธันวาคม 11, 2011, 09:27:57 pm
นั้นไง พูดยังไม่ทันขาดคำ
ท่านแอดมินผู้ใจดีก็มาช่วยเลย
เชื่อว่าเด๋วต้องมีท่าน D_Diamond มาเสริมอีกแรง
ด่วนเลยครับ ท่านเจ้าของกระทู้ รีบตอบรับเร็ว อิอิ
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: dimdio on ธันวาคม 12, 2011, 10:07:04 pm
ไม่มีปัญหาครับท่านแอดมิน open source ได้เลยครับ ขอบคุณล่วงหน้าครับ  :)
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: Redbull on ธันวาคม 12, 2011, 10:21:34 pm
Open source คือไรอ่ะ....
ไม่รู้...ช่วยตอบทีครับ...
จะได้เอออ๋อตามไปด้วย.../^_^/ ??? ::) ;D
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: admin on ธันวาคม 13, 2011, 01:19:53 am
Open source คือไรอ่ะ....
ไม่รู้...ช่วยตอบทีครับ...
จะได้เอออ๋อตามไปด้วย.../^_^/ ??? ::) ;D
Open source คือการเปิดเผย code ทั้งหมดที่ผมจะเขียนให้เพราะเห็นว่ามันมีเทคนิคที่ทุกคนนำไปใช้ได้เลยจะทำให้เพื่อให้คนอื่นมานำไปใช้ต่อครับ เดียวพรุ่งนี้หรือไม่ก็วันพูธก็น่าจะเสร็จช่วยนี้ค่อนข้างยุ่งครับ
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: admin on ธันวาคม 13, 2011, 04:03:07 am
ลองเปิด demo ดูการตัดมันนะครับแต่ก็น่าจะ ok แล้วหละ

extern double lot=0.1;
extern int magic=123;
extern bool UseTp=true;
extern int Tp=15;
extern bool UseSl=true;
extern int Sl =15;
extern bool UseTrailing=true;
extern int trailing  =15;
extern int LessRsiDay=14;
extern int MuchRsiDay=49;

int temp;



int start()
  {
      double LessRsi =iRSI(NULL,0,LessRsiDay,PRICE_CLOSE,0);
      double MuchRsi =iRSI(NULL,0,MuchRsiDay,PRICE_CLOSE,0);
     
    int way=  check(LessRsi,MuchRsi);
   
      if(temp==0)
      temp=way; 
      if(UseTp==false)
      Tp=0;
      if(UseSl==false)
      Sl=0;
     
     if(OrdersTotal()==0)
     {
               if(way==1 && temp==2)
                  {
                          if(Sl== 0 && Tp==0)
                       
                       { 
                       OrderSend(Symbol(),OP_BUY,lot,Ask,3,0,0,"dimdo",magic,0,Green);
                       
                       }
                       
                if(Sl!= 0 && Tp==0)
                       
                       { 
                       
                       OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-Point*Sl,0,"dimdo",magic,0,Green);
                       }
                       
                if(Sl== 0 && Tp!=0)
                       
                       { 
                       
                       OrderSend(Symbol(),OP_BUY,lot,0,0,"dimdo",magic,0,Green);
                       }
                       
                       
               if(Sl!= 0 && Tp!=0)
                       
                       { 
                       OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-Point*Sl,Ask+Point*Tp,"dimdo",magic,0,Green);
                       
                       }
     
                     temp=1;
                 }
                 
                 if(way==2 && temp==1)
                  {
                           if(Sl== 0 && Tp==0)
                       
                       { 
                       
                       OrderSend(Symbol(),OP_SELL,lot,Bid,3,0,0,"dimdo",magic,0,Red); 
                       }
                       
                        if(Sl!= 0 && Tp==0)
                       
                       { 
                       OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+Point*Sl,0,"dimdo",magic,0,Red); 
                       
                       }
                       
                       if(Sl== 0 && Tp!=0)
                       
                       { 
                       OrderSend(Symbol(),OP_SELL,lot,Bid,3,0,Bid-Point*Tp,"dimdo",magic,0,Red); 
                       
                       }
                       
                       
                      if(Sl!= 0 && Tp!=0)
                       
                       { 
                       
                       OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+Point*Sl,Bid-Point*Tp,"dimdo",magic,0,Red); 
                       }
     
                    temp=2;
                 }
                 
       
      }
     
      if(UseTrailing==true)
      trailingstop();
 

   return(0);
  }



int check (double v1 ,double v2)
{    static int lastway =0;
     static int way     =0;
     
     if(v1 > v2)
     {
        way=1;
     
     }
   
    if(v1 < v2)
     {
        way=2;
     
     }
     
     if(way!= lastway)
     {
        lastway = way;
        return (lastway);     
     }
 
       return (0);

}



void trailingstop() {   
         for(int count=0;count<OrdersTotal();count++)       
            {OrderSelect(count,SELECT_BY_POS,MODE_TRADES);     
               if(OrderType() == OP_BUY)     
                   {if(trailing > 0){       
                       
                           if(OrderStopLoss()==0 || (Bid - OrderStopLoss()> trailing*Point))     
                                {
                                OrderModify(OrderTicket(), OrderOpenPrice(),Bid - trailing*Point, OrderTakeProfit(), 0, Blue);                                 
                                 }
                           }
                     
                  }   
                if(OrderType() == OP_SELL)
                  { if(trailing > 0)
                       { 
                          if(OrderStopLoss() == 0 || ( OrderStopLoss()-Ask > trailing*Point ) ) 
                              {OrderModify(OrderTicket(), OrderOpenPrice(),Ask + trailing*Point, OrderTakeProfit(), 0, Red);                                   }
                         }
                      }
                   
              }
          }
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: Redbull on ธันวาคม 13, 2011, 09:29:01 am
ท่าน Admin ครับ
extern int magic=123; คืออะไรครับ...
...ขอบคุณครับ.../^_^/ ;D ::) :-[
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: D_Diamond on ธันวาคม 13, 2011, 10:39:51 am
magicnumber เป็นเลขประจำตัวอีเอครับ  ใส่ไว้ให้รู้ว่าออเดอร์ไหนเป็นของอีเอตัวไหน  ไม่ใส่อีเอจะมั่ว
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: Redbull on ธันวาคม 13, 2011, 10:43:03 am
อ๋อ.......
ขอบคุณมากมายครับ..../^_^/ ;D :o :-*
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: dimdio on ธันวาคม 13, 2011, 05:59:58 pm
ขอบคุณครับท่านแอดมิน ขอนำไปลองใช้ก่อนนะครับ  :)
Title: Re: ช่วยเขียน ea แบบนี้ให้หน่อยครับ
Post by: mai_ktnk on พฤษภาคม 26, 2014, 12:29:23 am
ถึงท่าน admin จากโค้ต ที่ท่านเขียนไว้ผมขอให้ท่านช่วย แก้ไขให้มันเบิ้ลล๊อด จนกว่าจะปิด order แล้วไม่เอา sl กับ Trailing นะคับ
และขอกำหนดระยะ pipที่จะเปิดไม้ 1 กับไม้ที่ 2  คับ  ขอขอบคุณล่วงหน้าคับ