Группа "Стол заказов MQL"

Рейтинг 2087



РЕКОМЕНДУЮ



Советник-полуавтомат с регулируемым уровнем маржинкола

Добрый день.
Прошу написать советник-полуавтомат с регулируемым уровнем маржинкола.
Советник запускается с панели путем выбора направления торговли и нажатием кнопки «Купить» или «Продать».
В дальнейшем советник сам открывает или закрывает отдельные позиции.
Кнопкой «Закрыть» пользователь закрывает принудительно все позиции по советнику.(условно: if(Закрыть)CloseAll();)  )
Логика советника-
1. В настройках указывается регулируемый уровень маржи в % (условно: extern double marginlevel = 133;) 
В настройках указывается % от депо подвергаемый риску (условно: extern double risk = 1;) 
2. Если уровень маржи опускается ниже заданного, то советник закрывает ЧАСТЬ какой ни будь позы и уровень маржи
подрастает до необходимого уровня.
3. Если уровень маржи подымается выше заданного, то советник доливается и уровень маржи падает до необходимого уровня.
4. Выбирать направление входа в рынок при помощи кнопок на панели.
5. Формула расчета объемов: lots = risk * equity / MarketInfo(Symbol(), MODE_MARGINREQUIRED) — LOT;,

где:

risk — % от депо подвергаемый риску.

lots — объем на который нужно долить позу по инструменту, если значение положительное.
Если lots — число отрицательное, то абсолютное значение указывает количество лотов,
на которое нужно закрыть какую нибудь позу по инструменту.

LOT — общий объем всех поз уже открытых по инструменту.

С расчетом лотов разобрался, привожу код может пригодится:
RefreshRates();
double lots=0;
//----------
double buylot=0,selllot=0;
int i,tip;
for (i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
tip = OrderType();
if (tip==OP_BUY)
{
buylot+=OrderLots();
}
if (tip==OP_SELL)
{
selllot+=OrderLots();
}
}
}
}
//----------
RefreshRates();
double max_lots = NormalizeDouble((risk*AccountEquity()/(MarketInfo(Symbol(),MODE_MARGINREQUIRED))-(buylot+selllot)),3);
if (max_lots>MarketInfo(Symbol(),MODE_MAXLOT)) max_lots=MarketInfo(Symbol(),MODE_MAXLOT);
double min_lot = MarketInfo(Symbol(),MODE_MINLOT);
double step = MarketInfo(Symbol(),MODE_LOTSTEP);
if (max_lots < min_lot) {lots=0; Print(«Нет денег!!!»);}
if (max_lots < min_lot+step) lots=min_lot;
else lots=min_lot + step*MathFloor((max_lots-min_lot)/step);
if(lots==0 || OrdersTotal()>=100){return;}

Таким образом советник постоянно поддерживает заданный пользователем уровень маржи.
Задача пользователя верно определить направление торговли.
Угадали с направлением — нас ждет пирамидинг и профит.
Не угадали — медленный слив депозита.
Спасибо.
  • +1
  • Просмотров: 2092
  • 23 января 2020, 15:59
  • ssg
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Буферы в индикатор StLevel
Следующая запись в группе  
Простой индикатор для МТ5.
22 января 2020
23 января 2020

Комментарии (7)

+
0
А прикольно *good* 
avatar

  22  igrun Сообщений: 1572 - igrun

  • 23 января 2020, 16:03
+
0
Добавляем трендовую линию, и работаем в плюс(любую машку)
avatar

  12  Slava78 Сообщений: 598

  • 23 января 2020, 16:18
+
0
Есть у меня такой профессиональный сов, только не помню как называется, платный, со складки.
avatar

  11  andre71g Сообщений: 168 - andre71g

  • 23 января 2020, 16:39
+
0
не берусь
avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 23 января 2020, 17:27
+
0
Возможно я возьмусь. Пока не решил…
avatar

  13  axe44 Сообщений: 1149 - Алек

  • 24 января 2020, 03:30
+
0
Нужно код выложить в рамки «код»
avatar

  13  axe44 Сообщений: 1149 - Алек

  • 24 января 2020, 03:32
+
0
Вы говорили:
2. Если уровень маржи опускается ниже заданного, то советник закрывает ЧАСТЬ какой ни будь позы и уровень маржи
подрастает до необходимого уровня.
3. Если уровень маржи подымается выше заданного, то советник доливается и уровень маржи падает до необходимого уровня.

Ну не всё так просто. На самом деле если есть сетка покупок, а рынок падает, то уменьшение позиций не увеличивает баланс, а морж ( тут бы хорошо подошёл бы смайлик Бишопа :D  ) ожидаемо расти не станет. Потом размер располагаемого кошелька на покупки позиций в инструменте может уменьшаться от свопов, уменьшения плеча брокером, и увеличиваться по тем же причинам. Есть и другие факторы влияющие на размер кошелька. Потом не понятно как быть с базовыми понятиями такими как цена за позицию, если расстояние между уровнями меньше.

В общем подумайте над логикой и пришлифуйте в нормальном понимании этого слова, а потом приходите. *pardon* 
avatar

  13  axe44 Сообщений: 1149 - Алек

  • 24 января 2020, 03:53

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари