Скачать MetaTrader 5

Необъяснимо, но ФАКТ!

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Не можешь разобраться в коде? Возможно, на эту тему уже написана статья!
Alexandr Bryzgalov
27638
Alexandr Bryzgalov 2011.02.19 11:30 

2911

Странная ситуация, может кто сталкивался, в роботе четко прописан лот и функции увеличения лота в роботе в принципе нет(и быть не должно),

но он как утверждает человек его(робота) использующий, выставляет ордер с объемом не прописанным в советнике. Реально ли такое?(ДЦ ФИНАМ)

робот стоял на золоте. лот был прописан 0.05 ордера выставились по 2.0 лот




avatar
1673
alsu 18.02.2011 22:02
sanyooooook:

Странная ситуация, может кто сталкивался, в роботе четко прописан лот и функции увеличения лота в роботе в принципе нет(и быть не должно),

но он как утверждает человек его(робота) использующий, выставляет ордер с объемом не прописанным в советнике. Реально ли такое?(ДЦ ФИНАМ)

робот стоял на золоте. лот был прописан 0.05 ордера выставились по 2.0 лот


Нереально. В сторону уменьшения еще могла бы быть какая-то логика, а так - либо сбой на стороне сервера, либо в советнике что неладно, либо... либо _человек_ не хотит оплачивать работу программиста)))

avatar
1673
alsu 18.02.2011 22:03
На всякий пож. можно проверить магик.

2379
drknn 18.02.2011 22:07
sanyooooook:

Странная ситуация, может кто сталкивался, в роботе четко прописан лот и функции увеличения лота в роботе в принципе нет(и быть не должно),

но он как утверждает человек его(робота) использующий, выставляет ордер с объемом не прописанным в советнике. Реально ли такое?(ДЦ ФИНАМ)

робот стоял на золоте. лот был прописан 0.05 ордера выставились по 2.0 лот


Берём советника, открываем редактором, вставляем лот = 2, компилируем. Далее 2 сценария - при броске советника на график забыли, что лот у нас = 2 и второпях клацнули кнопку ОК. Результат - клиент уверен, что лот маленький, тогда как советник открывает его с лотом = 2. Вариант 2 - глюк сервера. Это вариант из области фантастики - ни один ДЦ не захочет иметь трений с клиентами из-за потока жалоб на завышенные лоты. Интересно, а есть инструмент, на котором минимальный лот = 2?

Как вариант - берём советника, вписываем в него функцию,которая на автопилоте воткнёт в текстовый документ дату, время запуска советника, его параметры и лот при открытии позы. Можно применить шифрование, чтоб клиент не отмазывался от последующей пересылки данного файла. Далее клиент работает с этим советником и время от времени высылает данный лог программеру. Можно так же включить туда отчёт, мол перед открытием ордера был послан приказ на сервер открыть позу с лотом = 0,1, а в результате сервер открыл позу с лотом = 2. Тогда точно бок на стороне сервера.


2911
alsu:
Нереально. В сторону уменьшения еще могла бы быть какая-то логика, а так - либо сбой на стороне сервера, либо в советнике что неладно, либо... либо _человек_ не хотит оплачивать работу программиста)))
//extern int Направление_входа=0;
extern double Lot=0.05;
extern int ActivAccountNumber=12345;
extern double Level=30;
extern double TrailingStop=30;
extern double TakeProfit=50;
extern double StopLoss=100;
extern int period=20,
           deviation=2,
           bands_shift=0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
string Symbol_;
int MAGIC=20110204;
int Prima;
int buyTicket,sellTicket;
int init()
{
   StopLoss=StopLoss*Point;
   Level=Level*Point;
   TakeProfit=TakeProfit*Point;
   Prima=0;
   buyTicket=0;
   sellTicket=0;
   Symbol_=Symbol();
   if(Digits==3||Digits==5)
   {
      StopLoss=StopLoss*10;
      Level=Level*10;
      TakeProfit=TakeProfit*10;
      TrailingStop=TrailingStop*10;
   }
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
int start()
{
   if(ActivAccountNumber!=AccountNumber())return;
   //if(!IsTesting()&&(!IsDemo()))return;
   double PriceBandH=NormalizeDouble(iBands(NULL,0,period,deviation,bands_shift,0,MODE_UPPER,0),Digits),
          PriceBandL=NormalizeDouble(iBands(NULL,0,period,deviation,bands_shift,0,MODE_LOWER,0),Digits);
   int Total=0,i=0;
   int z=0;
   for (i=OrdersTotal()-1;i>=0;i--)
   {
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)continue;
      if (OrderSymbol()==Symbol_&&OrderMagicNumber()==MAGIC)
      {
         int cmd=OrderType();
         if(cmd==OP_BUY)
         {
            if(TrailingStop>0)  
            {                 
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
               {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Green);
                  }
               }
            }
            //totalBuy++;
         }
         if(cmd==OP_SELL)
         {
            if(TrailingStop>0)  
            {                 
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
               {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                  {
                     if(cmd==OP_SELL)OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*TrailingStop,Digits),OrderTakeProfit(),0,Red);
                  }
               }
            }
            //totalSell++;
         }
         if(cmd==OP_BUYSTOP)
         {
            buyTicket=OrderTicket();
            if(TrailingStop>0)  
            {                 
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
               {
                  if((OrderOpenPrice()>(Ask+Point*TrailingStop)))
                  {
                     if(buyTicket>0)
                     {
                        OrderModify(OrderTicket(),NormalizeDouble(Ask+Point*TrailingStop,Digits),NormalizeDouble((Ask+Point*TrailingStop)-StopLoss,Digits),
                        NormalizeDouble((Ask+Point*TrailingStop)+TakeProfit,Digits),0);
                     }
                  }
               }
            }
         }
         if(cmd==OP_SELLSTOP)
         {
            sellTicket=OrderTicket();
            if(TrailingStop>0)  
            {                 
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
               {
                  if(OrderOpenPrice()<Bid-Point*TrailingStop)
                  {
                     if(sellTicket>0)
                     {
                        OrderModify(OrderTicket(),NormalizeDouble(Bid-Point*TrailingStop,Digits),NormalizeDouble((Bid-Point*TrailingStop)+StopLoss,Digits),
                        NormalizeDouble((Bid-Point*TrailingStop)-TakeProfit,Digits),0);
                     }
                  }
               }
            }
         }
         Total++;
      }
   }
   if(Total<1)
   {
      if(Bid>PriceBandH+Level)
      {
         sellTicket=OrderSend(Symbol_,OP_SELLSTOP,Lot,PriceBandH,0,NormalizeDouble(PriceBandH+StopLoss,Digits),NormalizeDouble(PriceBandL-TakeProfit,Digits),
         NULL,MAGIC,0);
      }
      if(Bid<PriceBandL-Level)
      {
         buyTicket=OrderSend(Symbol_,OP_BUYSTOP,Lot,PriceBandL,0,NormalizeDouble(PriceBandL-StopLoss,Digits),NormalizeDouble(PriceBandH+TakeProfit,Digits),
         NULL,MAGIC,0);
      }
   }
   return(0);
}
//+------------------------------------------------------------------+

вот теперь скажи что тут не так?

ЗЫ: работа оплачена


2911
alsu:
На всякий пож. можно проверить магик.
маджик этого робота

2911
drknn:


Берём советника, открываем редактором, вставляем лот = 2, компилируем. Далее 2 сценария - при броске советника на график забыли, что лот у нас = 2 и второпях клацнули кнопку ОК. Результат - клиент уверен, что лот маленький, тогда как советник открывает его с лотом = 2. Вариант 2 - глюк сервера. Это вариант из области фантастики - ни один ДЦ не захочет иметь трений с клиентами из-за потока жалоб на завышенные лоты. Интересно, а есть инструмент, на котором минимальный лот = 2?

Как вариант - берём советника, вписываем в него функцию,которая на автопилоте воткнёт в текстовый документ дату, время запуска советника, его параметры и лот при открытии позы. Можно применить шифрование, чтоб клиент не отмазывался от последующей пересылки данного файла. Далее клиент работает с этим советником и время от времени высылает данный лог программеру. Можно так же включить туда отчёт, мол перед открытием ордера был послан приказ на сервер открыть позу с лотом = 0,1, а в результате сервер открыл позу с лотом = 2. Тогда точно бок на стороне сервера.

возможно что и забыл, я на это подозреваю, но утверждает что с депозитом который у него лот 2.0 ставить не имеет смысла
Alexandr Bryzgalov
27638
Alexandr Bryzgalov 2011.02.19 11:31  

2912
так же этот клиент утверждает, что был случай когда робот закрыл все ордера на всех его счетах которые были в терминале(это вообще мне кажется бредом)

avatar
1673
alsu 18.02.2011 22:22
sanyooooook:
так же этот клиент утверждает, что был случай когда робот закрыл все ордера на всех его счетах которые были в терминале(это вообще мне кажется бредом)
Я как-то на заре своей юности имел работу, связанную с администрированием локальной сети, где 90% пользователей были молодые дэвушки. Там такие чудеса с компами происходили!

2912
alsu:
Я как-то на заре своей юности имел работу, связанную с администрированием локальной сети, где 90% пользователей были молодые дэвушки. Там такие чудеса с компами происходили!
блин, этот на молодую девушку ни как не смахивает, ему уже за сорок как минимум

2379
drknn 19.02.2011 01:48
sanyooooook:
блин, этот на молодую девушку ни как не смахивает, ему уже за сорок как минимум


Может это уже слишком рано проснувшийся старческий маразм? Глянь свою с ним переписку. Это вообще, психически нормальный человек?

Блин, ну как советник может позакрывать все сделки на всех счетах терминала, если при переключении на другой счёт кнопка "Советники" выключается автоматически?

Сань, есть хорошее средство проверки - нужно просто уговорить клиента им воспользоваться. Это программа ТимВьювер. Сам ею частенько пользуюсь, чтоб с разрешения юзера что-то наладить в его компе удалённо. Фактически - это упрощённый вариант Радмина. Только настраивать там ни чего не нужно. Запускаешь эту прогу вместе с заказчиком. Он сообщает тебе сгенерированный программой код и пароль. Вводишь код в поле кода и жмёшь ентер. Прога запрашивает пароль. Вводишь пароль и ты у него в компе. Только пусть он клаву и мышу не трогает, а то будешь терять упраление. Открываешь его терминал и отслеживаешь, с каким параметрами он кинул советника на графики. Далее пусть покажет как он вообще обращается с экспертом.

Этот подход может снять с вашего общения пригуз кучуи пояснений, текстопечатания, скринов и прочего. Причём быстро снять. Вот портативная версия этой программы. Регистрация не нужна - прога бесплатная. Инсталляция, как ты понял, не нужна тоже. Прога - просто палочка-выручалочка - не раз экономила мне время и силы.

Прикрепленные файлы:
TeamViewerh5.0xBuildv7687eFinal.rar (1 693.89 KB)

2379
drknn 19.02.2011 02:09
sanyooooook:

вот теперь скажи что тут не так?

ЗЫ: работа оплачена


Внимательнейшим образом посмотрел твой код. Траблов с лотом нет вообще! Вывод - либо заказчик косячит, либо сервак в ДЦ глючит, либо заказчик тебе голову морочит.

2379
drknn 19.02.2011 02:19
sanyooooook:

Я тут вот что подумал. Перепиши-ко ты начало функции start() таким вот образом:

int start(){
  if(ActivAccountNumber!=AccountNumber())return(0);
  
  if(!IsTradeAllowed()){
    Comment("Торговля запрещена в настройках терминала, либо торговый поток занят");
    Print("Торговля запрещена в настройках терминала, либо торговый поток занят");
    return(0);
  }
        // ну и так далее...
}

Чем чёрт не шутит - мож там сервер в ДЦ так по дурному настроен, что при одновременном поступлении нескольких торговых приказов с одного терминала на разных валютных парах, он начинает с лотами чудачить. Вобщем, защитимся функцией IsTradeAllowed(), поставив приказы в очередь.

Вот ещё что подумалось, а ни запускает ли заказчик торгового робота на одной и той же валютной паре на разных таймфреймах с разными настройками? Например, открыл М15 - сунул советника. Открыл М30 той же валютной пары и сунул советника С ТЕМ ЖЕ МАГИКОМ! Ведь тик придёт одновременно на все таймфреймы и советник попытается послать приказ со всех таймфреймов одновременно! Если такое происходит, то вполне может так оказаться, что сервер так настроен, что просто суммирует лоты всех одновременно поступивших приказов с одной валютной пары и открывает позу с увеличенным лотом!


2379
drknn 19.02.2011 02:51

Вот ещё что - не мешало бы встроить в советника защиту от несанкционированного лота. То есть, начало функции start() тогда будет выглядеть вот так:

int start(){
  if(ActivAccountNumber!=AccountNumber())return;
  if(!IsTradeAllowed()){
    Comment("Торговля запрещена в настройках терминала, либо торговый поток занят");
    Print("Торговля запрещена в настройках терминала, либо торговый поток занят");
    return(0);
  }
  double MinLot=MarketInfo(Symbol_,MODE_MINLOT), MaxLot=MarketInfo(Symbol_,MODE_MAXLOT);
  if(Lot<MinLot){
    Print("Ошибка на паре ",Symbol_," - Lot должен быть более или равен ",MinLot);
    return(0);
  }
  if(Lot<MaxLot){
    Print("Ошибка на паре ",Symbol_," - Lot должен быть менее ",MaxLot);
    return(0);
  }
  // далее остальной код советника
}

Модератор
3461
granit77 19.02.2011 09:11
Александр, Владимир.
Вы же поговорили? Может, я снесу ваш диалог вечерком? Он не сильно вписывается в тему ветки.

2379
drknn 19.02.2011 11:26
granit77:
Александр, Владимир.
Вы же поговорили? Может, я снесу ваш диалог вечерком? Он не сильно вписывается в тему ветки.


Пусть Александр отреагирует, а там и сносить можно :)

Но проблема-то действительно загадочная :)

Alexandr Bryzgalov
27638
Alexandr Bryzgalov 2011.02.19 11:31  

2913
drknn:


Может это уже слишком рано проснувшийся старческий маразм? Глянь свою с ним переписку. Это вообще, психически нормальный человек?

Блин, ну как советник может позакрывать все сделки на всех счетах терминала, если при переключении на другой счёт кнопка "Советники" выключается автоматически?

Сань, есть хорошее средство проверки - нужно просто уговорить клиента им воспользоваться. Это программа ТимВьювер. Сам ею частенько пользуюсь, чтоб с разрешения юзера что-то наладить в его компе удалённо. Фактически - это упрощённый вариант Радмина. Только настраивать там ни чего не нужно. Запускаешь эту прогу вместе с заказчиком. Он сообщает тебе сгенерированный программой код и пароль. Вводишь код в поле кода и жмёшь ентер. Прога запрашивает пароль. Вводишь пароль и ты у него в компе. Только пусть он клаву и мышу не трогает, а то будешь терять упраление. Открываешь его терминал и отслеживаешь, с каким параметрами он кинул советника на графики. Далее пусть покажет как он вообще обращается с экспертом.

Этот подход может снять с вашего общения пригуз кучуи пояснений, текстопечатания, скринов и прочего. Причём быстро снять. Вот портативная версия этой программы. Регистрация не нужна - прога бесплатная. Инсталляция, как ты понял, не нужна тоже. Прога - просто палочка-выручалочка - не раз экономила мне время и силы.

я с ним голосом общался, смотрел логи, смотрел отчеты. Буду вставлять код для записи в свой лог.

красным- блин такие замуты у меня подозрение на косяк клиента.

ЗЫ: кстати все сделки на все счетах закрыл робот производства YTG(после моей доработки но клянусь я не знаю как это сделать)

ЗЫЗЫ: дело в том что у этого клиента был спор с филиалом ДЦ и нервов он им попортил не мало, суд иски и все такое.


2913
drknn:

Внимательнейшим образом посмотрел твой код. Траблов с лотом нет вообще! Вывод - либо заказчик косячит, либо сервак в ДЦ глючит, либо заказчик тебе голову морочит.
знаю, что этот ДЦ при слишком частом открыти ордеров может их удалять.

2913
granit77:
Александр, Владимир.
Вы же поговорили? Может, я снесу ваш диалог вечерком? Он не сильно вписывается в тему ветки.

Почему? Согласен я не профи, но спрашивал у СУПЕРПРОФИ, может кто сталкивался с таким.

ЗЫ: в конечном итоге тебе решать

Петр
6084
Петр 2011.02.19 21:24  

Э... Жизнь такая.

Необъяснимо, но - фак!

VonDo Mix
1542
VonDo Mix 2011.02.20 01:29  

Если бы DLL какую, со строчными вызовами и неподготовленными буферами под них юзали б - поверил.

о)

А так сносить тему нуно.

Недоверие вселяет...

К основам.

;)

Alexey Subbotin
4998
Alexey Subbotin 2011.02.20 09:30  
Sorento:

Если бы DLL какую, со строчными вызовами и неподготовленными буферами под них юзали б - поверил.

о)

А так сносить тему нуно.

Недоверие вселяет...

К основам.

;)

Инквизитор
Avals
3182
Avals 2011.02.20 09:58  

не знаю насколько объективно http://forex-oracle.ru/index.php/wibordc/34-blackdc/25-docblacklist.html

"8) ФИНАМ - самопроизвольное закрытие и изменение ордеров. "

Alexandr Bryzgalov
27638
Alexandr Bryzgalov 2011.02.20 10:00  
Avals:

не знаю насколько объектоивно http://forex-oracle.ru/index.php/wibordc/34-blackdc/25-docblacklist.html

"8) ФИНАМ - самопроизвольное закрытие и изменение ордеров. "


Да, в курсе они часто закрывают открытые ордера.
Avals
3182
Avals 2011.02.20 10:04  
sanyooooook:

Да, в курсе они часто закрывают открытые ордера.


ну в вашем случае видимо изменение (в частности лота).

P.S. а может клиент кому пароль дал и кто-то паралельно "шалит". Для начала пусть пасс поменяет

Alexandr Bryzgalov
27638
Alexandr Bryzgalov 2011.02.20 10:06  
Avals:


ну в вашем случае видимо изменение (в частности лота).

P.S. а может клиент кому пароль дал и кто-то паралельно "шалит". Для начала пусть пасс поменяет


нет, ордера выставлялись с маджиком того робота который стоял.
Avals
3182
Avals 2011.02.20 10:09  
sanyooooook:

нет, ордера выставлялись с маджиком того робота который стоял.

значит ДЦ косячит
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий