Новая версия платформы MetaTrader 4 build 1031 - страница 10

 

Vitaly Muzichenko:
Кстати, вопрос: есть такая штука "MarketInfo(symb,MODE_MARGINCALCMODE)" 

(ENUM_SYMBOL_CALC_MODE)SymbolInfoInteger(symbol,SYMBOL_TRADE_CALC_MODE)

и "MarketInfo(symb,MODE_MARGINREQUIRED)" Чем это заменить в пятёрке?, может плохо искал, но ничего не нашёл.

Документация по MQL5: Торговые функции / OrderCalcMargin
Документация по MQL5: Торговые функции / OrderCalcMargin
  • www.mql5.com
Торговые функции / OrderCalcMargin - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
[]
 
Ashot Tovmasyan:

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

Простите, а я верно понимаю, что в тестере MT5 я не могу заглянуть в котировки дальше, чем на год назад?

Или я могу туда заглянуть?

У меня стратегия работает с трендовыми линиями высоких таймфремов, и для их строительства нужна история больше, чем год.

Интервал: Выбор периода.

 

 
Vladimir Zubov:

Выбор периода.

 

Я другое спрашивал.


В MT4 при старте прогона запрашивается 1000 баров в каждом таймфрейме (честно говоря это ограничение тоже напрягает, но ведь мы сейчас не об этом).

В MT5 я могу запросить любую котировку за пределами начала "периода тестирования"?

Или есть ограничение?

И если есть, то каково оно?

 

Интересует вопрос того, что нужно в индикаторе рассчитать процент, и простой замены MarketInfo(Symbol(),MODE_MARGINREQUIREDне нашёл. Чем это можно решить?

double cLot(double Percent=10) {
  double Free=AccountInfoDouble(ACCOUNT_FREEMARGIN),
         One_Lot=MarketInfo(Symbol(),MODE_MARGINREQUIRED), // <<<
         Step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

   return( MathFloor(Free*Percent/100/One_Lot/Step)*Step );
}
 
Vitaly Muzichenko:

Интересует вопрос того, что нужно в индикаторе рассчитать процент, и простой замены MarketInfo(Symbol(),MODE_MARGINREQUIREDне нашёл. Чем это можно решить?

double cLot(double Percent=10) {
  double Free=AccountInfoDouble(ACCOUNT_FREEMARGIN),
         One_Lot=MarketInfo(Symbol(),MODE_MARGINREQUIRED), // <<<
         Step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

   return( MathFloor(Free*Percent/100/One_Lot/Step)*Step );
}
Не понял проблемы, но сразу поиск находит решение.
 
Vitaly Muzichenko:

Интересует вопрос того, что нужно в индикаторе рассчитать процент, и простой замены MarketInfo(Symbol(),MODE_MARGINREQUIREDне нашёл. Чем это можно решить?

double cLot(double Percent=10) {
  double Free=AccountInfoDouble(ACCOUNT_FREEMARGIN),
         One_Lot=MarketInfo(Symbol(),MODE_MARGINREQUIRED), // <<<
         Step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

   return( MathFloor(Free*Percent/100/One_Lot/Step)*Step );
}

g Попробуйте такой вариант

double cLot(string symbol,double Percent=10,ENUM_ORDER_TYPE action=ORDER_TYPE_BUY)
  {
   double One_Lot=0.0; // <<<
   double price=0.0;
   double volume=0.0;
   double MinLot=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   double Free=AccountInfoDouble(ACCOUNT_FREEMARGIN);
   double Step=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
   if(action==ORDER_TYPE_BUY)price=SymbolInfoDouble(symbol,SYMBOL_ASK);
   if(action==ORDER_TYPE_SELL)price=SymbolInfoDouble(symbol,SYMBOL_BID);
   if(!OrderCalcMargin(action,symbol,1.0,price,One_Lot))return(MinLot);
   if(One_Lot1!=0 && Step!=0)volume = MathFloor(Free*Percent/100.0/One_Lot/Step)*Step;
   if(volume!=0)return(volume);
   return(MinLot);
  }


 ...

 
Sergey Gritsay:

g Попробуйте такой вариант

double cLot(string symbol,double Percent=10,ENUM_ORDER_TYPE action=ORDER_TYPE_BUY)
  {
   double One_Lot=0.0; // <<<
   double price=0.0;
   double volume=0.0;
   double MinLot=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   double Free=AccountInfoDouble(ACCOUNT_FREEMARGIN);
   double Step=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
   if(action==ORDER_TYPE_BUY)price=SymbolInfoDouble(symbol,SYMBOL_ASK);
   if(action==ORDER_TYPE_SELL)price=SymbolInfoDouble(symbol,SYMBOL_BID);
   if(!OrderCalcMargin(action,symbol,1.0,price,One_Lot))return(MinLot);
   if(One_Lot1!=0 && Step!=0)volume = MathFloor(Free*Percent/100.0/One_Lot/Step)*Step;
   if(volume!=0)return(volume);
   return(MinLot);
  }

Думаю, что так просто не получится. Поскольку считают индикатор, а там MARGINREQUIRED на каждом баре свой. Что в четверке, что в пятерке, самому считать надо.

 ...

 
Mislaid:
не совсем понял что значит на каждом баре свой?
 
Sergey Gritsay:

g Попробуйте такой вариант

double cLot(string symbol,double Percent=10,ENUM_ORDER_TYPE action=ORDER_TYPE_BUY)
  {

  }


 ...

Такой вариант отработал чётко, но только в советнике, в индикаторе выдаёт 0.01, что и стоило ожидать. Мне нужно считать в индикаторе, есть решение?

Причина обращения: