Open Forex4you Account

Server รัน EA 1000 / ปี

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

Author Topic: ช่วยทำให้ EA ไม่เปิด Order ซ้ำที่จุดเดิมได้มั้ยครับ  (Read 18785 times)

Romio

  • Newbie
  • *
  • Posts: 20
คือผมมีปัญหาในการเขียนครับ เขียนเสร็จแล้ว รันแล้ว มีปัญหาตรงที่มันเปิด Order ซ้ำที่จุดเดิมครับ
แบบว่าอยากให้มันเปิดที่จุดนั้นแค่ Order เดียวครับ แต่ผมหมดปัญญาแล้วทำยังไงๆ ก็ไม่ได้
ถ้าทำได้ EA ตัวนี้จะดูดีทีเดียวเลยครับ ผมคิดระบบเทรดเองครับง่ายๆแต่ดูดี ไม่รู้มีใครเค้าคิดขึ้นมาก่อนหรือยัง
เลยเอามาลองเขียนเป็น EA ความจริงแล้วเทรดมือชัวร์กว่าแต่อยากลองทำเป็น EA เพราะขี้เกียจนั่งเฝ้า อิอิ

มีพี่ๆท่านใดสามารถช่วยแก้ได้บ้างครับ โหลดไปลองแก้เลยครับ มันทำผมปวดหัวมาหลายวันละ T-T

ถ้างงลองเทรดดูเลยครับ แบบที่สามารถดูกราฟได้ครับ
อ่อ  E/U  M15  นะครับ

ทำได้ยังไงเอามาให้กันด้วยนะ  ขอบคุณมากๆเลยครับ
อ้าว...ทำไมมันมองไม่เห็นไฟล์อะ  งั้นเอาแบบนี้แล้วกัน

Code: [Select]

//+------------------------------------------------------------------+
//|                                                  ATM_auto_V1.mq4
//|                                              by Wirawat Khamsaen
//|                                                                 
//+------------------------------------------------------------------+


int start()
{


double Lots;
double AC1, AC2, AC3, AC4, MEM1, MEM2, MEM3;
int total;
int ticket;
int SL = 50;
int TP = 5;
Lots = 0.1;
AC1 = iAC(NULL, PERIOD_M15, 1);
AC2 = iAC(NULL, PERIOD_M15, 2);
AC3 = iAC(NULL, PERIOD_M15, 3);
AC4 = iAC(NULL, PERIOD_M15, 4);
total=OrdersTotal();


// ----- MODE SELL -----
   if((AC2 > AC1)&&(AC2 >= AC3)&&(AC1 > 0)&&(AC1 > 0.0002)&&(AC4 < AC3))
   {
      if((AC1 != MEM1)&&(AC2 != MEM2)&&(AC3 != MEM3))
      {
         if(total<1)
         {
            ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+Point*SL,Bid-Point*TP,"ATM_auto_V1[SELL]",0,0,Red);
            OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
            MEM1 = AC1;
            MEM2 = AC2;
            MEM3 = AC3;
            return (MEM1&&MEM2&&MEM3);
         }
      }
   }
   
// ----- MODE BUY -----
   if((AC2 < AC1) && (AC2 <= AC3)&&(AC1 < 0)&&(AC1 < -0.0002)&&(AC4 > AC3))
   {
      if((AC1 != MEM1)&&(AC2 != MEM2)&&(AC3 != MEM3))
      {
         if(total<1)
         {
            ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-Point*SL,Ask+Point*TP,"ATM_auto_V1[BUY]",0,0,Green);
            OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
            MEM1 = AC1;
            MEM2 = AC2;
            MEM3 = AC3;
            return (MEM1&&MEM2&&MEM3);
         }
      }
   }
   

return (MEM1&&MEM2&&MEM3);
}



ลองเอาไปเทสดูนะครับ ขอโทษด้วยที่ไม่ได้ฝากไฟล์ เพราะมันมองไม่เห็นไฟล์ตอนที่จะฝาก ต้องทำยังไงเนี่ย

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
ความหมายของคำว่าซ่ำที่จุดเดิมนี้มัน คือการชื้อที่ราคาเดิมใช่ไหม เพราะจาก code ผมเห็นว่ามันชื้อที่ละ 1 order ถ้า order ชื้อไปนี้ถูกปิดไปแล้วราคากลับมาที่เดิมมันชื้อ ณ จุดเดิมใช่ไหม ครับขอโทษนะครับที่ถามผมไม่มีเวลาทดสอบดูนะครับ

Romio

  • Newbie
  • *
  • Posts: 20
หมายความว่าเปิด Order ภายในแท่งเดิมครับ M15 จะพูดยังไงดีหละ
ครับมันเปิดทีละหนึ่งจริง  แต่มันเปิดซ้ำในแท่งเดิมครับ อยากให้มันเปิดแล้วพอปิดมันจะไม่เปิดในแท่งเดิมอีกอะครับ
ให้รอเปิดแท่งใหม่และเข้าตามเงื่อนไขครับ ผมอธิบายแปลกๆขอโทษด้วยนะครับ ไม่รู้อธิบายไม่ถูก
เดี๋ยวเอารูปมาให้ดูครับ

Romio

  • Newbie
  • *
  • Posts: 20
ตามรูปเลยครับ อยากให้มันเปิดแค่ครั้งเดียวพอครับ
จากในรูปมันจะเปิดและปิดเมื่อครบ 5 จุด แต่มันจะเปิดอีกและปิดอีก ไปจนถึงจุดๆหนึ่งที่พอเปิดมาแล้วมันจะทำให้ติดลบครับ
เพราะแบบนี้ครับถึงอยากให้มันเปิดแค่ครั้งเดียวพอครับ จากนั้นแล้วรอจนเข้าเงื่อนไขแล้วค่อยเปิดอีกครับ

Romio

  • Newbie
  • *
  • Posts: 20
ผมลองใส่ฟังชันก์ sleep แล้วก็ไม่มีอะไรเปลี่ยนแปลงเลย

Code: [Select]

while(i<92)
            {
               Sleep(10000);
               i++;
            }


ลองใส่ต่อท้ายคำสั่งซื้อดูแล้วก็ไม่เหมือนเดิมแหะ
คือหลังจากเปิด Order แล้วมันจะหยุดการทำงานเป็นเวลา 910 วินาที หรือ 15 นาที 10 วินาทีนั่นเอง
หลังจากนั้นมันจะต้องทำงานตามปรกติ ที่ต้องใช้เวลา 15 นาทีเพื่อต้องการให้มันผ่านแท่ง 15 นาทีนั้นเอง
แต่มันไม่เห็นจะหยุดเวลาให้เลยครับ ยังเป็นเหมือนเดิมเลย

โค้ดทั้งหมดที่แก้

Code: [Select]

//+------------------------------------------------------------------+
//|                                                  ATM_AUTO_V2.mq4
//|                                              by Wirawat Khamsaen
//|                                                                 
//+------------------------------------------------------------------+


int start()
{


double Lots;
double AC1, AC2, AC3, AC4;
int total;
int ticket;
int SL = 50;
int TP = 5;
int i = 0;
Lots = 0.1;
AC1 = iAC(NULL, PERIOD_M15, 1);
AC2 = iAC(NULL, PERIOD_M15, 2);
AC3 = iAC(NULL, PERIOD_M15, 3);
AC4 = iAC(NULL, PERIOD_M15, 4);
total=OrdersTotal();


// ----- MODE SELL -----
   if((AC2 > AC1)&&(AC2 >= AC3)&&(AC1 > 0)&&(AC1 > 0.0002)&&(AC4 < AC3))
   {
         if(total<1)
         {
            ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+Point*SL,Bid-Point*TP,"ATM_auto_V1[SELL]",0,0,Red);
            OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
            while(i<92)
            {
               Sleep(10000);
               i++;
            }
         }
   }
   
// ----- MODE BUY -----
   if((AC2 < AC1) && (AC2 <= AC3)&&(AC1 < 0)&&(AC1 < -0.0002)&&(AC4 > AC3))
   {
         if(total<1)
         {
            ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-Point*SL,Ask+Point*TP,"ATM_auto_V1[BUY]",0,0,Green);
            OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
            while(i<92)
            {
               Sleep(10000);
               i++;
            }
         }
   }
   
return(0);
}



admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
ถ้าใช้คำสั่ง sleep ใน backtest จะใช้ไม่ได้นะครับต้องปล่อย รัน demo ครับ ส่วนถ้าจะใช่ sleep ก็ไม่ต้องใช่ loop while เลยครับ ถ้าต้องการให้มันหยุด 910 วินาทีก็ใส่ไปแบบนี้เลยครับ  Sleep(910000); ลองใช้แบบนี้ดูครับ แก้แบบง่ายๆๆก่อนถ้าได้ก็ไม่ต้องใช้ logic อะไรมากมายครับ

Romio

  • Newbie
  • *
  • Posts: 20
อ่อ...คำสั่ง sleep ใช้ในการ backtest ไม่ได้หรอเนี่ย มิน่าหละมันถึงไม่ยอมทำงานตามคำสั่ง 555+
พอดีติดนิสัยมาจากเขียนบอร์ดไมโครคือมันจะกำหนดเวลายาวๆแล้วเวลาจะไม่ค่อยตรงต้องกำหนดสั่นๆแล้วเอามาวนลูป
ลืมไปครับว่ามันเป็นโปรแกรมคอม ต้องรอทดสอบ Demo สินะ โอ้! รอถึงวันจันทร์เลยหรอเนี่ย
ขอบคุณ คุณ admin มากๆเลยครับ ผลเป็นไงเดี๋ยวผมจะเอามาลงครับ แจกเป็น open... ไปเลย

ว่าแต่ทำไมเว็บดูเงียบๆจังเลย...

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
อ่อ...คำสั่ง sleep ใช้ในการ backtest ไม่ได้หรอเนี่ย มิน่าหละมันถึงไม่ยอมทำงานตามคำสั่ง 555+
พอดีติดนิสัยมาจากเขียนบอร์ดไมโครคือมันจะกำหนดเวลายาวๆแล้วเวลาจะไม่ค่อยตรงต้องกำหนดสั่นๆแล้วเอามาวนลูป
ลืมไปครับว่ามันเป็นโปรแกรมคอม ต้องรอทดสอบ Demo สินะ โอ้! รอถึงวันจันทร์เลยหรอเนี่ย
ขอบคุณ คุณ admin มากๆเลยครับ ผลเป็นไงเดี๋ยวผมจะเอามาลงครับ แจกเป็น open... ไปเลย

ว่าแต่ทำไมเว็บดูเงียบๆจังเลย...
บอร์ดที่เงียบน่าจะเป้นเพราะ ที่นี้มันเฉพาะทางมากเกินครับคือเน้นโปรแกรมมิ่ง เลยครับ แล้วคนเล่น forex มีหลายหลายอาซีพครับ ส่วนใหญ่ที่เข้ามาก็มีแต่มาหา EA ครับที่จะสนใจเขียนจริงๆๆ มีน้อยครับ แต่ถ้าเป็นบอร์ดที่สอน tech หรือคุยเล่นทั่วไปคนน่าจะเยอะกว่านี้แต่ผมไม่ชอบคุยไรแบบนั่นอ่ะครับ  ว่าแต่ตอน เขียน ไมโครคอนโทร นี้เล่นตัวไหนครับ ผมเคยเขียนแต่ตัว  mcs-51  ใช้ภาษา c เท่านั่นเองครับ

Romio

  • Newbie
  • *
  • Posts: 20
ส่วนใหญ่ก็มี AVR ครับที่ถนัดสุด
ผมมีบอร์ด AVR ATmega32 อยู่บอร์ดหนึ่งราคาถูกดี ใช้ C เขียนเคยเรียนมา แต่ส่วนใหญ่เรียนจาก google
ชอบเอามาเขียนไฟ LED เล่น ไม่ค่อยเข้ากับความสามารถของบอร์ดเลย 555+

คุณ admin มีโครงการเขียน EA อยู่มั้ยครับ ผมว่าเขียน EA มันมีคำสั่งที่เอามาใช้ง่ายดีครับ ชอบจริงๆ
ว่าแต่มี EA ที่ทำกำไรดูดี และใช้ทุนต่ำๆไม่เกิน 100 usd ให้ผมได้ศึกษามั้ยครับ อิอิ