Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5 - страница 92

 

In order to find fast and easy e.g. closed positions I have to use:
Чтобы найти быстро и легко, например, закрытые позиции я должен использовать:

if ( PositionSelectByTicket( myTckt ) ) { // still open
    Trailing( myTckt, TrStop, TrStep ); // my traling function
} else { // most probably closed
    // here I'd really like to have a function: DealSelectByTicket( myTckt )
    // but I have to loop through all deals :(((
    int d = HistoryDealsTotal();
    while(d-->0) {
       ulong dTckt = HistoryDealGetTicket(d);
       if ( !HistoryDealSelect(dTckt) ) continue;
       if ( HistoryOrderGetInteger(dTckt, DEAL_ORDER) != myTckt ) continue;
       ...
   }
} // not tested yet!

Can you imagine how simple that would become if we would have function like:
Можете ли вы представить, насколько просто это стало бы, если бы у нас была такая функция:

DealSelectByTicket( myTckt )

which would select the deal acc. to the a.m loop similar to:
который выбрал бы сделку в соотв. к циклу AM, похожему на:

PositionSelectByTicket( myTckt )

Right now i have to find the deal ticket to find the ticket ticket.  :((

Прямо сейчас я должен найти билет предложения, чтобы найти билет билета.   :((

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Хорошо бы в настройках тестера иметь возможность указывать минимальное число баров для каждого TF, а то получается. что запуская советник на малом TF можно не получить нужной информации с верхних TF из-за нехватки баров для расчета индикаторов. В частности я тестирую на M1, а мне нужна информация с D1 за 360 баров... а баров столько нет в окне тестера.
 
Aleksey Vyazmikin:
Хорошо бы в настройках тестера иметь возможность указывать минимальное число баров для каждого TF, а то получается. что запуская советник на малом TF можно не получить нужной информации с верхних TF из-за нехватки баров для расчета индикаторов. В частности я тестирую на M1, а мне нужна информация с D1 за 360 баров... а баров столько нет в окне тестера.
void OnTick()
{
   if ( iBars( _Symbol, PERIOD_D1 ) < 360 ) return;
 
Andrey Khatimlianskii:

И в чем смысл? Что это даст?

 
Aleksey Vyazmikin:
Хорошо бы в настройках тестера иметь возможность указывать минимальное число баров для каждого TF, а то получается. что запуская советник на малом TF можно не получить нужной информации с верхних TF из-за нехватки баров для расчета индикаторов. В частности я тестирую на M1, а мне нужна информация с D1 за 360 баров... а баров столько нет в окне тестера.

Если каждую хотелку впихивать в Тестер, то во что он превратится? Эта задача может быть решена программно...

 
Aleksey Vyazmikin:
Хорошо бы в настройках тестера иметь возможность указывать минимальное число баров для каждого TF, а то получается. что запуская советник на малом TF можно не получить нужной информации с верхних TF из-за нехватки баров для расчета индикаторов. В частности я тестирую на M1, а мне нужна информация с D1 за 360 баров... а баров столько нет в окне тестера.

Почему нет? Кто не обеспечил?

 

Would it be possible to add the opening-price and the magic-number and possibly the opening time to the structure MqlTradeTransaction &trans of the function OnTradeTransaction()?

I save different indicator values when opening a position and I want to assign these values for statistical evaluation immediately when the position was closed e.g. depending on the result of the corresponding variable (structure). I do not want to loop through the history at the end of the tests I can do it easier this way!

The key categories would be e.g. profit or loss, closed by TP (fabs(trans.price-trans.price_tp)>..) or SL etc..

Unfortunately, I cannot calculate the amount of profit in points because the opening price is missing and is only accessible by a accessing the history. This is it unnecessarily cumbersome. :(

I get the magic number from MqlTradeRequest &request: request.magic.

But it would be easier if you could find everything in trans!

 Would be nice:

Можно ли добавить цену открытия и магический номер и, возможно, время открытия в структуру MqlTradeTransaction & trans функции OnTradeTransaction ()?

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

Ключевыми категориями могут быть, например, прибыль или убыток, закрытые с помощью TP (fabs (trans.price-trans.price_tp)> ..) или SL и т. Д.

К сожалению, я не могу рассчитать сумму прибыли в пунктах, потому что цена открытия отсутствует и доступна только при доступе к истории. Это излишне громоздко. :(

Я получил магический номер от MqlTradeRequest и запрос: request.magic.

Но было бы проще, если бы вы могли найти все в транс!

Было бы здорово:

void OnTradeTransaction(const MqlTradeTransaction &trans, 
                        const MqlTradeRequest &request, 
                        const MqlTradeResult &result) 
{ 
   if ( trans.type    != TRADE_TRANSACTION_HISTORY_ADD ) return; // nothing closed   
   if ( trans.symbol  != _Symbol )                       return; // 
   if ( request.magic != MyMagicNum )                    return; // why not even in trans as trans.magic ?
   datetime duration = TimeCurrent() - trans.time_open;          // <= I miss: trans.time_open
   if ( trans.order_type == ORDER_TYPE_BUY && request.price > request. ... (price_open?) ) { .. } // winner ...
   ...
} 
 
Rashid Umarov:

Почему нет? Кто не обеспечил?

Вот я и не понимаю, почему нет...

 

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

Баг компилятора. Не учитывает константность возвращаемого значения в операторах.

Alexey Navoykov, 2019.01.04 03:53

Билд 1966, 64 бита.  Компилятор не учитывает константность возвращаемого значения в операторах.

struct A
{
  char _a;
  
  A()         {  }
  A(const A&) {  }
  
  const A operator=(const A&) { return this; }
  
  const A f() { return this; }
};


void OnInit()
{
  A a;
  (a=a)=a; // Нет ошибки компиляции!
  
  a.f()=a; // Есть ошибка, как положено:  constant cannot be modified 
}

 
И ещё момент касательно неявного оператора копирования. У вас он имеет тип void, а в C++ он возвращает ссылку на объект.  Коль уж MQL пока не поддерживает ссылки, то можно было бы возвращать константную копию объекта, это хоть какой-то компромисс, дающий возможность использования константных методов у возвращаемого объекта.