ФОРТС Прошу помощи - страница 10

 
Mikalas:

И ещё "читающий" Вы наш... Вопрос:

Для чего делают билд таймсерии, если данные готовы ( CopyTime(symbol,period,first_date+PeriodSeconds(period),1,times) )?

Они не готовы. Они, возможно, есть на диске. Даже, вполне вероятно, синхронизированы с историей сервера (если чарт открыт или другая программа недавно их запрашивала).

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

 

Но вам не поможет ни этот мой ответ, ни многократные ответы разработчиков, ни работающий код, ни документация. Функция не работает так, как вы себе придумали, в этом месте сбой.

 
antt:

Внимательнее читайте документацию, не выборочно. Наличие данных истории на диске вовсе не означает для терминала "ТОЧНО есть". В данном случае (при обращении из индикатора), функции работают только с кэшем таймсерии в памяти. Т.е. происходит моментальное синхронное обращение к памяти, и если там нет подготовленной таймсерии, то и дату SERIES_FIRSTDATE (первого элемента массива) вам не вернут. Но запрос конечно инициирует подготовку-загрузку таймсерии в память.

Запрос SERIES_TERMINAL_FIRSTDATE связан с инициализацией базы и с синхронизацией ее с сервером, т.е. первое обращение в любом случае моментально не отработает.

Принципиальная возможность получения необходимой истории проверяется через SERIES_SERVER_FIRSTDATE. Т.е. можно конечно заложится и на X итераций запроса истории, но если терминал подтверждает наличие истории по SERIES_SERVER_FIRSTDATE, то доступность соответствующих данных таймсерии лишь вопрос времени (синхронизация базы м1 с сервером и генерация таймсерии).

Это я понял, но скажите, почему нельзя было сделать так, как я описал выше?

На скорость обработки информации это никак бы не повлияло:

Если была какая-либо информация по инструменту - заносим дату первого её появления и храним в памяти - 8 байт!

Можно даже не хранить, а когда делаешь SymbolSelect(), то заносить в память. 

При обращении функцией SeriesInfoInteger ( SERIES_TERMINAL_FIRSTDATE ) получаем:

А -1 - нет никаких данных

Б. 0 - дпнные есть но не готовы

В. Дата первой информации

 

Тогда бы всё было ясно и прозрачно.

-1 - Идём на сервер

0 - Ждём следующей итерации, чтобы проверить и (или) построить таймсерию 

> 0 Строим таймсерию

Из вашей справки я понял, что ВЫ почти так и сделали, оказывается нет.

Видимо один программист начинал писать, а кто-то другой закончил 

 

Ваша реализация хороша для ФОРЕКС, но очень неудобна для ФОРТС.

На ФОРТС котировки могут долго не приходить, а таймсерия выгружается из паияти

и приходится весь процесс получения данных повторять снова, причём с заходом на сервер

2015.03.27 20:24:56.568  (GAZR-6.15,M1) OnCalculate: Не скопированы тийминги по символу - GAZR-9.15
2015.03.27 20:25:34.092  (VTBR-6.15,H1) OnCalculate: Не получены бары по символу - VTBR-9.15
2015.03.27 20:25:34.100  (VTBR-6.15,H1) OnCalculate: Не получены бары по символу - VTBR-9.15
2015.03.27 20:25:34.326  (VTBR-6.15,H1) OnCalculate: Не получены бары по символу - VTBR-9.15
2015.03.27 20:25:34.326  (VTBR-6.15,H1) OnCalculate: Не получены бары по символу - VTBR-9.15
2015.03.27 20:34:40.098  (SILV-6.15,H1) OnCalculate: Не получены бары по символу - SILV-9.15
2015.03.27 20:34:40.126  (SILV-6.15,H1) OnCalculate: Не получены бары по символу - SILV-9.15
2015.03.27 20:37:21.475  (RTS-9.15,H1)  OnCalculate: Не получены бары по символу - RTS-12.15
2015.03.27 20:37:21.491  (RTS-9.15,H1)  OnCalculate: Не получены бары по символу - RTS-12.15
2015.03.27 20:37:41.563  (RTS-9.15,H1)  OnCalculate: Не получены бары по символу - RTS-12.15
2015.03.27 20:40:41.051  (SILV-6.15,H1) OnCalculate: Не получены бары по символу - SILV-9.15
2015.03.27 20:40:56.579  (RTS-9.15,H1)  OnCalculate: Не получены бары по символу - RTS-12.15
2015.03.27 20:40:56.595  (RTS-9.15,H1)  OnCalculate: Не получены бары по символу - RTS-12.15
2015.03.27 20:40:58.886  (VTBR-6.15,H1) OnCalculate: Не получены бары по символу - VTBR-9.15
2015.03.27 20:40:58.896  (VTBR-6.15,H1) OnCalculate: Не получены бары по символу - VTBR-9.15
2015.03.27 20:40:59.436  (SILV-6.15,H1) OnCalculate: Не получены бары по символу - SILV-9.15
2015.03.27 20:41:00.892  (VTBR-6.15,H1) OnCalculate: Не получены бары по символу - VTBR-9.15
 
Mikalas:

Ваша реализация хороша для ФОРЕКС, но очень неудобна для ФОРТС.

На ФОРТС котировки могут долго не приходить, а таймсерия выгружается из паияти

и приходится весь процесс получения данных повторять снова, причём с заходом на сервер

Микалас, я все еще в вас верю. Вы обязательно прочтете все, что тут говорили.

ФОРТС Прошу помощи

Мультивалютный индикатор - это не так просто.

Для начала, проверьте доступность инструментов:

bool CorrectSymbol( string symbol )
{
        ResetLastError();
        if ( SymbolInfoDouble( symbol, SYMBOL_BID ) > DBL_EPSILON ) return(true);

        // символ не выбран в "Обзоре рынка" (нет в списке доступных)
        if ( GetLastError() == 4302 )
        {
                if ( SymbolSelect( symbol, true ) && SymbolInfoInteger( symbol, SYMBOL_SELECT ) ) return(true);
        }

        return(false);
}

Потом откройте графики всех используемых инструментов (достаточно невидимого объекта-графика), чтоб нормально загружалась история.

И только потом пробуйте загружать историю с помощью CheckLoadHistory.

Но и этого может быть не достаточно. 


 

А мне кстати тоже не нравится эта ситуация с мультивалютным анализом и построением индикаторов. Как это реализовано.

Ведь это танцы с бубном, прежде чем начать что то вычислять необходимо сделать кучу проверок... ни в одной другой платформе такого не встречал. Там все проще с точки зрения пользователя.

Не секрет что многие даже те кто изучили программирование на МТ4 пугаются сложности программирования в МТ5.

На месте разработчиков я бы постарался облегчить нам жизнь. Объединить все эти танцы с бубном в одну команду типа

GatData(RTS,1000)

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

И после её выполнения у меня есть актуальные данные с которыми можно работать.

З.Ы. Помнится был девиз терминал для домохозяек... 

 
komposter:

Микалас, я все еще в вас верю. Вы обязательно прочтете все, что тут говорили.


komposter!

(всё что дальше - без обид!

Что Вы нашли ПЛОХОГО в моей модели получения информации по тамсериям?

Потому что оно не от Вас!?

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

"жизнь", но ВСЕГДА находятся такие как Вы, которые САМЫЕ УМНЫЕ!

Поэтому будет так как есть! 

 
Prival-2:

А мне кстати тоже не нравится эта ситуация с мультивалютным анализом и построением индикаторов. Как это реализовано.

Ведь это танцы с бубном, прежде чем начать что то вычислять необходимо сделать кучу проверок... ни в одной другой платформе такого не встречал. Там все проще с точки зрения пользователя.

Не секрет что многие даже те кто изучили программирование на МТ4 пугаются сложности программирования в МТ5.

На месте разработчиков я бы постарался облегчить нам жизнь. Объединить все эти танцы с бубном в одну команду типа

GatData(RTS,1000)

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

И после её выполнения у меня есть актуальные данные с которыми можно работать.

З.Ы. Помнится был девиз терминал для домохозяек... 

Привет!

Универсальный и простой подход сделает невозможным написание эффективных программ. Нельзя сделать одну функцию ДайДанные, в которой будут все проверки - это будут тормоза, в 95% случаев ненужные пользователю.
В случае с индикатором - он работает максимально быстро с данными своего графика. Он для этого создан, под это заточен. Если сделать его "готовым к любым ситуациям", то простая МА будет тормозить как сложный монстр.

Я не защищаю разработчиков, ни в коем случае. Мне тоже многое не нравится.
Но я стараюсь быть конструктивным, и понимаю, что не знаю всех внутренностей терминала.

В чем-то Микалас прав - зажмуривается (не читает) и продолжает кричать "Неудобно!", и дискуссии становятся популярными и заметными для разработчиков. И они что-то делают (уже несколько ошибок исправили по его наводкам).
Так что зря я бурчу, наверное )

 
Mikalas:

komposter!

(всё что дальше - без обид!) 

Что Вы нашли ПЛОХОГО в моей модели получения информации по тамсериям?

Потому что оно не от Вас!?

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

"жизнь", но ВСЕГДА находятся такие как Вы, которые САМЫЕ УМНЫЕ!

Поэтому будет так как есть! 

Я уже понял.

Просто была озвучена задача - написать индикатор. А оказалось, что надо улучшить язык.

В такой постановке вопроса я бы с советами не лез ) 

 
komposter:

Я уже понял.

Просто была озвучена задача - написать индикатор. А оказалось, что надо улучшить язык.

В такой постановке вопроса я бы с советами не лез ) 

Андрей!

Вы потратили больше времени, опубликовывая здесь посты.

За это время Вы могли написать индикатор по "моим" кляузам (для ФОРТС)

И сами увидели те "костыли", про которые я говорю! 

 
Mikalas:

Андрей!

Вы потратили больше времени, опубликовывая здесь посты.

За это время Вы могли написать индикатор по "моим" кляузам (для ФОРТС)

И сами увидели те "костыли", про которые я говорю! 

Я писал, именно поэтому и знаю, о чем говорю.

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

 
komposter:

Я писал, именно поэтому и знаю, о чем говорю.

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

Я написал индикатор, НО им невозможно пользоваться.

За что ни возьмись - везде проблемы!

 Есть OrderSendAsync() - нет механизма отслеживания, хотя есть ORDER_ID

Есть глобальная переменная - при закрытии терминала она обнуляется...

Есть "непонятные" задержки в исполнении приказов - половина сделали, а дальше

обвинение в шарлотанстве.... 

И так далее...

Я поднимаю вопросы потому что проблемы и ошибки ДЕЙСТВИТЕЛЬНО существуют.

(я не ВЫДУМЫВАЮ их!

Я торгую на БИРЖЕ за РЕАЛЬНЫЕ деньги, а не за фантики!

И поэтому и мне и ВСЕМ, кто торгует АРХИВАЖНО, чтобы торговые функции

были БЕЗУПРЕЧНЫМИ. 

Архитектура МТ5 - СУПЕР, мне очень нравится, но должно всё работать исправно и

доспуп к данным должен быть быстрым и простым. 

И... Давайте закончим на этом, пожалуйста.