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

 

Как скопировать (с сохранением относительных путей) все файлы проекта в отдельную папку.

Вот, например, хочу поделиться кодом. Он тянет десяток/другой mqh-файлов из разных мест.

Сейчас приходится выискивать вручную эти файлы, часто не все находишь или что-то лишнее берешь. Как автоматизировать этот процесс, чтобы можно было делиться исходниками?

 

Как удалить проект со всеми своими файлами?

Вот скачал через терминал из кодобазы проект на десяток файлов, а как это удалить?

 

Ошибка при компиляции

class A {};
template<typename T> //---------------------------------------------------//(1)
T *f( T* t ) { return t; }              //      A *f(       A* )          //(2)
                                        //const A *f( const A* )          //(3)
template<typename T> //---------------------------------------------------//(4)
T *f( T* t, const T* ) { return t; }    //      A *f(       A*, const A* )//(5)
void OnStart()
{
    const A *a;
    const A *a1 = f( a );    //ошибка не обоснована: T -> const A, и в отсутствии (6) применимо (3)
          A *a2 = f( a );    //ошибка    обоснована, но по другой причине: A* = const A*
                  f( a, a ); //ошибка    обоснована, но по другой причине: T -> A, и отсутствует f(const A*,const A*)
}

(*) В общем случае в шаблоне (1) вместо T возможна подстановка как A->(2), так и const A->(3). В отличие например от шаблона (4), где вместо T возможна подстановка только A->(5).  

Сейчас работает только подстановка A->(2), и для полноценного использования приходится делать вместо одного - два шаблона:

template<typename T> //---------------------------------------------------//(1)
      T *f(       T* t ) { return t; }
template<typename T> //---------------------------------------------------//(6)
const T *f( const T* t ) { return t; }

Замечание: Явное определение (6) имеет более высокий приоритет над общим случаем (*)

Итого: Ожидалось, что в отсутствии шаблона (6) будет применен шаблон (1) с сигнатурой (3)   

 
A100:
Очень прошу Вас выложить что-нибудь в кодобазу! Для образовательных целей.
 
1) Обновление открытых позиций и торговой истории в MT5 после вызова OrderSend происходит с некоторой задержкой? Если да, какой рекомендуется timeout для ожидания?

2) Такой же вопрос для MT4, для сравнения.
 

RickD:
1) Обновление открытых позиций и торговой истории в MT5 после вызова OrderSend происходит с некоторой задержкой? Если да, какой рекомендуется timeout для ожидания?

MT5-OrderSend НЕ полностью синхронизирован - с торговым окружением синхронизации нет. Это значит, что показания истории не соответствуют реальному положению вещей.

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

Фактически, MT5-пользователи столкнулись с тем, с чем сталкивались разработчики бриджей на MT4.

Если отправляется OrderSend, то надо ЗАПОМНИТЬ (вот здесь потенциальная уязвимость), что это сделано. Далее не обращать внимание на текущую историю (торговое окружение), пока не придет соответствующее сообщение в OnTrade. Как только оно прийдет, ЗАПОМНЕННОЕ нужно ЗАБЫТЬ.

Когда нет ЗАПОМНЕННЫХ данных, можно доверять истории, как в MT4. 

2) Такой же вопрос для MT4, для сравнения.
MT4-OrderSend ПОЛНОСТЬЮ синхронизирован.
 

Версия и битность терминала

Version: 5.00, build 1445 (07.10.2016), 32 bit.

Описание проблемы

В индикаторе не удаётся скопировать данные стандартных индикаторов (встроенных в МТ5)  с другого таймфрейма (отличающегося от текущего таймфрейма графика на котором установлен индикатор). При этом "хэндл" стандартного индикатора получить удаётся, но функция CopyBuffer() постоянно возвращает значение -1. В тестере в режиме визуализации данная проблема не возникает, а в терминале на графике (к которому добавлен индикатор) проблема присутствует постоянно.

Последовательность действий

Описана выше.

Полученный результат

Описан выше.

Ожидаемый результат

Корректное копирование в индикаторе данных стандартных (и пользовательских желательно тоже) индикаторов с других таймфреймов.

Дополнительные сведения

В более ранних "билдах" данная проблема не возникала.

Кто-нибудь сталкивался с подобной проблемой? "Баг" терминала или мой?

 

fxsaber:

...Если отправляется OrderSend, то надо ЗАПОМНИТЬ (вот здесь потенциальная уязвимость), что это сделано. Далее не обращать внимание на текущую историю (торговое окружение), пока не придет соответствующее сообщение в OnTrade. Как только оно прийдет, ЗАПОМНЕННОЕ нужно ЗАБЫТЬ...

Либо у меня память дырявая, либо обновилась Документация в части OnTrade:

...Если вызов функции OrderSend() завершился успешно и вернул значение true – это означает, что торговый сервер поставил ордер в очередь на исполнение и присвоил ему номер тикета. Как только сервер обработает данный приказ, будет сгенерировано событие Trade. И если пользователь запомнил значение тикета, то при обработке события OnTrade() он может по этому тикету выяснить что именно случилось с ордером...

Другими словами, срабатывание OnTrade на i-том шаге - гарантия того, что ордер принят на сервере.

 
Dennis Kirichenko:

Либо у меня память дырявая, либо обновилась Документация в части OnTrade:

Другими словами, срабатывание OnTrade на i-том шаге - гарантия того, что ордер принят на сервере.

Запоминание тикета (не факт, что он будет возвращен OrderSend) или самого факта того, что OrderSend с true-возвратом был сделан, НЕОБХОДИМО.
 
fxsaber:
Запоминание тикета (не факт, что он будет возвращен OrderSend) или самого факта того, что OrderSend с true-возвратом был сделан, НЕОБХОДИМО.

Все у них там нормально, размещение заявки нужно контролировать через OnTradeTransaction, кстати если напрямую подключиться к бирже через Plaza2 то ситуация такая же - нужно контролировать приход сообщений о размещении заявки. А в МТ4 данная функция синхронная, но такой же вариант есть и в МТ5, только в этом случае у вас логика будет останавливаться пока функция не получит ответ.

Если нужно, то могу класс контроля скинуть, правда он запилен под рыночное размещение, но скоро буду его дорабатывать под лимитники. 

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