Разработчики! Вы вообще тестируете то, что создаёте? - страница 9

 
Mikalas:

С-4 На мой взгляд получение оперативной информации, гораздо

интересней истории. Нам нужно знать две вещи по инструменту:

1. Ордера

2. Позиция

А мне кажется гораздо важней анализировать трейды, т.к. они на самом низком уровне и по ним можно узнать и ордера и позиции, а вот обратное не верно. Ну да бог с ними.

OnInit() у Вас исполняется один раз, в начале программы.В нем, внутри for, зашит блок нужных проверок. Однако блок проверок должен быть один. Он синхронизирует состояние советника с текущей ситуацией. И без разницы, с какой стороны к нему поступили новые данные, из истории ордеров в момент инициализации, из истории в момент выполнения или из события OnTradeTransaction. Результат должен быть идентичным, т.к. блок отвечающий за него тоже только один. 

 

Василий - это "примитивный" кусок кода.

Здесь всё просто - Вы берете ордер и дальше работаете с ним....

my_order = temp_order;

 Одна строчка!

 
papaklass:

А нужно ли вообще событие OnTradeTransaction в текущем виде?

Выходит что как бы и нет, раз все равно приходится брать информацию из истории.
 

Mikalas:

Я только заметил, что продукт НЕОБХОДИМО тестировать(я тестирую его за СВОИ деньги)!

предположу, что это уход от темы.

ну так что, журнал и код даешь?

я тут помогать настроен.

 
C-4:
Выходит что как бы и нет, раз все равно приходится брать информацию из истории.

Вот те, раз! А в истории она достоверная?

papaklass имел в виду, наверно, что OnTradeTransaction возвращает ошибки?  

 

sergeev -> я тут помогать настроен.

Извините, но я не нуждаюсь в помощи. 

 
Mikalas:

sergeev -> я тут помогать настроен.

Извините, но я не нуждаюсь в помощи. 

а зачем слюни на 9 страниц ?
 
Mikalas:

Василий - это "примитивный" кусок кода.

Здесь всё просто - Вы берете ордер и дальше работаете с ним....

 Одна строчка!

Дело не в том, одна это строчка или сто. А дело в подходе. О.к. вот код для примера, что бы понять, что я имею в виду. Он гарантированно отслеживает поступление новых ордеров с событием TradeTransaction или без него, неважно, инициализация это или приход нового ордера:

/*Какое бы событие не наступило, оно будет обработано OnRefresh()*/

OnInit()
{
    OnRefresh();
}

void OnTimer(void)
{
    OnRefresh();
}

void  OnTradeTransaction(
      const MqlTradeTransaction&    trans,
      const MqlTradeRequest&        request,
      const MqlTradeResult&         result
   )
{
     OnRefresh();
}

///
/// Следит за поступлением новых трейдов и ордеров.
///

void OnRefresh()
{
    HistorySelect(0, TimeCurrent());
    for(; ordersCountNow < HistoryOrdersTotal(); ordersCountNow++)
    {  
       printf(HistoryOrderGetTicket(dealsCountNow));
    }
}

///
/// Текущее количество ордеров.
///
int ordersCountNow;
 
papaklass:

Об этом и речь.

Почему этот OnTradeTransaction не разделить по отдельным событиям:

- OnOrderCreate //выставление ордера;

- OnOrderModify //модификация действующего ордера;

- OnOrderDelete //удаление ордера;

- OnPositionOpen //открытие позиции;

- OnPositionModify //установка/модификация стопов изменение объема позиции;

- OnPositionClosed //закрытие позиции по стопп-лосу или рыночным ордером; 

и так далее.

При таком подходе трейдер будет подписываться и обрабатывать те события, которые его интересуют.

Я и получаю все интересующие меня события, там как раз есть разделение!
 

С-4, будет обработано, конечно, но зачем нужен OnRefresh()?

Всё разделяется в OnTradeTransaction(). Я не испытываю недостатка в информации. 

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