vikas
Алексей

 
Уровень 9

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


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

Рейтинг 2081



РЕКОМЕНДУЮ



Прошу помочь.Советник не торгует на реале.

Здравствуйте АМ2. Вы недавно дорабатывали мне написанный
по моей просьбе советник. Вот почему то не могу запустить его на
реале. В тестере всё работает хорошо. На реале нет. Он то запустится,
то нет. Пробовал перезагружать и терминал и компьютер — иногда
помогает. Но вообщем логики никокой. Там в левом верхнем углу
возникает менюшка, где отображается цена входа по времени. Так
я уже ориентируюсь по ней — если цена появилась по установленному
времени, то значит он запустился, если её нет всё — он неработает.
Я всё его тут в тестере оптимизировал и результат то неплохой но
поставил на реал и не пойму в чём дело. Может опять какие нибудь
глобальные переменные. Вообщем прошу помочь.
ССылка на топик zakaz.opentraders.ru/22600.html
  • 0
  • Просмотров: 5959
  • 4 февраля 2015, 21:04
  • vikas
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Создание советника
Следующая запись в группе  
Нужен робот для МТ4 на 5 знаках
04 февраля 2015
05 февраля 2015

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

+
0
AM2 сейчас очень занят. Попробуйте ему написать в личку.
avatar

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

  • 4 февраля 2015, 21:32
+
0
Спасибо. Попробую.
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 4 февраля 2015, 21:39
+
0
Там в советнике логика такая, что эксперт постоянно включен должен быть.
avatar

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

  • 4 февраля 2015, 22:19
+
0
Я так поняла, что вы пробовали торговать в тестере. А на демо вы пробовали подключать этот советник? Какие результаты? Или сразу на реал?
avatar

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

  • 4 февраля 2015, 23:36
+
0
На демо то же самое. Устанавливаю на график, выставляю время, время подходит
и ничего не происходит. На менюшке цена входа отсутствует. Т.е. советник не
заработал.
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 5 февраля 2015, 06:42
+
0
Логика там какая — по выставленному времени он определяет цену входа. — это
точка отсчёта. Затем после прохождения ценой определённого кол-ва пунктов,
выставляет стоповый ордер.Должен. Ну а раз цена не определилась, ордер не выставляется. А в тестере всё нормально.
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 5 февраля 2015, 06:49
+
0
Посмотрю советник. По ссылке в обсуждении темы так много советников. Окончательный вариант лежит в файловой базе? Если да, можете сюда ссылку скинуть? Если нет, скопируйте сюда код последнего утвержденного советника, воспользовавшись «code».
Редактирован: 5 февраля 2015, 11:35
avatar

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

  • 5 февраля 2015, 11:26
+
0
Наконецто добрался до дома. Так, посмотрите пожалуйста по ссылке вот этот вариант:
www.opentraders.ru/downloads/575/. Дальше там просто два варианта трала, ну это я потом сам вставлю. Главное что бы цена выставлялась.

avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 5 февраля 2015, 18:33
+
0
Нет уж. Давайте советник таким, каким именно вы пользуетесь. Вместе с тралом. Неизвестно, что является причиной ошибки.
avatar

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

  • 5 февраля 2015, 19:43
+
0
Хорошо. Только не умещается. Через <
<code>> выдаёт ошибку превышение по колли-
честву символов. Как быть? </code>

может частями?
Редактирован: 5 февраля 2015, 19:51
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 5 февраля 2015, 19:46
+
0
На вашей странице справа есть блок «Мои файлы» — можно добавить файл туда.
Или в нескольких комментариях по частям.
Я склею.
avatar

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

  • 5 февраля 2015, 19:49
комментарий был удален 2015-02-05 20:26:38 vikas

комментарий был удален 2015-02-05 20:26:29 vikas

комментарий был удален 2015-02-05 20:27:13 vikas

+
0
так надо было частями через code
avatar

  45  Bishop Сообщений: 5719 - АЛЬФАХАМЕЦ-Машковод

  • 5 февраля 2015, 20:06
+
0
//+------------------------------------------------------------------+
//|                                                       VikasB.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

extern int    StopLoss    = 190;         // стоп лосс ордера
extern int    TakeProfit  = 50;          // тейк профит ордера
extern int    Step        = 10;          // шаг между ордерами
extern int    MaxTrades   = 10;          // количетсво трейдов
extern int    Slip        = 3;           // проскальзывание
extern int    StartHour   = 0;           // начало торговли часы
extern int    StartMin    = 0;           // начало торговли минуты
extern int    Expiration  = 14;          // время истечения ордера
extern int    Prohod      = 10;          // проход цены от уровня открытия первой свечи
extern int    Delta       = 10;          // расстояние от уровня открытия первой свечи для открытия отложки
extern int    Magic       = 24012015;    // магик
extern double Lots        = 0.1;         // начальный торговый объем
extern double KLot        = 1;           // коэффициент увеличения объема
extern double KStep       = 2;           // увеличение шага между ордерами

int ticket,ord=0;
bool trade;
double step,lot,tp,sl,price,open;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(Digits==3 || Digits==5)
    {
     TakeProfit*=10;
     StopLoss*=10;     
     Step*=10;
     Slip*=10;
     Delta*=10;
     Prohod*=10;
    }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {  
   datetime expiration = TimeCurrent()+3600*Expiration;
   if(Hour()==StartHour && Minute()==StartMin && Seconds()==0) open=Close[0];
   double delta=0;

   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()==OP_BUYSTOP)ord++;
         if(OrderType()==OP_SELLSTOP)ord++; 
        }
      }
    }
   
   if(Hour()==StartHour && Minute()==StartMin && Seconds()==0) trade=true;ord=0;            
   if(CountTrades()==0 && ord<1 && trade==true)
    {
     delta=open-Close[0];
     if(delta>Prohod*Point)
      {
        price=open+Delta*Point;
        step=Step;
        lot=Lots;    
        ticket=OrderSend(Symbol(),OP_BUYSTOP,lot,price,3,price-StopLoss*Point,price+TakeProfit*Point*0.5,"",Magic,expiration,Blue);
        trade=false;
      }
    } 
   
   if(CountTrades()==0 && ord<1 && trade==true)
    {    
     delta=Close[0]-open;
     if(delta>Prohod*Point)
      {     
        price=open-Delta*Point;
        step=Step;
        lot=Lots;         
        ticket=OrderSend(Symbol(),OP_SELLSTOP,lot,price,3,price+StopLoss*Point,price-TakeProfit*Point*0.5,"",Magic,expiration,Red);
        trade=false;
      }     
    }
    
   if(NewBar()==true)
    {   
      if(CountTrades()>0 && CountTrades()<=MaxTrades)
       {
        int otype = FindOrderType();
   
        if(otype == OP_BUY)
         {
          price = FindLastBuyPrice();
          step=StepCalc();
          if((price-Ask)/Point>=step)
           {
            lot=FindLastLot()*KLot;
            ticket=OrderSend(Symbol(),OP_BUY,NormalizeDouble(lot,2),Ask,Slip,0,0,"Buy Order",Magic,0,Blue);
            ModifyOrders();                 
           }
         }
         
        else if(otype == OP_SELL)
         {
          price = FindLastSellPrice();
          step=StepCalc();
          if((Bid-price)/Point>=step)
           {
            lot=FindLastLot()*KLot;
            ticket=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lot,2),Bid,Slip,0,0,"Sell Order",Magic,0,Red);
            ModifyOrders();         
           }       
         }      
       }    
    }
    
   OrderMod();
       
   if(CountTrades()>0)DelOrder();
   Comment("\nЦена в ",StartHour," часов: ",open,
           "\nШаг: ",StepCalc(),
           "\nЛот: ",NormalizeDouble(FindLastLot(),2),
           "\nПозиций : ",CountTrades());    
  }
//+------------------------------------------------------------------+
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 5 февраля 2015, 20:07
+
0
void ModifyOrders()
  {
   double all=0;
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
          {
           all+=OrderOpenPrice();
           count++;
          }
        }
      }
    }   
   all=NormalizeDouble(all/count,Digits);
   
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()==OP_BUY)
          {
           tp=NormalizeDouble(all+TakeProfit*Point,Digits);
           sl=NormalizeDouble(all-StopLoss*Point,Digits);
           bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
           
          }
         else 
         if(OrderType()==OP_SELL)
          {
           tp=NormalizeDouble(all-TakeProfit*Point,Digits);
           sl=NormalizeDouble(all+StopLoss*Point,Digits);
           bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
          }          
        }
      }
    }      
  }
//+------------------------------------------------------------------+
void OrderMod()
  {
   double pr;
   int count=0;
   bool mod;
   datetime expiration = TimeCurrent()+3600*Expiration;
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()==OP_BUYSTOP)
          {
           if((OrderOpenPrice()-Ask)>Delta*Point+Prohod*Point)
            {
              pr=Ask+Delta*Point+Prohod*Point;
              mod=OrderModify(OrderTicket(),pr,OrderStopLoss(),OrderTakeProfit(),0,Blue);  
            }
          }
         if(OrderType()==OP_SELLSTOP)
          {
           if((Bid-OrderOpenPrice())>Delta*Point+Prohod*Point)
            {
              pr=Bid-Delta*Point-Prohod*Point;
              mod=OrderModify(OrderTicket(),pr,OrderStopLoss(),OrderTakeProfit(),0,Red);
            } 
          }          
        }
      }
    }      
  }  
//+------------------------------------------------------------------+
int FindOrderType()
  {
   int oticket, ticketNumber=0,type=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         oticket=OrderTicket();
         if(oticket>ticketNumber)
          {
           ticketNumber=oticket;
           type=OrderType();
          }
        }
      }
    }
    return(type);
  }  
//+------------------------------------------------------------------+
double FindLastBuyPrice()
  {
   int oticket, ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
        {
         oticket=OrderTicket();
         if(oticket>ticketNumber)
          {
           ticketNumber=oticket;
           oprice=OrderOpenPrice();
          }
        }
      }
    }
    return(oprice);
  }
//+------------------------------------------------------------------+
double FindLastSellPrice()
  {
   int oticket, ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
        {
         oticket=OrderTicket();
         if(oticket>ticketNumber)
          {
           ticketNumber=oticket;
           oprice=OrderOpenPrice();
          }
        }
      }
    }
    return(oprice);
  }      
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
          count++;
        }
      }
    }
    return(count);
  }
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del; 
   for (int i=OrdersTotal()-1; i>=0; i--) 
    {
     if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {      
         if (OrderType()==OP_BUYSTOP)  del=OrderDelete(OrderTicket()); 
         if (OrderType()==OP_SELLSTOP) del=OrderDelete(OrderTicket());
        }
      }       
    }    
  }
//+------------------------------------------------------------------+
double StepCalc()
  {
   int count;
   double st=0;
   count=CountTrades(); 
   for (int i=0;i<=count;i++) 
    {
     st=Step*MathPow(KStep,i); 
    }
   return(st);    
  }  
//+------------------------------------------------------------------+
double FindLastLot()
  {
   int oticket, ticketNumber=0;
   double llot=0;
     if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && (OrderType()==OP_BUY || OrderType()==OP_SELL))
        {
         oticket=OrderTicket();
         if(oticket>ticketNumber)
          {
           ticketNumber=oticket;
           llot=OrderLots();
          }
        }
      }
    return(llot);
  }  
//+------------------------------------------------------------------+
bool NewBar()
  {
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
    return(false);
   }
  }
//+------------------------------------------------------------------+
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 5 февраля 2015, 20:08
+
0
Так?
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 5 февраля 2015, 20:08
+
0
Два огромнейших комментария, где код не через code, удалите, пожалуйста. Будет в дальнейшем проще переписываться.
avatar

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

  • 5 февраля 2015, 20:23
+
0
И напишите, пожалуйста, какие именно вы используете входные данные. (начало торговли часы, начало торговли минуты и т.д.)
avatar

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

  • 5 февраля 2015, 20:27
+
0
Пара GBPUSD. stoploss — 75
TP — 6
step — 10
max trades — 5
начало торговли часы — 0
начало торговли минуты — 0
время истечения орд. — 1
проход цены — 51
расстояние от уровня откр. первой свечи -3
тайм фрейм м5
Редактирован: 5 февраля 2015, 20:38
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 5 февраля 2015, 20:36
+
0
проверю
avatar

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

  • 5 февраля 2015, 21:59
+
0
ждём.Это оптимальные настройки. Для того чтобы проверить включиться ли он или нет,
можно выставить любое время. пробовать можно и на реале — ведь он сразу не выставляет ордер, а лишь указывает в менюшке цену входа.(должен). Это видно при визуализации в тестере.
Редактирован: 5 февраля 2015, 22:25
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 5 февраля 2015, 22:22
+
0
Такое вот в тестере:

Значит у вас запрос на изменение ордера посылается с каждым тиком. Ни один сервер ни у одного брокера не потерпит такой нагрузки.
Вы трал поставили неверно.
Плюс логика в советнике такая, как и писал AM2, что эксперт постоянно включен должен быть. Если же его, допустим, включать с утра, то не удивлена, что он не запускается.
Редактирован: 6 февраля 2015, 03:16
avatar

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

  • 6 февраля 2015, 00:34
+
0
Что касается нагрузки на сервер согласен. А вот версия АМ2:
www.opentraders.ru/downloads/575/. Почему с ней такая же проблема.
Почему, скажем, ставлю время 17:00, он не включается. Затем всё перезагружаю
ставлю на другой паре — скажем 17:15 — включился. Затем ради эксперимента удаляю
его с пары, перезагружаю всё и ставлю вновь на 17:30 — не работает. Ставлю на
другую пару на 17:40 — не работает. Удаляю всё. Перезагружаю всё, ставлю на
18:00 — не работает.И всё это и с этой версией, и с моим тралом, и с тралом АМ2.
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 6 февраля 2015, 07:03
+
0
Убегаю на работу.Буду только вечером.
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 6 февраля 2015, 07:17
+
0
Одна из причин, которая на поверхности.
В функции OnTick, которая срабатывает на каждом тике, стоит логика:
if(Hour()==StartHour && Minute()==StartMin && Seconds()==0) open=Close[0];

По этой логике должно совпасть много факторов: ровно в 17 часов 15 минут текущая свеча должна закрыться и мы узнаем цену закрытия. А если же график получасовой? Закрытие свечи произойдет только в 17:30. Если бы хотя бы стояло:
open=Close[1]

Т.е. в указанное время мы смотрим цену закрытия предыдущей свечи, то одну ошибку мы нашли. Сколько их еще и есть ли они, я не знаю, сложно разбирать чужую логику, проще свою выдумывать.
avatar

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

  • 6 февраля 2015, 09:56
+
0
Так, насколько я понял, т.к. я использую таймфрейм м5, и если изменить код так как вы предлагаете, то при установке времени кратному 5 минутам,
в назначенное время, с появлением новой свечки в менюшке выставиться
значение цены, равное значению цены закрытия предыдущей свечи? Так?
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 6 февраля 2015, 11:52
+
0
Если вы вместо open=Close[0] сделаете open=Close[1], то уже будет не важно, какой таймфрейм и сколько минут выставляете.
avatar

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

  • 6 февраля 2015, 12:50
+
0
Хорошо, я вечером попробую тогда и отпишусь. Я просто не дома сейчас.
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 6 февраля 2015, 13:05
+
0
Нет Oxy, к сожалению всё то же самое. Пробовал другой предыдущий советник, который
АМ2 написал (он такой же только без трала. Собственно к ниму то я и хотел прикрутить трал.) но и с ним та же проблема. Видимо какаято общая ошибка. Меняю код и ничего принципиально не меняется, только в тестере худший результат.
Редактирован: 6 февраля 2015, 18:49
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 6 февраля 2015, 18:48
+
0
В смысле? Что тоже самое? У меня на реале сов запустился — по крайней мере выставил цену в информационном окне. У меня время компа 19:29, время в терминале 18:29, я ставлю время в советнике 18:35, в это время на новом тике появляется цена в окошке.
avatar

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

  • 6 февраля 2015, 19:31
+
0
Oxy?, всё по порядку. Пришёл домой, изменил код, выставил время в советнике
17:03. (время компа было 18:01), в 17:03 на новом тике появляется цена. Ну
думаю пошло. Проверяю ещё раз — удаляю советника, ставлю заново, выставляю
17:07 (время компа 18:05), время подходит и уже ничего не происходит. И так несколько раз подряд- устанавливаю время оно подходит и тишина.
Попробуйте несколко раз подряд.
Редактирован: 6 февраля 2015, 19:48
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 6 февраля 2015, 19:48
+
0
Я еще раз условие глянула: «Seconds()==0»
А представляете, если в ноль секунд не пришел тик? То и код не сработает. Бывает и в конкретную минуту тика нет, но это чаще на 4-х знаках.
Вместо:
if(Hour()==StartHour && Minute()==StartMin && Seconds()==0) open=Close[1];


Пишем:
if(Hour()==StartHour && Minute()==StartMin) open=Close[1];


Но советник не заработает, если в указанную минуту не будет тика.
avatar

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

  • 6 февраля 2015, 20:07
+
0
Сейчас попробую.
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 6 февраля 2015, 20:10
+
0
Ну всё. ЗАРАБОТАЛО! 7 раз из 7. Ну что могу сказать, Вам Огромное спасибо за по-
мощь и терпение. Надеюсь пообщаемся как нибудь ещё.

avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 6 февраля 2015, 20:23
+
0
Надеюсь, он и дальше будет верно работать. *lalala* 
avatar

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

  • 6 февраля 2015, 20:34
+
0
один уже работает. И этот добьём.*victory* 
avatar

  9  vikas Автор Сообщений: 113 - Алексей

  • 6 февраля 2015, 20:39

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