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

 

Этот баг когда будет побежден.

2018.01.20 11:38:31.470 Core 1  agent process started
2018.01.20 11:38:41.466 Core 1  connecting to 127.0.0.1:3000
2018.01.20 11:39:00.318 Core 1  tester agent authorization error

Невозможно нормально тестер использовать!

 

Почему этот простейший код компилируется так долго на i7?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

MetaEditor build 1490

fxsaber, 2016.12.04 12:43

void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result )
{
  Print(ToString(Trans) + ToString(Request) + ToString(Result));
}

#define TOSTRING(A)  #A + " = " + (string)(A) + "\n"
#define TOSTRING2(A) #A + " = " + EnumToString(A) + "\n"

string ToString( const MqlTradeTransaction &Trans )
{
  return(TOSTRING(Trans.deal) + TOSTRING(Trans.order) + TOSTRING(Trans.symbol) +
         TOSTRING2(Trans.type) + TOSTRING2(Trans.order_type) + TOSTRING2(Trans.order_state) +
         TOSTRING2(Trans.deal_type) + TOSTRING2(Trans.time_type) +
         TOSTRING(Trans.time_expiration) + TOSTRING(Trans.price) + TOSTRING(Trans.price_trigger) +
         TOSTRING(Trans.price_sl) + TOSTRING(Trans.price_tp) + TOSTRING(Trans.volume) +
         TOSTRING(Trans.position) + TOSTRING(Trans.position_by));
}

string ToString( const MqlTradeRequest &Request )
{
  return(TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
         TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) +
         TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) +  TOSTRING(Request.tp) +
         TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
         TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
         TOSTRING(Request.position) + TOSTRING(Request.position_by));
}

string ToString( const MqlTradeResult &Result )
{
  return(TOSTRING(Result.retcode) + TOSTRING(Result.deal) + TOSTRING(Result.order) +
         TOSTRING(Result.volume) + TOSTRING(Result.price) + TOSTRING(Result.bid) +  
         TOSTRING(Result.ask) + TOSTRING(Result.comment) + TOSTRING(Result.request_id) +  
         TOSTRING(Result.retcode_external));
}
0 error(s), 0 warning(s), compile time: 2372 msec
 

Здравствуйте,

У меня такая проблема в тестере:

На счету 100000 рублей. Хочу зайти в лонг лимитированной заявной на 5 контрактов, но получаю ошибку о том, что недостаточно денег на счёте.

Вот сделал код для примера, чтобы посмотреть как тестер расчитывает маржу для входа:

   double margin;
   OrderCalcMargin(ORDER_TYPE_SELL_LIMIT,symbol,Vol,symbol_info.MarginInitial(),margin);
   Print("Margin to Open SELL LIMIT=",margin);
   
   if (!OrderCalcMargin(ORDER_TYPE_BUY_LIMIT,symbol,Vol,symbol_info.MarginInitial(),margin)) Print("Last Error=",GetLastError());
   Print("Margin to Open BUY LIMIT=",margin);
   
   OrderCalcMargin(ORDER_TYPE_SELL,symbol,Vol,symbol_info.MarginInitial(),margin);
   Print("Margin to Open SELL=",margin);
   
   OrderCalcMargin(ORDER_TYPE_BUY,symbol,Vol,symbol_info.MarginInitial(),margin);
   Print("Margin to Open BUY=",margin);
    
   Print("Free Margin=",account.FreeMargin());
     
//--- все готово, отправляем на сервер отложенный ордер Buy Limit
   if(!trade.BuyLimit(Vol,price,symbol,0,0))
     {
      Print("Метод BuyLimit() потерпел неудачу. Код возврата=",trade.ResultRetcode(),
            ". Описание кода: ",trade.ResultRetcodeDescription());     
     }
   else 
     {
      Print("Метод BuyLimit() выполнен успешно. Код возврата=",trade.ResultRetcode(),
            " (",trade.ResultRetcodeDescription(),")");
     }

Вот, что вижу в журнале:

2018.02.02 13:23:56.236 Core 01 2018.01.30 00:00:00   Тип счета: ACCOUNT_TRADE_MODE_DEMO
2018.02.02 13:23:56.236 Core 01 2018.01.30 00:00:00   Торговля на данном счете разрешена
2018.02.02 13:23:56.236 Core 01 2018.01.30 00:00:00   Автоматическая торговля на счете разрешена
2018.02.02 13:23:56.236 Core 01 2018.01.30 00:00:00   АО ''Открытие Брокер'': server Open-Broker
2018.02.02 13:23:56.236 Core 01 2018.01.30 00:00:00   Balance=100000.0  Profit=0.0   Equity=100000.0
2018.02.02 13:23:56.236 Core 01 2018.01.30 00:00:00   OnInit  completed
2018.02.02 13:23:56.236 Core 01 2018.01.30 00:00:00   RTS-3.18 (Фьючерсный контракт RTS-3.18)  Bid=127640.0   Ask=127690.0
2018.02.02 13:23:56.236 Core 01 2018.01.30 00:00:00   StopsLevel=0 pips, FreezeLevel=0 pips
2018.02.02 13:23:56.236 Core 01 2018.01.30 00:00:00   Digits=0, Point=1
2018.02.02 13:23:56.236 Core 01 2018.01.30 00:00:00   SpreadFloat=true, Spread(текущий)=50 pips
2018.02.02 13:23:56.236 Core 01 2018.01.30 00:00:00   Ограничения на торговые операции: SYMBOL_TRADE_MODE_FULL (Full access)
2018.02.02 13:23:56.236 Core 01 2018.01.30 00:00:00   Режим исполнения сделок: SYMBOL_TRADE_EXECUTION_EXCHANGE (Exchange execution)
2018.02.02 13:23:56.236 Core 01 2018.01.30 00:00:00   Вычисление стоимости контракта: SYMBOL_CALC_MODE_EXCH_FUTURES_FORTS (Calculation for FORTS futures)
2018.02.02 13:23:56.236 Core 01 2018.01.30 00:00:00   Размер стандартного контракта: 1.0 (RUR)
2018.02.02 13:23:56.236 Core 01 2018.01.30 00:00:00   Volume info: LotsMin=1.0  LotsMax=100000.0  LotsStep=1.0
2018.02.02 13:23:56.236 Core 01 2018.01.30 00:00:00   Гарантийное обеспечение инструмента = 14675.75
2018.02.02 13:23:56.236 Core 01 2018.01.30 00:00:00   Щаг цены = 11.23786
2018.02.02 13:23:56.236 Core 01 2018.01.30 00:00:00   OnInit  completed
2018.02.02 13:23:56.236 Core 01 2018.01.30 18:00:01   ГО=14675.75
2018.02.02 13:23:56.236 Core 01 2018.01.30 18:00:01   Margin to Open SELL LIMIT=795299.0
2018.02.02 13:23:56.236 Core 01 2018.01.30 18:00:01   Margin to Open BUY LIMIT=0.0
2018.02.02 13:23:56.236 Core 01 2018.01.30 18:00:01   Margin to Open SELL=110068.0
2018.02.02 13:23:56.236 Core 01 2018.01.30 18:00:01   Margin to Open BUY=110068.0
2018.02.02 13:23:56.236 Core 01 2018.01.30 18:00:01   Free Margin=100000.0
2018.02.02 13:23:56.236 Core 01 2018.01.30 18:00:05   buy limit 5.00 RTS-3.18 at 128220 (128180 / 128190 / 128180)
2018.02.02 13:23:56.236 Core 01 2018.01.30 18:00:05   current account state: Balance: 100000.00, Credit: 0.00, Commission: 0.00, Accumulated: 0.00, Assets: 0.00, Liabilities: 0.00, Equity 100000.00, Margin: 66016.00, FreeMargin: 33984.00
2018.02.02 13:23:56.236 Core 01 2018.01.30 18:00:05   calculated account state: Assets: 0.00, Liabilities: 0.00, Equity 100000.00, Margin: 110068.00, FreeMargin: -10068.00
2018.02.02 13:23:56.236 Core 01 2018.01.30 18:00:05   not enough money for order [#2 buy limit 5.00 / 5.00 RTS-3.18 at 128220]
2018.02.02 13:23:56.236 Core 01 2018.01.30 18:00:05   CTrade::OrderSend: buy limit 5.00 RTS-3.18 at 128220 [done]
2018.02.02 13:23:56.236 Core 01 2018.01.30 18:00:05   Метод BuyLimit() выполнен успешно. Код возврата=10009 (done)

Не понимаю в чём проблема. Почему OrderCalcMargin(ORDER_TYPE_BUY_LIMIT.. выдаёт 0 и говорит, что нет ошибок. Хотя я пытался открыть шорт позицию лимитированной заявной и возникала такая же проблема, что недостаточно денег.

Я специально проверил и зашёл в лонг и в шорт на реальном счету, там всё работает. Ошибка с маржой именно в тестере.

В чём может быть проблема?

 
a18psrock:

Здравствуйте,

У меня такая проблема в тестере:

На счету 100000 рублей. Хочу зайти в лонг лимитированной заявной на 5 контрактов, но получаю ошибку о том, что недостаточно денег на счёте.

Вот сделал код для примера, чтобы посмотреть как тестер расчитывает маржу для входа:

Вот, что вижу в журнале:

Не понимаю в чём проблема. Почему OrderCalcMargin(ORDER_TYPE_BUY_LIMIT.. выдаёт 0 и говорит, что нет ошибок. Хотя я пытался открыть шорт позицию лимитированной заявной и возникала такая же проблема, что недостаточно денег.

Я специально проверил и зашёл в лонг и в шорт на реальном счету, там всё работает. Ошибка с маржой именно в тестере.

В чём может быть проблема?



попробуйте OrderCalcMargin(ORDER_TYPE_BUY);

 
Vladislav Andruschenko:



попробуйте OrderCalcMargin(ORDER_TYPE_BUY);

Пробовал. Пишет Margin to Open BUY=110068. По идее должно 100000 должно хватить чтобы открыть сделку на 5 контрактов. На реальном счёте нормально открывает. А в тестере получаю ошибку. 

 
a18psrock:

Пробовал. Пишет Margin to Open BUY=110068. По идее должно 100000 должно хватить чтобы открыть сделку на 5 контрактов. На реальном счёте нормально открывает. А в тестере получаю ошибку. 


я про то, что даже если Вы открываете байлимит, маржу считайте от БАЙ

и Вам тестер говорит, что для открытия 5 лотов надо 110068 поэтому 100000 явно мало на 10068

 
a18psrock:

Пробовал. Пишет Margin to Open BUY=110068. По идее должно 100000 должно хватить чтобы открыть сделку на 5 контрактов. На реальном счёте нормально открывает. А в тестере получаю ошибку. 

OrderCalcMargin

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

Если бы у Вас на счете были доллары и плечо 1:1, вернуло бы 100тыс., а так возвращает залог в рублях.

 
Vladislav Andruschenko:


я про то, что даже если Вы открываете байлимит, маржу считайте от БАЙ

и Вам тестер говорит, что для открытия 5 лотов надо 110068 поэтому 100000 явно мало на 10068

Это я понял. Просто странно почему тестер не умеет считать правильно маржу для лимитированных заявок, которая значительно меньше.

 
Добавьте в колесо навигации мобильного терминала на андроид МТ5 и МТ4 смену торгового инструмента.
 
когда уж появятся опционы ?
Причина обращения: