EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: noei333 on สิงหาคม 02, 2009, 07:55:56 pm

Title: ปรึกษาวิธีการเขียน code ค่ะ
Post by: noei333 on สิงหาคม 02, 2009, 07:55:56 pm
อยากทราบว่าจะเขียน code ยังไงค่ะถ้าเราต้องการให้ ea เข้าชื้อถ้าราคาตัด เส้น sma ขึ้นไปแล้วจะตัดทำกำไรที่ 20 จุด ช่วยตอบด้วยนะค่ะ ขอบคุณค่ะ
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: admin on สิงหาคม 02, 2009, 09:27:58 pm
ไม่ยากครับผมเขียน code ตัวอย่างให้แล้วครับลองเอาไปศึกษาดูตรงไหนไม่เข้าใจก็ถามได้ครับ
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: chao-ea on สิงหาคม 03, 2009, 01:36:49 pm
เป็นคำถามที่ ดี มักๆๆ อิอิ
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: chao-ea on สิงหาคม 03, 2009, 01:42:04 pm
ไม่ยากครับผมเขียน code ตัวอย่างให้แล้วครับลองเอาไปศึกษาดูตรงไหนไม่เข้าใจก็ถามได้ครับ

แกะดู Code ละ โลกยังเป็น สีเทาอยุ่ อิอิ ^_^
ถ้าเป็นไปได้ อยากให้ เขียน /*  */  อธิบาย ข้างๆๆหน่อย  ขอบคุณครับ

พยายาม ศึกษาอยุ่ครับ อิอิ คล้าย ภาษา C มักเลย งะ แต่มะเก่ง
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: admin on สิงหาคม 03, 2009, 04:11:29 pm
ครับ คราวหน้าจะ comment เพิ่มแต่ใน code ตอมเมนน์เป็นภาษาไทยไม่ได้อ่ะครับ
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: phanom on สิงหาคม 05, 2009, 11:04:02 am
ครับ คราวหน้าจะ comment เพิ่มแต่ใน code ตอมเมนน์เป็นภาษาไทยไม่ได้อ่ะครับ

เอาโค๊ด+คอมเมนท์ มาโพสในบอร์ดเลยครับ
ใส่ไฟล์แนบ มันดูยาก
ใครจะเอาไปใช้ ก็ copy ไปแลัวเซฟเป็น mq4 เอาเอง
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: easy on สิงหาคม 06, 2009, 10:48:26 am
พอดีอยากเขียน EA เอาแบบว่า
ครั้งแรก sell หรือ buyก็ได้ tpสัก50, slสัก50
พร้อมเปิดออเดอร์ buy stop และ sell stop ณ จุดtp และจุด sl แต่ที่จุด sl lot จะเท่า 2*lotเดิม
และorderแรกถึงจุด tp ก็ปิด orderฝั่งตรงข้ามครับ
ยกตัวอย่างยากจัง
เช่น sell eu  1.4000, lot=0.1, tp 1.3950, sl 1.4050,
buy stop 1.4050, lot=0.2, tp 1.4100, sl 1.4000
sell stop 1.3950, lot=0.1 , tp 1.3900, sl 1.4000

--ถ้าราคาไหลมาฝั่ง ทำกำไรก็  (ตอนนี้ sell stop ที่ตั้งครั้งแรกทำงานแล้ว)
ลบ buy stop ทิ้ง และเปิด buy stop ที่ราคา 1.4000 lot=0.2 (จริงๆน่าจะเป็นการโมดิฟาย ราคาเฉยๆ)
และเปิดออเดอร์ sell stop, lot=0.1
buy stop 1.4000, lot=0.2, tp 1.4050, sl 1.3950
sell stop 1.3900, lot=0.1 , tp 1.3850, sl 1.3950

--ถ้าราคาไหลมาฝั่ง ขาดทุนก็ (ตอนนี้ buy stop ที่ตั้งครั้งแรกทำงานแล้ว)
ลบ sell stop ทิ้ง และเปิด sell stop ที่ราคา 1.4000 lot=0.4
และเปิด ออเดอร์ buy stop, lot=0.1
buy stop 1.4100, lot=0.1, tp 1.4150, sl 1.4050
sell stop 1.4000, lot=0.4 , tp 1.3950, sl 1.4050

งง นิดหน่อย ขอบคุณล่วงหน้านะครับ  ;D
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: admin on สิงหาคม 06, 2009, 03:38:30 pm
พอดีอยากเขียน EA เอาแบบว่า
ครั้งแรก sell หรือ buyก็ได้ tpสัก50, slสัก50
พร้อมเปิดออเดอร์ buy stop และ sell stop ณ จุดtp และจุด sl แต่ที่จุด sl lot จะเท่า 2*lotเดิม
และorderแรกถึงจุด tp ก็ปิด orderฝั่งตรงข้ามครับ
ยกตัวอย่างยากจัง
เช่น sell eu  1.4000, lot=0.1, tp 1.3950, sl 1.4050,
buy stop 1.4050, lot=0.2, tp 1.4100, sl 1.4000
sell stop 1.3950, lot=0.1 , tp 1.3900, sl 1.4000

--ถ้าราคาไหลมาฝั่ง ทำกำไรก็  (ตอนนี้ sell stop ที่ตั้งครั้งแรกทำงานแล้ว)
ลบ buy stop ทิ้ง และเปิด buy stop ที่ราคา 1.4000 lot=0.2 (จริงๆน่าจะเป็นการโมดิฟาย ราคาเฉยๆ)
และเปิดออเดอร์ sell stop, lot=0.1
buy stop 1.4000, lot=0.2, tp 1.4050, sl 1.3950
sell stop 1.3900, lot=0.1 , tp 1.3850, sl 1.3950

--ถ้าราคาไหลมาฝั่ง ขาดทุนก็ (ตอนนี้ buy stop ที่ตั้งครั้งแรกทำงานแล้ว)
ลบ sell stop ทิ้ง และเปิด sell stop ที่ราคา 1.4000 lot=0.4
และเปิด ออเดอร์ buy stop, lot=0.1
buy stop 1.4100, lot=0.1, tp 1.4150, sl 1.4050
sell stop 1.4000, lot=0.4 , tp 1.3950, sl 1.4050

งง นิดหน่อย ขอบคุณล่วงหน้านะครับ  ;D





int total;      //กำหนดตัวแปร total เอาไวเก็บค่าจำนวน order ทั้งหมด
     int ticket;  // กำหนดตัวแปรไวเก็บค่า id ของ order
     
     
     total=OrdersTotal();   ตรวจสอบจำนวน order ที่เปิดทั้งหมด
     
     if(total ==0)  // หากพบว่า order ที่เปิดเท่ากับ 0 ให้ทำการเปิด 3 order ตาม logic ที่คุณบอกมา
     {
     
                    ticket=OrderSend(Symbol(),OP_BUYSTOP,0.2,Bid+Point*50,3,Bid,Bid+Point*100,"test",777,0,Green);   // เปิด Buystop order
                    OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
                         
                     ticket=OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+Point*50,Bid-Point*50,"test",777,0,Red);  // เปิด sell order
                     OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
     
                      ticket=OrderSend(Symbol(),OP_SELLSTOP,0.1,Bid-Point*50,3,Bid,Bid-Point*100,"test",777,0,Red);  // เปิด sellstop order
                     OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
     
     }
       int buystop=0;     // ตัวแปรเก็บค่าเอาไวเก็บ จำนวน buystop order
       int sellstop=0;  // ตัวแปรเก็บค่าเอาไวเก็บ จำนวน sellstop order
       if(total==2)  // ถ้าจำนวน order ทั้งหมดเหลือ 2 หมายความเกิดการ take profit หรือไม่ก็ stop loss ต้องทำการตรวจสอบว่าเกิดอย่างไหน
      {   
          for(int i=0 ;i<total;i++)  // ตรวจสอบโดยดูว่าเลือก order ประเภทไหนมั้งใน account เรา
               {  OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
                    if(OrderType()==OP_BUYSTOP)
                    {
                      buystop=buystop+1;   // ถ้าตรวเจอ buystop ก็ให้เพิ่มค่าตัวแปร buystop ไป 1
                   
                    }
                   
                     if(OrderType()==OP_SELLSTOP)
                    {
                      sellstop=sellstop+1; // ถ้าตรวเจอ sellstop ก็ให้เพิ่มค่าตัวแปร sellstop ไป 1
                   
                    }
             
               }
     
     
     
     
     
          if((sellstop ==0 )&& (buystop==1))  // ถ้าเหลือ buystop เท่ากับ 1 แล้วsellstop เป็น 0 ตามที่คูณว่ามาคือเกิดการ takeprofit
          {
              for( i=0 ;i<total;i++)
               {  OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
                    if(OrderType()==OP_BUYSTOP)
                    {
                      OrderModify(OrderTicket(),Bid+Point*50,Bid,Bid+Point*100,0,Green);  // แก้ไขorder ตามที่คุณบอก
                   
                    }
                 
             
               }
               
               
                     ticket=OrderSend(Symbol(),OP_SELLSTOP,0.1,Bid-Point*50,3,Bid,Bid-Point*100,"test",777,0,Red); // เปิด sellstop ตามที่คุณบอก
                     OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);   
                     Sleep(10000);  // ตัวนี้ถ้าเกิดทดสอบโดย demo จะเป็นตัวหน่วงเวลารอ server ตอบรับการชื้อขายของเรา ใน backtest จะไม่ทำงาน
                     return (0); // สั่งจบโปรแกรมเริ่มต้นทำงานใหม่
           
          }
         
       
      if((sellstop ==1 )&& (buystop==0)) // หากเหลือ sellstop 1  buystop =0 ก็คือเกิดการ stoploss ตามที่คุณคิดไว
          {     
                  for( i=0 ;i<total;i++)
               {  OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
                    if(OrderType()==OP_SELLSTOP)
                    {
                     OrderDelete(OrderTicket());    //ทำการ delete sellstop ตามที่คุณบอก
                    }
                 
               
               }
                    ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Bid+Point*50,3,Bid,Bid+Point*100,"test",777,0,Green); // เปิด buystop ตามที่บอกมา
                    OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
                      ticket=OrderSend(Symbol(),OP_SELLSTOP,0.4,Bid-Point*50,3,Bid,Bid-Point*100,"test",777,0,Red); // เปิด sellstop ตามที่บอกมา
                     OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
                     Sleep(10000);
                     return (0);
          }
     
      }



เอา code ไปลอง run ดูครับถ้ามีไรผิดพลาดก็โพสแจ้งในบรอด์นี้นะครับ






Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: Protector on สิงหาคม 07, 2009, 10:28:35 pm
คุณ admin ใช้ EA ตัวไหนอยู่บ้างครับ
บอร์ด EA ก็น่าจะมี EA ที่คลาสสิคๆ สำหรับแบ่งปันเพื่อนๆสมาชิกนะครับ
จะได้เอาไปทดลองใช้งาน และเป็นกำลังใจในการศึกษา+พัฒนากันไงครับ ;D
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: admin on สิงหาคม 07, 2009, 10:59:01 pm
EA ที่ผมใช้ ผมเขียนเองครับ ใช้ทฤษฏ๊แบบนี้ครับ ให้หาจุดเข้าชื้อหรือขาย  จากนั่นให้ชื้อตามเงื่อนไขแล้วพอกำไร 10-15 จุดก็ปิด Order หากผิดด้านก็จะเปิด order อีกด้านหนึ่ง ( ต้องนี้ก็คือการ Hedding ครับตอนนี้ในอมเริกาห้ามใช้วิธีนี้ )  หากราคายังไปอีกด้านต่อ 15 จุดก็เปิด order เพิ่มไปเรื่อยๆๆครับจนกว่า account profiti บวกในระดับที่ต้องการก็จะปิด order ทั้งหมด
ตัวอย่างเช่น  GU  ผม buy ที่  1.6000 
          แต่ราคามันตกลงมาที 1.5985  ผมก็ sell อีก order ในจำนวน lot ที่เท่ากันครับ ตรงนี้คือการ hedding
         หากราคาตกลงมาอีกที่ 1.5970  ผมก็ sell อีก order
         หากราคาตกลงมาอีกที่  1.5955  ผมก็ sell อีก order ถึงตรงนี้หากราคาไม่เกิดการ swing ยังคงลงต่อผมก็จะปิด order ทั้งหมดได้ครับหากราคา swing ขึ้นไปถึง 1.6015 ผมก็ต้อง buy order  EA ตัวนี้หากตลาด swing จะใช้เล่นสั่นไม่ได้เพราะจะกลายเป้นต้องถือยาว  หากไม่เล่นสั่นถือยาว ea ตัวนี้ยังไงก็ทำกำไรให้ครับ แต่กำไรมันก็ไม่ได้เป็น 100 % แบบ ea ตัวอื่นนะครับ ได้สัก 30-40 % ของทุนที่ลงในเวลา 3-4 เดือนผมว่าก็ Ok แล้วสำหรับผมเพราะผมเล่นหุ้นไทยมาก่อนกำไรขนาดนั่นต่อป๊ก็ถือว่าประสบความสำเร็จแล้วนะครับ เพราะมันจะตามราคาตลาดไปเรื่อยๆๆ 
Title: อยากเขียน EA โดยซื้อขายจาก Indi โดยกำหนดเงื่อนไขเอง ครับ
Post by: w.suitable on สิงหาคม 08, 2009, 04:26:15 am
ถ้า Indi ตัวนี้มีลักษณะการเตือนเมื่อมีการเปลียนเทรน(มีเส้น 2 เส้นตัดกัน) อยากจะเขียน Code ซื้อขายด้วย Indi รูปแบบนี้โดยมีเงื่อนไขดังนี้
1. เริ่มทำงานตรวจสอบว่า เส้นสองเส้นตัดกัน(Crossing) เมื่อไหร่ ตรวจสอบว่ามี Oder เปิดอยู่หรือไม่ ถ้ามีให้ Close Order ก่อน
2. ตรวจสอบว่าการตัดกันเป็นเทรนขึ้นหรือเทรนลง และ ให้รอดู bar แท่งถัดไป(เพื่อความชัวร์)
   - ถ้าเป็นเทรน ขึ้น และ bar แท่งถัดไปปิดที่ค่า มากกว่า แท่งที่แล้วก็ให้เปิด Buy (ขอตัวอย่างคำสั่ง Buy ลงไปด้วยนะครับ ในคำสั่งจะไม่ตั้ง Profit ครับตั้ง Stop Loss อย่างเดียว สัก 50 pipe)
   - ถ้าเป็นเทรน ลง และ bar แท่งถัดไปปิดที่ค่า น้อยกว่า แท่งที่แล้วก็ให้เปิด Sell (ขอตัวอย่างคำสั่ง Sell ลงไปด้วยนะครับ ในคำสั่งจะไม่ตั้ง Profit ครับตั้ง Stop Loss อย่างเดียว สัก 50 pipe)
3. เมื่อเปิด Buy หรือ Sell แล้ว ก็กลับไปรอตวจสอบ ตามข้อที่ 1 ใหม่คือเมื่อเกิดการตัดกัน(Crossing) เมื่อไหร่ก็ Close Oder ที่มีอยู่และก็ตรวจสอบ เทรนและเปิด Buy หรือ Sell ตามข้อ 2 ต่อไปอย่างนี้เรื่อย

เงื่อนไขก็ดูไม่มากนะครับ แต่คิดคนเดียวปวดหัว

ผมมีตัวอย่าง indi แนบมาให้ดูด้วยครับ

คำถามเพิ่มเติม* เราจะสามารถเขียน EA โดยฝังโค้ด Indi ลงไปเลยได้หรือไม่ครับ หรือ ว่าเปิดใช้ Indi ในโปรแกรมแล้วเรียกใช้อย่างเดียว หรือ เขียน โค๊ดให้ Buy หรือ Sell ลงไปในตัว Indi แล้วให้ทำงานเป็น EA ไปเลยได้มั้ยครับ

ขอบคุณล่วงหน้านะครับ
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: admin on สิงหาคม 08, 2009, 06:49:04 pm
ถ้า Indi ตัวนี้มีลักษณะการเตือนเมื่อมีการเปลียนเทรน(มีเส้น 2 เส้นตัดกัน) อยากจะเขียน Code ซื้อขายด้วย Indi รูปแบบนี้โดยมีเงื่อนไขดังนี้
1. เริ่มทำงานตรวจสอบว่า เส้นสองเส้นตัดกัน(Crossing) เมื่อไหร่ ตรวจสอบว่ามี Oder เปิดอยู่หรือไม่ ถ้ามีให้ Close Order ก่อน
2. ตรวจสอบว่าการตัดกันเป็นเทรนขึ้นหรือเทรนลง และ ให้รอดู bar แท่งถัดไป(เพื่อความชัวร์)
   - ถ้าเป็นเทรน ขึ้น และ bar แท่งถัดไปปิดที่ค่า มากกว่า แท่งที่แล้วก็ให้เปิด Buy (ขอตัวอย่างคำสั่ง Buy ลงไปด้วยนะครับ ในคำสั่งจะไม่ตั้ง Profit ครับตั้ง Stop Loss อย่างเดียว สัก 50 pipe)
   - ถ้าเป็นเทรน ลง และ bar แท่งถัดไปปิดที่ค่า น้อยกว่า แท่งที่แล้วก็ให้เปิด Sell (ขอตัวอย่างคำสั่ง Sell ลงไปด้วยนะครับ ในคำสั่งจะไม่ตั้ง Profit ครับตั้ง Stop Loss อย่างเดียว สัก 50 pipe)
3. เมื่อเปิด Buy หรือ Sell แล้ว ก็กลับไปรอตวจสอบ ตามข้อที่ 1 ใหม่คือเมื่อเกิดการตัดกัน(Crossing) เมื่อไหร่ก็ Close Oder ที่มีอยู่และก็ตรวจสอบ เทรนและเปิด Buy หรือ Sell ตามข้อ 2 ต่อไปอย่างนี้เรื่อย

เงื่อนไขก็ดูไม่มากนะครับ แต่คิดคนเดียวปวดหัว

ผมมีตัวอย่าง indi แนบมาให้ดูด้วยครับ

คำถามเพิ่มเติม* เราจะสามารถเขียน EA โดยฝังโค้ด Indi ลงไปเลยได้หรือไม่ครับ หรือ ว่าเปิดใช้ Indi ในโปรแกรมแล้วเรียกใช้อย่างเดียว หรือ เขียน โค๊ดให้ Buy หรือ Sell ลงไปในตัว Indi แล้วให้ทำงานเป็น EA ไปเลยได้มั้ยครับ

ขอบคุณล่วงหน้านะครับ


int check (double val ,double val1)      // สร้างฟังก์ชั่นขึ้นมาเพื่อตรวจสอบการทับกันของเส้นสีแดงกับเขียวในอินดิเคเตอร์
{    static int lastway =0;
     static int way     =0;
     
     if(val < val1)
     {
        way=1;
     
     }
   
    if(val > val1)
     {
        way=2;
     
     }
     
     if(way!= lastway)
     {
        lastway = way;
        return (lastway);     
     }
 
       return (0);

}



int start()
  {       double val=iCustom(NULL, 0, "SSL_channel_chart_alert",15,0,1);  // ใช้ icustom อ่านค่าอินดิเคเตอร์ขึ้นมาอ่านจาก  buffer ของอินดิเคเตอร์ที่เก็บค่าเส้นสีแดง ( อันนี้รู้จากการไปอ่าน code ของอินดิเคเตอร์มาว่ามันกำหนดอะไรเป็นตัวแรก ตัวที่สอง )
          double val1=iCustom(NULL, 0, "SSL_channel_chart_alert",15,1,1);// ใช้ icustom อ่านค่าอินดิเคเตอร์ขึ้นมาอ่านจาก  buffer ของอินดิเคเตอร์ที่เก็บค่าเส้นสีเขียว
       
          int pcheck =check(val,val1);  // สร้างตัวแปรขึ้นมาให้เก็บค่าจากฟังก์ชั่นตรวจสอบการทับกัน
            Print("1 : ",val);  // อันนี้เอาไวดูค่าเส้นสีแดงที่ ea อ่านได้จากอินดิเคเตอร์
            Print("2 : ",val1); // อันนี้เอาไวดูค่าเส้นสีเขียวที่ ea อ่านได้จากอินดิเคเตอร์
           
         
          int ticket;
         
        if(pcheck==0)  // ถ้าไม่มีการเปลี่ยนแปลงของการทับกันให้ ea จบการทำงาน
        return (0);
         
         
           
          if(pcheck==1)       // มีการทับกันเขียวมากกว่าสีแดง
          {    OrderSelect(0,SELECT_BY_POS,MODE_TRADES);  // สั่งตรวจสอบ order ถ้ามีให้ปิด order
                                  if( (OrderType()==OP_SELL)  )
                                          {   
                                             OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
                                                                   
                                          }
                                                   
                                      if( (OrderType()==OP_BUY)  )
                                            {     
                                             OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
                                           
                                            }
                     
                       
                           ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,Ask+Point*50,"....",0,0,Green);  // เปิด buy order
                                 OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
                         
         
          }
         
         
              if(pcheck==2)  // มีการทับกันแดงมากกว่าเขียว
          {    OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
                                  if( (OrderType()==OP_SELL)  )
                                          {   
                                             OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
                                                                   
                                          }
                                                   
                                      if( (OrderType()==OP_BUY)  )
                                            {     
                                             OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
                                           
                                            }
                                           
                                           
                                         
                                   
                           ticket=OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,Bid-Point*50,"....",0,0,Red);  // เปิด sell order
                        OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
                   
          }
         
     
     
   return(0);
  }





ลองเอาไปรันดูใช้แบบนี้ไหมครับผมลองที่กราฟ 4 ชั่วโมงก็น่าจะใช้ตามที่คุณบอกมา ส่วนเรื่องอินดิเคเตอร์มาใส่ใน ea ทำได้ไหม ถ้าคุณเข้าในหลัการว่าอินดิเคเตอร์นั่นทำงานอย่างไรก็ย่อมที่จะเอามาเขียนใน ea เราโดยสร้างเป็นฟังก์ชั่นโดยเฉพาะได้ครับ
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: easy on สิงหาคม 08, 2009, 10:00:20 pm
ขอบคุณครับ เดี่ยวจะลองดู
Title: ขอบคุณมากครับ
Post by: w.suitable on สิงหาคม 09, 2009, 01:53:50 pm
ขอบคุณมากครับ เดี๋ยวจะลองทดสอบดูครับ ใครที่เข้ามาแล้วเอาไปทดสอบดูได้ผลดีที่กราฟ ช่วงเวลาอื่นๆ ก็มาบอกกันด้วยนะครับ

เวบนี้ดีจริงๆ ต่อไปคงขึ้นอันดับต้นๆแน่เลยครับ เป็นสังคมแห่งการแบ่งปันและช่วยเหลือกันอย่างแท้จริง เอาใจช่วย Admin ครับ

Thank! !
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: easy on สิงหาคม 09, 2009, 04:26:14 pm
if(way!= lastway)
     {
        lastway = way;
        return (lastway);     
     }

ขอแจมหน่อยครับ  ขอบคำอธิบายส่วนนี้ด้วยครับ
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: w.suitable on สิงหาคม 09, 2009, 05:05:15 pm
int check (double val ,double val1)      // สร้างฟังก์ชั่นขึ้นมาเพื่อตรวจสอบการทับกันของเส้นสีแดงกับเขียวในอินดิเคเตอร์
{    static int lastway =0;
     static int way     =0;
     
     if(val < val1)
     {
        way=1;
     
     }
   
    if(val > val1)
     {
        way=2;
     
     }
     
     if(way!= lastway)
     {
        lastway = way;
        return (lastway);     
     }
 
       return (0);

}

++++++++++++++++++++++++++++++++++++++++++++++++++++++
จาก โค๊ดเบื้องต้นที่เรากำหนดให้ lastway และ way เพื่อแทนทิศทางการขึ้นหรือลงของกราฟ โดยกำหนด ถ้า if(val < val1) แสดงว่ากราฟสีเขียวมีค่ามากกว่ากราฟสีแดง(จากการเก็บค่าของ iCustom) ซึ่งเรากำหนดให้เป็น way=1 แทนทิศการขึ้นของกราฟ และ ถ้า if(val > val1) แสดงว่ากราฟสีแดงมีค่ามากกว่ากราฟสีเขียว ซึ่งเรากำหนดให้เป็น way=2 และจากตอนแรกที่เรากำหนดค่าเริ่มต้นให้ way และ lastway เท่ากับ 0 ดังนั้น เมื่อ iCustom เก็บค่ามา ตัวแปร way ก็จะมีค่าเป็น 1 หรือ 2 แล้วใช้การตรวจสอบดังข้างล่าง

 if(way!= lastway) // ถ้า way ไม่เท่ากับ last way ก็แสดงว่ากราฟมีการเปลี่ยนแปลง ขึ้นหรือลงขึ้นอยู่กับ ค่า val > หรือ < val1
     {
        lastway = way; // กำหนดให้ lastway เก็บค่าไว้
        return (lastway); // รีเทิร์นค่า     
     }
แล้ว เมื่อวนกลับมาตรวจสอบอีกครั้ง ถ้าครั้งสุดท้ายคือค่า lastway = way ก็แสดงว่ากราฟยังไม่มีการเปลี่ยนแปลงก็จะไม่มีการทำต่อไปจนกว่าจะตรวจสอบพบว่า lastway != way คือ ทิศทางครั้งสุดท้ายกับครั้ง ใหม่ไม่เท่ากันถึงจะมีการทำการซื้อขายต่อไป อาจจะอธิบายงงๆไปหน่อยนะครับ หรือใครอธิบายง่ายๆ ก็ช่วยแก้ทีนะครับ
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: admin on สิงหาคม 09, 2009, 05:18:01 pm
คุณ w.suitable  อธิบายหลักการได้ถูกต้องแล้วครับ
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: iampick on สิงหาคม 10, 2009, 02:23:25 pm
เยี่ยมเลยครับเว็บนี้
แต่งงๆ ขอศึกษาก่อนครับ อิอิ
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: himmy on สิงหาคม 23, 2009, 10:25:30 am
EA ที่ผมใช้ ผมเขียนเองครับ ใช้ทฤษฏ๊แบบนี้ครับ ให้หาจุดเข้าชื้อหรือขาย  จากนั่นให้ชื้อตามเงื่อนไขแล้วพอกำไร 10-15 จุดก็ปิด Order หากผิดด้านก็จะเปิด order อีกด้านหนึ่ง ( ต้องนี้ก็คือการ Hedding ครับตอนนี้ในอมเริกาห้ามใช้วิธีนี้ )  หากราคายังไปอีกด้านต่อ 15 จุดก็เปิด order เพิ่มไปเรื่อยๆๆครับจนกว่า account profiti บวกในระดับที่ต้องการก็จะปิด order ทั้งหมด
ตัวอย่างเช่น  GU  ผม buy ที่  1.6000 
          แต่ราคามันตกลงมาที 1.5985  ผมก็ sell อีก order ในจำนวน lot ที่เท่ากันครับ ตรงนี้คือการ hedding
         หากราคาตกลงมาอีกที่ 1.5970  ผมก็ sell อีก order
         หากราคาตกลงมาอีกที่  1.5955  ผมก็ sell อีก order ถึงตรงนี้หากราคาไม่เกิดการ swing ยังคงลงต่อผมก็จะปิด order ทั้งหมดได้ครับหากราคา swing ขึ้นไปถึง 1.6015 ผมก็ต้อง buy order  EA ตัวนี้หากตลาด swing จะใช้เล่นสั่นไม่ได้เพราะจะกลายเป้นต้องถือยาว  หากไม่เล่นสั่นถือยาว ea ตัวนี้ยังไงก็ทำกำไรให้ครับ แต่กำไรมันก็ไม่ได้เป็น 100 % แบบ ea ตัวอื่นนะครับ ได้สัก 30-40 % ของทุนที่ลงในเวลา 3-4 เดือนผมว่าก็ Ok แล้วสำหรับผมเพราะผมเล่นหุ้นไทยมาก่อนกำไรขนาดนั่นต่อป๊ก็ถือว่าประสบความสำเร็จแล้วนะครับ เพราะมันจะตามราคาตลาดไปเรื่อยๆๆ 

สวัสดีครับ

ผมสมาชิกใหม่ที่นี่ครับ จริงๆ ผมสนใจการเขียน EA ใช้เอง  แต่ไม่มีพื้นฐานด้านนี้เลยครับ

เลยลองเข้ามาศึกษาดู  ไอเดียของท่าน admin นี้น่าสนใจมากๆ ครับ  พอจะมีตัว Demo

ให้ทดสอบมั้ยครับ แหะๆๆๆ   ( ถ้าไม่ได้ไม่เป็นไรครับ )  อาจลองนำไอเดียนี้ไปลองเทรด Demo แบบมือดูก่อน

แล้วจากประสบการณ์ของท่าน admin คิดว่ามันต้องเผื่อ margin ไว้เยอะแค่ไหนถึงจะชัวร์ครับ

เพราะเท่าที่ดูเกิดช่วงไหนมันสวิงมากๆ  เปิดออร์เดอร์มาด้านนึงเกือบๆ ถึง TP  แล้วอยู่ดีๆ มันสวิงกลับไปอีกด้าน

มันจะยิ่งต้องเปิด order เพิ่มมากขึ้นๆๆๆๆ   ใช่มั้ยครับ   ช่วยแนะนำด้วยครับ

ขอบคุณครับ

Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: admin on สิงหาคม 23, 2009, 07:39:12 pm
EA ที่ผมใช้ ผมเขียนเองครับ ใช้ทฤษฏ๊แบบนี้ครับ ให้หาจุดเข้าชื้อหรือขาย  จากนั่นให้ชื้อตามเงื่อนไขแล้วพอกำไร 10-15 จุดก็ปิด Order หากผิดด้านก็จะเปิด order อีกด้านหนึ่ง ( ต้องนี้ก็คือการ Hedding ครับตอนนี้ในอมเริกาห้ามใช้วิธีนี้ )  หากราคายังไปอีกด้านต่อ 15 จุดก็เปิด order เพิ่มไปเรื่อยๆๆครับจนกว่า account profiti บวกในระดับที่ต้องการก็จะปิด order ทั้งหมด
ตัวอย่างเช่น  GU  ผม buy ที่  1.6000 
          แต่ราคามันตกลงมาที 1.5985  ผมก็ sell อีก order ในจำนวน lot ที่เท่ากันครับ ตรงนี้คือการ hedding
         หากราคาตกลงมาอีกที่ 1.5970  ผมก็ sell อีก order
         หากราคาตกลงมาอีกที่  1.5955  ผมก็ sell อีก order ถึงตรงนี้หากราคาไม่เกิดการ swing ยังคงลงต่อผมก็จะปิด order ทั้งหมดได้ครับหากราคา swing ขึ้นไปถึง 1.6015 ผมก็ต้อง buy order  EA ตัวนี้หากตลาด swing จะใช้เล่นสั่นไม่ได้เพราะจะกลายเป้นต้องถือยาว  หากไม่เล่นสั่นถือยาว ea ตัวนี้ยังไงก็ทำกำไรให้ครับ แต่กำไรมันก็ไม่ได้เป็น 100 % แบบ ea ตัวอื่นนะครับ ได้สัก 30-40 % ของทุนที่ลงในเวลา 3-4 เดือนผมว่าก็ Ok แล้วสำหรับผมเพราะผมเล่นหุ้นไทยมาก่อนกำไรขนาดนั่นต่อป๊ก็ถือว่าประสบความสำเร็จแล้วนะครับ เพราะมันจะตามราคาตลาดไปเรื่อยๆๆ 

สวัสดีครับ

ผมสมาชิกใหม่ที่นี่ครับ จริงๆ ผมสนใจการเขียน EA ใช้เอง  แต่ไม่มีพื้นฐานด้านนี้เลยครับ

เลยลองเข้ามาศึกษาดู  ไอเดียของท่าน admin นี้น่าสนใจมากๆ ครับ  พอจะมีตัว Demo

ให้ทดสอบมั้ยครับ แหะๆๆๆ   ( ถ้าไม่ได้ไม่เป็นไรครับ )  อาจลองนำไอเดียนี้ไปลองเทรด Demo แบบมือดูก่อน

แล้วจากประสบการณ์ของท่าน admin คิดว่ามันต้องเผื่อ margin ไว้เยอะแค่ไหนถึงจะชัวร์ครับ

เพราะเท่าที่ดูเกิดช่วงไหนมันสวิงมากๆ  เปิดออร์เดอร์มาด้านนึงเกือบๆ ถึง TP  แล้วอยู่ดีๆ มันสวิงกลับไปอีกด้าน

มันจะยิ่งต้องเปิด order เพิ่มมากขึ้นๆๆๆๆ   ใช่มั้ยครับ   ช่วยแนะนำด้วยครับ

ขอบคุณครับ



รอสัก 2-3 วันนะครับจะส่ง email ไปให้ ขอเวลาผมจัดระเบียบ code มันหน่อยเพราะตัวที่ผมเขียนใช้เองผมเขียนอะไรลงไปหลายอย่าง ถ้าเอาไปดูอาจจะงงได้ข้อเวลาผมจัด tab code ให้สวยก่อนจะส่งตัว demo ที่ทำช่วงแรกๆๆไปให้ครับเพราะ ea ผมเองก็ยังไม่สมบูรณ์เต็ม 100 ครับยังมีข้อผิดพลาดเวลาปล่อยให้มันรบระยะยาวเป็น 10 ปีใน backtest บางทียัง Drawdown มากไปตอนนี้กำลังศึกษาหลักการที่คุณ pal เอามาโพสไวอยู่ครับที่จะให้ ea มี ai ในการเปลี่ยนกลยุทธิ์เองได้อยู่ครับ กำลังพัฒนาอยู่ครับ
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: admin on สิงหาคม 24, 2009, 10:51:57 am
Demo ea ตามแนวคิดผมให้คุณ himmy  ใช้กับ gu ทุน 1000 usd เล่นจุดละ 1 cent นะครับ ตัวนี้เขียนไวนานแล้วพึงไปรื้อมาเจอ ปัญหาตัวนี้คือ เป็น ea ที่เล่นระยะกลาง บางครั้งอาจเปิด order ทิ้งไวเป็นเดือน การทำ backtest จึงไม่ได้ผลที่ถูกต้อง 100 % จากความเป็นจริงเพราะใน backtest มีค่า swap และ margin สูงสุดใน backtest 1:200 ค่า drawdown บางจึงสูงมากเพราะรวมค่าดอกเบี้ยเข้าไวด้วย และชื้อขายได้ในจุดที่คำนวณสามารถชื้อได้ทุกจุดแต่ในความเป้นจริงมีค่าความผิดพลาด ผมไม่มีเวลาไปเปิด demo ให้ตัวนี้เนื่องจากเมื่อก่อนไม่มี server ไวรัน ถ้าคุณ himmy  จะเอาไปใช้จริงก็ต้องทดสอบดีๆๆก่อนนะครับตัวนี้เป็นแค่ demo ที่เขียนไวนานมากแล้ว
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: linconz on ตุลาคม 22, 2009, 09:23:36 am
ADMIN เล่นเบบ  hedge เหรอครับ งั้นผมถามอีกที ไอ้เจ้า open กับ master นี่ ไม่มีปัญหาใช่ไหม 

ถ้าเค้าไ่ม่ว่าอะไร ก็ .... อิอิ ผมจะได้โม ea ผมบ้าง

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

แล้วแบบนี้ ถ้าเขาไม่ให้ hedge เราก็ส่งสัญญาณ ออกมาเป็นไฟล์ ได้ปป่าว แล้วอีก account ก็ไปอ่านสัญญาณที่ติดลบ จากไฟล์นั้น เพื่อเอาไปเปิดสวนกับ account แรก เห็นมีฟังก์ชั่นเกี่ยวกับไฟล์อยู่ น่าจะเข้าท่าน๊ะ ยังไม่ได้ดูเลย
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: admin on ตุลาคม 22, 2009, 10:21:07 am
ทั้ง 2 โบรเอรืไม่มีปัญหา เรื่อง order ต้องปิดครับเพือเครียร์ port แล้วเรื่องถ้าห้ามก็ทำได้ครับผมคิดไวนานแล้วให้อ่านจากไฟล์แต่เท่านั่นไม่พอต้องมีโปรแกรมอื่นควบคุมอีกทีด้วยครับ แต่ตอนนี้โบรฝั่งยุโรปยังเล่นได้อยู่ยังไม่ต้องไปคิดไรตรงนั่น แต่ hege มันจะทำเงินช้ากว่าแบบอื่นๆๆเท่านั่นเอง
Title: Re: ปรึกษาวิธีการเขียน code ค่ะ
Post by: linconz on ตุลาคม 22, 2009, 06:36:11 pm
อืม ถามอีกครั้ง คุณ เปิดทีละกี่ออร์เดอร์ครับ ADMIN


้hedge อีกวิธี โดยที่โบรกห้ามไม่ได้คือ เปิดอีก 2 ตัวที่คู่กัน