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

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

---

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

так?

## alexshell — 2012-12-22 22:06

> Цитата (HeadbaY):
> Помогите доработать код, точнее закрытие по сигналу. Имеется выдержка из кода рабочей совы>
> 
> //+------------------------------------------------------------------+
> // Если время торговли не истекло и мы не открывали позицию на этом баре:
> //+------------------------------------------------------------------+
>
>    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;
>           }
>
>         }
>
>       //+------------------------------------------------------------------+
>       //+------------------------------------------------------------------+
> 
>
> Суть данного блока, закрывает открытый/серию открытых ордеров, только в том случае, если поступил сигнал на открытие ордера в противоположную сторону. Но если поступил сигнал на открытие ордера в туже сторону что уже открытый ордер, то открытый ордер не закрывается, а открывается ещё один в туже сторону.
> ____
> Требуется сделать так, что бы он всегда закрывал открытый ордер перед открытием нового, неважно в какую сторону поступил сигнал.

Замени то, что выделил красным цветом на -1. Должен закрывать все позиции.

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

> Цитата (baydin1111):
> так?

да. Уже скачал. Смотреть буду завтра (поздно уже).

## HeadbaY — 2012-12-22 22:50

**alexshell** Спасибо заработало.
Есть ещё одна живность >>

//--------------------------------------------------------------------
extern int     period_EMA           = 28,
               period_WMA           = 8 ,
               stoploss             = 0,
               takeprofit           = 0;
extern double  LOT                  = 0.1;
extern bool    CloseRevers          = true;
//--------------------------------------------------------------------
int TimeBar;
//--------------------------------------------------------------------
int start()
{
   if (TimeBar==Time) return(0);

   double EMA0 = iMA(NULL,0,period_EMA,0,MODE_EMA, PRICE_OPEN,0);
   double WMA0 = iMA(NULL,0,period_WMA,0,MODE_LWMA,PRICE_OPEN,0);
   double EMA1 = iMA(NULL,0,period_EMA,0,MODE_EMA, PRICE_OPEN,1);
   double WMA1 = iMA(NULL,0,period_WMA,0,MODE_LWMA,PRICE_OPEN,1);
   
   double SL,TP;
   if (EMA0<WMA0&&EMA1>WMA1)
   {
      TimeBar=Time;                            
      if (takeprofit!=0) TP  = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP = 0;
      if (stoploss!=0)   SL  = NormalizeDouble(Bid - stoploss*Point,Digits); else SL = 0;
      if (CloseRevers) CLOSEORDER(OP_SELL);
      OrderSend(Symbol(),OP_BUY, LOT,NormalizeDouble(Ask,Digits),2,SL,TP,"2MA",123,3);
   }
   if (EMA0>WMA0&&EMA1<WMA1)
   {
      TimeBar=Time;                            
      if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP = 0;
      if (stoploss!=0)   SL = NormalizeDouble(Ask + stoploss*Point,Digits); else SL = 0;
      if (CloseRevers) CLOSEORDER(OP_BUY);
      OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),2,SL,TP,"2MA",123,3);
   }
return(0);
}
//--------------------------------------------------------------------
void CLOSEORDER(int ord)
{
   for (int i=0; i<OrdersTotal(); i++)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==123)
         {
            if (OrderType()==OP_BUY && ord==OP_BUY)
               OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
            if (OrderType()==OP_SELL && ord==OP_SELL)
               OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,CLR_NONE);
         }
      }   
   }
}
//--------------------------------------------------------------------

Сова банальная по 2МА.
Открывает при пересечении и закрывает тоже при пересечении. Но открывает и закрывает она с запаздыванием примерно 2-3 свечи. если возможно скажите что поменять/дописать в код что бы открытие и закрытие было сразу при пересечении, ну и количество попыток открытия закрытия добавить я думаю?

## fix — 2012-12-22 22:50

> Цитата (Ted Nikson):
> Сообщение от 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. Можно ли сейчась по этому индюку написать простую сову основаную на принципе только открытия позиции в бай или сел при смене цвета?]
>
>
>
> Спосибо для совет, но не получилось. Наверно проблем в том что индикатор HP_DIFF, по котором надо сделаем експерт, для своя работа ползует другой второй индикатор HP. Я не знаю как с етом справлюс в експерте. Приклепляю еще раз два индикатора и мой експерт i custom, которой не работает (есть две ошибки).

вставь сет в сова -и вперед!

## baydin1111 — 2012-12-23 07:59

А можно ли добавить в советник фиксацию и размешение на графике максимальной просадки в валюте по обшему счету?

## alexshell — 2012-12-23 08:55

> Цитата (baydin1111):
> А можно ли добавить в советник фиксацию и размешение на графике максимальной просадки в валюте по обшему счету?

Что за фиксацию?
Короче всунул в твой советник эту закрывалку. Теперь если она сработает то удалит линию.Также добавил автоопределение знака. Теперь будет работать и на пятизнаке.
Пробуй. Потом обязательно отпишись как работает.

## baydin1111 — 2012-12-23 09:19

> Цитата (baydin1111):
> просадки в валюте по обшему счету?

 или хотя бы в процентах.

## Kot Bazilio — 2012-12-23 12:34

Други, помогите из одного индюка сделать два, чтобы на Н1 показовал и
 дневной и месячный график. А то когда ставлю 2 индюка с разными периодами то показывает или один или второй.
Заранее благлдарен!

## baydin1111 — 2012-12-23 12:35

> Цитата (alexshell):
> Что за фиксацию?

 ну что бы я подошел к компу и видел какая была максимальная просадка за мое отсуцтвие. Кинь пожалуйста в e-CloseByPercentProfit подвязку к валютной паре, в этом советнике(e-CloseByProfitPosInCurrency) есть такая функция, только если можно что бы в переменной можно было просто ввести валюту,а то тут я не доконца понял.

И СТО раз спасибо тебе:-)

## baydin1111 — 2012-12-23 12:41

Ого настроек впихнул)) а стоп.. так ты 2 в один впихнул?!?!

## baydin1111 — 2012-12-23 12:51

А как инфу в правом верхнем углу левее сдвинуть? а то у меня где то 1/3 только видно.

## alexshell — 2012-12-23 14:00

> Цитата (baydin1111):
> А как инфу в правом верхнем углу левее сдвинуть? а то у меня где то 1/3 только видно.

Сдвинул. Добавил макс.просадку. Будет фиксироваться от открытия до закрытия. При закрытии обнулится. Если инфо опять не влезет перетащи мышкой край окна где обзор рынка влево.

## sss555 — 2012-12-23 14:03

> Цитата (HeadbaY):
> Сама сова к предыдущему посту. >>>

и что там переделано не понял???

## HeadbaY — 2012-12-23 14:07

> Цитата (sss555):
> и что там переделано не понял???

В том сове ничего. С чего вы взяли что в ней что то переделано?
Вообщето я просил что бы помогли доработать и если вы внимательнее прочитаете чуть ниже увидите что всё сделал так как хотел с помощью Алексшела.

## sss555 — 2012-12-23 14:11

> Цитата (HeadbaY):
> В том сове ничего. С чего вы взяли что в ней что то переделано?

ну понятно незнаю че то просто подумал что кто то сделал что я просил..ну а можно то все же сделать как просил -хотя бы один индюк MBFX из кода убрать а оставить другой.....

## sss555 — 2012-12-23 14:17

Вообщето я просил что бы помогли доработать и если вы внимательнее прочитаете чуть ниже увидите что всё сделал так как хотел с помощью Алексшела.
чего то не врубаюсь где сова то переделанная-скиньте то хоть ссылку плиз..

## baydin1111 — 2012-12-23 14:41

потестирую отпишусь!

## baydin1111 — 2012-12-23 15:27

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

## BQMan — 2012-12-23 15:28

http://forexsystemsru.com/sovetniki/70384-sovetnik-mark1.html
можете какой нибудь другой трендовый индикатор прикрепить?

P.S. кто может помочь с оптимизацией , может даже за плату

---

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