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

 
leonerd:

А что значит шкала времени в стейтменте торговом?

Шкала X. Что значения на шкале обозначают?

Скажите, что значат эти цифры на графике в торговом стейтменте?

 
leonerd:

Скажите, что значат эти цифры на графике в торговом стейтменте?

Номер торговой операции приведшей к изменению баланса.

 
что то не сообразил сходу, вопрос "детский":

а как в МТ5 протестировать ТС без учета спреда? 

в МТ4 все сразу видно в тестере, в МТ5 нужно кастомный символ по Бид генерить?
 
Для работы с Json это лучшее или есть еще что то новее и правильнее?
JSON Serialization and Deserialization (native MQL)
JSON Serialization and Deserialization (native MQL)
  • www.mql5.com
ForecastOscilator_HTF The ForecastOscilator indicator with the timeframe selection option available in the input parameters. Flat_HTF The Flat indicator with the timeframe selection option available in the input parameters. FX5_SelfAdjustingRSI_HTF The FX5_SelfAdjustingRSI...
 
Igor Makanu:
что то не сообразил сходу, вопрос "детский":

а как в МТ5 протестировать ТС без учета спреда? 

в МТ4 все сразу видно в тестере, в МТ5 нужно кастомный символ по Бид генерить?

Можно попробовать открыть окно "Тестер стратегий", вкладка "Настройки" - возле символа нажимаете кнопку   и корректируете символ - поставьте спред "0".

 

МТ5

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

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

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

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

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

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

 

Нужно.

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

1000 то лот 0,1

2000 то лот 0,2

3000 то лот 0,3

И т.д.

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

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

И т.д. 

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

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

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

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

Пара EUR/USD: технический анализ, новости Forex, фундаментальный анализ - Блоги трейдеров и аналитика финансовых рынков
Пара EUR/USD: технический анализ, новости Forex, фундаментальный анализ - Блоги трейдеров и аналитика финансовых рынков
  • www.mql5.com
Валютная пара EUR/USD — самая ликвидная, поскольку в ней участвуют первая и вторая по значимости мировые резервные валюты. Это подтверждается и статистически: доллар и евро самые крупные по объему
 
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

Спасибо, то что нужно.
Причина обращения: