Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1404

 

Я надеюсь, что перевод будет верным, но очевидно, что это не так...

Именно по этой и другим причинам нам НЕ НУЖНЫ ГЛОБАЛЬНЫЕ ТРЕЙДЫ...

Иначе у нас не было бы региональных форумов...

Странный ход...

:(

 
Здравствуйте! Для ускорения оптимизации и возможности оптимизировать работу стратегии на малых ТФ, таких, как М1, М2 и т.п., собрал компьютер с 24мя ядрами. Запускаю и вижу, что процесс периодически стопорится и зависает на длительное время. Присоединяю три картинки об этом. На старом компе (8 ядер) и ничего подобного не происходит. Более того, в результате такого торможения нет выгоды в применении мощного компьютера. В настоящее время вижу, что 8 ядерный дает результат быстрее, чем 24х.  А хотел получить 10 кратное ускорение процесса. Возможно где-то надо что-то настроить? Подскажите, пожалуйста, если кто знает, в чем может быть дело.
 

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

Хочу сделать универсальный включаемый файл, который можно включить к любому EA. И чтоб дело ограничивалось лишь одним инклюдом без всякого доп. кода.

Проблема в том, что файл использует OnTimer() как точку входа.

Что делать, если EA (к которому подключается мой включаемый файл) тоже использует OnTimer()? Есть ли решение?

 

Добрый день. Торгую на фондовом рынке Moex. Брокер Открытие. Если открыты позиции по нескольким инструментам, робот при отправке запроса на их частичное закрытие их путает (может отправить запрос с ценой акций Сбербанка для акций Магнита например. Т.е. инструмент в запросе указан Магнит, а цены указаны для Сбера) либо просто не отправляет запрос. Код алгоритма закрытия для позиции Long (запускается при достижении цены инструмента Price_Close_1_Buy):

void Price_Close_1_Buy()
  {

   MqlTradeRequest arequest;
   MqlTradeResult aresult;
   ZeroMemory(arequest);
   ZeroMemory(aresult);

   for(int i=PositionsTotal()-1; i>=0; i--)
      {
       if(Symbol()==PositionGetSymbol(i))
      {
       arequest.action   = TRADE_ACTION_DEAL;
       arequest.position = PositionGetTicket(i);
       arequest.symbol   = Symbol();
       arequest.volume   = NormalizeDouble((Lots_Close_1/100*Lots_current()),0);
       arequest.price    = aposition.PriceCurrent();
       arequest.type_filling = ORDER_FILLING_FOK;
       arequest.type     = ORDER_TYPE_SELL;
       Price_Close_1_Buy_Request_Send = true;
      }
       OrderSend(arequest,aresult);
       Print("=================================================================================================== ");
       Print(asymbol.Name());
       Print("Price_Close_1_Buy_request() ",arequest.price);
       Print("Lots_Close_1_Buy_request() ",arequest.volume);
       Print("Result ", aresult.comment);
       Print("Retcode ",aresult.retcode);
      }
  }
 
leonerd #:

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

Хочу сделать универсальный включаемый файл, который можно включить к любому EA. И чтоб дело ограничивалось лишь одним инклюдом без всякого доп. кода.

Проблема в том, что файл использует OnTimer() как точку входа.

Что делать, если EA (к которому подключается мой включаемый файл) тоже использует OnTimer()? Есть ли решение?

Не делайте так никогда.

Просто совет. Переубеждать не собираюсь.

 
Manter84 #:

Добрый день. Торгую на фондовом рынке Moex. Брокер Открытие. Если открыты позиции по нескольким инструментам, робот при отправке запроса на их частичное закрытие их путает (может отправить запрос с ценой акций Сбербанка для акций Магнита например. Т.е. инструмент в запросе указан Магнит, а цены указаны для Сбера) либо просто не отправляет запрос. Код алгоритма закрытия для позиции Long (запускается при достижении цены инструмента Price_Close_1_Buy):

По вопросу цены - копать
aposition.PriceCurrent()
 
Koldun Zloy #:

Не делайте так никогда.

Просто совет. Переубеждать не собираюсь.

Таковы требования проекта.

 

А как переопределить дефолтный OrderSend()?

#define OrderSend(MqlTradeRequest,MqlTradeResult)  MyOrderSend(MqlTradeRequest,MqlTradeResult)

Добавил строку сверху.

В своей MyOrderSend() я делаю кое-какие вычисления и вызываю опять же OrderSend(). Т.е. хотелось бы вызвать нативный OrderSend(), а вместо этого получаю рекурсию и вызывается снова MyOrderSend().

И такой вызов тоже не помогает ::OrderSend()
 
leonerd Ядобавил строку выше.

В моей функции MyOrderSend() я делаю некоторые вычисления и снова вызываю OrderSend(). Я хочу вызвать родную функцию OrderSend(), но вместо этого я получаю рекурсию, и MyOrderSend() вызывается снова.

Это вообще не работает. #define заменяет первое (вызов) на второе в коде программы, так как OrderSend(...) заменяется на MyOrderSend(...) каждый раз, когда это происходит.

 
Carl Schreiber #:

Это вообще не работает. #define заменяет первое (вызов) на второе в коде программы, так как OrderSend(...) заменяется на MyOrderSend(...) каждый раз, когда это происходит.

да, а у меня получилось... я #define просто поместил под своей MyOrderSend().

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