Open Forex4you Account

Server รัน EA 1000 / ปี

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

Author Topic: ใครก็ได้ช่วยทำ EA จาก indicators ตัวนี้ให้หน่อยครับ  (Read 17483 times)

lnwzaxso

  • Newbie
  • *
  • Posts: 3
Indicators ก็คือ EMA Crossover Signal ครับ

ผมอยากให้เปิด Order เวลาที่ลูกศรขึ้นมา แล้วปิดต่อเมื่อลูกศรถัดไปมาครับผม
ขอบคุณครับ
[/b]
Code: [Select]
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 SeaGreen
#property indicator_color2 Red

double CrossUp[];
double CrossDown[];
extern int FasterEMA = 5;
extern int SlowerEMA = 8;
extern bool SoundON=true;
double alertTag;
 double control=2147483647;
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0, DRAW_ARROW, EMPTY,3);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, CrossUp);
   SetIndexStyle(1, DRAW_ARROW, EMPTY,3);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, CrossDown);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {
   int limit, i, counter;
   double fasterEMAnow, slowerEMAnow, fasterEMAprevious, slowerEMAprevious, fasterEMAafter, slowerEMAafter;
   double Range, AvgRange;
   int counted_bars=IndicatorCounted();
//---- check for possible errors
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;
  
   for(i = 0; i <= limit; i++) {
  
      counter=i;
      Range=0;
      AvgRange=0;
      for (counter=i ;counter<=i+9;counter++)
      {
         AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
      }
      Range=AvgRange/10;
      
      fasterEMAnow = iMA(NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i);
      fasterEMAprevious = iMA(NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i+1);
      fasterEMAafter = iMA(NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i-1);

      slowerEMAnow = iMA(NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i);
      slowerEMAprevious = iMA(NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i+1);
      slowerEMAafter = iMA(NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i-1);
      
      if ((fasterEMAnow > slowerEMAnow) && (fasterEMAprevious < slowerEMAprevious) && (fasterEMAafter > slowerEMAafter)) {
         CrossUp[i] = Low[i] - Range*0.5;
      }
      else if ((fasterEMAnow < slowerEMAnow) && (fasterEMAprevious > slowerEMAprevious) && (fasterEMAafter < slowerEMAafter)) {
          CrossDown[i] = High[i] + Range*0.5;
      }
        if (SoundON==true && i==1 && CrossUp[i] > CrossDown[i] && alertTag!=Time[0]){
         Alert("EMA Cross Trend going Down on ",Symbol()," ",Period());
        alertTag = Time[0];
      }
        if (SoundON==true && i==1 && CrossUp[i] < CrossDown[i] && alertTag!=Time[0]){
       Alert("EMA Cross Trend going Up on ",Symbol()," ",Period());
        alertTag = Time[0];
        }
  }
   return(0);
}

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2386
อินดิเคเตอร์ลักษณะนี้ เขียนเป็น EA โอกาสกำไรจะน้อบครับถ้าแค่เปิดปิดตามสี เพราะว่า อินดิเคเตอร์ มัน repaint ได้ครับ ea คือโปรแกรมคอมพิวเตอร์สั่งเปิดมันก็เปิด สั่ง ปิดมันก็ปิด อินดิเคเตอร์ลักษณะนี้เวลา ตลาดสวิงมันจะเปลี่ยนสีกลับไปกลับมาครับ  ให้ลองสังเกตดูก่อนครับถ้ามันเปลี่ยนไปเปลี่ยนมาได้ logic ที่ใช้แค่เปิดปิดตามสีลูกศรก็ต้องมีอะไรเพิ่มเติมครับไม่งั้นเราจะเสีย ตอนตลาดสวิงเวลาลูกศรกระพริบไปมาครับ

preeyada

  • Jr. Member
  • **
  • Posts: 67
มาคอนเฟิร์มอีกคนครับ
ผมเคยเขียนแล้วครับ แบ๊คเทสขาดทุนย่อยยับ 55
มันไม่เหมาะกับทำ EA จริงๆ  :-\

lnwzaxso

  • Newbie
  • *
  • Posts: 3
ครับขอบคุณครับ แล้วถ้าเอามันไปผสมกับอินดี้อื่น หรือแนวคิดอื่นๆ จะทำให้เป็น EA ที่ดีได้ไม๊ครับ

preeyada

  • Jr. Member
  • **
  • Posts: 67
ผมว่าน่าจะโอเค เป็นตัวย้ำว่ามาถูกทาง ประมาณนี้ครับ  :D

lnwzaxso

  • Newbie
  • *
  • Posts: 3
แล้วถ้าจะเอาตัวนี้เป็น EA อะครับต้องแก้โค้ดยังไงช่วยแนะนำหน่อยครับ ขอบคุณครับ
« Last Edit: มกราคม 01, 2012, 10:32:37 pm by lnwzaxso »

preeyada

  • Jr. Member
  • **
  • Posts: 67
if(iCustom(NULL,0,"ชื่ออินดิเคเตอร์",0,1)!=2147483647) OrdType=1;
if(iCustom(NULL,0,"ชื่ออินดิเคเตอร์",1,1)!=2147483647) OrdType=2;

if(OrdType==1) {
      ให้ EA เปิด Buy
}
if(OrdType==2) {
      ให้ EA เปิด Sell
}

ลองตามนี้ดูครับ

madnanu

  • Newbie
  • *
  • Posts: 1
มือใหม่ครับ
ผมมี Indicators ตัวนี้พอดี แล้วที่สังเกตุ สีลูกศรไม่เปลี่ยนครับ เลยหัดเขียนครับ

//+------------------------------------------------------------------+
//|                                                    UpAndDown.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   //----
   int total;
   int ticket;
   int OrdType;
  
   if(iCustom(NULL,0,"EMA Crossover Signal",0,1)!=2147483647) OrdType=1;  //----Up
   if(iCustom(NULL,0,"EMA Crossover Signal",1,1)!=2147483647) OrdType=2;  //----Down
 
   total=OrdersTotal();
   if(total<1)
    {
      if(OrdType==2)
       {
         ticket=OrderSend(Symbol(),OP_SELL,3,Ask,3,Ask+Point*500,Bid-Point*100,"UpAndDown",0,0,Green);
         OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
        }
   if(total>0)
      {
      if(OrdType==1)
        {  
         OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
         OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
        }
     }
    }
       if(total<1)
    {
      if(OrdType==1)
       {
         ticket=OrderSend(Symbol(),OP_BUY,3,Ask,3,Bid-Point*500,Ask+Point*100,"UpAndDown",0,0,Green);
         OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
        }
   if(total>0)
      {
      if(OrdType==2)
        {  
         OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
         OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
        }
     }
    }

//----
   return(0);
  }
//+------------------------------------------------------------------+

ปัญหาคือ
EA Order ตามเงื่อนไขครับ แต่พอลูกศรอันถัดมาโผล่ มันไม่ปิดให้ครับ
ต้องรอให้ครบ 100 จุด มันก็จะ TP แล้วจึงจะเปิด Order อีกอันตามเงื่อนไขครับ
ลองปรับ TP เป็น 0 มันก็ Order เดียวยาวเลยไม่ปิดให้เลย
ลองย้ายตำแหน่งโค๊ดต่างๆ แล้วก็ไม่ดีขึ้นเลยครับ
ลองค้นกระทู้ปัญหาดูก็ไม่เจอครับ ตาลายแล้วครับ ช่วยแนะนำหน่อยนะครับ

ขอบคุณมาก ๆ ครับ
« Last Edit: พฤษภาคม 08, 2012, 05:47:11 am by madnanu »

zerozaaa

  • Jr. Member
  • **
  • Posts: 72
ไม่มีชุดคำสั่งปิดครับ มีแค่ตั้ง TP  กับ SL  จาก Code น่ะครับ

D_Diamond

  • Hero Member
  • *****
  • Posts: 673
    • Expert Forex Trading
วางวงเล็บไว้ผิดครับ  มันจะไม่มีทางเป็นจริง

   if(total<1)
    {
       if(total>0)
      {
       }
    }

ในเมื่อมันน้อยกว่า 1 แล้วมันจะมากกว่า 0 ได้ยังไง