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

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

---

## 1_Lexa — 2020-04-12 08:55

Что тут надо изменить?
/////////////////////////////////////////////////
// Close the order but only if it is in profit //
/////////////////////////////////////////////////

void CloseIfInProfit(string symb , int index)
{
for (int i = 0;i <= OrdersTotal();i++)
{
if( OrderSelect(i,SELECT_BY_POS,MODE_TRADES) )
{
if( OrderSymbol() == symb )
{
double profit = ( OrderProfit() - OrderCommission () - OrderSwap() );
if( ( OrderType() == OP_BUY || OrderType() == OP_SELL) && ( profit >= 0 ) && (OrderMagicNumber() == MAGIC) )
{
OrderClose(OrderTicket(),OrderLots(),MarketInfo(symb,MODE_BID),100,Red); // Close any open orders
ObjectSetText("Txt2"+symb,"",TextSize,"Arial"); // Gets rid of entry criteria message.
}
if (OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
{
OrderDelete(OrderTicket()); // Delete any pending orders
ObjectSetText("Txt2"+symb,"",TextSize,"Arial"); // Gets rid of entry criteria message.
}
}
}
}
partial = false;
}

## 1_Lexa — 2020-04-12 09:18

Пытаюсь редактировать, но выходит ещё хуже

## AlexeNP — 2020-04-12 09:23

> Цитата (1_Lexa):
> Что тут надо изменить?

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

```
/////////////////////////////////////////////////
// Close the order but only if it is in profit //
/////////////////////////////////////////////////
void CloseIfInProfit(string symb, int index)
  {
   for(int i = OrdersTotal()-1; i >= 0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol() == symb && OrderMagicNumber() == MAGIC)
           {
            double profit = OrderProfit() - OrderCommission() + OrderSwap();
            if(OrderType() == OP_BUY  && profit >= 0)
              {
               OrderClose(OrderTicket(),OrderLots(),MarketInfo(symb,MODE_BID),100,Red); // Close any open orders !!! правильная цена закрытия
               ObjectSetText("Txt2"+symb,"",TextSize,"Arial"); // Gets rid of entry criteria message. Вот вся эта переписка какую нагрузку несет?
              }

            if(OrderType() == OP_SELL && profit >= 0)
              {
               OrderClose(OrderTicket(),OrderLots(),MarketInfo(symb,MODE_ASK),100,Red); // Close any open orders !!! правильная цена закрытия
               ObjectSetText("Txt2"+symb,"",TextSize,"Arial"); // Gets rid of entry criteria message.
              }
            if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
              {
               OrderDelete(OrderTicket()); // Delete any pending orders
               ObjectSetText("Txt2"+symb,"",TextSize,"Arial"); // Gets rid of entry criteria message.
              }
           }
        }
     }
   partial = false;//это что, куда, зачем?
  }
```

## 1_Lexa — 2020-04-12 09:25

Не знаю что с ним делать

## 1_Lexa — 2020-04-12 09:29

> Цитата (AlexeNP):
> вроде был же разговор о правильных ценах открытия и закрытия ордеров... даже ссылка была вроде по этой теме... стоит ли тратить время и силы на советник в котором допущены такие грубые ошибки?
>
> 
```
/////////////////////////////////////////////////
> // Close the order but only if it is in profit //
> /////////////////////////////////////////////////
> void CloseIfInProfit(string symb, int index)
>   {
>    for(int i = OrdersTotal()-1; i >= 0; i--)
>      {
>       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
>         {
>          if(OrderSymbol() == symb && OrderMagicNumber() == MAGIC)
>            {
>             double profit = OrderProfit() - OrderCommission() + OrderSwap();
>             if(OrderType() == OP_BUY  && profit >= 0)
>               {
>                OrderClose(OrderTicket(),OrderLots(),MarketInfo(symb,MODE_BID),100,Red); // Close any open orders !!! правильная цена закрытия
>                ObjectSetText("Txt2"+symb,"",TextSize,"Arial"); // Gets rid of entry criteria message. Вот вся эта переписка какую нагрузку несет?
>               }
>
>             if(OrderType() == OP_SELL && profit >= 0)
>               {
>                OrderClose(OrderTicket(),OrderLots(),MarketInfo(symb,MODE_ASK),100,Red); // Close any open orders !!! правильная цена закрытия
>                ObjectSetText("Txt2"+symb,"",TextSize,"Arial"); // Gets rid of entry criteria message.
>               }
>             if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
>               {
>                OrderDelete(OrderTicket()); // Delete any pending orders
>                ObjectSetText("Txt2"+symb,"",TextSize,"Arial"); // Gets rid of entry criteria message.
>               }
>            }
>         }
>      }
>    partial = false;//это что, куда, зачем?
>   }
```

partial = false;//это что, куда, зачем?- Я его удаляю, или пишу что-то другое, появляется куча ошибок

## AlexeNP — 2020-04-12 09:30

> Цитата (1_Lexa):
> Не знаю что с ним делать

и об этом речь была... Функция типа void должна возвращать ничего, даже 0... то есть запись типа return(0); - это ошибка

## AlexeNP — 2020-04-12 09:33

> Цитата (1_Lexa):
> partial = false;//это что, куда, зачем?- Я его удаляю, или пишу что-то другое, появляется куча ошибок

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

## BonGo71 — 2020-04-12 09:40

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

## 1_Lexa — 2020-04-12 09:41

Он по этим индикаторам работает, к чему их можно прикрепить?

## Sapper — 2020-04-12 10:17

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

Попробуйте эти.

## BonGo71 — 2020-04-12 11:25

> Цитата (Sapper):
> Попробуйте эти.

сенк ) 2й годный, без ошибок компилится )

## вячеслав1946 — 2020-04-12 11:58

**AlexeNP**
Благодарю. Как раз то что надо.

## vladradon — 2020-04-12 12:00

> Цитата (1_Lexa):
> Он по этим индикаторам работает, к чему их можно прикрепить?

Он не работает по ним - у него все расчеты внутри. Он работает в оба направления - просто у него расчеты на вход такие, что некоторые пары торгуют только в одном направлении в основном. Если EURUSD он в этом году только в селл торгует, то на USDCHF, которая отрицательно коррелирует с EURUSD, он торгует только в бай (см. скрин). Код немного подремонтировал.

## 1_Lexa — 2020-04-12 14:20

> Цитата (vladradon):
> Он не работает по ним - у него все расчеты внутри. Он работает в оба направления - просто у него расчеты на вход такие, что некоторые пары торгуют только в одном направлении в основном. Если EURUSD он в этом году только в селл торгует, то на USDCHF, которая отрицательно коррелирует с EURUSD, он торгует только в бай (см. скрин). Код немного подремонтировал.

Спасибо, что обратили на этот советник внимание. Он на селл начал торговать, после небольших изменений. До этого торговал только в бай

## 1_Lexa — 2020-04-12 14:22

Просто у меня есть некоторые вопросы, что и как исправить, но похоже от меня уже устали

## 1_Lexa — 2020-04-12 14:30

> Цитата (vladradon):
> Он не работает по ним - у него все расчеты внутри. Он работает в оба направления - просто у него расчеты на вход такие, что некоторые пары торгуют только в одном направлении в основном. Если EURUSD он в этом году только в селл торгует, то на USDCHF, которая отрицательно коррелирует с EURUSD, он торгует только в бай (см. скрин). Код немного подремонтировал.

Ещё раз спасибо, что исправили ошибки

## 1_Lexa — 2020-04-12 15:18

Снова ошибки

## vladradon — 2020-04-12 16:21

> Цитата (1_Lexa):
> Снова ошибки

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

## Sapper — 2020-04-12 16:26

> Цитата (1_Lexa):
> **Что тут надо изменить?**
> /////////////////////////////////////////////////
> // Close the order but only if it is in profit //
> /////////////////////////////////////////////////
>
> void CloseIfInProfit(string symb , int index)
> {
> for (int i = 0;i <= OrdersTotal();i++)
> {
> if( OrderSelect(i,SELECT_BY_POS,MODE_TRADES) )
> {
> if( OrderSymbol() == symb )
> {
> double profit = ( OrderProfit() - OrderCommission () - OrderSwap() );
> if( ( OrderType() == OP_BUY || OrderType() == OP_SELL) && ( profit >= 0 ) && (OrderMagicNumber() == MAGIC) )
> {
> OrderClose(OrderTicket(),OrderLots(),MarketInfo(symb,MODE_BID),100,Red); // Close any open orders
> ObjectSetText("Txt2"+symb,"",TextSize,"Arial"); // Gets rid of entry criteria message.
> }
> if (OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
> {
> OrderDelete(OrderTicket()); // Delete any pending orders
> ObjectSetText("Txt2"+symb,"",TextSize,"Arial"); // Gets rid of entry criteria message.
> }
> }
> }
> }
> partial = false;
> }

Изменить надо тему.
Вам сюда:
https://forexsystemsru.com/threads/izuchaem-jazyk-programmirovanija-mql4.87869/page-16
или сюда:
[URL unfurl="true"]https://forexsystemsru.com/threads/vashi-voprosy-po-jazyku-mql4.65289/page-376

## 1_Lexa — 2020-04-13 07:32

До изменения торговал в плюс, и после редактирования стал торговать в минус

---

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