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

 
fxsaber:

Верно ли, что SymbolInfoTick в MT4/5-индикаторах возвращает не тот тик, который вызвал Calculate-событие?

Как правило, это - тот самый тик.

Вы очень странно формулируете вопросы.

- На любой вопрос можно ответить "да" или "нет"!

- Ты давно бросила пить коньяк по утрам? Отвечай сейчас же, да или нет?

(ц) Астрид Линдгрен

 
Slava:

Как правило, это - тот самый тик.

Если пришла пачка из трех тиков, то Calculate-событие вызовется три раза, но SymbolInfoTick будет возвращать самый поздний тик на каждом из этих трех вызовов. Т.е. так называемый сбор тиков без пропусков через индикаторы, мягко говоря, сомнительный.

 
Почему после установки CustomSymbolSetDouble(symbol, SYMBOL_VOLUME_MIN, 0.00035) и CustomSymbolSetDouble(symbol, SYMBOL_VOLUME_STEP, 0.00035) функция SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN)  возвращает 0.0003, а SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP) возвращает 0.01?
 

Очень неприятный баг с кастомными символами. Тиковая история кастомных символов может полностью пропасть.

Несколько раз уже с этим столкнулся. Никаких Custom-записей не делаю. Работаю только на чтение тиков. И в определенный момент, вдруг, вся история пропадает. CopyTicks возвращает нули без ошибок. Средствами GUI - аналогично. tkc становится 1 Кб, а было несколько миллионов тиков.

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

 
Ivan Titov:
Почему после установки CustomSymbolSetDouble(symbol, SYMBOL_VOLUME_MIN, 0.00035) и CustomSymbolSetDouble(symbol, SYMBOL_VOLUME_STEP, 0.00035) функция SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN)  возвращает 0.0003, а SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP) возвращает 0.01?

Даже средствами GUI такие значения не получится установить


 
A100:

В таком виде С++ тоже выдает ошибку E2015

E2015 это неоднозначность.

А в примере fxsaber похоже на то что остается сгенерированный компилятором неконстантный оператор (с объектом в параметрах) и он выбирается.

А происходит это потому что оператор присваивания не должен быть константным

(имхо)

 
fxsaber:

Даже средствами GUI такие значения не получится установить


Как тогда установить для кастомного BTCUSD размер контракта, минимальный лот, размер пункта, шаг цены, чтобы можно было купить минимум 0.00035 BTC (некоторые биржи это делать позволяют)

 
Ivan Titov:

Как тогда установить для кастомного BTCUSD размер контракта, минимальный лот, размер пункта, шаг цены, чтобы можно было купить минимум 0.00035 BTC (некоторые биржи это делать позволяют)

Кастомные символы могут содержать и вот такие ограничения. Благодаря Вашим сообщениям разработчики эти случайные (нельзя все учесть) ограничения могут снять. Пишите в СД для этого.

 

В индикаторе

::ChartWindowFind() возвращает -1 (другими словами не работает)

void OnTimer() не работает по факту, при том что ::EventSetTimer возвращает true

//Test.mq5//Скрипт
void OnStart()
{
        string name = "Test_i";
        ObjectCreate( 0, name, OBJ_CHART, 0, 0, 0 );
        long chart_id = ObjectGetInteger( 0, name, OBJPROP_CHART_ID );
        ChartIndicatorAdd( chart_id, 1, iCustom( NULL, PERIOD_CURRENT, name ));
}

//Test_i.mq5//Индикатор
#property indicator_separate_window
void OnInit()
{
        ResetLastError();
        bool b = EventSetTimer( 5 );
        Print( "1:", b,          ":", GetLastError());
        ResetLastError();
        int sub_window = ChartWindowFind();
        Print( "2:", sub_window, ":", GetLastError());  
}
void OnTimer() { Print( __FUNCTION__ ); }
int OnCalculate( const int, const int, const int, const double& [] ) { return 0; }

Запускаем скрипт Test.mq5

Результат: 1:true:0
                 2:-1:4113

Сообщения от таймера отсутствуют

 
A100:

В индикаторе

::ChartWindowFind () возвращает -1 (другими словами не работает)

Подокно в OBJ_CHART появляется?