Автор |
Сообщение |
voter
Зарегистрирован: 10.08.2014
Сообщения: 25
|
Добрый день!
Подскажите пожалуйста, как выводить значения OHLC и линий с графика в текстовый файл он-лайн?
Ами берет данные из Квика, хотелось бы получать текстовый файл прямо в процессе рисования графика.
Спасибо. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
По простому не сделать. Надо под каждую линию отдельно настраивать будет... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Заготовка под это есть в хелпере Ами.
Код: |
fh = fopen( "quotes.csv", "w");
if( fh )
{
fputs( "Date,Open,High,Low,Close,Volume\n", fh );
y = Year();
m = Month();
d = Day();
for( i = 0; i < BarCount; i++ )
{
ds = StrFormat("%02.0f-%02.0f-%02.0f,",
y[ i ], m[ i ], d[ i ] );
fputs( ds, fh );
qs = StrFormat("%.4f, %.4f, %.4f, %.4f, %.0f\n",
O[ i ], H[ i ], L[ i ], C[ i ], V[ i ] );
fputs( qs, fh );
}
fclose( fh );
}
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
voter
Зарегистрирован: 10.08.2014
Сообщения: 25
|
Олег, спасибо!
Засунул код в график, файл обновляется, строчки добавляются.
Вопрос только в том, что новая строка записывается до окончания свечи и потом перезаписывается.
Может есть способ добавлять строчку в файл с параметрами свечи в момент ее закрытия или в момент открытия новой свечки?
Может твой плагин AS_File тут поможет... не знаю как приспособить. Так конечно полазил по форуму поиском, почитал, но не силен в этом. Есть еще вариант делать через vbscript (насколько понимаю).
Если без цикла нельзя обойтись - может тогда предыдущую свечку в файл добавлять (с флажком, если ранее запись уже была)?
Дай направление, детали сам домучать постараюсь.
Не понимаю, сколько раз в цикле ами пишет в файл по каждой свечке...
Будет ли решением считывать просто предыдущую строчку файла? - она гарантированно по закрытой свече, получается... но тогда будет постоянная запись в файл - жалко диск... как будет оптимально?... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
voter
Зарегистрирован: 10.08.2014
Сообщения: 25
|
000 писал(а): |
Заготовка под это есть в хелпере Ами.
|
Поразбирался сам немного.
Я правильно понимаю (?) что:
1) график перерисовывается с частотой, заданной в настройках - Tools-> Preferences->Intraday->Realtime chart refresh interval.
Тогда получается, что цикл по всем строчкам выполняется 1 раз в секунду (у меня такой интервал установлен в данной настройке). При этом по сути обновляется только последняя строчка, но файл перезаписывается целиком.
2) Можно укоротить цикл, чтобы он брал не всю историю, а например с 19-00 вчера и последнюю свечку тоже можно не экспортировать - она попадет в файл как только добавится новая... и произойдет это с задержкой не более 1 секунды при вышеуказанной настройке... так?.. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Много нюансов. По моим наблюдениям ами перерисовывает график тогда, когда считает необходимым. Если на графике ничего не меняется, то не перерисовывает совсем.
Я бы сделал так.
Писать в файл только предпоследнюю свечку (она уже окончательно сформирована). Время последней свечки запоминать в статическую переменную и когда появится новая свечка её время будет отличаться от запомненного. В этот момент и вписывать в файл предпоследнюю. Одновременно перезапомнить время новой последней свечки.
Как то так. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
voter
Зарегистрирован: 10.08.2014
Сообщения: 25
|
000 писал(а): |
Как то так. |
Логично, спасибо.
Пока в таком состоянии (не работает), мозг кипит - не хватает опыта:
Код: |
StaticVarSet( "PrevCandleTime", LastValue(TimeNum()) ); //+ Name()
if( StaticVarGet("PrevCandleTime") ==! LastValue(TimeNum()) )
{
StartBar = ValueWhen(TimeNum() == StaticVarGet("PrevCandleTime"), BarIndex());
fh = fopen( "p:\\quotes.csv", "w");
if( fh )
{
qs = StrFormat("%.4f, %.4f, %.4f, %.4f, %.4f\n",
ValueWhen (BarIndex() == StartBar, O, 1),
ValueWhen (BarIndex() == StartBar, H, 1),
ValueWhen (BarIndex() == StartBar, L, 1),
ValueWhen (BarIndex() == StartBar, C, 1),
ValueWhen (BarIndex() == StartBar, V, 1));
fputs( qs, fh );
fclose( fh );
}
StaticVarSet( "PrevCandleTime", LastValue(TimeNum()) );
}
|
Подскажите, плииз... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А вот это што?
if( StaticVarGet("PrevCandleTime") ==! LastValue(TimeNum()) ) |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
voter
Зарегистрирован: 10.08.2014
Сообщения: 25
|
000 писал(а): |
А вот это што?
if( StaticVarGet("PrevCandleTime") ==! LastValue(TimeNum()) ) |
Глаз замылился уже к тому времени и голова (и ами принял). Но "!=" не решает проблемы.
В понедельник продолжу - поток котировок остановился уже.
Помощь пока не требуется - появились идеи и нашел ошибки. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
voter
Зарегистрирован: 10.08.2014
Сообщения: 25
|
Вроде все вышло:
Код: |
if( IsEmpty( StaticVarGet("PrevCandleTime") ) )
{
StaticVarSet( "PrevCandleTime", LastValue(TimeNum()) );
}
if( StaticVarGet("PrevCandleTime") < LastValue(TimeNum()) )
{
xBar = ValueWhen( StaticVarGet("PrevCandleTime") == TimeNum(), BarIndex());
fh = fopen( "p:\\quotes.csv", "w");
if( fh )
{
qs = StrFormat("%.4f, %.4f, %.4f, %.4f, %.0f, %.0f, %.0f, %.0f\n",
ValueWhen (BarIndex() == xBar, O),
ValueWhen (BarIndex() == xBar, H),
ValueWhen (BarIndex() == xBar, L),
ValueWhen (BarIndex() == xBar, C),
ValueWhen (BarIndex() == xBar, V),
xBar,
StaticVarGet("PrevCandleTime"),
LastValue(TimeNum()));
fputs( qs, fh );
fclose( fh );
StaticVarSet( "PrevCandleTime", LastValue(TimeNum()) );
}
}
|
Правда времени много ушло и сил, но может потом полегче будет... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|