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

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

---

## asers1111 — 2016-01-10 12:32

> Цитата (LexLampard):
> Ну вот у меня:
>
> General_Profit = 500
> TakeProfit = 100
>
> Не так?

Да-да,все так...Только если мартиновскую идеологию использовать.А если анти-мартиновскую,то все наоборот должно быть.Самый большой ордер идет сначала,потом все меньше и меньше.К концу тренда должен оставаться открытым ордер с минимальным лотом,а все остальные должны быть закрыты с прибылью.А этот последний - он уже может быть и с минусом закрыт.Ну хотябы нельзя ли сделать,чтоб ордер закрывался при открытии следующего ордера ?

## Karabas BARABAS — 2016-01-10 13:27

друзья, помогите страждущему 

в МТФ машке отсутствуют цены HLC/3 & HLCC/4, (выделенное жирным)

switch(price){
case 0 : return (Close);
case 1 : return (iMA(0,tf,1,0,0,1,iBarShift(0,tf,Time)));
case 2 : int kol_vo_pois=iBarShift(0,0,iTime(0,tf, iBarShift(0,tf,Time)))-i;
if(kol_vo_pois==0) return ( High);
return ( High[iHighest(0,0,MODE_HIGH,kol_vo_pois,i)]);
case 3 : kol_vo_pois=iBarShift(0,0,iTime(0,tf, iBarShift(0,tf,Time)))-i;
if(kol_vo_pois==0) return ( Low);
return ( Low[iLowest(0,0,MODE_LOW,kol_vo_pois,i)]);
case 4 : kol_vo_pois=iBarShift(0,0,iTime(0,tf, iBarShift(0,tf,Time)))-i;
if(kol_vo_pois==0) return ( (High+Low)/2);
return ( (High[iHighest(0,0,MODE_HIGH,kol_vo_pois,i)]+Low[iLowest(0,0,MODE_LOW,kol_vo_pois,i)])/2);
**case 5 : Print("Price not valide"); Comment("Price not valide"); return(0);
case 6 : Print("Price not valide"); Comment("Price not valide"); return(0);**

выделенное отсутствует, а мне как раз эти цены и нужны

:please:

## Karabas BARABAS — 2016-01-10 14:00

> Цитата (Karabas BARABAS):
> друзья, помогите страждущему
>
> в МТФ машке отсутствуют цены HLC/3 & HLCC/4, (выделенное жирным)
>
>
> switch(price){
> case 0 : return (Close);
> case 1 : return (iMA(0,tf,1,0,0,1,iBarShift(0,tf,Time)));
> case 2 : int kol_vo_pois=iBarShift(0,0,iTime(0,tf, iBarShift(0,tf,Time)))-i;
> if(kol_vo_pois==0) return ( High);
> return ( High[iHighest(0,0,MODE_HIGH,kol_vo_pois,i)]);
> case 3 : kol_vo_pois=iBarShift(0,0,iTime(0,tf, iBarShift(0,tf,Time)))-i;
> if(kol_vo_pois==0) return ( Low);
> return ( Low[iLowest(0,0,MODE_LOW,kol_vo_pois,i)]);
> case 4 : kol_vo_pois=iBarShift(0,0,iTime(0,tf, iBarShift(0,tf,Time)))-i;
> if(kol_vo_pois==0) return ( (High+Low)/2);
> return ( (High[iHighest(0,0,MODE_HIGH,kol_vo_pois,i)]+Low[iLowest(0,0,MODE_LOW,kol_vo_pois,i)])/2);
> **case 5 : Print("Price not valide"); Comment("Price not valide"); return(0);
> case 6 : Print("Price not valide"); Comment("Price not valide"); return(0);**
>
> выделенное отсутствует, а мне как раз эти цены и нужны
>
> :please:

просьба снимается, исправил сам :D

## Anoctoj1 — 2016-01-10 15:28

> Цитата (AlanG):
> Внем прописаны валюты он может искать по ним, еще ТФ тоже может по ним искать
>  int isymbol = 0;
>    if (symbol == "EURUSD")       isymbol = 1;
>    else if (symbol == "GBPUSD")  isymbol = 2;
>    else if (symbol == "USDJPY")  isymbol = 3;
>    else if (symbol == "USDCHF")  isymbol = 4;
>    else if (symbol == "AUDUSD")  isymbol = 5;
>    else if (symbol == "USDCAD")  isymbol = 6;
>    else if (symbol == "EURGBP")  isymbol = 7;
>    else if (symbol == "EURJPY")  isymbol = 8;
>    else if (symbol == "EURCHF")  isymbol = 9;
>    else if (symbol == "EURAUD")  isymbol = 10;
>    else if (symbol == "EURCAD")  isymbol = 11;
>    else if (symbol == "GBPUSD")  isymbol = 12;
>    else if (symbol == "GBPJPY")  isymbol = 13;
>    else if (symbol == "GBPCHF")  isymbol = 14;
>    else if (symbol == "GBPAUD")  isymbol = 15;
>    else if (symbol == "GBPCAD")  isymbol = 16;
>    else if (symbol == "AUDCAD")  isymbol = 17;
>    else if (symbol == "AUDCHF")  isymbol = 18;
>    else if (symbol == "AUDJPY")  isymbol = 19;
>    else if (symbol == "AUDNZD")  isymbol = 20;
>    else if (symbol == "CHFJPY")  isymbol = 21;
>    else if (symbol == "EURNZD")  isymbol = 22;
>    else if (symbol == "GBPNZD")  isymbol = 23;
>    else if (symbol == "NZDCHF")  isymbol = 24;
>    else if (symbol == "NZDJPY")  isymbol = 25;
>    else if (symbol == "NZDUSD")  isymbol = 26;
>    else if (symbol == "USDCAD")  isymbol = 27;
>    else if (symbol == "USDSGD")  isymbol = 28;
>    else if (symbol == "USDZAR")  isymbol = 29;
>    else                          isymbol = 30;
> Хотя хз посмотри что в журнале пишет
> или вот убрал 4 ошибки остальные оставил
> так по пробуй

 теперь открывает только 2buy и всё, но и при тесте долго тест идет будто подвисает

## LexLampard — 2016-01-10 16:31

> Цитата (asers1111):
> Да-да,все так...Только если мартиновскую идеологию использовать.А если анти-мартиновскую,то все наоборот должно быть.Самый большой ордер идет сначала,потом все меньше и меньше.К концу тренда должен оставаться открытым ордер с минимальным лотом,а все остальные должны быть закрыты с прибылью.А этот последний - он уже может быть и с минусом закрыт.Ну хотябы нельзя ли сделать,чтоб ордер закрывался при открытии следующего ордера ?

Ну если, как ты сам писал:

Шаг увеличения лота 0.7
Лот 0.1

Ну, а над закрытием каждого отдельного ордера, надо подумать.

## andiV — 2016-01-10 16:40

Здравствуйте, друзья!

Помогите, пожалуйста, написать простенький советник по принципам вот этой стратегии, но с настраиваемыми параметрами. 
Суть в том этой стратегии, что она основана на выставление отложенных ордеров байстоп и селлстоп, на расстояние дельта от выше хай и ниже лоу свечи. Только эти ордера выставляются после закрытия свечи в конкретное время (допустим в 00:00) , выставленное в настройках советника. Когда ордер срабатывает выставляется стоплосс и тейкпрофит. А при достижении определенного профита в пунктах, стоплосс переноситься в безубыток по цене сработанного ордера или немного выше этой цены и потом включается трал ордера. Если ордер не сработал до свечи (допустим в 00:00) следующего дня, то ордер удаляется и цикл повторяется.  
**Настройки советника:**
1). выбор таймфрейма
2). выставление времени той свечи, которую будем торговать
3). тейк, стоп, трал
4). перенос в безубыток
5). Выставление лота ордера
6). настройка под ДЦ пяти и четырёх знак.
  Я думаю, что советник с настраиваемыми параметрами был бы интересен многим пользователям именно своей возможностью применения под каждую конкретную стратегию.
  Заранее огромное спасибо.

## IYG — 2016-01-10 16:46

> Цитата (andiV):
> Здравствуйте, друзья!
>
> Помогите, пожалуйста, написать простенький советник по принципам вот этой стратегии, но с настраиваемыми параметрами.
> Суть в том этой стратегии, что она основана на выставление отложенных ордеров байстоп и селлстоп, на расстояние дельта от выше хай и ниже лоу свечи. Только эти ордера выставляются после закрытия свечи в конкретное время (допустим в 00:00) , выставленное в настройках советника. Когда ордер срабатывает выставляется стоплосс и тейкпрофит. А при достижении определенного профита в пунктах, стоплосс переноситься в безубыток по цене сработанного ордера или немного выше этой цены и потом включается трал ордера. Если ордер не сработал до свечи (допустим в 00:00) следующего дня, то ордер удаляется и цикл повторяется.
> **Настройки советника:**
> 1). выбор таймфрейма
> 2). выставление времени той свечи, которую будем торговать
> 3). тейк, стоп, трал
> 4). перенос в безубыток
> 5). Выставление лота ордера
> 6). настройка под ДЦ пяти и четырёх знак.
>   Я думаю, что советник с настраиваемыми параметрами был бы интересен многим пользователям именно своей возможностью применения под каждую конкретную стратегию.
>   Заранее огромное спасибо.

Присоединюсь.

## AlanG — 2016-01-10 17:00

> Цитата (Anoctoj1):
> теперь открывает только 2buy и всё, но и при тесте долго тест идет будто подвисает

[изображение: https://charts.mql5.com/9/837/eurusd-m15-e-global-trade-3.png]
так по пробуй там все на функцию return зациклили:facepalm: видать что то добавляю или убираю не то

## Anoctoj1 — 2016-01-10 17:59

> Цитата (AlanG):
> [изображение: https://charts.mql5.com/9/837/eurusd-m15-e-global-trade-3.png]
> так по пробуй там все на функцию return зациклили:facepalm: видать что то добавляю или убираю не то

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

## AlanG — 2016-01-10 18:23

> Цитата (Anoctoj1):
> теперь не виснет, и баев много, но и шелл в десятки раз болше канешь, но впринципе вроде неплохо, спс еще не поможешь разобраться с параметрами трала? там их четыре непойму какой стоп какой степ

**LossTrailInitialStartPips **всегда должен быть больше **LossTrailPips **это для стопов
**profitWhenToSetNoLossStopPips **всегда должен быть больше** profitOfNoLossStopPips **это для профита в бу при убытке

## Anoctoj1 — 2016-01-10 18:56

> Цитата (AlanG):
> **LossTrailInitialStartPips **всегда должен быть больше **LossTrailPips **это для стопов
> **profitWhenToSetNoLossStopPips **всегда должен быть больше** profitOfNoLossStopPips **это для профита в бу при убытке
> 

вот из источника совы через  поиск в браузере ставлю buy находит чото около 250 ордеров, ставлю поиск sell находит примерно также, то есть баланс между открытием есть, я подумал может стоит использовать те же настройки и ту же дату теста, ОПРОБОВАЛ, то же самое несколько баев и остальные селл...... значит все таки что то в сове не так. А так вроде норм сова

## AlanG — 2016-01-10 19:02

> Цитата (Anoctoj1):
> вот из источника совы через поиск в браузере ставлю buy находит чото около 900 ордеров, ставлю поиск sell находит примерно также, то есть баланс между открытием есть, я подумал может стоит исползьвать те же настройки и ту же дату теста, ОПРОБОВАЛ, то же самое несколько баев и остальные селл...... значит все таки что то в сове не так. А так вроде норм сова

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

## Anoctoj1 — 2016-01-10 19:04

> Цитата (AlanG):
> там ошибок еще чтук десять на функцию завязаны в старой версии может и нормально но в новой это критическая ошибка все заново нужно функции переписывать я так думаю

вот архив с исходником и файлом настроек как на тестере. Может что то получится?

## osvit — 2016-01-10 21:38

**Поправьте сову.**

Кому не трудно поправьте сову. Выдает 7 ошибок. Заранее большое спасибо.

## expforex — 2016-01-10 21:54

> Цитата (andiV):
> Здравствуйте, друзья!
>
> Помогите, пожалуйста, написать простенький советник по принципам вот этой стратегии, но с настраиваемыми параметрами.
> Суть в том этой стратегии, что она основана на выставление отложенных ордеров байстоп и селлстоп, на расстояние дельта от выше хай и ниже лоу свечи. Только эти ордера выставляются после закрытия свечи в конкретное время (допустим в 00:00) , выставленное в настройках советника. Когда ордер срабатывает выставляется стоплосс и тейкпрофит. А при достижении определенного профита в пунктах, стоплосс переноситься в безубыток по цене сработанного ордера или немного выше этой цены и потом включается трал ордера. Если ордер не сработал до свечи (допустим в 00:00) следующего дня, то ордер удаляется и цикл повторяется.
> **Настройки советника:**
> 1). выбор таймфрейма
> 2). выставление времени той свечи, которую будем торговать
> 3). тейк, стоп, трал
> 4). перенос в безубыток
> 5). Выставление лота ордера
> 6). настройка под ДЦ пяти и четырёх знак.
>   Я думаю, что советник с настраиваемыми параметрами был бы интересен многим пользователям именно своей возможностью применения под каждую конкретную стратегию.
>   Заранее огромное спасибо.

прикрепил советник торгующий по хай лоу - предыдущего закрытого дня

настройки

- extern string aa6="----------------------------------------------------------------------------";

- extern string trade_="Настройки торговли";

- extern bool CorectStopLevelwServers=true; // Корректировка значений стопов StopLoss TakeProfit StopOrderDeltaifUSE TrailingStop на минимально возможный уровень, при этом параметры следует установить на -1

- extern int Magic2=777;                     // Магический номер

- extern int StopLoss=0;                    // Стоплосс, 0 - не используется

- extern int TakeProfit=0;                  // Тейкпрофит , 0 - не используется

- extern int Slippage=0;                    // Проскальзывание

- extern bool MarketWatch=false;            // Режим торговли по MarketWatch true  = сначала выставляются позиции/ордера без стопов, потом происходит модификация - для некоторых брокеров

- extern int StopOrderDeltaifUSE=100;         // Дистанция для отложенных ордеров

- extern bool ClosePosifChange=true;        // Закрывать позиции при обратном сигнале

- extern string aa7="----------------------------------------------------------------------------";

- extern string autolot_="Настройки автолота";

- extern double Lots=0.1;                   // Фиксирвоанный лот 

- extern bool DynamicLot=false;             // Динамический лот

- extern double LotBalancePcnt=20;          // % от депозита

- extern double MinLot = 0.1;               // Минимальный лот при расчете

- extern double MaxLot = 5;                 // Максимальный лот при расчете

- extern double Martin=1; // Если 1 то не используется, Коэффициент мартина на следующую сделку после убытончой

- extern string aa8="----------------------------------------------------------------------------";

- extern string timetrade_="Настройки времени торговли";

- extern int OpenHour=0;                    // Час открытия торгов

- extern int OpenMinute=0;                  // Минута открытия торгов

- extern int CloseHour=23;                  // Час закрытия торгов

- extern int CloseMinute=59;                // Минута закрытия торгов

- extern string aa9="----------------------------------------------------------------------------";

- extern string Trailing_="Настройки трейлингстопа";

- extern bool TrailingStopUSE=false;        // Использовать трейлингстоп 

- extern bool IfProfTrail=false;            // Использовать только дял профитных позиций - режим безубытка

- extern int TrailingStop=0;                // Дистанция трейлинга = 0 - минимально допустимый

- extern int TrailingStep=1;                // Шаг дистанции

- extern string aa5="----------------------------------------------------------------------------";

- extern bool NFPuse=true;

- extern int Dist=0; // Дистанция ордера,

- extern int kolOrder=5;// Колличество ордеров вверх вниз - сетка

- extern double MnLot=2; // Множитель лотов

**MinMax Trade**
Принцип Работы Эксперта:
При запуске Эксперта — Эксперт выставляет 2 отложенных ордера Sellstop на Low прошлого дня и Buystop на High прошлого дня с дистанцией  StopOrderDeltaifUSE С Тейкпрофитом  TakeProfit

Если ни один ордер не сработал в конце дня — отложенники удаляются и ставятся новые отложенники на новые уровни

После того как 1 ордер ( Или sellstop или Buystop ) сработают и станут активными — второй несработавший ордер удалиться и на сработавшую позицию выставяться лимитные ордера Selllimit или Buylimit соответственно с дистанцией  Dist  в количестве  kolOrder и с множителем лотов:  MnLot

Как только активиируется лимитник — ТейкПрофит всех позиций переносится на Тейкпрофит этого лимитника.

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

Принцип эксперта заключается в пробое уровней прошлого дня.

## expforex — 2016-01-10 21:58

> Цитата (osvit):
> Кому не трудно поправьте сову. Выдает 7 ошибок. Заранее большое спасибо.

**Функция switсh в качестве выражения может принимать только Целые числа**
Если раньше через switсh можно было перебирать любые значения, то теперь данный оператор может принимать только целые числа в качестве сравнения, для того чтобы Ваша функция работала  дальше, Вам необходимо заменить ее на операторы сравнения if else
**Было: **
int Testswitchdouble()
  {
   double k1=1.432;
   int y;
   switch(k1)
     {
      case 1.432:y=1;break;
      case 1.433:y=2;break;
      case 1.434:y=3;break;
     }
  }
**Стало: **
int Testswitchdouble()
  {
   double k1=1.432;
   int y;
       if(k1== 1.432)y=1;
       if(k1==  1.433)y=2;
       if(k1==  1.434)y=3;
   return(y);
  }

Ошибка, которая возникает при неправильном коде: 'k1' - illegal switch expression type и  '1.432' - constant expression is not integral

## andiV — 2016-01-10 22:43

> Цитата (expforex):
> прикрепил советник торгующий по хай лоу - предыдущего закрытого дня
>
>
> настройки
> 

> 
- extern string aa6="----------------------------------------------------------------------------";
> 
- extern string trade_="Настройки торговли";
> 
- extern bool CorectStopLevelwServers=true; // Корректировка значений стопов StopLoss TakeProfit StopOrderDeltaifUSE TrailingStop на минимально возможный уровень, при этом параметры следует установить на -1
> 
- extern int Magic2=777;                     // Магический номер
> 
- extern int StopLoss=0;                    // Стоплосс, 0 - не используется
> 
- extern int TakeProfit=0;                  // Тейкпрофит , 0 - не используется
> 
- extern int Slippage=0;                    // Проскальзывание
> 
- extern bool MarketWatch=false;            // Режим торговли по MarketWatch true  = сначала выставляются позиции/ордера без стопов, потом происходит модификация - для некоторых брокеров
> 
- extern int StopOrderDeltaifUSE=100;         // Дистанция для отложенных ордеров
> 
- extern bool ClosePosifChange=true;        // Закрывать позиции при обратном сигнале
> 
- extern string aa7="----------------------------------------------------------------------------";
>
> 
- extern string autolot_="Настройки автолота";
> 
- extern double Lots=0.1;                   // Фиксирвоанный лот
> 
- extern bool DynamicLot=false;             // Динамический лот
> 
- extern double LotBalancePcnt=20;          // % от депозита
> 
- extern double MinLot = 0.1;               // Минимальный лот при расчете
> 
- extern double MaxLot = 5;                 // Максимальный лот при расчете
> 
- extern double Martin=1; // Если 1 то не используется, Коэффициент мартина на следующую сделку после убытончой
> 
- extern string aa8="----------------------------------------------------------------------------";
>
> 
- extern string timetrade_="Настройки времени торговли";
> 
- extern int OpenHour=0;                    // Час открытия торгов
> 
- extern int OpenMinute=0;                  // Минута открытия торгов
> 
- extern int CloseHour=23;                  // Час закрытия торгов
> 
- extern int CloseMinute=59;                // Минута закрытия торгов
> 
- extern string aa9="----------------------------------------------------------------------------";
>
> 
- extern string Trailing_="Настройки трейлингстопа";
> 
- extern bool TrailingStopUSE=false;        // Использовать трейлингстоп
> 
- extern bool IfProfTrail=false;            // Использовать только дял профитных позиций - режим безубытка
> 
- extern int TrailingStop=0;                // Дистанция трейлинга = 0 - минимально допустимый
> 
- extern int TrailingStep=1;                // Шаг дистанции
>
> 
- extern string aa5="----------------------------------------------------------------------------";
> 
- extern bool NFPuse=true;
> 
- extern int Dist=0; // Дистанция ордера,
> 
- extern int kolOrder=5;// Колличество ордеров вверх вниз - сетка
> 
- extern double MnLot=2; // Множитель лотов
> 

>
>
> **MinMax Trade**
> Принцип Работы Эксперта:
> При запуске Эксперта — Эксперт выставляет 2 отложенных ордера Sellstop на Low прошлого дня и Buystop на High прошлого дня с дистанцией  StopOrderDeltaifUSE С Тейкпрофитом  TakeProfit
>
> Если ни один ордер не сработал в конце дня — отложенники удаляются и ставятся новые отложенники на новые уровни
>
> После того как 1 ордер ( Или sellstop или Buystop ) сработают и станут активными — второй несработавший ордер удалиться и на сработавшую позицию выставяться лимитные ордера Selllimit или Buylimit соответственно с дистанцией  Dist  в количестве  kolOrder и с множителем лотов:  MnLot
>
> Как только активиируется лимитник — ТейкПрофит всех позиций переносится на Тейкпрофит этого лимитника.
>
> Как только Позиция с большим лотом закрывается по ТП — все остальные позиции и ордера удаляются — и мы получаем профит.
>
> Принцип эксперта заключается в пробое уровней прошлого дня.

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

## expforex — 2016-01-10 22:47

сорри. думал 0.00 это прошлый день.

## gek — 2016-01-11 09:54

Ребята,подскажите,как настроить алерт по стрелкам?
А то у меня каракули.:nda:

## clarmax — 2016-01-11 10:17

> Цитата (gek):
> Ребята,подскажите,как настроить алерт по стрелкам?
> А то у меня каракули.:nda:

Лови :)

---

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