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

 
Vitaly Muzichenko:

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

у меня нет, тут есь формулы расчета маржи может сообразишь как это использовать https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vitaly Muzichenko:

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

есть у меня такой код расчета лота, но в него нужно передавать размер стоплосса в пипсах

 

double volume(string symbol,double risk,double sl)
  {
   double lot=0.0;
   double procent=0.0;
   double MinLot=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   double MaxLot=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
   double balans=0.0;
   double tc = SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE);
   double tv = SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE_LOSS);
   double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
   double LotStep=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
   if(Type_Balanse==Balance) balans=AccountInfoDouble(ACCOUNT_BALANCE);
   if(Type_Balanse==Equity) balans=AccountInfoDouble(ACCOUNT_EQUITY);
   if(Type_Balanse==FreeMargin) balans=AccountInfoDouble(ACCOUNT_MARGIN_FREE);
   procent=(balans/100.0)*risk;

   switch((ENUM_SYMBOL_CALC_MODE)SymbolInfoInteger(symbol,SYMBOL_TRADE_CALC_MODE))
     {
      case SYMBOL_CALC_MODE_FOREX:
         if(sl!=0 && tv!=0)
           {
            Print("balans = ",balans," :sl = ",sl,": tv = ",tv);
            Print("(sl*tv) =" ,(sl*tv));
            Print("procent =" ,procent);          
            lot=procent/(sl*tv);
            Print("lot=procent/(sl*tv) =" ,lot);
           }
         break;
      case SYMBOL_CALC_MODE_FUTURES:if(sl!=0 && point!=0 && tv!=0 && ts!=0) lot=procent/(sl*point*(tv/ts));break;
      case SYMBOL_CALC_MODE_CFD:if(sl!=0 && point!=0 && tc!=0) lot=procent/(sl*point*tc);break;
      case SYMBOL_CALC_MODE_CFDINDEX:if(sl!=0 && point!=0 && tc!=0) lot=procent/(sl*point*tc);break;
      case SYMBOL_CALC_MODE_CFDLEVERAGE:if(sl!=0 && point!=0 && tc!=0) lot=procent/(sl*point*tc);break;
      case SYMBOL_CALC_MODE_EXCH_STOCKS:if(sl!=0 && point!=0 && tc!=0) lot=procent/(sl*point*tc);break;
      case SYMBOL_CALC_MODE_EXCH_FUTURES:if(sl!=0 && point!=0 && tv!=0 && ts!=0) lot=procent/(sl*point*(tv/ts));break;
      case SYMBOL_CALC_MODE_EXCH_FUTURES_FORTS:if(sl!=0 && point!=0 && tv!=0 && ts!=0) lot=procent/(sl*point*(tv/ts));break;
     }
   return(NormalizeVolume(symbol,lot));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double NormalizeVolume(string symbol,double lot)
  {
   double MinLot=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   double MaxLot=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
   double volume_step=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
   int volume_digits=(int)(MathLog(1.0/volume_step)/MathLog(10.0));

   if(lot<MinLot)lot=MinLot;
   if(lot>MaxLot)lot=MaxLot;

   return(NormalizeDouble(lot,volume_digits));
  }
//+------------------------------------------------------------------+

 ...

 
Sergey Gritsay:

есть у меня такой код расчета лота, но в него нужно передавать размер стоплосса в пипсах

 

double volume(string symbol,double risk,double sl)
   return(NormalizeDouble(lot,volume_digits));
  }
//+------------------------------------------------------------------+

 ...

Со стопом не годиться, у меня такой есть, нужен именно такой, чтоб сразу и на все 100%, как предыдущий - всё чётко, но чтоб работал в индикаторе.

Спасибо! 

 
Sergey Gritsay:
не совсем понял что значит на каждом баре свой?
При курсе EURUSD 1.50 при плече 500 MarginRequared 3.00 USD. При курсе 1.10 при тех же условиях 2.20
 
Mislaid:
При курсе EURUSD 1.50 при плече 500 MarginRequared 3.00 USD. При курсе 1.10 при тех же условиях 2.20
Ну так и передавайте в в функцию OrderCalcMargin соответствующую цену
 
В терминале при открытии подменю трейлинг стоп предлагаются стандартные значения трейлинга от 15 до 50 пунктов с шагом 5 пунктов. Но беда в том что эти пункты рассчитаны на 4 х значные котировки, а на пятизнаке они работают как от 1.5 пункта до 5 пунктов. Это не удобно и приходится вбивать значения вручную. Может есть переключатель терминала где, с 4 х знака на 5 знак?
 

Перестают запускаться советники.

Сразу после старта терминала все ОК, работает некоторое время(сутки-двое)  без проблем...

...затем в один прекрасный момент исчезает возможность загрузить/перегрузить советник. Кроме того, если теряется коннект, сам уже не восстановится - нужно перегружать терминал.

 Прим.

Запись 2017 01 20 10 01 36 3
Запись 2017 01 20 10 01 36 3
  • 2017.01.20
  • www.youtube.com
MT4-1031
 
И кому помешали цифры в поле "Имя" при регистрации демо-счёта...
 
НАДПИСИ В ТЕРМИНАЛЕ СТАЛИ НЕЧИТАЕМЫ.....ЭТО ПОСЛЕ ОБНОВЛЕНИЯ ...У МЕНЯ ВИНДА 10...ПОМОГИТЕ ПОЖАЛУЙСТА
Файлы:
mh2jf7sawe.png  104 kb
 
Mihail77:
НАДПИСИ В ТЕРМИНАЛЕ СТАЛИ НЕЧИТАЕМЫ.....ЭТО ПОСЛЕ ОБНОВЛЕНИЯ ...У МЕНЯ ВИНДА 10...ПОМОГИТЕ ПОЖАЛУЙСТА
Поставьте в Control Panel -> Clock, Language and Region -> Region -> Administrative -> Change system locale: Russian и перезапустите компьютер.
Причина обращения: