Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



Прошу проверить корректность кода простенького сова.

Уважаемые профи в коде mql, пожалуйста проверьте код прилагаемого сова.
Он не открывает сделки в тестере и на живом графике открывает их через пень-колоду. Устанавливаю на множество пар, открывает ордера только на одной или двух единовременно, не более и непонятно по какому принципу. Магики разные пробовал прописывать — не помогло.

Сов использует индикатор ZigZag, но обращение к индикатору для расчёта экстремумов вроде бы отсутствует. Проверьте ПОЖАЛУЙСТА это тоже на корректность.

Помимо сова я нашёл библиотеку, но она как я понимаю прописана в код сова.
Сов и библиотеку прилагаю.

ЗЫ. Я понимаю, что сов очень простой, но я хочу попробовать взять его за основу для дальнейшего «апгрейда» и формирования полноценного советника.
Советник найден ЗДЕСЬ: strategy.opentraders.ru/2356.html

Спасибо.

b-Indicators.zip (2 Kb)
ww.mq4 (3 Kb)
  • +2
  • Просмотров: 2555
  • 15 ноября 2014, 18:21
  • iTrader777
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Подправить советник
14 ноября 2014
15 ноября 2014

Брокер для ваших роботов, 15 лет на рынке

Комментарии (2)

+
+1
готово.

подправил чтобы открывал сделки на разных парах.

логика на примере покупки: открываемся если

1. 1-й излом зигзага больше 3-го но меньше второго и четвертого,
2. пятый излом меньше 3-го
3. в настоящее время нет покупки
4. предыдущая сделка была продажа


if(zz1>zz3 && zz1<zz2 && zz1<zz4 && zz5<=zz3 && b<1 && (LastDealResult()==0 || LastDealResult()==2))


обращение к индикатору есть

zz=iCustom(sy, tf, "ZigZag", dp, dv, bs, 0, i);



//+------------------------------------------------------------------+
//|                                                           WW.mq4 | 
//|                                            Copyright © 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, AM2"
#property link      "http://www.forexsystems.biz"

#define MAGIC  20141115

extern int    StopLoss     = 450;
extern int    TakeProfit   = 800;
extern int    ExtDepth     = 10;
extern int    ExtDeviation = 5;
extern int    ExtBackstep  = 3;
extern double Lots         = 0.1;

//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double zz1,zz2,zz3,zz4,zz5;
   int    res,b,s;
   
//---- get Extremum ZigZag Price
 
   zz1=GetExtremumZZPrice(NULL,0,4,ExtDepth,ExtDeviation,ExtBackstep);
   zz2=GetExtremumZZPrice(NULL,0,3,ExtDepth,ExtDeviation,ExtBackstep);
   zz3=GetExtremumZZPrice(NULL,0,2,ExtDepth,ExtDeviation,ExtBackstep);
   zz4=GetExtremumZZPrice(NULL,0,1,ExtDepth,ExtDeviation,ExtBackstep);
   zz5=GetExtremumZZPrice(NULL,0,0,ExtDepth,ExtDeviation,ExtBackstep);

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
       {
        if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
         {
          if(OrderType()==OP_BUY) b++;
          if(OrderType()==OP_SELL) s++;
         }
       }  
     }             
           
   Comment("\n","ZZ1 = ",zz1,"\n",
          "ZZ2 = ",zz2,"\n",
          "ZZ3 = ",zz3,"\n",
          "ZZ4 = ",zz4,"\n",
          "ZZ5 = ",zz5,"\n");
   
//---- buy conditions
   if(zz1>zz3 && zz1<zz2 && zz1<zz4 && zz5<=zz3 && b<1 && (LastDealResult()==0 || LastDealResult()==2))  
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,fND(Ask-StopLoss*Point),fND(Ask+TakeProfit*Point),"",MAGIC,0,Blue);
      if(res<0)
       {
        Print("Order Buy  error: ",GetLastError());
       }
      else
        Print("OK Order Buy");  
      return;
     }   
//---- sell conditions
   if(zz1<zz3 && zz1>zz2 && zz1>zz4  && zz5>=zz3 && s<1 && (LastDealResult()==0 || LastDealResult()==1))  
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,fND(Bid+StopLoss*Point),fND(Bid-TakeProfit*Point),"",MAGIC,0,Red);
      if(res<0)
       {
        Print("Order Sell  error: ",GetLastError());
       }
      else
        Print("OK Order Sell");  
      return;
     }
//----
  }
//+------------------------------------------------------------------+
double fND(double d, int n=-1) 
  {  
   if (n<0) return(NormalizeDouble(d, Digits)); 
   return(NormalizeDouble(d, n)); 
  }  
//+------------------------------------------------------------------+
bool NewBar()
  {
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
    {
     lastbar=curbar;
     return (true);
    }
   else
    {
     return(false);
    }
  }  
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+

double GetExtremumZZPrice(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bs=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=1; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", dp, dv, bs, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(zz);
    }
  }
  Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
//+----------------------------------------------------------------------------+
int LastDealResult()
  {
   int result;
   if(OrderSelect(OrdersHistoryTotal(), MODE_HISTORY)==true)
    {
     if(OrderType()==OP_BUY) result=1;
     if(OrderType()==OP_SELL) result=2;
    }
   else
    {
     result=0;
    } 
   return(result);    
  } 
//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
  {
//---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;
//--- go trading only for first tiks of new bar
   if(NewBar()==true)
    {
     CheckForOpen();
    }                               
//----
  }  
//+------------------------------------------------------------------+

Редактирован: 15 ноября 2014, 21:19
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 15 ноября 2014, 20:33
+
0
ОГРОМНОЕ СПАСИБО!!! Буду проверять. :) 
avatar

  2  iTrader777 Автор Сообщений: 7

  • 15 ноября 2014, 21:25

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий