Krokus377
Андрей

 
Уровень 16

  Торгую в компаниях:


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

Рейтинг 2088



РЕКОМЕНДУЮ



Нужно доработать советник под реал

Здравствуйте! Нужно доработать под реал советник, написанный Вами ранее. На данном этапе, присутствует следующий недостаток: Если советник стоит на нескольких парах (с разными магиками), то в работе находится, только одна пара. Пока её ордер не закроется, то по другим парам, ордера не выставляются, хотя по тестеру, они должны быть. Т.е. одновременно, работа может вестись, только на одном торговом инструменте. Ещё, необходимо добавить функцию б/у.
Брокер Альпари (5-знак). Счёт долларовый (стандарт).
  • 0
  • Просмотров: 4859
  • 11 декабря 2014, 18:35
  • Krokus377
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
+1
Внес в код некоторые изменения, установил советник на 2 пары. Код сейчас в таком виде:



//--- Inputs
extern int StopLoss     = 500; // стоп лосс ордера
extern int TakeProfit   = 500; // тейк профит ордера
extern int Slip         = 3;   // проскальзывание ордера
extern int Try          = 5;   // количество попыток выставить ордер
extern int CountCandle  = 6;   // количество свечек для расчета
extern int Delta        = 100; // расстояние AB
extern double Lots      = 1;   // объем позиции
//----
extern int period       = 92;  // период средней Slope Directional Line
extern int method       = 2;   // метод средней(SMA=0,EMA=1,SMMA=2,LWMA=3)
extern int price        = 0;   // цена по которой строится средняя
//----
extern int MAGIC        = 333; // магик

int err;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(Digits==2 || Digits==4)
    {
     TakeProfit/=10;
     StopLoss/=10;     
     Slip/=10;
    }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   int    res,pos;
//--- get Moving Average 
   double SlopeBlue=iCustom(Symbol(),0,"Slope",period,method,price,0,1);
   double SlopeRed=iCustom(Symbol(),0,"Slope",period,method,price,1,1);
   double up=iHigh(Symbol(),0,iHighest(NULL,0,MODE_HIGH,CountCandle,1));
   double dn=iLow(Symbol(),0,iLowest(NULL,0,MODE_LOW,CountCandle,1));
   Comment("\nSlope Blue ",SlopeBlue,"\nSlope Red ",SlopeRed);   
      
   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) pos++;
          if(OrderType()==OP_SELL)pos++;
          if(OrderType()==OP_BUYSTOP) pos++;
          if(OrderType()==OP_SELLSTOP)pos++;          
         }
       }  
     } 
     
   //--- sell conditions
   if(SlopeBlue-High[1]<=50*Point && SlopeBlue==SlopeRed && Close[0]<SlopeBlue && pos<1 &&//вход на касании линии
      Close[0]-dn>=Delta*Point)
        {
         res=OrderSend(Symbol(),OP_SELLSTOP,Lots,dn,3,dn+StopLoss*Point,dn-TakeProfit*Point,"",MAGIC,0,Red);
         if(res<0)
          {
           Print("Ошибка: ",Error(GetLastError()));
           err++;
           Sleep(500);
           RefreshRates();
          }
         else
           Print("OK Order SELL STOP");
         return;
        }
      //--- buy conditions
   if(Low[1]-SlopeBlue<=50*Point && SlopeBlue!=SlopeRed && Close[0]>SlopeBlue && pos<1 &&//вход на касании линии
      up-Close[0]>=Delta*Point)
        {
         res=OrderSend(Symbol(),OP_BUYSTOP,Lots,up,3,up-StopLoss*Point,up+TakeProfit*Point,"",MAGIC,0,Blue);      
         if(res<0)
          {
           Print("Ошибка: ",Error(GetLastError()));
           err++;
           Sleep(500);
           RefreshRates();
          }
         else
           Print("OK Order BUY STOP");
         return;
        }
    if(err>Try) return;              
  }
//+------------------------------------------------------------------+
void ClosePos()
  {
   double SlopeBlue=iCustom(Symbol(),0,"Slope",period,method,price,0,1);   
   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 || OrderType()==OP_BUYSTOP) && Close[1]<SlopeBlue)
           {
            DelOrder();
           }
          if((OrderType()==OP_SELL || OrderType()==OP_SELLSTOP) && Close[1]>SlopeBlue)
           {
            DelOrder();
           }
         }
       }  
     }             
  }  
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del; 
   for(int i=OrdersTotal()-1; i>=0; i--) 
    {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
       {
        if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
         {    
          if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
          if (OrderType()==OP_BUYSTOP)  del=OrderDelete(OrderTicket()); 
          if (OrderType()==OP_SELLSTOP) del=OrderDelete(OrderTicket());
          if (OrderType()==OP_BUY)  del=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White);
          if (OrderType()==OP_SELL) del=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White);
          if(del==false)
           {
            Print("Ошибка: ",Error(GetLastError()));
            err++;
            Sleep(500);
            RefreshRates();
           }
          else
            Print("OK Delete Order ");                  
         }
       }                
     } 
   if(err>Try) return;        
  }
//+------------------------------------------------------------------+
bool NewBar()
  {
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
  }
//+------------------------------------------------------------------+
string Error(int error_code)
  {
   string error_string;
//----
   switch(error_code)
     {
      //---- Коды ошибок, возвращаемые торговым сервером:
      case 0:   error_string="Нет ошибок";                                                     break;
      case 1:   error_string="Нет ошибки, но результат неизвестен";                            break;
      case 2:   error_string="Общая ошибка";                                                   break;
      case 3:   error_string="Неправильные параметры";                                         break;
      case 4:   error_string="Торговый сервер занят";                                          break;
      case 5:   error_string="Старая версия клиентского терминала";                            break;
      case 6:   error_string="Нет связи с торговым сервером";                                  break;
      case 7:   error_string="Недостаточно прав";                                              break;
      case 8:   error_string="Слишком частые запросы";                                         break;
      case 9:   error_string="Недопустимая операция нарушающая функционирование сервера";      break;
      case 64:  error_string="Счет заблокирован";                                              break;
      case 65:  error_string="Неправильный номер счета";                                       break;
      case 128: error_string="Истек срок ожидания совершения сделки";                          break;
      case 129: error_string="Неправильная цена";                                              break;
      case 130: error_string="Неправильные стопы";                                             break;
      case 131: error_string="Неправильный объем";                                             break;
      case 132: error_string="Рынок закрыт";                                                   break;
      case 133: error_string="Торговля запрещена";                                             break;  
      case 134: error_string="Недостаточно денег для совершения операции";                     break;
      case 135: error_string="Цена изменилась";                                                break;
      case 136: error_string="Нет цен";                                                        break;
      case 137: error_string="Брокер занят";                                                   break;
      case 138: error_string="Новые цены";                                                     break;
      case 139: error_string="Ордер заблокирован и уже обрабатывается";                        break;
      case 140: error_string="Разрешена только покупка";                                       break;
      case 141: error_string="Слишком много запросов";                                         break;
      case 145: error_string="Модификация запрещена, так как ордер слишком близок к рынку";    break;
      case 146: error_string="Подсистема торговли занята";                                     break;
      case 147: error_string="Использование даты истечения ордера запрещено брокером";         break;
      case 148: error_string="Количество открытых и отложенных ордеров достигло предела, установленного брокером.";break;
      default:  error_string="Неизвестная ошибка.";
     }
//----
   return(error_string);
 }  
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  { 
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
   if(NewBar()==true)
    {   
     OpenPos();
     ClosePos();
    }
//---
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 11 декабря 2014, 20:01
+
0
А можно добавить функцию, перенос в б/у?
Редактирован: 11 декабря 2014, 20:50
avatar

  16  Krokus377 Автор Сообщений: 226 - Андрей

  • 11 декабря 2014, 20:34
+
+1
Вот в таком виде отработает советник сутки на демо и затем добавлю.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 11 декабря 2014, 21:04
+
0
Хорошо, спасибо! Тоже сейчас на демку поставлю.
avatar

  16  Krokus377 Автор Сообщений: 226 - Андрей

  • 11 декабря 2014, 21:07
+
0
У меня на демо, вроде как, нормально работает.
avatar

  16  Krokus377 Автор Сообщений: 226 - Андрей

  • 12 декабря 2014, 15:46
+
0
Добавил вывод в БУ. Обновил советник в базе. В файле эксперт и индикатор.
www.opentraders.ru/downloads/512/
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 12 декабря 2014, 16:45
+
0
Очень благодарен!
avatar

  16  Krokus377 Автор Сообщений: 226 - Андрей

  • 12 декабря 2014, 17:04
+
0
По результатам тестирования, открылась проблемка: советник не переводит s/l в б/у.
Редактирован: 15 декабря 2014, 16:30
avatar

  16  Krokus377 Автор Сообщений: 226 - Андрей

  • 15 декабря 2014, 16:23
+
0
Кстати, я сразу не заметил, что советник не выводит в б/у, даже в тестере.
avatar

  16  Krokus377 Автор Сообщений: 226 - Андрей

  • 16 декабря 2014, 02:18
+
0
С б/у, думаю, хорошая идея — сделать.
В тестере советник периодически выдает ошибку:


avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 17 декабря 2014, 19:22
+
+2
В тестере сейчас без ошибок, если не считать ошибку 0 — нет ошибок. Посмотрим на демо, когда она появляется.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 18 декабря 2014, 19:01
+
0
спасибо *good*  будем тестить, думать *think* 
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 18 декабря 2014, 20:57
+
0
Обновленный вариант поставил на демо. Полностью устранить появление ошибок в тестере пока не удалось.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 18 декабря 2014, 17:41
+
0
Кстати, я сразу не заметил, что советник не выводит в б/у, даже в тестере.


В тестере в БУ выводит

avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 18 декабря 2014, 17:46
+
+1
AM2, *bravo* 
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 18 декабря 2014, 17:55
+
0
Спасибо! Будем тестировать.
avatar

  16  Krokus377 Автор Сообщений: 226 - Андрей

  • 18 декабря 2014, 19:16
+
0
Приветствую Вас. Случайно зашел и даже специально зарегался дабы спросить одну вещь. Господа я так понял советник открывает позицию когда индикатор перекрашивается в другой цвет видь так?
avatar

  0  Komander Сообщений: 5 - Вадим

  • 27 февраля 2015, 02:00
+
0
Не совсем. Вниз ордер на определенном уровне, если пересекли синюю линию. Вверх ордер на определенном уровне, если пересекли красную линию.
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 27 февраля 2015, 03:00
+
0
Спасибо за пояснение. Мне хотелось бы узнать еще кое-что, каким Вы его (советник) в идеале видите? Я имею в виду что Вас пока что не устраивает и каким должен быть конечный вариант (Интересуюсь в следствии того, что с этим же индикатором, у меня недавно были кое какие предположения)
Редактирован: 27 февраля 2015, 03:46
avatar

  0  Komander Сообщений: 5 - Вадим

  • 27 февраля 2015, 03:45
+
0
Первоначально моя идея была:
zakaz.opentraders.ru/21023.html
AM2 запрограммировал чуть по-другому. В этом топике допрограммировал.
Протестировала я идею AM2, запрограммировала и протестировала отдельно свою идею. И как то остыла к ней. Может Krokus377 и пользуется этим советником.
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 27 февраля 2015, 13:38
+
0
Спасибо. Всё ясно. Очень жаль)
avatar

  0  Komander Сообщений: 5 - Вадим

  • 27 февраля 2015, 14:03
+
0
Если у вас есть хорошая стратегия — опубликуйте топик, запрограммирую.
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 27 февраля 2015, 18:59
+
0
Я подозреваю, что все ограничится одним вопросом) Похоже что стратегия на открытие ордеров при смене цвета индикатора Slope Direction Line показала не самые лучшие показатели? Или же Вы изначально планировали работу советника по отложенным ордерам?
avatar

  0  Komander Сообщений: 5 - Вадим

  • 27 февраля 2015, 21:30
+
0
Это вообще гиблое дело — открытие ордеров при смене цвета. Проверяла. Он столько раз меняется, а потом возвращается! Просто мы этого почти не замечаем. А ложных срабатываний куча.
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 27 февраля 2015, 22:50
+
0
Спасибо, я почему то так и думал) На истории по индикатору все выглядело великолепно. Хотя есть одна мыслишька, надо просто на неделю запустить мт4 не выключая… Предстоящую неделю посвящу именно этой проверки. Если что то получится здравое могу я рассчитывать на Вашу поддержку?
avatar

  0  Komander Сообщений: 5 - Вадим

  • 27 февраля 2015, 23:41
+
0
конечно
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 28 февраля 2015, 00:44
+
0
Смотрю, здесь идёт, бурное обсуждение советника, который я, благодаря Oxy, пытался воплотить в жизнь… Кое-что, удалось, но не то, что хотелось.
Буду на связи, только во вторник, к вечеру. Можем обсудить, если есть интерес…
avatar

  16  Krokus377 Автор Сообщений: 226 - Андрей

  • 28 февраля 2015, 09:40

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