Open Forex4you Account

Server รัน EA 1000 / ปี

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

Author Topic: มีปัญหาอะไรที่เกิดกับ code EA  (Read 26498 times)

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
มีปัญหาอะไรที่เกิดกับ code EA
« on: สิงหาคม 02, 2009, 01:07:45 am »
มีปัญหาที่เกี่ยวกับ code มาโพสที่นี้นะครับหากผมแก้ไขก็จะช่วยครับหากทำไม่ได้ก็รอผู้อื่นมาช่วยตอบแทนนะครับ

gunlanutt

  • Guest
Re: มีปัญหาอะไรที่เกิดกับ code EA
« Reply #1 on: สิงหาคม 24, 2009, 01:56:44 pm »
ผม ตั้ง trailingstop = 10 ทำไมบางครั้งก็เปลี่ยน บางครั้งก็ไม่เปลียนครับ
ผมใช้ fxopen  GBP/USD, EUR/USD, และอื่น ๆ อีกหลายคู่

โค๊ดที่เขียนครับ
           if(OrderType() == OP_BUY)
             {
               if(trailingStop > 0)
                 {
                   if(Bid - OrderOpenPrice() > trailingStop*Point)
                     {
                       if(OrderStopLoss() < (Bid - trailingStop*Point))
                           OrderModify(OrderTicket(), OrderOpenPrice(),
                                       Bid - trailingStop*Point, OrderTakeProfit(), 0, Blue);
                     }
                 }
             }
           else
             {
               if(trailingStop > 0)
                 {
                   if(OrderOpenPrice() - Ask > trailingStop*Point)
                     {
                       if(OrderStopLoss() == 0 || OrderStopLoss() > Ask + trailingStop*Point)
                           OrderModify(OrderTicket(), OrderOpenPrice(),
                                       Ask + trailingStop*Point, OrderTakeProfit(), 0, Red);
                     }           
                 }
             }

phanom

  • Newbie
  • *
  • Posts: 14
Re: มีปัญหาอะไรที่เกิดกับ code EA
« Reply #2 on: สิงหาคม 24, 2009, 04:11:37 pm »
ตั้งค่า TrailingStop น้อยไปครับ
เพราะมันพอดีกับค่า minimum ของเค้าพอดีเลย
กว่าอีเอจะส่งคำสั่งไป ถ้าราคามันเปลี่ยน คำสั่งปรับ OrderStoploss ก็โดนยกเลิก

ตั้ง TrailingStop ซัก 20 จุดขึ้นไป น่าแก้ปัญหาได้  ;D

Bauer

  • Guest
Re: มีปัญหาอะไรที่เกิดกับ code EA
« Reply #3 on: สิงหาคม 31, 2009, 10:29:42 am »
ผม ตั้ง trailingstop = 10 ทำไมบางครั้งก็เปลี่ยน บางครั้งก็ไม่เปลียนครับ
ผมใช้ fxopen  GBP/USD, EUR/USD, และอื่น ๆ อีกหลายคู่

โค๊ดที่เขียนครับ
           if(OrderType() == OP_BUY)
             {
               if(trailingStop > 0)
                 {
                   if(Bid - OrderOpenPrice() > trailingStop*Point)
                     {
                       if(OrderStopLoss() < (Bid - trailingStop*Point))
                           OrderModify(OrderTicket(), OrderOpenPrice(),
                                       Bid - trailingStop*Point, OrderTakeProfit(), 0, Blue);
                     }
                 }
             }
           else
             {
               if(trailingStop > 0)
                 {
                   if(OrderOpenPrice() - Ask > trailingStop*Point)
                     {
                       if(OrderStopLoss() == 0 || OrderStopLoss() > Ask + trailingStop*Point)
                           OrderModify(OrderTicket(), OrderOpenPrice(),
                                       Ask + trailingStop*Point, OrderTakeProfit(), 0, Red);
                     }           
                 }
             }


ตอนแรกดูผิด ตัว code ok แล้วครับ แต่ถ้าอยากตั้งน้อยๆ จะมีวิธีแก้คือใช้เก็บค่าในโปรแกรมเลยครับ เวลาถึงค่าค่อยสั่ง close คือจะไม่มีการ modify order ครับ แต่วิธีนี้จะมีความเสี่ยงนิดนึงกรณีเครื่องเราหรือ net มีปัญหา ซึ่งที่ผมเคยใช้วิธีนี้จะใช้การ stop loss ปกติกันไว้ด้วยครับ
« Last Edit: สิงหาคม 31, 2009, 10:56:37 am by Bauer »

gunlanutt

  • Guest
Re: มีปัญหาอะไรที่เกิดกับ code EA
« Reply #4 on: กันยายน 04, 2009, 03:15:59 pm »
   int    counted_bars=IndicatorCounted();   

  int    i,limit15;
   
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
           limit15=Bars-counted_bars;

ผมทดลองใช้คำสั่ง IndicatorCounted() แต่ อีเอไม่ทำงานครับ พอผมใช้คำสั่ง
int    counted_bars= Bars-1; ก็ได้ค่าอื่น ๆ ในโปรแกรมไม่เหมือนกันอีก เป็นเพราะอะไรครับ หรือว่า คำสั่ง
IndicatorCounted() ใช้ได้เฉพาะอินดิเคเตอร์เท่านั้น
ถ้าเป็นอย่างนั้นจริง ๆ จะแก้โค๊ดตรงนี้ได้อย่างไรครับ

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: มีปัญหาอะไรที่เกิดกับ code EA
« Reply #5 on: กันยายน 04, 2009, 03:29:55 pm »
   int    counted_bars=IndicatorCounted();   

  int    i,limit15;
   
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
           limit15=Bars-counted_bars;

ผมทดลองใช้คำสั่ง IndicatorCounted() แต่ อีเอไม่ทำงานครับ พอผมใช้คำสั่ง
int    counted_bars= Bars-1; ก็ได้ค่าอื่น ๆ ในโปรแกรมไม่เหมือนกันอีก เป็นเพราะอะไรครับ หรือว่า คำสั่ง
IndicatorCounted() ใช้ได้เฉพาะอินดิเคเตอร์เท่านั้น
ถ้าเป็นอย่างนั้นจริง ๆ จะแก้โค๊ดตรงนี้ได้อย่างไรครับ
  IndicatorCounted( )   ใช้ได้กับ custom indicator เท่านั่นครับ เอามาใช้ใน ea ไม่ได้ครับ ว่าแต่คุณต้องการให้ ea มันทำอะไรหรอครับ

gunlanutt

  • Guest
Re: มีปัญหาอะไรที่เกิดกับ code EA
« Reply #6 on: กันยายน 04, 2009, 03:47:15 pm »
   int    counted_bars=IndicatorCounted();
   int    i,limit15;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
           limit15=Bars-counted_bars;


      if (15 != Period())
      {
         limit15 = MathMax(limit15,15/Period());

         
         for(i=limit15; i>=0; i--)
         {
            int y15 = iBarShift(NULL,15,Time);
                  buffer515 = iCustom(NULL,15,IndicatorFileName,"",34,34,14,25,PRICE_CLOSE,4,y30);
                  buffer630 = iCustom(NULL,15,IndicatorFileName,"",34,34,14,25,PRICE_CLOSE,5,y30);
                  buffer830 = iCustom(NULL,15,IndicatorFileName,"",34,34,14,25,PRICE_CLOSE,7,y30);
         }
         return(0);         
      }

   
   for (i=limit15;i>=0;i--)
   {
       if (14>1) buffer815 = iCCI(NULL,0,14,PRICE_TYPICAL,i);
   }
   
   return(0);
}

ตรง  IndicatorCounted() แทนค่าอื่น ได้ไหมครับมัน error ตรงนี้ครับ (ผมเคยแทนด้วย Bars - 1 แล้วแต่ไม่ผ่านครับ)


gunlanutt

  • Guest
Re: มีปัญหาอะไรที่เกิดกับ code EA
« Reply #7 on: กันยายน 04, 2009, 05:51:52 pm »
ได้คำตอบแล้วครับ

คำสั่ง IndicatorCounted() ใช้สำหรับอินดิเคเตอร์เท่านั้นค่านี้สำหรับนับจำนวนบาร์
ซึ่งจริง ๆ แล้ว ผมก็นำอินดิเคเตอร์เพื่อมาแปลงให้เป็นอีเอ
แต่มีวิธีที่ง่ายกว่านั้นซึ่งผมไม่รู้โดยที่ Admin ได้บอกผมจนเข้าใจ
และแนะนำว่าให้ใช้คำสั่ง icustom ซึ่งคำสั่งนี้เป็นคำสั่งเรียกอินดิเคเตอร์ มาใช้
ทำให้เราสามารถรู้ค่าที่ต้องการได้ เพียงแต่ระบุว่าต้องการทราบค่า อะไรเท่านั้นเองครับ
เช่น
double val=iCustom(NULL, 0, "SampleInd",13,1,0);

หมายถึง เรียกอินดิเคเตอร์ที่ชื่อ "SampleInd"
line ที่ 1 ค่า ณ ปัจจุบัน เราก็จะทราบค่าได้ทันที ไม่ต้องมาแปลงค่าเป็นอีเอครับ

gunlanutt

  • Guest
Re: มีปัญหาอะไรที่เกิดกับ code EA
« Reply #8 on: กันยายน 07, 2009, 04:51:03 pm »
   int li_76 = IndicatorCounted();
   if (li_76 < 0) return (-1);
   if (li_76 > 0) li_76--;
   int li_0 = Bars - li_76;


คำถาม คือ เราจะแทนค่า IndicatorCounted() อย่างไร เพื่อที่จะนำไปเขียนเป็นอีเอได้
ผมลองทำเป็นอีเอแต่ไม่ผ่านเพราะมีคำสั่งนี้ครับ
ต้องการเพียงให้มันบอกว่า ตอนนี้ลูกศร buy/sell  แนบ indicatorมาด้วยครับ

sunever1

  • Jr. Member
  • **
  • Posts: 57
Re: มีปัญหาอะไรที่เกิดกับ code EA
« Reply #9 on: กันยายน 07, 2009, 04:57:47 pm »
เหมือนใช้ ima เเทนได้เลย 55+ เคยทดลองอยู่ ตอนตัดก็มีลูกศรของsignalอ่า

gunlanutt

  • Guest
Re: มีปัญหาอะไรที่เกิดกับ code EA
« Reply #10 on: กันยายน 07, 2009, 05:40:30 pm »
ใครพอจะทราบบ้างครับว่ามีคำสั่งอะไรที่จะทำให้เราทราบค่าในตัวแปร ของอินดิเคเตอร์บ้างครับ
เพื่อจะนำไปเขียนในอีเอ โดยดึงค่าของตัวแปรในอินดิเคเตอร์ เช่น ค่าของตัวแปรชื่อ Signal จากอินดิเคเตอร์ที่แนบมาด้วยครับ (กระทู้ข้างบน)

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
Re: มีปัญหาอะไรที่เกิดกับ code EA
« Reply #11 on: กันยายน 07, 2009, 06:34:32 pm »
ลองเอาตัวนี้ไปดูผมเอา อินดิเคเตอร์ที่คุณโพสไปไปแปลงเป็น ea แล้วครับเพราะตัวนี้ icustom อ่านค่าออกมาไม่ได้ค่าที่ถูกต้องแต่ในตัว code มีจุดบอกสัญญาชื้อขายผมเลยแปลงจากอินมาเป็น ea เลย แล้วเจ้า IndicatorCounted(); มันคือฟังก์ชั่นที่จะให้นับว่ามีแท่งบาร์เท่าไรมันใช้ไม่ได้ใน ea ผมเลยกำหนดเลยว่ามี แท่งบารื 1000 แท่งหรือจะกำหนดมากกว่านี้ก็ได้นะ มันเป็นส่วนที่ให้เจ้าอินดิเคเตอร์รู้ว่าจะต้องใช่บาร์ทั้งหมดเท่าไรเท่านั่นเอง