Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1203

 
Vladpedro:

МТ5

Пожалуйста подскажите, как реализовать увеличение лота в зависимости от баланса.

Но не по %, а по шагу на значение роста баланса.

При каждом приросте баланса на 1000$ я хочу увеличивать лот на шаг 0.1

Исходные у меня:  пара EUR/USD

Депозит  (баланс начальный) 1000$

Лот стартовый  0.1

 

Нужно.

Если депозит:

1000 то лот 0,1

2000 то лот 0,2

3000 то лот 0,3

И т.д.

Сейчас я использую такой метод:

И т.д. 

Но хотелось бы вместо этого бесконечного перечисления, какую то функцию.

Пытался сочинить её сам, но что то у меня не очень получилось.

Возможно из-за проблем с нормализацией...

Подскажите, может есть у кого то готовое решение или пример.

Обратите внимание на частное при делении депозита на 1000. При депозите < 2000 будет 1 целая и сколько-то десятых, сотых... которые не интересуют. При депозите 2000 будет уже 2 и так далее. Выходит, что целую часть этого частного достаточно умножить на 0.1 и получили что хотели.

А в вашем перечислении, хоть и незначительная, но ошибка. Правильно будет так

if (Balance>= 1000 && Balance<2000)  Lot = 0.1;
if (Balance>= 2000 && Balance<3000)  Lot = 0.2;
if (Balance>= 3000 && Balance<3000)  Lot = 0.3;
 
Vladpedro:

МТ5

Пожалуйста подскажите, как реализовать увеличение лота в зависимости от баланса.

Но не по %, а по шагу на значение роста баланса.

При каждом приросте баланса на 1000$ я хочу увеличивать лот на шаг 0.1

Исходные у меня:  пара EUR/USD

Депозит  (баланс начальный) 1000$

Лот стартовый  0.1

 

Нужно.

Если депозит:

1000 то лот 0,1

2000 то лот 0,2

3000 то лот 0,3

И т.д.

Сейчас я использую такой метод:

И т.д. 

Но хотелось бы вместо этого бесконечного перечисления, какую то функцию.

Пытался сочинить её сам, но что то у меня не очень получилось.

Возможно из-за проблем с нормализацией...

Подскажите, может есть у кого то готовое решение или пример.

Подберите операцию округления из MathCeil ,MathRound или MathFloor.

Пример как они работают:

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2018, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property version "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double start_balance=1000;
   double step_balance=1000;

   Print("Step ",DoubleToString(step_balance,1));

   for(int i=0; i<12; i++)
     {
      double division=start_balance/step_balance;
      Print("Balance ",DoubleToString(start_balance,1),
            ", division ",DoubleToString(division,1),
            ", MathCeil(",DoubleToString(division,1),") ->  ",MathCeil(division),
            ", MathRound(",DoubleToString(division,1),") ->  ",MathRound(division),
            ", MathFloor(",DoubleToString(division,1),") ->  ",MathFloor(division));
      start_balance=start_balance+step_balance/3;
     }
  }
//+------------------------------------------------------------------+

и результат

Step 1000.0
Balance 1000.0, division 1.0, MathCeil(1.0) ->  1.0, MathRound(1.0) ->  1.0, MathFloor(1.0) ->  1.0
Balance 1333.3, division 1.3, MathCeil(1.3) ->  2.0, MathRound(1.3) ->  1.0, MathFloor(1.3) ->  1.0
Balance 1666.7, division 1.7, MathCeil(1.7) ->  2.0, MathRound(1.7) ->  2.0, MathFloor(1.7) ->  1.0
Balance 2000.0, division 2.0, MathCeil(2.0) ->  2.0, MathRound(2.0) ->  2.0, MathFloor(2.0) ->  1.0
Balance 2333.3, division 2.3, MathCeil(2.3) ->  3.0, MathRound(2.3) ->  2.0, MathFloor(2.3) ->  2.0
Balance 2666.7, division 2.7, MathCeil(2.7) ->  3.0, MathRound(2.7) ->  3.0, MathFloor(2.7) ->  2.0
Balance 3000.0, division 3.0, MathCeil(3.0) ->  3.0, MathRound(3.0) ->  3.0, MathFloor(3.0) ->  3.0
Balance 3333.3, division 3.3, MathCeil(3.3) ->  4.0, MathRound(3.3) ->  3.0, MathFloor(3.3) ->  3.0
Balance 3666.7, division 3.7, MathCeil(3.7) ->  4.0, MathRound(3.7) ->  4.0, MathFloor(3.7) ->  3.0
Balance 4000.0, division 4.0, MathCeil(4.0) ->  5.0, MathRound(4.0) ->  4.0, MathFloor(4.0) ->  4.0
Balance 4333.3, division 4.3, MathCeil(4.3) ->  5.0, MathRound(4.3) ->  4.0, MathFloor(4.3) ->  4.0
Balance 4666.7, division 4.7, MathCeil(4.7) ->  5.0, MathRound(4.7) ->  5.0, MathFloor(4.7) ->  4.0

Я бы рекомендовал использовать MathFloor. 

Документация по MQL5: Математические функции / MathFloor
Документация по MQL5: Математические функции / MathFloor
  • www.mql5.com
Математические функции / MathFloor - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Файлы:
1.mq5  3 kb
 
Alexey Viktorov:

Обратите внимание на частное при делении депозита на 1000. При депозите < 2000 будет 1 целая и сколько-то десятых, сотых... которые не интересуют. При депозите 2000 будет уже 2 и так далее. Выходит, что целую часть этого частного достаточно умножить на 0.1 и получили что хотели.

А в вашем перечислении, хоть и незначительная, но ошибка. Правильно будет так

Alexey

Спасибо. Идею с делением на 1000 и приведением к целому понял, попробую реализовать.

<= поставил на автомате, не из кода. Ручками писал, а ручки они такие...)))

 
Vladimir Karputov:

Подберите операцию округления из MathCeil ,MathRound или MathFloor.

Пример как они работают:

и результат

Я бы рекомендовал использовать MathFloor. 

Спасибо, то что нужно.
 

Реализовал увеличение Лота от значения Баланса по предложенным выше методам.

double Balance=AccountInfoDouble(ACCOUNT_BALANCE);
//---
double Bal_Flor = Balance/1000;
Lots = MathFloor(Bal_Flor)*0.1;

Всё работает и получилось красиво, спасибо.

Но столкнулся с проблемой, когда при покупке 500 лотов происходит поломка.

2020.04.10 18:27:16.144 2015.01.23 11:04:40   CTrade::OrderSend: instant buy 480.90 position #13406 EURUSD at 1.12743 [done at 1.12743]
2020.04.10 18:27:16.144 2015.01.23 11:04:40   CloseAllPositions
2020.04.10 18:27:16.144 2015.01.23 11:04:40   instant buy 495.1 EURUSD at 1.12743, close #13418 (1.12731 / 1.12743 / 1.12731)
2020.04.10 18:27:16.144 2015.01.23 11:04:40   deal #13419 buy 495.1 EURUSD at 1.12743 done (based on order #13420)
2020.04.10 18:27:16.144 2015.01.23 11:04:40   deal performed [#13419 buy 495.1 EURUSD at 1.12743]
2020.04.10 18:27:16.144 2015.01.23 11:04:40   order performed buy 495.1 at 1.12743 [#13420 buy 495.1 EURUSD at 1.12743]
2020.04.10 18:27:16.145 2015.01.23 11:04:40   CTrade::OrderSend: instant buy 495.10 position #13418 EURUSD at 1.12743 [done at 1.12743]
2020.04.10 18:27:16.145 2015.01.23 11:04:40   -------------Закрыли по Эквити для Sell ---------------
2020.04.10 18:27:16.145 2015.01.23 11:04:40   failed sell limit 515.9 EURUSD at 1.13031 sl: 1.13493 tp: 1.12543 [Invalid volume]
2020.04.10 18:27:16.145 2015.01.23 11:04:40   CTrade::OrderSend: sell limit 515.90 EURUSD at 1.13031 sl: 1.13493 tp: 1.12543 [invalid volume]
2020.04.10 18:27:16.145 2015.01.23 11:04:40   Метод Sell_Limit() потерпел неудачу. Код возврата=10014. Описание кода: invalid volume
2020.04.10 18:27:16.147 2015.01.23 11:04:59   failed sell limit 527 EURUSD at 1.13058 sl: 1.13520 tp: 1.12570 [Invalid volume]
2020.04.10 18:27:16.147 2015.01.23 11:04:59   CTrade::OrderSend: sell limit 527.00 EURUSD at 1.13058 sl: 1.13520 tp: 1.12570 [invalid volume]
2020.04.10 18:27:16.147 2015.01.23 11:04:59   Метод Sell_Limit() потерпел неудачу. Код возврата=10014. Описание кода: invalid volume
2020.04.10 18:27:16.147 2015.01.23 11:05:00   failed sell limit 527 EURUSD at 1.13057 sl: 1.13521 tp: 1.12571 [Invalid volume]

Вопрос.

У нас в тестере, есть ограничения на покупку количества лотов?

Это как то можно обойти в тестере? 


 
Vladpedro:

Реализовал увеличение Лота от значения Баланса по предложенным выше методам.

Всё работает и получилось красиво, спасибо.

Но столкнулся с проблемой, когда при покупке 500 лотов происходит поломка.

Вопрос.

У нас в тестере, есть ограничения на покупку количества лотов?

Это как то можно обойти в тестере? 


Читать статью «Какие проверки должен пройти торговый робот перед публикацией в Маркете». Там описаны все проверки.
Какие проверки должен пройти торговый робот перед публикацией в Маркете
Какие проверки должен пройти торговый робот перед публикацией в Маркете
  • www.mql5.com
Все продукты Маркета перед публикацией проходят обязательную предварительную проверку, так как небольшая ошибка в логике советника или индикатора может привести к убыткам на торговом счете. Именно поэтому нами разработана серия базовых проверок, призванных обеспечить необходимый уровень качества продуктов Маркета. Если в процессе проверки...
 
Vladimir Karputov:
Читать статью «Какие проверки должен пройти торговый робот перед публикацией в Маркете». Там описаны все проверки.

Спасибо, почитал, посмотрел. Что то из этого уже использую.

Ограничения на покупку лотов. нашёл. Оно в свойствах символа.

Вопрос снят. 

 
 Доброго времени суток. Может кто в курсе - есть ли возможность убрать из подвала(separate windows) отображение значений индикатаров, которые возле название индикатора отображаются? Эти бегающие циферки,меняющиеся 150 раз за секунду, несущие 0 пользы при торговле, но при этом, при малом окне съедают прилично места.из-за них индюка не видно , когда он к верху подвала уходит...
 
добрый вечер,подскажите новичку-...


В случае приобретения соверника(5 копий) будут ли доступны все последующие обновления?Будут ли они бесплатны для всех 5 копий?

 
советника