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

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

---

## Karabas BARABAS — 2015-02-08 16:24

> Цитата (Fed77):
> Я их скомпилировал в старой билде пока работают ;) Держи __https://yadi.sk/d/BTRPtgKteXTS3 Сначала загрузи историю, потом скриптами поработай агрегатом больше 5 гиг загрузка будет и потом мой шаблон поставь должно заработать отчёт свежий вчера закачал он комбинированный фьюч+опцион ;) Там ещё и советник есть, можно торговать по нему я тестил нормально идёт

спасибо, сейчас скачаю посмотрю

## Ladzius — 2015-02-08 16:32

> Цитата (Fed77):
> Я их скомпилировал в старой билде пока работают ;) Держи __https://yadi.sk/d/BTRPtgKteXTS3 Сначала загрузи историю, потом скриптами поработай агрегатом больше 5 гиг загрузка будет и потом мой шаблон поставь должно заработать отчёт свежий вчера закачал он комбинированный фьюч+опцион ;) Там ещё и советник есть, можно торговать по нему я тестил нормально идёт

интересное дело здесь...но дле его понимание думаю надо окончит не однои университет по физике и математики ;) Спасибо.

## Fed77 — 2015-02-08 16:37

> Цитата (Karabas BARABAS):
> нашел вот такую тему про СОТ  _https://www.mql5.com/ru/articles/1573
> очень интересно, но проверить не могу, индюки и скрипт под старые билды, на новом куча ошибок (может кто подправит? :please:)
> случайно не ваши разработки?

Не мои сам оттуда скачал

> Цитата (Ladzius):
> интересное дело здесь...но дле его понимание думаю надо окончит не однои университет по физике и математики ;) Спасибо.

Я экономист, поэтому для меня теория определения стоимости валюты по отчётам с учётом спекулятивного фактора,  по закону Спроса и предложения больше по душе и теория вероятности тоже , поэтому думаю Ларри Вильямс даёт чёткое понимание теории движения цены и ориентиры кто на рынке хозяин и за кем следовать, сколько методик не пробовал считаю это самый адекватный подход для средне- и долгосрочной торговли, только нужно смотреть всё в комплексе фьючерсы и опционы как показатели меняются в динамике

## Karabas BARABAS — 2015-02-08 19:47

> Цитата (Ladzius):
> интересное дело здесь...но дле его понимание думаю надо окончит не однои университет по физике и математики ;) Спасибо.

посмотри здесь 
_http://www.forexfactory.com/showthread.php?t=509416&page=8
глубоких рассуждений нет, правда все на английском, но принцип и по скринам понятен

## nikpilot — 2015-02-09 00:14

**Доработка индикатора.**

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

Уважаемые программисты доработайте индикатор пожалуйста. Индикатор выводит сообщение "Not bad moment to open position  BUY" и "GOOD moment to open position  BUY", аналогично для СЕЛЛ. 

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

Заранее спасибо.

## mobidik — 2015-02-09 01:19

> Цитата (nikpilot):
> Доброго времени суток.
>
> Уважаемые программисты доработайте индикатор пожалуйста. Индикатор выводит сообщение "Not bad moment to open position  BUY" и "GOOD moment to open position  BUY", аналогично для СЕЛЛ.
>
> При появлении сообщения появляется звуковой сигнал и окошко алерта, но
> нет сообщения на какой валютной паре, что не очень удобно.
> Доработайте пожалуйста, чтобы выводилась информация на какой паре появился сигнал.
>
> Заранее спасибо.

:)

## nikpilot — 2015-02-09 02:25

> Цитата (mobidik):
> :)

Большое спасибо.*hi*

## Petr888 — 2015-02-09 04:26

> Цитата (gia444):
> Ребята помогите кто может - что в этом коде советника нужно менять чтобы шаг между орденами изменить? какой параметр ? я сам так и не нашёл .... он слишком близко друг к другу открывает ордера.....
> extern int Key = 0;
> extern double Lots = 1.0;
> double gd_88;
> double gd_96 = 0.0;
> double gd_104 = 24.0;
> double gd_112 = 0.0;
> double gd_120 = 24.0;
> extern double TakeProfit = 35.0;
> extern double StopLoss = 1000.0;
> bool gi_144 = FALSE;
> bool gi_148 = FALSE;
> double gd_152 = 10.0;
> bool gi_160 = TRUE;
> bool gi_164 = TRUE;
> bool gi_168 = TRUE;
> bool gi_172 = TRUE;
> bool gi_176 = TRUE;
> bool gi_180 = TRUE;
> bool gi_184 = TRUE;
> int g_magic_188 = 1841;
> bool gi_192 = FALSE;
> bool gi_196 = FALSE;
> bool gi_200 = FALSE;
> double g_lots_204 = 0.0;
> double gd_unused_212 = 22.0;
> double gd_220 = 20.0;
> double gd_228 = 22.0;
> double gd_236 = 20.0;
> double gd_244 = 22.0;
> double gd_252 = 20.0;
> double gd_260 = 22.0;
> double gd_268 = 20.0;
> double gd_276 = 22.0;
> double gd_284 = 20.0;
> double gd_292 = 22.0;
> double gd_300 = 20.0;
> double gd_308 = 22.0;
> double gd_316 = 20.0;
> double gd_324 = 22.0;
> double gd_332 = 20.0;
> double gd_340 = 22.0;
> double gd_348 = 20.0;
> double gd_356 = 22.0;
> double gd_364 = 22.0;
> bool gi_372 = FALSE;
>
> int f0_0() {
>    bool li_ret_0 = FALSE;
>    for (int pos_4 = 0; pos_4 < OrdersTotal(); pos_4++) {
>       if (OrderSelect(pos_4, SELECT_BY_POS, MODE_TRADES) == FALSE) break;
>       if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_188) li_ret_0 = li_ret_0 + OrderProfit() + OrderSwap() + OrderCommission();
>    }
>    return (li_ret_0);
> }
>
> int f0_1() {
>    bool li_ret_0 = FALSE;
>    for (int pos_4 = 0; pos_4 < OrdersTotal(); pos_4++) {
>       if (OrderSelect(pos_4, SELECT_BY_POS, MODE_TRADES) == FALSE) break;
>       if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_188) li_ret_0 = li_ret_0 + OrderProfit() + OrderSwap() + OrderCommission();
>    }
>    return (li_ret_0);
> }
>
> double f0_5(int ai_0, int ai_4) {
>    int year_8;
>    int month_12;
>    int day_16;
>    int datetime_20;
>    int hist_total_24 = OrdersHistoryTotal();
>    double ld_ret_28 = 0;
>    for (int pos_36 = 0; pos_36 < hist_total_24; pos_36++) {
>       OrderSelect(pos_36, SELECT_BY_POS, MODE_HISTORY);
>       datetime_20 = OrderCloseTime();
>       year_8 = TimeYear(datetime_20);
>       month_12 = TimeMonth(datetime_20);
>       day_16 = TimeDay(datetime_20);
>       if (year_8 == Year() && month_12 == Month() && day_16 == Day() - ai_4 && OrderMagicNumber() == g_magic_188) {
>          if (ai_0 == 1)
>             if (OrderType() == OP_BUY || OrderType() == OP_SELL) ld_ret_28 = ld_ret_28 + OrderProfit() + OrderSwap() + OrderCommission();
>       }
>    }
>    return (ld_ret_28);
> }
>
> int init() {
>    string ls_0;
>    string ls_8;
>    string ls_unused_16;
>    gd_88 = 100.0 * Lots;
>
>    if (gi_200) g_lots_204 = 100000.0 * Lots;
>    else g_lots_204 = Lots;
>    return (0);
> }
>
> int start() {
>    double price_0;
>    double price_8;
>    double price_16;
>    double price_24;
>    double price_32;
>    double lots_40;
>    double pips_48;
>    double pips_56;
>    if (!f0_2()) return (0);
>    double ld_64 = (iHigh(NULL, PERIOD_H1, 1) - iLow(NULL, PERIOD_H1, 1)) / Point;
>    int ticket_72 = 0;
>    int ticket_76 = 0;
>    int ticket_80 = 0;
>    int ticket_84 = 0;
>    int ticket_88 = 0;
>    int ticket_92 = 0;
>    double order_lots_96 = 0;
>    double order_lots_104 = 0;
>    double order_open_price_112 = 0;
>    double order_open_price_120 = 0;
>    double ld_128 = 0;
>    double ld_136 = 0;
>    double ld_unused_144 = 0;
>    double order_lots_152 = 0;
>    double ld_unused_160 = 0;
>    double order_lots_168 = 0;
>    double ld_176 = 0;
>    double ld_184 = 0;
>    gi_196 = FALSE;
>    if (gi_144 == TRUE) {
>       switch (DayOfWeek()) {
>       case 0:
>          if (gi_160 != TRUE) break;
>          gi_196 = TRUE;
>          break;
>       case 1:
>          if (gi_164 != TRUE) break;
>          gi_196 = TRUE;
>          break;
>       case 2:
>          if (gi_168 != TRUE) break;
>          gi_196 = TRUE;
>          break;
>       case 3:
>          if (gi_172 != TRUE) break;
>          gi_196 = TRUE;
>          break;
>       case 4:
>          if (gi_176 != TRUE) break;
>          gi_196 = TRUE;
>          break;
>       case 5:
>          if (gi_180 != TRUE) break;
>          gi_196 = TRUE;
>          break;
>       case 6:
>          if (gi_184 != TRUE) break;
>          gi_196 = TRUE;
>       }
>    } else gi_196 = TRUE;
>    for (int pos_196 = 0; pos_196 < OrdersTotal(); pos_196++) {
>       OrderSelect(pos_196, SELECT_BY_POS, MODE_TRADES);
>       if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_188) {
>          if (OrderType() == OP_BUY && ticket_72 < OrderTicket()) {
>             order_lots_96 = OrderLots();
>             order_open_price_112 = OrderOpenPrice();
>             ticket_72 = OrderTicket();
>             ld_136 = OrderTakeProfit();
>             if (OrderLots() == g_lots_204) ld_176 = OrderOpenPrice() - StopLoss * Point;
>          }
>          if (OrderType() == OP_SELL && ticket_76 < OrderTicket()) {
>             order_lots_104 = OrderLots();
>             order_open_price_120 = OrderOpenPrice();
>             ticket_76 = OrderTicket();
>             ld_128 = OrderTakeProfit();
>             if (OrderLots() == g_lots_204) ld_184 = OrderOpenPrice() + StopLoss * Point;
>          }
>          if (OrderType() == OP_BUYLIMIT) {
>             ticket_80 = OrderTicket();
>             order_lots_168 = OrderLots();
>          }
>          if (OrderType() == OP_SELLLIMIT) {
>             ticket_84 = OrderTicket();
>             order_lots_168 = OrderLots();
>          }
>          if (OrderType() == OP_BUYSTOP) {
>             ticket_88 = OrderTicket();
>             order_lots_152 = OrderLots();
>          }
>          if (OrderType() == OP_SELLSTOP) {
>             ticket_92 = OrderTicket();
>             order_lots_152 = OrderLots();
>          }
>       }
>    }
>    int li_200 = f0_0() / (AccountBalance() / 100.0);
>    int li_204 = f0_1() / (AccountBalance() / 100.0);
>    int li_unused_208 = (f0_1() + f0_0()) / (AccountBalance() / 100.0);
>    if (li_200 < (-1.0 * gd_152) && gi_148 == TRUE) {
>       for (int pos_212 = OrdersTotal() - 1; pos_212 >= 0; pos_212--) {
>          if (!(OrderSelect(pos_212, SELECT_BY_POS, MODE_TRADES))) break;
>          if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_188) OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 2);
>          if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_188) OrderDelete(OrderTicket());
>          if (OrderType() == OP_BUYLIMIT && OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_188) OrderDelete(OrderTicket());
>       }
>    }
>    if (li_204 < (-1.0 * gd_152) && gi_148 == TRUE) {
>       for (int pos_216 = OrdersTotal() - 1; pos_216 >= 0; pos_216--) {
>          if (!(OrderSelect(pos_216, SELECT_BY_POS, MODE_TRADES))) break;
>          if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_188) OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 2);
>          if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_188) OrderDelete(OrderTicket());
>          if (OrderType() == OP_SELLLIMIT && OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_188) OrderDelete(OrderTicket());
>       }
>    }
>    int li_unused_220 = MarketInfo(Symbol(), MODE_SPREAD);
>    int li_unused_224 = MarketInfo(Symbol(), MODE_POINT);
>    int li_unused_228 = MarketInfo(Symbol(), MODE_DIGITS);
>    int li_unused_232 = MarketInfo(Symbol(), MODE_TICKVALUE);
>    if (ticket_72 == 0 && gi_196) {
>       if (ticket_80 != 0) OrderDelete(ticket_80);
>       if (ticket_88 != 0) OrderDelete(ticket_88);
>       price_16 = Ask - StopLoss * Point;
>       if (StopLoss <= 0.0) price_16 = 0;
>       price_32 = Ask + TakeProfit * Point;
>       if ((TimeHour(TimeCurrent()) >= gd_96 && TimeHour(TimeCurrent()) < gd_104) || (TimeHour(TimeCurrent()) >= gd_112 && TimeHour(TimeCurrent()) < gd_120)) OrderSend(Symbol(), OP_BUY, g_lots_204, Ask, 3, price_16, price_32, "Magic" + g_magic_188, g_magic_188, 0, Blue);
>    }
>    if (ticket_76 == 0 && gi_196) {
>       if (ticket_84 != 0) OrderDelete(ticket_84);
>       if (ticket_92 != 0) OrderDelete(ticket_92);
>       price_8 = Bid + StopLoss * Point;
>       if (StopLoss <= 0.0) price_8 = 0;
>       price_24 = Bid - TakeProfit * Point;
>       if ((TimeHour(TimeCurrent()) >= gd_96 && TimeHour(TimeCurrent()) < gd_104) || (TimeHour(TimeCurrent()) >= gd_112 && TimeHour(TimeCurrent()) < gd_120)) OrderSend(Symbol(), OP_SELL, g_lots_204, Bid, 3, price_8, price_24, "Magic" + g_magic_188, g_magic_188, 0, Red);
>    }
>    if (ticket_72 != 0 && ticket_80 == 0) {
>       pips_56 = f0_3(order_lots_96);
>       pips_48 = f0_4(order_lots_96);
>       price_0 = order_open_price_112 - pips_56 * Point;
>       if (gi_192 == FALSE) price_16 = price_0 - StopLoss * Point;
>       else price_16 = ld_176;
>       if (StopLoss <= 0.0) price_16 = 0;
>       price_32 = price_0 + pips_48 * Point;
>       lots_40 = NormalizeDouble(2.0 * order_lots_96, pips_48);
>       if (gi_196 && lots_40 < gd_88) OrderSend(Symbol(), OP_BUYLIMIT, lots_40, price_0, 3, price_16, price_32, "Magic" + g_magic_188, g_magic_188, 0, Blue);
>    }
>    if (ticket_76 != 0 && ticket_84 == 0) {
>       pips_56 = f0_3(order_lots_104);
>       pips_48 = f0_4(order_lots_104);
>       price_0 = order_open_price_120 + pips_56 * Point;
>       if (gi_192 == FALSE) price_8 = price_0 + StopLoss * Point;
>       else price_8 = ld_184;
>       if (StopLoss <= 0.0) price_8 = 0;
>       price_24 = price_0 - pips_48 * Point;
>       lots_40 = NormalizeDouble(2.0 * order_lots_104, pips_48);
>       if (gi_196 && lots_40 < gd_88) OrderSend(Symbol(), OP_SELLLIMIT, lots_40, price_0, 3, price_8, price_24, "Magic" + g_magic_188, g_magic_188, 0, Red);
>    }
>    Comment("\nЛицензия -  OK! ProfitMakerPro запущен на ", AccountNumber(),
>       "\n",
>       "\n", "  Прибыль за сегодня = ", NormalizeDouble(f0_5(1, 0), 2), " $ ",
>       "\n", "  Прибыль за вчера    = ", NormalizeDouble(f0_5(1, 1), 2), " $ ",
>    "\n", "  Текущий баланс       = ", AccountBalance(), " $ ");
>    for (pos_196 = 0; pos_196 < OrdersTotal(); pos_196++) {
>       OrderSelect(pos_196, SELECT_BY_POS, MODE_TRADES);
>       if (OrderSymbol() == Symbol() && OrderType() == OP_BUY && ticket_72 != 0 && OrderMagicNumber() == g_magic_188) {
>          if (gi_192 == FALSE) price_16 = order_open_price_112 - StopLoss * Point;
>          else price_16 = ld_176;
>          if (StopLoss <= 0.0) price_16 = 0;
>          if (ticket_72 != OrderTicket()) price_32 = ld_136;
>          else price_32 = OrderTakeProfit();
>          if (price_32 != OrderTakeProfit() || price_16 != OrderStopLoss()) OrderModify(OrderTicket(), OrderOpenPrice(), price_16, price_32, 0, Blue);
>       }
>       if (OrderSymbol() == Symbol() && OrderType() == OP_SELL && ticket_76 != 0 && OrderMagicNumber() == g_magic_188) {
>          if (gi_192 == FALSE) price_8 = order_open_price_120 + StopLoss * Point;
>          else price_8 = ld_184;
>          if (StopLoss <= 0.0) price_8 = 0;
>          if (ticket_76 != OrderTicket()) price_24 = ld_128;
>          else price_24 = OrderTakeProfit();
>          if (price_24 != OrderTakeProfit() || price_8 != OrderStopLoss()) OrderModify(OrderTicket(), OrderOpenPrice(), price_8, price_24, 0, Red);
>       }
>    }
>    return (0);
> }
>
> int f0_3(double ad_0) {
>    ad_0 = NormalizeDouble(ad_0 / g_lots_204, 0);
>    switch (ad_0) {
>    case 1.0:
>       return (gd_228);
>    case 2.0:
>       return (gd_228);
>    case 4.0:
>       return (gd_244);
>    case 8.0:
>       return (gd_260);
>    case 16.0:
>       return (gd_276);
>    case 32.0:
>       return (gd_292);
>    case 64.0:
>       return (gd_308);
>    case 128.0:
>       return (gd_324);
>    case 256.0:
>       return (gd_340);
>    case 512.0:
>       return (gd_356);
>    }
>    return (gd_356);
> }
>
> int f0_4(double ad_0) {
>    ad_0 = NormalizeDouble(ad_0 / g_lots_204, 0);
>    switch (ad_0) {
>    case 1.0:
>       return (gd_220);
>    case 2.0:
>       return (gd_236);
>    case 4.0:
>       return (gd_252);
>    case 8.0:
>       return (gd_268);
>    case 16.0:
>       return (gd_284);
>    case 32.0:
>       return (gd_300);
>    case 64.0:
>       return (gd_316);
>    case 128.0:
>       return (gd_332);
>    case 256.0:
>       return (gd_348);
>    case 512.0:
>       return (gd_364);
>    }
>    return (gd_364);
> }

вот этот **double gd_152 = 10.0;**

## sergeikip2008 — 2015-02-09 13:55

Добрый день,уважаемые форумчане...Уважаемый Pammexpert принял участие в доработке бота,за что ему отдельное спасибо...Да большая просьба,можно ли вывести настройки алллигатора(т.е. 3 Ма и смещение),добавить для работы валютную пару XAUUSD,а также облегчить сову для работы(убрать звук,может лишние комменты,может еще что-нибудь),а то сильно грузит терминал...С,уважением...

## osvit — 2015-02-09 13:55

**e-OpenByTime**

Уважаемые программисты большая просьба прикрутите к советнику управление капиталом % от депо и добавьте в установку времени секунды. Заранее спасибо.

## DIW35902345 — 2015-02-09 14:38

Други ! Может кто нибудь доработать индикатор , нужно  добавить  -  ТФ , сделать выборочным . Зарание большущее спасибо !

## borobor — 2015-02-09 14:51

> Цитата (DIW35902345):
> Други ! Может кто нибудь доработать индикатор , нужно  добавить  -  ТФ , сделать выборочным . Зарание большущее спасибо !

забирай

## bleike — 2015-02-09 18:10

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

## zhserg — 2015-02-09 18:32

> Цитата (bleike):
> Можете переделать этого индикатора в советника ну или подкорректировать этот индикатор? он ничего не делает только отображает на графике номера меджиков со сделок. так вот из-за того что это индикатор приходится постоянно переключать таймфреймы для точности информации а хотелось бы чтобы индюк сам обновлял подобную инфу... может сделать обновление в секундах или как)) вам может виднее)

Обновление по таймеру. Период в сек задается в настройках.

## bleike — 2015-02-09 19:02

> Цитата (zhserg):
> Обновление по таймеру. Период в сек задается в настройках.

Спасибо! отлично работает)))

## Yura Vakulenko — 2015-02-09 20:19

Здравствуйте..  может кто-то помочь с кодом, чтоыб верно открывались и закрывались сделки.. нужно, чтобы открывалась серия ордеров и вся серия закрывалась при против сигнале. И для противоположного сигнала так же.. как нужно, показал на 2-х последних картинках ниже.. на 2-х первых картинках - показано, как сейчас работает.. помагите дописать верно код.. 
вот текущий код..

void OnTick()
  {
//---
//работа по открытию бара
 if(use_data_from_closed_candle)
 {
   if (Time == prevtime) return;
   prevtime = Time;
 }

REVERSAL_Signal = iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,0,0);
REVERSAL_1 =      iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,0,1);
REVERSAL_2 =      iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,0,2);
REVERSAL_1_0 =      

ask = NormalizeDouble (MarketInfo(Symbol(),MODE_ASK), Digits);
bid = NormalizeDouble (MarketInfo(Symbol(),MODE_BID), Digits);
_OR_err = GetLastError();

Total_SELL = CountTrades(OP_SELL);
Total_Buy = CountTrades(OP_BUY);
total_orders = OrdersTotal();

      
if ( REVERSAL_Signal < Up_floor &&  REVERSAL_1 < Up_floor &&  REVERSAL_2 >= Up_floor && REVERSAL_1_2 > Up_floor) {sell_signal =1; buy_signal=0;} 
if ( REVERSAL_Signal > Down_floor && REVERSAL_1 > Down_floor &&  REVERSAL_2 <= Down_floor && REVERSAL_3_2 < Down_floor) {buy_signal=1; sell_signal =0; }

          
                  if(prevtime && M1_buy_signal == 1 &&  Total_Buy>=0 &&  Total_Buy < MaxOrders && !reverse )  //buy order
            {
                  if (Total_SELL>0) CLOSEORDER(OP_SELL);//Close_Orders(OP_SELL,loging);//CLOSEORDER(OP_SELL);
                  ticket_buy = OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging); //OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrBlue);       
             }
            
            if(prevtime && M1_buy_signal == 1 &&  Total_SELL>=0 &&  Total_SELL < MaxOrders && reverse )  //buy Reverse order
            {        
                  if (Total_Buy>0) CLOSEORDER(OP_BUY);
                  ticket_buy = OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);//OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slippage,0,0,"",Magic,0,clrRed);//OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);
                                
            }
            
           if(prevtime && M1_sell_signal == 1 &&  Total_SELL>=0 && Total_SELL < MaxOrders && !reverse ) // sell order
            {
                  if (Total_Buy>0) CLOSEORDER(OP_BUY);//Close_Orders(OP_BUY,loging);
                  ticket_sell = OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);//OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrRed);//OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);
                          
            }
            if(prevtime && M1_sell_signal == 1  &&  Total_Buy>=0 && Total_Buy < MaxOrders && reverse ) // sell Reverse order
            {
                  if (Total_SELL>0)CLOSEORDER(OP_SELL);
                  ticket_sell = OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging);//OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrBlue);//OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging);
             
             }
          
          
           
           
           
   
  }

## Геша5 — 2015-02-09 21:54

> Цитата (DDCon):
> Прошу помочь модифицировать данный индикатор следующим образом: заменить однобарный экстремальный бар на однобарный и двухбарный - по принципу сложения двух баров и по принципу связи "или" между собой. Спасибо заранее!

вы в начале выложите открытый код,потому как вряд ли кто поможет.

## Yura Vakulenko — 2015-02-09 22:36

> Цитата (Yura Vakulenko):
> Здравствуйте..  может кто-то помочь с кодом, чтоыб верно открывались и закрывались сделки.. нужно, чтобы открывалась серия ордеров и вся серия закрывалась при против сигнале. И для противоположного сигнала так же.. как нужно, показал на 2-х последних картинках ниже.. на 2-х первых картинках - показано, как сейчас работает.. помагите дописать верно код..
> вот текущий код..
>
> void OnTick()
>   {
> //---
> //работа по открытию бара
>  if(use_data_from_closed_candle)
>  {
>    if (Time == prevtime) return;
>    prevtime = Time;
>  }
>
>
> REVERSAL_Signal = iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,0,0);
> REVERSAL_1 =      iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,0,1);
> REVERSAL_2 =      iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,0,2);
> REVERSAL_1_0 =
>
> ask = NormalizeDouble (MarketInfo(Symbol(),MODE_ASK), Digits);
> bid = NormalizeDouble (MarketInfo(Symbol(),MODE_BID), Digits);
> _OR_err = GetLastError();
>
> Total_SELL = CountTrades(OP_SELL);
> Total_Buy = CountTrades(OP_BUY);
> total_orders = OrdersTotal();
>
>
> if ( REVERSAL_Signal < Up_floor &&  REVERSAL_1 < Up_floor &&  REVERSAL_2 >= Up_floor && REVERSAL_1_2 > Up_floor) {sell_signal =1; buy_signal=0;}
> if ( REVERSAL_Signal > Down_floor && REVERSAL_1 > Down_floor &&  REVERSAL_2 <= Down_floor && REVERSAL_3_2 < Down_floor) {buy_signal=1; sell_signal =0; }
>
>
>                   if(prevtime && M1_buy_signal == 1 &&  Total_Buy>=0 &&  Total_Buy < MaxOrders && !reverse )  //buy order
>             {
>                   if (Total_SELL>0) CLOSEORDER(OP_SELL);//Close_Orders(OP_SELL,loging);//CLOSEORDER(OP_SELL);
>                   ticket_buy = OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging); //OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrBlue);
>              }
>
>             if(prevtime && M1_buy_signal == 1 &&  Total_SELL>=0 &&  Total_SELL < MaxOrders && reverse )  //buy Reverse order
>             {
>                   if (Total_Buy>0) CLOSEORDER(OP_BUY);
>                   ticket_buy = OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);//OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slippage,0,0,"",Magic,0,clrRed);//OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);
>
>             }
>
>            if(prevtime && M1_sell_signal == 1 &&  Total_SELL>=0 && Total_SELL < MaxOrders && !reverse ) // sell order
>             {
>                   if (Total_Buy>0) CLOSEORDER(OP_BUY);//Close_Orders(OP_BUY,loging);
>                   ticket_sell = OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);//OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrRed);//OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);
>
>             }
>             if(prevtime && M1_sell_signal == 1  &&  Total_Buy>=0 && Total_Buy < MaxOrders && reverse ) // sell Reverse order
>             {
>                   if (Total_SELL>0)CLOSEORDER(OP_SELL);
>                   ticket_sell = OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging);//OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrBlue);//OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging);
>
>              }
>
>
>
>
>
>
>   }

тут есть нек. ошибки в коде..
вот так вернее.. Фун
void OnTick()
  {
//---
//работа по открытию бара
 if(use_data_from_closed_candle)
 {
   if (Time == prevtime) return;
   prevtime = Time;
 }

REVERSAL_Signal = iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,0,0);
REVERSAL_1 =      iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,0,1);
REVERSAL_2 =      iCustom(NULL,0,"REVERSAL",timeframe,Main_Period,Main_Price,Down_floor,Up_floor,Length,Phase,0,2);
      

ask = NormalizeDouble (MarketInfo(Symbol(),MODE_ASK), Digits);
bid = NormalizeDouble (MarketInfo(Symbol(),MODE_BID), Digits);
_OR_err = GetLastError();

Total_SELL = CountTrades(OP_SELL);
Total_Buy = CountTrades(OP_BUY);
total_orders = OrdersTotal();

      
if ( REVERSAL_Signal < Up_floor &&  REVERSAL_1 < Up_floor &&  REVERSAL_2 >= Up_floor ) {sell_signal =1; buy_signal=0;} 
if ( REVERSAL_Signal > Down_floor && REVERSAL_1 > Down_floor &&  REVERSAL_2 <= Down_floor ) {buy_signal=1; sell_signal =0; }

          
                  if(prevtime && buy_signal == 1 &&  Total_Buy>=0 &&  Total_Buy < MaxOrders && !reverse )  //buy order
            {
                  if (Total_SELL>0) CLOSEORDER(OP_SELL);//Close_Orders(OP_SELL,loging);//CLOSEORDER(OP_SELL);
                  ticket_buy = OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging); //OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrBlue);       
             }
            
            if(prevtime && buy_signal == 1 &&  Total_SELL>=0 &&  Total_SELL < MaxOrders && reverse )  //buy Reverse order
            {        
                  if (Total_Buy>0) CLOSEORDER(OP_BUY);
                  ticket_buy = OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);//OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slippage,0,0,"",Magic,0,clrRed);//OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);
                                
            }
            
           if(prevtime && sell_signal == 1 &&  Total_SELL>=0 && Total_SELL < MaxOrders && !reverse ) // sell order
            {
                  if (Total_Buy>0) CLOSEORDER(OP_BUY);//Close_Orders(OP_BUY,loging);
                  ticket_sell = OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);//OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrRed);//OrderSendReliable(Symbol(),OP_SELL,Lots,bid,Slippage,0,0,"",Magic,0,clrRed,loging);
                          
            }
            if(prevtime && sell_signal == 1  &&  Total_Buy>=0 && Total_Buy < MaxOrders && reverse ) // sell Reverse order
            {
                  if (Total_SELL>0)CLOSEORDER(OP_SELL);
                  ticket_sell = OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging);//OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,"",Magic,0,clrBlue);//OrderSendReliable(Symbol(),OP_BUY,Lots,ask,Slippage,0,0,"",Magic,0,clrGreen,loging);
             
             }
          
          
           
           
           
   
  }

## marattmb — 2015-02-09 23:00

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

## Bullra — 2015-02-09 23:15

Уважаемы программисты, просьба вывести в переменные возможность выставления начала точки отсчета.

extern datetime Start_calculating_DATE = D'2014.11.14 00:00'

---

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