Скачать MetaTrader 5

Новая статья: Три аспекта ручного автотрейдинга. Часть 1 - Торговля

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
182585
MetaQuotes Software Corp. 2013.04.12 11:15 

Опубликована статья Три аспекта ручного автотрейдинга. Часть 1 - Торговля:

Эта статья открывает цикл статей по вопросам автоматизации ручного трейдинга на платформе МetaТrader 4. Каждая из них будет посвящена одному отдельному аспекту ручного автотрейдинга: автоматизация ручной торговли, автоматизация отображения текущего состояния торговли и автоматизация формирования отчетов о результатах торговли. В этой статье я расскажу об одной интересной технике для написания советников, управляемых трейдером вручную.

Прежде чем начинать что-то читать, давайте для начала посмотрим как работает то, что будет потом изложено в статье. Видео даст представление о процессах происходящих в терминале в процессе торговли, и после этого читать статью будет гораздо проще (что-то вроде: "Аааа..., это вот так, оказывается, реализован вот тот сброс!").

Для осознанного восприятия ролика пока достаточно будет понимать, что в терминале работает эксперт, которым управляют с помощью сброса в окно терминала управляющих скриптов. Сам по себе эксперт не торгует, он только и умеет, что подтягивать стоп-уровни (Stop Loss и Take Profit) в трейлинге, но делать это начинает так же по команде трейдера. Названия скриптов очевидно соответствуют выполняемым действиям, а всплывающие подсказки поясняют их использование.


Автор: Sergey Kravchuk
abdul
53
abdul 2013.04.20 16:21  

Доброго времени суток,

у меня функции исполняются експертом при помощи сдвига обьектов на графике.

примерно так:

 

 if(ObjectGet(WindowExpertName()+"label"+4,OBJPROP_XDISTANCE)!=5{OpenPosition(Symbol(),OP_BUY,lot,0,0,magic);} 

пока всё работает без сбоев. в программировании не силён, поэтому вопрос к программистам: могут ли быть, при такой реализации какие либо сбои в работе? и при каких обстоятельствах?

Благодарю. 

Vladimir Pastushak
71592
Vladimir Pastushak 2013.04.21 06:54  
abdul1:

Доброго времени суток,

у меня функции исполняются експертом при помощи сдвига обьектов на графике.

примерно так:

 

пока всё работает без сбоев. в программировании не силён, поэтому вопрос к программистам: могут ли быть, при такой реализации какие либо сбои в работе? и при каких обстоятельствах?

Благодарю. 


Да при таком коде проблемы будут обязательно ,

Посмотрите сами если ваш объект по икс координате  не равен 5  открывать (посылать запросы ) пока обьект не вернется на место ,

так вот за момент пока обьект не равен 5 может отправиться 1-10000 запросов и часть может выполниться

Я то же писал подобный полуавтомат ... 

abdul
53
abdul 2013.04.22 00:18  

спасибо за ответ. 

Это вроде я предусмотрел.

 

int init()  {//функция инициализации советника
  Createlabel(4,Green,12,"OP_BUY");
  Createlabel(3,Red,12,"OP_SELL");
  Createlabel(2,Green,12,"OP_BUYLIMIT");
  Createlabel(1,Red,12,"OP_SELLLIMIT");
  Createlabel(0,White,12,"DELETE_LIMIT");      
             } // ========= конец функции 


//============================= Функция СТАРТ =====================================+
void start() {
 
  
  if(ObjectFind(WindowExpertName()+"label"+4)!=-1)//на всякий случай
    {
  if(ObjectGet(WindowExpertName()+"label"+4,OBJPROP_XDISTANCE)!=5{OpenPosition(Symbol(),OP_BUY,lot,0,0,magic);}
  if(ObjectGet(WindowExpertName()+"label"+3,OBJPROP_XDISTANCE)!=5{OpenPosition(Symbol(),OP_SELL,lot,0,0,magic);}
  if(ObjectGet(WindowExpertName()+"label"+2,OBJPROP_XDISTANCE)!=5{SetOrder(Symbol(),OP_BUYLIMIT,lot,0,0,magic,0);}
  if(ObjectGet(WindowExpertName()+"label"+1,OBJPROP_XDISTANCE)!=5{SetOrder(Symbol(),OP_SELLLIMIT,lot,0,0,magic,0);}
  if(ObjectGet(WindowExpertName()+"label"+0,OBJPROP_XDISTANCE)!=5){DeleteOrders(Symbol(),op1,magic);}
    }
  
  Createlabel(4,Green,12,"OP_BUY");
  Createlabel(3,Red,12,"OP_SELL");
  Createlabel(2,Green,12,"OP_BUYLIMIT");
  Createlabel(1,Red,12,"OP_SELLLIMIT");
  Createlabel(0,White,12,"DELETE_LIMIT");
}

после отправки ордера он ставит обьект обратно. 

пока вроде как всё работает.  что ещё может произойти? 

ваш полуавтомат пользуете? или непрактичен такой подход? 

Алексей Тарабанов
7286
Алексей Тарабанов 2013.04.22 00:48  

Много чего, но речь, как я понимаю, о ситуации, когда: 

 ObjectGet(WindowExpertName()+"label"+4,OBJPROP_XDISTANCE)=5.000000000000000000000000000001

abdul
53
abdul 2013.04.22 13:20  
tara:

Много чего

можно пару примеров? 

tara:

но речь, как я понимаю, о ситуации, когда: 

 ObjectGet(WindowExpertName()+"label"+4,OBJPROP_XDISTANCE)=5.000000000000000000000000000001

ах, и такое может быть!!! поставил условие >6.

ведь после исполнения услаовия OpenPosition,  Createlabel ставит обьект на место. условие не может выполняться несколько раз прежде чем Createlabel.

в чём я заблуждаюсь?

сделал вот так:

if(ObjectFind(WindowExpertName()+"label"+4)!=-1)
    {
    if(ObjectGet(WindowExpertName()+"label"+4,OBJPROP_XDISTANCE)>6)
      {
      OpenPosition(Symbol(),OP_BUY,GlobalVariableGet("lot"+txt+magic),0,0,magic);
      Createlabel(4,Green,12,"OP_BUY");
      }
    if(ObjectGet(WindowExpertName()+"label"+3,OBJPROP_XDISTANCE)>6)
      {
      OpenPosition(Symbol(),OP_SELL,GlobalVariableGet("lot"+txt+magic),0,0,magic);
      Createlabel(3,Red,12,"OP_SELL");
      }
    if(ObjectGet(WindowExpertName()+"label"+2,OBJPROP_XDISTANCE)>6)
      {
      SetOrder(Symbol(),OP_BUYLIMIT,GlobalVariableGet("lot"+txt+magic),NormalizeDouble(GlobalVariableGet("srd"+txt+magic),Digits),0,0,magic,0);
      Createlabel(2,Green,12,"OP_BUYLIMIT");
      }
    if(ObjectGet(WindowExpertName()+"label"+1,OBJPROP_XDISTANCE)>6 && GlobalVariableGet("lot"+txt+magic)>0)
      {
      SetOrder(Symbol(),OP_SELLLIMIT,GlobalVariableGet("lot"+txt+magic),NormalizeDouble(GlobalVariableGet("srd"+txt+magic),Digits),0,0,magic,0);
      Createlabel(1,Red,12,"OP_SELLLIMIT");
      }
    if(ObjectGet(WindowExpertName()+"label"+0,OBJPROP_XDISTANCE)>6)
      {
      DeleteOrders(Symbol(),op1,magic);
      Createlabel(0,White,12,"DELETE_LIMIT");
      }
    }
  
  Createlabel(4,Green,12,"OP_BUY");
  Createlabel(3,Red,12,"OP_SELL");
  Createlabel(2,Green,12,"OP_BUYLIMIT");
  Createlabel(1,Red,12,"OP_SELLLIMIT");
  Createlabel(0,White,12,"DELETE_LIMIT");

 

 наверно уже боятся нечего?

Алексей Тарабанов
7286
Алексей Тарабанов 2013.04.22 22:01  

Наверное, нечего, если ошибки обрабатываются надлежащим образом, а это не так. 

Функция перевыставления объектов должна вызываться из функций управления позициями, имхенько.  

Ну, или ее вызов должен быть обусловлен результатами исполнения последних.  

abdul
53
abdul 2013.04.24 09:58  
tara:

Наверное, нечего, если ошибки обрабатываются надлежащим образом, а это не так. 

Функция перевыставления объектов должна вызываться из функций управления позициями, имхенько.  

Ну, или ее вызов должен быть обусловлен результатами исполнения последних.  


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