Open Forex4you Account

Server รัน EA 1000 / ปี

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

Author Topic: ปัญหา EA ไม่ออกออเดอร์ตามคำสั่งครับ  (Read 9486 times)

Hunt_1412

  • Newbie
  • *
  • Posts: 2
เรียน สอบถามท่านผู้รู้
ผมได้เขียน EA ตัวหนึ่ง หลักการทำงานคือให้ buy หรือ sell ท่ี RSI แถว Overbougth Oversold และมีแท่งกลับตัว ผล backtest ดีมาก แต่พอรันด้วย
Demo แล้วเกิดปัญหา ดังนี้
1.การออก lot แต่ละค่าเงินไม่เท่ากันทั้งที่ใน code เป็น 0.01
2.ระดับ RSI ยังไม่ถึงมันออกออเดอร์แล้ว
3.เมื่อออกออเดอร์แล้วมันปิดคำสั่งทั้งที่ยังไม่ถึง TP SL

รบกวนท่านผู้รู้ตรวจสอบทีครับ
//+------------------------------------------------------------------+
//|                                                     template.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
extern int    MagicNumber=1414;
extern double Lots =0.01;
extern string TradeComment=" Trade GU takeproft and loss is 1 digits = 1 PIP ";
extern string TPSLComment1=" Martingale SL4000,TP1400";
extern string TPSLComment2=" Non Martingale Sl500 TP1200 ";
extern double SL=4000;
extern double TP=1200;
extern int    TrailingStop=500;
extern int    Slippage=3;
extern int    Length=1500;
extern string RSIComment=" RSI good when <25,>65 for Martingale , have a candle strick > 800 pip Suitable For Manaul ";
extern int    LevelRSIbuy=25;
extern int    LevelRSIsell=65;
extern string MAcomment=" MA SETTING";
extern bool   UsedMA=true;
extern int    MA=24;
extern int    RSIperiod=14;
extern bool   Martingale = true;
extern double Multiple = 2;
extern int    Maxorder = 6;
extern int    Distance = 700;
extern string ProfitComment=" when use Martingale,Equity 100$ take 20$ ";
extern double Profit = 20;
extern bool   CloseforSafe = true;


//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
double RSI;
void RSI()
{
   RSI=iRSI(NULL,0,RSIperiod,PRICE_CLOSE,0);
}
void EntryOder()
{double lastbarBull1 = iOpen(NULL,PERIOD_H1,1);
 double lastbarBull2 = iOpen(NULL,PERIOD_H1,2);
 double lastbarBull3 = iOpen(NULL,PERIOD_H1,3);
 double lastbarBear1 = iOpen(NULL,PERIOD_H1,1);
 double lastbarBear2 = iOpen(NULL,PERIOD_H1,2);
 double lastbarBear3 = iOpen(NULL,PERIOD_H1,3);
 double Bar1 = (iClose(NULL,PERIOD_H1,1)-iOpen(NULL,PERIOD_H1,1));
 double Bar2 = (iClose(NULL,PERIOD_H1,2)-iOpen(NULL,PERIOD_H1,2));
 double Bar3 = (iClose(NULL,PERIOD_H1,3)-iOpen(NULL,PERIOD_H1,3));
 double curbarsell = iClose(NULL,PERIOD_H1,0);
 double curbarbuy = iClose(NULL,PERIOD_H1,0);
{

   if(OrdersTotal()==0)
   {
   if((RSI<LevelRSIbuy)&&(curbarbuy>lastbarBear1))OpenBuy();//&&(curbarbuy>lastbarBear1
   if((RSI>LevelRSIsell)&&(curbarsell<lastbarBull1))OpenSell();//&&(curbarsell<lastbarBull1)
   }
  }
}
void Martin()
{
   if(Martingale)
   {
   if(CountBuy()>0 && askPrice-Ask>Distance*Point && CountBuy()<Maxorder)OpenBuy();
   if(CountSell()>0 && Bid-bidPrice>Distance*Point && CountSell()<Maxorder)OpenSell();
   }
}
int CountBuy()
{
   int Count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
    bool res = OrderSelect(i,SELECT_BY_POS);
    if(OrderType()== OP_BUY)
    {
     Count++;
    }
   }
   return Count;
}

int CountSell()
{
   int Count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
    bool res = OrderSelect(i,SELECT_BY_POS);
    if(OrderType()== OP_SELL)
    {
     Count++;
    }
   }
   return Count;
}
double NewLots()
{
   double NewLots=Lots;
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
      bool res = OrderSelect(i,SELECT_BY_POS);
      NewLots=NewLots*Multiple;
   }
   return NewLots;
}
//+------------------------------------------------------------------+
int ticket;
double askPrice,bidPrice;
void OpenBuy()
{
   ticket = OrderSend(Symbol(),OP_BUY,NewLots(),Ask,3,Ask-SL*Point,Ask+TP*Point,"",1414,0,clrBlue);
   askPrice=Ask;
}

void OpenSell()
{
   ticket = OrderSend(Symbol(),OP_SELL,NewLots(),Bid,3,Bid+SL*Point,Bid-TP*Point,"",1414,0,clrRed);
   bidPrice=Bid;
}
void CloseBuy()
{
   bool res;
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
      res = OrderSelect(i,SELECT_BY_POS);
      if(Close[0]>iMA(NULL,0,MA,0,MODE_EMA,PRICE_MEDIAN,0))CloseBuy();
      if(OrderType()== OP_BUY)
      res = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),50,clrBlue);
   }
}
void CloseSell()
{
   bool res;
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
      res = OrderSelect(i,SELECT_BY_POS);
      if(Close[0]<iMA(NULL,0,MA,0,MODE_EMA,PRICE_MEDIAN,0))CloseSell();
      if(OrderType()== OP_SELL)
      res = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),50,clrBlue);
   }
}
void ClosebyProfit()
{
   if(AccountProfit()>=Profit)
   {
      for(int i=OrdersTotal()-1;i>=0;i--)
      {
         bool res = OrderSelect(i,SELECT_BY_POS);
         ticket = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),20,clrPink);
      }
   }
}
void Closeforsafe()
{
   if(CountBuy()==Maxorder && askPrice-Ask>Distance*Point)
   {
      for(int i=OrdersTotal()-1;i>=0;i--)
      {
         bool res = OrderSelect(i,SELECT_BY_POS);
         if(i>=Maxorder-1)continue;
         ticket = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),20,clrPink);
      }
   }
   if(CountSell()==Maxorder && Bid-bidPrice>Distance*Point)
   {
      for(int i=OrdersTotal()-1;i>=0;i--)
      {
         bool res = OrderSelect(i,SELECT_BY_POS);
         if(i>=Maxorder-1)continue;
         ticket = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),20,clrPink);
      }
   }
}
void OnTick()
  {
      RSI();
      EntryOder();
      Martin();
      ClosebyProfit();
      Closeforsafe();
  }
//+------------------------------------------------------------------+

admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 2379
มีตัวอย่างค่า Lot ที่ไม่เท่ากันไหมครับ เช่นค่าเงินนี้ Lot มันเท่าไร อีกค่าเงินมันเท่าไร เพราะดูผ่านๆไม่น่าจะมีอะไร