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

 
Vladislav Andruschenko:

в таблице же указаны следующие значения:

 

 

Fill or Kill

SYMBOL_FILLING_FOK

1

This policy means that a deal can be executed only with the specified volume. If the necessary amount of a financial instrument is currently unavailable in the market, the order will not be executed. The required volume can be filled using several offers available on the market at the moment.

Immediate or Cancel

SYMBOL_FILLING_IOC

2

In this case a trader agrees to execute a deal with the volume maximally available in the market within that indicated in the order. In case the order cannot be filled completely, the available volume of the order will be filled, and the remaining volume will be canceled. The possibility of using IOC orders is determined at the trade server.

Return

No identifier

 

This policy is used only for market orders (Buy and Sell), limit and stop limit orders and only for the symbols with Market or Exchange execution. In case of partial filling a market or limit order with remaining volume is not canceled but processed further.

 

 Но здесь наверно перепутаны данные! 

Вы не дочитали справку

Для каждого инструмента может быть установлен не один режим, а несколько через комбинацию флагов. Комбинация флагов выражается операцией логического ИЛИ (|), например, SYMBOL_FILLING_FOK|SYMBOL_FILLING_IOC.  Чтобы проверить разрешенность конкретного режима для инструмента, необходимо результат логического И (&) сравнить с флагом режима.

 

Для символов свойство SYMBOL_FILLING_MODE означает комбинацию флагов - то есть описывает какие режимы заполнения при торговле этим символом разрешены.

Вы пробовали выполнить сделать проверку как написано в документации?

В режимах исполнения "По запросу" и "Немедленный" для рыночных ордеров всегда используется политика заполнения Все/Ничего, а для лимитных ордеров - режим "Вернуть". В данном случае, при от отсылке ордеров функциями OrderSend или OrderSendAsync тип заполнения для них можно не указывать.

В режимах исполнения "По рынку" и "Биржевой" политика заполнения "Вернуть" всегда разрешена для всех типов ордеров. Разрешенность остальных типов проверяется при помощи свойств SYMBOL_FILLING_FOK и SYMBOL_FILLING_IOC.

Пример:

//+------------------------------------------------------------------+
//| проверяет разрешенность указанного режима заполнения             |
//+------------------------------------------------------------------+
bool IsFillingTypeAllowed(string symbol,int fill_type)
  {
//--- получим значение свойства, описывающего режим заполнения
   int filling=(int)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
//--- вернем true, если режим fill_type разрешен
   return((filling&fill_type)==fill_type);
  }

 


 
Rashid Umarov:

Для символов свойство SYMBOL_FILLING_MODE означает комбинацию флагов - то есть описывает какие режимы заполнения при торговле этим символом разрешены.

Вы пробовали выполнить сделать проверку как написано в документации?


помогло такое решение 

         switch((int)SymbolInfoInteger(Symbol(), SYMBOL_FILLING_MODE))
   {
   case SYMBOL_FILLING_FOK:
      request.type_filling=ORDER_FILLING_FOK;
      break;
   case SYMBOL_FILLING_IOC:
      request.type_filling=ORDER_FILLING_IOC;
      break;
   default:
      request.type_filling=ORDER_FILLING_RETURN;
   }
 
Vladislav Andruschenko:

помогло такое решение 

Если прочитать справку внимательнее, то увидите, что не обрабатывается случай, когда доступны оба режима - значение SymbolInfoInteger будет (SYMBOL_FILLING_FOK | SYMBOL_FILLING_IOC).
 

А проверить можно на сервере "RoboForex-MetaTrader 5" вот таким кодом:

//+------------------------------------------------------------------+
//|                                                 Info_FILLING.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property description "Варианты исполнения ордера по объему"
#include<Trade\Trade.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
// Все/Ничего     SYMBOL_FILLING_FOK   1
// Все/Частично   SYMBOL_FILLING_IOC   2
// Вернуть        Идентификатор отсутствует
   Print("Все/Ничего: ",IsFillingTypeAllowed(Symbol(),SYMBOL_FILLING_FOK));
   Print("Все/Частично: ",IsFillingTypeAllowed(Symbol(),SYMBOL_FILLING_IOC));
   Print("Вернуть: ",IsFillingTypeAllowed(Symbol(),NULL));

   CTrade oTrade;
   switch((int)SymbolInfoInteger(Symbol(),SYMBOL_FILLING_MODE))
     {
      case SYMBOL_FILLING_FOK:
         Print("ORDER_FILLING_FOK");
         break;
      case SYMBOL_FILLING_IOC:
         Print("ORDER_FILLING_IOC");
         break;
      default:
         Print("ORDER_FILLING_RETURN");
     }
  }
//+------------------------------------------------------------------+ 
//| проверяет разрешенность указанного режима заполнения             | 
//+------------------------------------------------------------------+ 
bool IsFillingTypeAllowed(string symbol,int fill_type)
  {
//--- получим значение свойства, описывающего режим заполнения 
   int filling=(int)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
//--- вернем true, если режим fill_type разрешен 
   return((filling&fill_type)==fill_type);
  }
//+------------------------------------------------------------------+

И результат распринтовки:

2015.12.22 18:13:09.946 Info_FILLING (AUDCAD.m,D1)      Все/Ничего: true
2015.12.22 18:13:09.946 Info_FILLING (AUDCAD.m,D1)      Все/Частично: true
2015.12.22 18:13:09.946 Info_FILLING (AUDCAD.m,D1)      Вернуть: true
2015.12.22 18:13:09.946 Info_FILLING (AUDCAD.m,D1)      ORDER_FILLING_RETURN


Видно, что вариант со switch сообщает нам неправду. А вот пример из документации даёт полную картину.

 

Что за траблы с 

MarketInfo(Symbol(),MODE_MARGININIT) и SymbolInfoDouble(Symbol(),SYMBOL_MARGIN_INITIAL)

Почему они возвращают нули ????? 

 
Vladimir Pastushak:

Что за траблы с 

MarketInfo(Symbol(),MODE_MARGININIT) и SymbolInfoDouble(Symbol(),SYMBOL_MARGIN_INITIAL)

Почему они возвращают нули ????? 

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

Расчет залоговых средств

Ошибки, MetaTrader 5 MQL5, Открыта, Начата: 2015.07.13 16:23, #1259415 

 

Вот пример из справки MQL5 : 

SYMBOL_CALC_MODE_FOREX

Forex mode – расчет прибыли и маржи для Форекс

Margin:  Lots*Contract_Size/Leverage

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

и так какой тип рынка не возьми везде формулы весьма сомнительные.. 

А сегодня выяснилось что MarketInfo(Symbol(),MODE_MARGININIT) и SymbolInfoDouble(Symbol(),SYMBOL_MARGIN_INITIAL)   возвращают нули. 

А вот на этом ресурсе то же странные сочинения, https://metaquotes5.wordpress.com/2012/08/  насколько я понимаю это блог MetaQuotes.

What are Expert Magic Numbers?
  • 2012.08.11
  • skebanga
  • metaquotes5.wordpress.com
Expert magic numbers are ids given to a particular expert advisor. Care should be taken to ensure the ids are unique. This is because the magic number is used by the MetaTrader back end to know which expert advisor to send information to. For example, when a trade notification is...
 
Кругом враги. Мы никому не нужны, кроме наших женщин в день зарплаты. 
 
Алексей Тарабанов:
Кругом враги. Мы никому не нужны, кроме наших женщин в день зарплаты. 

Алексей приветствую 

Если можешь переписать индикатор  iPulsar на МТ5 ,перепиши пожалуйста  - да в кода базу 

Спасибо  


 

Здравствуйте коллеги!

Прошу прощения, намусорил на главной, пока эту ветку не увидел. 

Подскажите как решить проблему: советник МТ5 на ФОРТСе при установке ордера BAY_STOP или SELL_STOP постоянно выдает ошибку 10022: "Неверная дата истечения ордера в запросе".

Дата истечения мне не важна, но не могу подобрать параметры, при которых ордер просто установится. На форексе такой проблемы не возникает. Брокер ОТКРЫТИЕ. Ошибка возникает в тестере. 


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