Ошибки, баги, вопросы - страница 2686

 
Andrey Khatimlianskii:

100 мио проходов по 1 секунде на каждый — это 3.2 года расчетов на одном ядре ~ месяц беспрерывных расчетов на 32-ядерной машине.

Зачемнах?

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

Давайте байты в ex5 файле советника перебирать - может быть эти байты сами собой в граальный советник выстроятся. :))

 
Andrey Khatimlianskii:

100 мио проходов по 1 секунде на каждый — это 3.2 года расчетов на одном ядре ~ месяц беспрерывных расчетов на 32-ядерной машине.

Зачемнах?

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

Nikolai Semko:

А дальше -то что?
А дальше слив с оправданием - недостаточно "оптимизировали", нужен более мощный суперкомпьютер. 

будем надеяться на лучшее, ну и задачи оптимизации разные бывают, согласись не каждая оптимизация может пройди форвард-тест вправо от OOS и даже влево? ;)

ЗЫ: знаю, что чудес не бывает, но верить то хочется )))

 
Igor Makanu:

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

Так а работает, в общем, логично. Вместо запуска бесполезного и бесконечного перебора включается генетика. Можно было просто деактивировать кнопку Старт, но кому бы это помогло?

 
Andrey Khatimlianskii:

Так а работает, в общем, логично. Вместо запуска бесполезного и бесконечного перебора включается генетика. Можно было просто деактивировать кнопку Старт, но кому бы это помогло?

никакой самодеятельности не должно быть в софте, вот о чем речь, всё должно быть задокументированно, если написано "Полный перебор", значит должен быть полный, а условия переключения на любую другую оптимизацию должны быть прописаны в доках.

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

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

 
Andrey Dik:

никакой самодеятельности не должно быть в софте, вот о чем речь, всё должно быть задокументированно, если написано "Полный перебор", значит должен быть полный, а условия переключения на любую другую оптимизацию должны быть прописаны в доках.

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

В доках прописать, конечно. Или первый раз (для каждого советника) выводить алерт.

Но, в общем, это уже нормальная практика, что софт думает за тупого пользователя. Потому как пользователь действительно становится более тупым требовательным к интуитивному интерфейсу.


Andrey Dik:

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

Режим мат вычислений?

 
Andrey Khatimlianskii:

В доках прописать, конечно.

Режим мат вычислений?

вот.

и режим мат вычислений тоже.

 
Andrey Dik:

вот.

и режим мат вычислений тоже.

Там тоже ограничение на 100 мио?

 
Andrey Khatimlianskii:

Там тоже ограничение на 100 мио?

тоже

 
Andrey Kaunov:

В общем брокер упорно удаляет мой вопрос с форума. С третьего раза ответил какую то ересь в личку:

При этом функция на их же терминале MT4 выдаёт правильное значение.


P.S. В одной ветке оставили мой пост, но не ответа ни привета

https://forum.alpari.com/index.php?/topic/

Торгую с тем же брокером. Столкнулся с этой же проблемой. Разница в между валютами и золотом (а также индексами) в свойстве SYMBOL_TRADE_MODE.

Для для валют SYMBOL_TRADE_MODE = SYMBOL_CALC_MODE_FOREX, а для металлов и индексов SYMBOL_TRADE_MODE = SYMBOL_CALC_MODE_CFDLEVERAGE.

Похоже, что этот брокер или платформа для режима SYMBOL_CALC_MODE_CFDLEVERAGE не корректно рассчитывает свойства SYMBOL_TRADE_TICK_VALUE_PROFIT и SYMBOL_TRADE_TICK_VALUE_LOSS

Поэтому, для расчета символов в режиме SYMBOL_CALC_MODE_CFDLEVERAGE приходится дополнительно поприседать. Пользуюсь формулой из документации 

Profit:   (close_price - open_price) * Contract_Size*Lots

.

Вот пример функции, которая у этого брокера, рассчитывает объем позиции по цене открытия, цене стоп-лоса и максимальному убытку в валюте счета. У альпари работает корректно, на других брокерах пока не проверял.

double calcVolume(double sl, double price, double maxLoss){
   ENUM_SYMBOL_CALC_MODE cm = si.TradeCalcMode();       // si - внешняя переменная CSymbolInfo из стандартной библиотеки
   double priceDiff = MathAbs(price - sl); 
   double ticks = priceDiff/si.Point();         
   double lots;
   string convertSymbol;
   string accountCurrency = AccountInfoString(ACCOUNT_CURRENCY);
   Print("SL ticks: ", ticks);
   switch(cm) {
      case SYMBOL_CALC_MODE_FOREX:      
         // это для валютных пар
         lots = maxLoss / ticks / si.TickValueLoss();
         break;
      case SYMBOL_CALC_MODE_CFDLEVERAGE: 
         // а эти танцы с бубном для металлов и индексов
         lots = maxLoss / priceDiff / si.ContractSize();
         if (si.CurrencyProfit() != accountCurrency) {
            // валюту прибыли конвертируем в валюту депозита
            convertSymbol = si.CurrencyProfit() + accountCurrency + SymbolSuffix;
            double convert = SymbolInfoDouble(convertSymbol, SYMBOL_BID);
            if (convert != 0) {
               Print("Convert currency1 to ", convertSymbol, " convert bid: ", convert);            
               lots = lots / convert;
            }
            else {
               convertSymbol = accountCurrency + si.CurrencyProfit() + SymbolSuffix;
               convert = SymbolInfoDouble(convertSymbol, SYMBOL_ASK);
               Print("Convert currency2 to ", convertSymbol, " convert ask: ", convert);            
               lots = lots * convert;
            }
         }
         break;
      default:
         Print("ERROR need support calc for: ", EnumToString(cm));
         lots = 0;
         break;
   }
   double floorLots = MathFloor(lots / si.LotsStep()) * si.LotsStep();
   Print("raw lots: ", lots, ", floorLots: ", floorLots, " diff: ", NormalizeDouble(100*floorLots/lots, 2), "%");
   return floorLots;
}


  

 
Alexey Rassvetnyy:

Неправильно рассчитываются прибыли/убытки во всплывающей подсказке для buy stop limit ордеров и для sell stop limit ордеров.

Господа, представители компании MQ, зафиксирован ли описанный дефект? Ждать ли исправления в ближайших релизах?

Ссылка на оригинальный пост о дефекте.

https://www.mql5.com/ru/forum/1111/page2670#comment_15391563

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2020.03.11
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы