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

Раздел: Язык программирования MQL4
Автор темы: chocolate
Создана: 2014-10-02 12:48
Ответов: 33796 | Просмотров: 6653657
Страница 634 из 1690
Источник: https://forexsystemru.com/threads/77111/page-634

---

## mobidik — 2017-06-16 20:14

> Цитата (garry119):
> Мобидик, а если его скрестить с t3???

Можно и с Т3, но перерисовка как была так и останется - смысл то в чем?

## garry119 — 2017-06-16 20:19

> Цитата (mobidik):
> Можно и с Т3, но перерисовка как была так и останется - смысл то в чем?

он может поставить сигнал уже на истории, выпячивая старые данные. с т3 может будет поменьше это делать?

## Genry_05 — 2017-06-16 20:50

> Цитата (garry119):
> спасибо. ощущение, что перерисовка должна уменьшиться. почему то в тестере не тестируется индюк

Странно :disappointed: Посмотрел в тестере на м15: цена бежит, линии - рисуются, сигналы шлепаются. Скрин  тестера делать лень ;)

 
 

> Цитата (mobidik):
> Это все, конечно, замечательно, но предоставь код в формате **mq4**.

Не вопрос :)

## Freeze7 — 2017-06-16 22:16

Добрый день! Подскажите по функции определения индекса бара, с которого необходимо производить перерасчет индикатора. Нужен перерасчет нулевого и первого бара. 

int GetRecalcIndex(int& total, const int ratesTotal, const int prevCalculated)

{

      total = ratesTotal - 1;                                                                         

       if (i_indBarsCount > 0 && i_indBarsCount < total)

      total = MathMin(i_indBarsCount, total);                      

        if (prevCalculated < ratesTotal - 1)                     

   {       

      BuffersInitializeAll();

      return (total);

   }

   return (MathMin(ratesTotal - prevCalculated, total));

## GOLDNG — 2017-06-17 09:17

**Помогите подправить простой 3МА**

Привет, люди, помогите подправить простой 3МА, он иногда сра3у несколько ордеров открывает по паре, иногда вообще не открывает хоть и есть сигнал,мохно его сделать бе3 SL/TР-сам буду,а просто локирующим? спасибо

//+------------------------------------------------------------------+
//|                                             простой советник.mq4 |
//|                               Copyright © 2011, Хлыстов Владимир |
//|                                                cmillion@narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011,"
#property link      "cmillion@narod.ru"
//--------------------------------------------------------------------
extern int     period_1             = 5,
               period_2             = 30,
               period_3             = 100,
               stoploss             = 0,
               takeprofit           = 0;
extern double  LOT                  = 0.1;
extern bool    CloseRevers          = true;
//--------------------------------------------------------------------
int TimeBar;
//--------------------------------------------------------------------
int start()
{
   if (TimeBar==Time) return(0);

   double MA10 = iMA(NULL,0,period_1,0,MODE_EMA,PRICE_OPEN,0);
   double MA11 = iMA(NULL,0,period_1,0,MODE_EMA,PRICE_OPEN,1);
   double MA20 = iMA(NULL,0,period_2,0,MODE_LWMA,PRICE_OPEN,0);
   double MA21 = iMA(NULL,0,period_2,0,MODE_LWMA,PRICE_OPEN,1);
   double MA3 = iMA(NULL,0,period_3,0,MODE_LWMA,PRICE_OPEN,0);
   
   double SL,TP;
   if (MA10>MA20&&MA11<MA21&&MA20>MA3)
   {
      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,"простой советник",123,3);
   }
   if (MA10<MA20&&MA11>MA21&&MA20<MA3)
   {
      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,"простой советник",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);
         }
      }   
   }
}
//--------------------------------------------------------------------

## serg1984g — 2017-06-17 12:05

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

## serg1984g — 2017-06-17 12:06

забудь про МА

## GOLDNG — 2017-06-17 12:22

я кое что и3менил,но локи не 3наю как сделать(( и еще он обьем сам поставил не 0,01 а 0,1((
  

//+------------------------------------------------------------------+
//|                                             простой советник.mq4 |
//|                               Copyright © 2011, Хлыстов Владимир |
//|                                                cmillion@narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, "
#property link      "cmillion@narod.ru"
//--------------------------------------------------------------------
extern int     period_1             = 4,
               period_2             = 21,
               period_3             = 504,
               stoploss             = 0,
               takeprofit           = 0;
extern double  LOT                  = 0.01;
extern bool    CloseRevers          = true;
//--------------------------------------------------------------------
int TimeBar;
//--------------------------------------------------------------------
int start()
{
   if (TimeBar==Time) return(0);

   double MA10 = iMA(NULL,0,period_1,0,MODE_EMA,PRICE_OPEN,0);
   double MA11 = iMA(NULL,0,period_1,0,MODE_EMA,PRICE_OPEN,1);
   double MA20 = iMA(NULL,0,period_2,0,MODE_EMA,PRICE_OPEN,0);
   double MA21 = iMA(NULL,0,period_2,0,MODE_EMA,PRICE_OPEN,1);
   double MA3 = iMA(NULL,0,period_3,0,MODE_EMA,PRICE_OPEN,0);
   
   double SL,TP;
   if (MA10>MA20&&MA11<MA21&&MA20>MA3)
   {
      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),1,SL,TP,"простой советник",0,3);
   }
   if (MA10<MA20&&MA11>MA21&&MA20<MA3)
   {
      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),1,SL,TP,"простой советник",0,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),1,CLR_NONE);
            if (OrderType()==OP_SELL && ord==OP_SELL)
               OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),1,CLR_NONE);
         }
      }   
   }
}
//--------------------------------------------------------------------

## malojorsk — 2017-06-17 14:42

Выведете пожалуйста в настройки размер высоты блока, как я понял там процент от окна графика

## unreal-1980 — 2017-06-17 16:12

**Нужна помощь ваша**

Добрый день коллеги!

Очень прошу помощи, помогите пожалуйста кто может вставить звуковой аллерт с окошком с названием пары при появление "ноги" индикатора и если не сложно  его отключение в настройках индюка "true/false". Без вас не справлюсь к сожалению.
Буду очень благодарен.

## garry119 — 2017-06-17 16:16

> Цитата (Genry_05):
> Странно :disappointed: Посмотрел в тестере на м15: цена бежит, линии - рисуются, сигналы шлепаются. Скрин  тестера делать лень ;)
>
>
>
>
>
> Не вопрос :)

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

## garry119 — 2017-06-17 16:54

люди добрые, сделайте, пожалуйста, этот индикатор двухцветным по слопе, чтобы менял цвет на изгибах

## Pilligrim90 — 2017-06-17 17:05

Просьба, из индикатора убрать все  надписи (на скрине справа в подвале), только мешают.

## garry119 — 2017-06-17 18:23

> Цитата (Fed77):
> Видишь что iBoss пишет, так что с истории сигнал не пойдёт, но сигналы отличаются у модифицированного с периодом 240 и оригинала жирные стрелки
>
> [[изображение: http://c2n.me/3Lcmbi3.png]](http://c2n.me/3Lcmbi3)

))) мэтр кодирования cmillion что то накосячил в индюке и мэтр Младен это распознал)))

## sasa1954 — 2017-06-17 19:24

Спасибо!Похоже это то,что я искал.

## Strong_Tezis — 2017-06-17 20:58

Здравствуйте. Прошу помогите пожалуйста добавить условие в код. (Насколько моих знаний хватило я подредактировал.)
Индикатор рисует линии по цене закрытия, а нужно добавить условие, рисовать только если предыдущая свеча была противоположной. 
Т.е. **только при смене направления(цвета) свечи**, 
рисовать линию закрытия **только той свечи которая сменила направление.** 
Также "NumberOfBar" должна отвечать за количество показываемых линий.
p.s. Понимаю что возможно плохо описал, прилагаю картинку.
[изображение: http://skrinshoter.ru/s/160617/Oej4O71I.jpg]

## loki177 — 2017-06-17 21:23

> Цитата (garry119):
> люди добрые, сделайте, пожалуйста, этот индикатор двухцветным по слопе, чтобы менял цвет на изгибах

двухцветный с параметром delta = 0

## sergeysv — 2017-06-17 23:11

> Цитата (Pilligrim90):
> Просьба, из индикатора убрать все надписи

В настройках ShowText = false;--не показывать

## kit888 — 2017-06-18 02:38

> Цитата (Pilligrim90):
> Просьба, из индикатора убрать все  надписи (на скрине справа в подвале), только мешают.

передел:D

## Pilligrim90 — 2017-06-18 10:14

> Цитата (kit888):
> передел:D

Спасибо. В понедельник проверю на рынке, в тестере чудит.

---

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