# Как я собираю себе советника методом тыка - страница 34

2343

разобрался как, правильно прописать риск

```#define Magic_Number 0
```
```//+------------------------------------------------------------------+
//| Enum Lor or Risk                                                 |
//+------------------------------------------------------------------+
enum ENUM_LOT_OR_RISK
{
lots=0,     // Constant lot
risk=1,     // Risk in percent
};
//+------------------------------------------------------------------+```

```input double   MaximumRisk             = 0.01;          // Maximum Risk in percentage
input double   DecreaseFactor          = 3;             // Descrease factor
input ENUM_LOT_OR_RISK InpLotOrRisk    = lots;          // Money management: Lot OR Risk```
```   //+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
{
double price=0.0;
double margin=0.0;
//--- select lot size
return(0.0);
return(0.0);
if(margin<=0.0)
return(0.0);
double lot=0;
//---
switch(InpLotOrRisk)
{
case lots:
lot=MaximumRisk;
break;
case risk:
lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_MARGIN_FREE)*MaximumRisk/margin,2);
default:
break;
}
//--- calculate number of losses orders without a break
if(DecreaseFactor>0)
{
//--- select history for access
HistorySelect(0,TimeCurrent());
//---
int    orders=HistoryDealsTotal();  // total history deals
int    losses=0;                    // number of losses orders without a break

for(int i=orders-1; i>=0; i--)
{
ulong ticket=HistoryDealGetTicket(i);
if(ticket==0)
{
break;
}
//--- check symbol
if(HistoryDealGetString(ticket,DEAL_SYMBOL)!=_Symbol)
continue;
//--- check Expert Magic number
if(HistoryDealGetInteger(ticket,DEAL_MAGIC)!=Magic_Number)
continue;
//--- check profit
double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
if(profit>0.0)
break;
if(profit<0.0)
losses++;
}
//---
if(losses>1)
lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//--- normalize and check limits
double stepvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
lot=stepvol*NormalizeDouble(lot/stepvol,0);

double minvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
if(lot<minvol)
lot=minvol;

double maxvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
if(lot>maxvol)
lot=maxvol;
return(lot);

}
//+------------------------------------------------------------------+```

надо поправить в Эксперте - а то там, не правильно

2343

переименовал - эксперт завершён. все ошибки исправлены. Название < Ход конём  ><Horse move>

Файлы:
Horse_move.mq5 190 kb
2343

Aleksandr Klapatyuk:

Добавил к предыдущему Эксперту , два способа  для Горизонтальной линии.

1 возможность : линия 1 откроет линию 4на заданном расстоянии, линия 2 откроет линию 3 на заданном расстоянии .

2 возможность: линия 7 откроет линию 10 на заданном расстоянии, которая движется за ценой и как цена коснётся , сработает команда . линия 8 откроет линию 9 на заданном расстоянии,- те же, действия как у 7 и 10

#property version     "1.01"

Оказалась ещё возможность - линия 1 откроет 4 и 9.  линия 2 откроет 3 и 10.

линия 7 откроет 10 и 3 .  линия 8 откроет 9 и  4

```input string   t3="------ Obj:Name 1-2-3-4 ------";     // Имя Объекта
input string   InpObjUpNameZ           = "TOP 1";       // Obj: TOP (Name Obj) ВВЕРХУ 1
input string   InpObjDownNameZ         = "LOWER 2";     // Obj: LOWER (Name Obj) ВНИЗУ 2
input int      Step                    = 5;             // Obj: Шаг сетки, пунктов(0 = false)
input string   InpObjDownName0         = "TOP 3";       // Obj: TOP (Name Obj) ВВЕРХУ 3
input string   InpObjUpName0           = "LOWER 4";     // Obj: LOWER (Name Obj) ВНИЗУ 4
```input string   t5="- 2_Obj:Trailing Line 7-8-9-10 --- ";// Trailing Obj:Line
input string   InpObjUpNameZx          = "TOP 7";       // Obj: TOP (Name Obj) ВВЕРХУ 7
input string   InpObjDownNameZx        = "LOWER 8";     // Obj: LOWER (Name Obj) ВНИЗУ 8
input int      StepZx                  = 5;             // Obj: Шаг сетки, пунктов(0 = false)
input string   InpObjUpNameX           = "TOP 9";       // Obj: TOP (Horizontal Line) ВВЕРХУ 9
input string   InpObjDownNameX         = "LOWER 10";    // Obj: LOWER (Horizontal Line) ВНИЗУ 10
input ushort   InpObjTrailingStopX     = 5;             // Obj: Trailing Stop (distance from price to object, in pips)
input ushort   InpObjTrailingStepX     = 5;             // Obj: Trailing Step, in pips (1.00045-1.00055=1 pips)```

чтобы позиции открывались на оборот и не трогать настройки Obj:  command:

есть реверс -

```input string   t6="------ Obj: Revers Buy and Sell --"; // Obj: Revers Buy and Sell
input bool     ObjRevers               = false;         // Obj: Revers
```
Файлы:
Horse_move.mq5 190 kb
2.mq5 17 kb
2343

Aleksandr Klapatyuk:

#property version     "1.01"

Оказалась ещё возможность - линия 1 откроет 4 и 9.  линия 2 откроет 3 и 10.

линия 7 откроет 10 и 3 .  линия 8 откроет 9 и  4

чтобы позиции открывались на оборот и не трогать настройки Obj:  command:

есть реверс -

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

2343

не чё так! потихоньку - но прибавляет

2343

да! он прямо прёт

5287

Aleksandr Klapatyuk:

переименовал - эксперт завершён. все ошибки исправлены. Название < Ход конём  ><Horse move>

Интересный советник.

2343

установил в настройках  input double   TargetProfit            = 30000.00;     // Целевая прибыль

наверное мало - надо было больше. теперь по новой надо ждать, точки входа и установил цель  TargetProfit            = 35000.00;     // Целевая прибыль

```//+------------------------------------------------------------------+
input string   t0="------ Parameters --------";         // Настройка Эксперта
input string   Template                = "ADX";         // Имя шаблона(without '.tpl')
input datetime HoursFrom               = D'1970.01.01'; // Время старта Эксперта
input datetime HoursTo                 = D'2030.12.31'; // Время закрытия всех позиций
input double   TargetProfit            = 900000.00;     // Целевая прибыль
input uint     maxLimits               = 1;             // Кол-во Позиции Открыть в одну сторону
input double   MaximumRisk             = 0.01;          // Maximum Risk in percentage
input double   DecreaseFactor          = 3;             // Descrease factor
input ENUM_LOT_OR_RISK InpLotOrRisk    = lots;          // Money management: Lot OR Risk```

открывает позиции от индикатора pivot lines timezone.mq5 от линии R2 -вниз  S2-вверх

индикатор можно не удалять - его линии обновляются наследующий день

индикатор ниже - сейчас поищу на сайте ссылку на индикатор https://www.mql5.com/ru/code/1114

Файлы:
2343

Aleksandr Klapatyuk:

установил в настройках  input double   TargetProfit            = 30000.00;     // Целевая прибыль

наверное мало - надо было больше. теперь по новой надо ждать, точки входа и установил цель  TargetProfit            = 35000.00;     // Целевая прибыль

открывает позиции от индикатора pivot lines timezone.mq5 от линии R2 -вниз  S2-вверх

индикатор можно не удалять - его линии обновляются наследующий день

индикатор ниже - сейчас поищу на сайте ссылку на индикатор https://www.mql5.com/ru/code/1114

это - один из вариантов. но вариантов миллион

забыл сказать про лот - установил на риск  input ENUM_LOT_OR_RISK InpLotOrRisk    = lots;          // Money management: Lot OR Risk

(информация эксперта в .log) какие выдаёт предупреждения  https://www.mql5.com/ru/docs/event_handlers/ondeinit
Документация по MQL5: Обработка событий / OnDeinit
• www.mql5.com
//| Expert initialization function                                   | //| Expert deinitialization function                                 | //| Возвращает текстовое описания причины деинициализации            |
Файлы:
20191107.log 272 kb
2343

#property version     "1.02"

нашёл ещё один способ для кнопок

```//+------------------------------------------------------------------+
//| Enum ENUM_BUTTON                                                 |
//+------------------------------------------------------------------+
enum ENUM_BUTTON
{
Button0=0,  // ВЫКЛ
Button1=1,  // ВКЛ
Button2=2,  // ВКЛ: AVGiS
};
//+------------------------------------------------------------------+```

здесь выбираем

```input string   t9="------ Button: AVGiS -----";         // AVGiS (Или обычный режим Buy/Sell)
input ENUM_BUTTON Buttons              = Button0;       // Вкл: Копки Buy/Sell
input bool     ObjectLineX             = false;         // Button: Horizontal Line(true) || Buy/Sell(false)
input bool     TickRevers              = false;         // Button: Revers
input int      TrailingStop_STOP_LEVEL = 350;           // Trailing Stop LEVEL
input ENUM_TIMEFRAMES _period          = PERIOD_CURRENT;// period
input int      limit_total_symbol      = 190;           // limit_total_symbol
input int      limit_total             = 190;           // limit_total
//---```

при открытии позиции - сразу выставляется стоп лосс (жёлтая Горизонтальная линия

настраивается здесь -input double   InpStopLoss             = 55;            // Obj: Stop Loss, in pips (1.00045-1.00055=1 pips)

отключить ставим 0

```input string   t2="------ Obj:Trailing Line     --- ";  // Trailing Obj:Line
input double   InpStopLoss             = 55;            // Obj: Stop Loss, in pips (1.00045-1.00055=1 pips)
input ushort   InpObjTrailingStop      = 27;            // Obj: Trailing Stop (distance from price to object, in pips)
input ushort   InpObjTrailingStep      = 9;             // Obj: Trailing Step, in pips (1.00045-1.00055=1 pips)```
Файлы:
Horse_move.mq5 198 kb
2.mq5 17 kb
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий