# Доработка ботов (советников, индикаторов)

Раздел: Язык программирования MQL4
Автор темы: machzelet
Создана: 2010-02-26 20:00
Ответов: 12060 | Просмотров: 1841430
Страница 174 из 604
Источник: https://forexsystemru.com/threads/61956/page-174

---

## Rust — 2012-12-21 18:59

**Уникальная проблема !**

Уважаемые профессионалы !
В ветках форумов для начинающих моя просьба больше не рассматривается... Очевидно сложная она все таки для ветки начинающих. Закрывалка всего лишь не закрывает...
Прошу посмотреть на код и если кому ведома наука машинных закрывалок и та ошибка кода(внизу по тексту), которая колебает меня уже около месяца времени, 
- растолкуйте пожалуйста что она такое и как с ней общаться ?
Оччень хочется доработать закрывалку до рабочего состояния, чтоб закрывала наконец-то открытые позиции. В отличие от всех других, широко известных рабочих закрывалок в этой только индикатор другой, - индикатор Хала (HMA), - та же Наша "машка".

СПАСИБО !

//+------------------------------------------------------------------+
//|                                              zakrivalka2_buy.mq4 |
//+------------------------------------------------------------------+
extern double Lots = 0.01;     
double price,result,COLOR;
int ticket,cnt,MagicNumber = 7;  

int init()    { return(0);  }int deinit()  { return(0);  }

void start()  
   {
    if (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
      
    double val1=iCustom(NULL, 0, "hma",8,3,0,0,0);
    double val2=iCustom(NULL, 0, "hma",8,3,0,0,4);
   
    if(val2>val1) Print("красный");
     {
      for(cnt=0; cnt < OrdersTotal(); cnt++)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) == true) 
          {
           if(OrderMagicNumber() == MagicNumber && OrderType()==OP_BUY)
           result=OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
          }
           if(result!=true) 
            {
             int err=GetLastError();
             Print("LastError = ",err);
            }
        }
     }
   }

## alexshell — 2012-12-21 19:21

> Цитата (Rust):
> Уважаемые профессионалы !
> В ветках форумов для начинающих моя просьба больше не рассматривается... Очевидно сложная она все таки для ветки начинающих. Закрывалка всего лишь не закрывает...
> Прошу посмотреть на код и если кому ведома наука машинных закрывалок и та ошибка кода(внизу по тексту), которая колебает меня уже около месяца времени,
> - растолкуйте пожалуйста что она такое и как с ней общаться ?
> Оччень хочется доработать закрывалку до рабочего состояния, чтоб закрывала наконец-то открытые позиции. В отличие от всех других, широко известных рабочих закрывалок в этой только индикатор другой, - индикатор Хала (HMA), - та же Наша "машка".
>
> СПАСИБО !
>
>
>            result=OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);

да уж. Сам писал? Красное замени на Bid
Сейчас посмотрел твои условия закрытия: Она будет закрывать сразу же твои ордера Независимо от условий. Сделай так:
if(val2>val1) {
  Print("красный");
 for(cnt=0; cnt < OrdersTotal(); cnt++)
 {
 if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) == true) 
 {
 if(OrderMagicNumber() == MagicNumber && OrderType()==OP_BUY)
 result=OrderClose(OrderTicket(),OrderLots(),Bid,3, Red);
 }
 if(result!=true) 
 {
 int err=GetLastError();
 Print("LastError = ",err);
 }
 }
 }
 }

## k_34 — 2012-12-21 20:19

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

## oleglt — 2012-12-21 20:33

(http://forexsystemsru.com/member.php?u=34597) а почему вы мою просьбу игнорируете? :)

## alexshell — 2012-12-21 20:52

> Цитата (oleglt):
> (http://forexsystemsru.com/member.php?u=34597) а почему вы мою просьбу игнорируете? :)

Еле нашёл. Я не игнорирую. Что могу то делаю. С индюками я вообще плохо дружу. Вот eevviill с отпуска выйдет, может поможет.

## Rust — 2012-12-21 21:06

> Цитата (alexshell):
> да уж. Сам писал? Красное замени на Bid
> Сейчас посмотрел твои условия закрытия: Она будет закрывать сразу же твои ордера Независимо от условий. Сделай так:
> if(val2>val1) {
>   Print("красный");
>  for(cnt=0; cnt < OrdersTotal(); cnt++)
>  {
>  if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) == true)
>  {
>  if(OrderMagicNumber() == MagicNumber && OrderType()==OP_BUY)
>  result=OrderClose(OrderTicket(),OrderLots(),Bid,3, Red);
>  }
>  if(result!=true)
>  {
>  int err=GetLastError();
>  Print("LastError = ",err);
>  }
>  }
>  }
>  }
> 

Да, писали вдвоём и вот она какая простая, - но ошибка...
Сейчас поправлю и установлю на тест, результаты сообщю.
СПАСИБО ВАМ !
Удачи и профитов !

## baydin1111 — 2012-12-21 21:19

> Цитата (alexshell):
> Вопрос не понятен. Он и так при заданной просадке  закроет позиции или при заданном профите.

:-( Да точно както не так
Ну попробую на примере: допустим работает советник (не этот) в 2 окна со своими настройками открывает и закрывает ордера, но как только общая просадка доходит допустим до 50% активируется e-CloseByPercentProfit и он закроет все сразу вместе с терминалом при достижении цели допустим 0 , профит или не большой минус , как задашь в настройках. Мысль такова что бы после просадки советники не ждали профита а закрывались в 0, или минус. Вроде все изложил)

## alexshell — 2012-12-22 00:03

> Цитата (baydin1111):
> Возможно ли что бы этот советник начинал роботать после определенной просадки в процентах или валюте? Если возможно буду очень благодарен)

Везет мне сегодня на советники с ошибкой.
Терминал закрывать не будет. Не знаю как исправить.
Будет просто при определённой просадке активироваться и отслеживать позиции и потом закроет по заданному профиту или убытку.

## alexshell — 2012-12-22 00:08

> Цитата (k_34):
> Вопрос такой, иногда происходит проскальзывание на тейк профит, т.е. он не выставляется в сделке, из-за большого потока ордеров в один момент, есть советник который будет мониторить и выставлять фиксированный тейк профит в случае если он не был выставлен?

Наверно где нибудь есть. У меня нет. Обратись в поиск советников. Может кто-нибудь поделится.

## baydin1111 — 2012-12-22 00:40

> Цитата (alexshell):
> Везет мне сегодня на советники с ошибкой.
> Терминал закрывать не будет. Не знаю как исправить.
> Будет просто при определённой просадке активироваться и отслеживать позиции и потом закроет по заданному профиту или убытку.

С закрыванием терминала я вчера разобрался там в инклуд фаил кинуть надо. За работу очень брагодарен!!! Не сочтите за наглость но может вы и тут сможете помоч. Советник ставит стартовую линию и от нее раскидывает сетку, проблема в том что если ордера закрывает не ОН то вся сетка отложенников выставляется от предведущей линии и после хорошего движения это очень не приятно:oops: причем эту старт линию даже в ручную не перетянуть, нужно только окна закрывать и открывать новые... Хочелось бы (если возможно) чтоб при закрытии ордеров и удалении отложенников предведущим советником (e-CloseByPercentProfit) отложенники стартовали от текущей цены , а не от той наглой линии) Еще раз БООльшое спасибо!!!:-)

## baydin1111 — 2012-12-22 01:45

Ну или хотя бы чтоб линия обновлялась  после закрытия ордеров другим советником.
И еще хотел уточнить , e-CloseByPercentProfit после того как закроет все ордера, будет спать до следующей просадки?

## alexshell — 2012-12-22 09:55

> Цитата (baydin1111):
> Ну или хотя бы чтоб линия обновлялась  после закрытия ордеров другим советником.
> И еще хотел уточнить , e-CloseByPercentProfit после того как закроет все ордера, будет спать до следующей просадки?

Да он будет ждать новой просадки. Советник посмотрю но ничего не обещаю.

## alexshell — 2012-12-22 11:31

> Цитата (baydin1111):
> Не сочтите за наглость но может вы и тут сможете помоч. Советник ставит стартовую линию и от нее раскидывает сетку, проблема в том что если ордера закрывает не ОН то вся сетка отложенников выставляется от предведущей линии и после хорошего движения это очень не приятно:oops: причем эту старт линию даже в ручную не перетянуть, нужно только окна закрывать и открывать новые... Хочелось бы (если возможно) чтоб при закрытии ордеров и удалении отложенников предведущим советником (e-CloseByPercentProfit) отложенники стартовали от текущей цены , а не от той наглой линии) Еще раз БООльшое спасибо!!!:-)

Скиньте файл Orders.csv . Без него не получается запустить.

## Ted Nikson — 2012-12-22 19:56

**Уважаемые программисты помогите плийз**

Сообщение от Ted Nikson [[изображение: http://forexsystemsru.com/images/ca_evo2/buttons/viewpost.gif]](http://forexsystemsru.com/yazyk-programmirovaniya-mql4/61956-dorabotka-botov-sovetnikov-indikatorov-172.html#post543744) Здравствуйте eevviil. Вы знаете индикатор HP DIFF (для работы на график нужно прикрыпить два индюка HP и HP DIFF). По просьба другому участника вы уже прикрепили раньше к етому индюка alert. Можно ли сейчась по этому индюку написать простую сову основаную на принципе только открытия позиции в бай или сел при смене цвета? За ранее вырожаю благодарность и огромное спасибо если поможете, а если нет всеравно спасибо за ваш труд до тех пор.  [Ted Nikson: Здравствуйте eevviil. Вы знаете индикатор HP DIFF (для работы на график нужно прикрыпить два индюка HP и HP DIFF). По просьба другому участника вы уже прикрепили раньше к етому индюка alert. Можно ли сейчась по этому индюку написать простую сову основаную на принципе только открытия позиции в бай или сел при смене цвета?]
 

> Цитата (donc09):
> Посмотрите советники iCustom, их куча от v1 до v10. можно любой выбрать, они в свободном доступе.

   
Спосибо для совет, но не получилось. Наверно проблем в том что индикатор HP_DIFF, по котором надо сделаем експерт, для своя работа ползует другой второй индикатор HP. Я не знаю как с етом справлюс в експерте. Приклепляю еще раз два индикатора и мой експерт i custom, которой не работает (есть две ошибки).

## HeadbaY — 2012-12-22 20:11

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

//+------------------------------------------------------------------+
// Если время торговли не истекло и мы не открывали позицию на этом баре: 
//+------------------------------------------------------------------+

   if(Traiding && timeCheckSignal!=Time)

     {
      //+------------------------------------------------------------------+
      // Если сигнал на бай:
      //+------------------------------------------------------------------+
      if(Signal==1)// buy
        {
         //Вычисляем стоплосс
         if(StopLoss!=0)sl=Bid-StopLoss*Point; else sl=0;
         // ВЫчисляем тейкпрофит
         if(TakeProfit!=0)tp=Ask+TakeProfit*Point; else tp=0;
         //+------------------------------------------------------------------+
         //Закрываем противоположную позицию
         //+------------------------------------------------------------------+
         if(ClosePosifChange)CPD(Symbol(),OP_SELL,Magic);
         //+------------------------------------------------------------------+
         //Открываем позицию
         //+------------------------------------------------------------------+
         if((ONlyOnePosbySignal && !EPs(Symbol(),OP_BUY,Magic)) || !ONlyOnePosbySignal)
           {
            OPs(Symbol(),OP_BUY,GetSizeLot(),sl,tp,Magic,"Templates www.expforex.com");
            timeCheckSignal=Time;
            Nap1=0; Nap2=0;
           }

        }

      //+------------------------------------------------------------------+
      // Если сигнал на селл:
      //+------------------------------------------------------------------+
      if(Signal==2)// селл
        {
         //Вычисляем стоплосс
         if(StopLoss!=0)sl=Ask+StopLoss*Point; else sl=0;
         // ВЫчисляем тейкпрофит
         if(TakeProfit!=0)tp=Bid-TakeProfit*Point; else tp=0;
         //Закрываем противоположную позицию
         if(ClosePosifChange)CPD(Symbol(),OP_BUY,Magic);
         //+------------------------------------------------------------------+
         //Открываем позицию
         //+------------------------------------------------------------------+
         if((ONlyOnePosbySignal && !EPs(Symbol(),OP_SELL,Magic)) || !ONlyOnePosbySignal)
           {
            OPs(Symbol(),OP_SELL,GetSizeLot(),sl,tp,Magic,"Templates www.expforex.com");
            timeCheckSignal=Time;
            Nap1=0; Nap2=0;
          }

        }

      //+------------------------------------------------------------------+
      //+------------------------------------------------------------------+

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

## HeadbaY — 2012-12-22 21:19

Сама сова к предыдущему посту. >>>

## baydin1111 — 2012-12-22 21:19

> Цитата (alexshell):
> Скиньте файл Orders.csv . Без него не получается запустить.

Нужно поместить в \tester\files .

## baydin1111 — 2012-12-22 21:27

Блин чет немогу закинуть

## alexshell — 2012-12-22 21:32

> Цитата (baydin1111):
> Блин чет немогу закинуть

На обменник какой нибудь закинь. Ссылку сюда.

## baydin1111 — 2012-12-22 21:37

> Цитата (alexshell):
> На обменник какой нибудь закинь. Ссылку сюда.

http://webfile.ru/6282986

---

Следующая страница: https://forexsystemru.com/threads/61956/page-175
