Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Вывод свечей и индикаторов в файл он-лайн Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
voter



Зарегистрирован: 10.08.2014
Сообщения: 25

СообщениеДобавлено: Чт Авг 29, 2019 10:19 pm Ответить с цитатой Вернуться к началу

Добрый день!

Подскажите пожалуйста, как выводить значения OHLC и линий с графика в текстовый файл он-лайн?
Ами берет данные из Квика, хотелось бы получать текстовый файл прямо в процессе рисования графика.

Спасибо.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Авг 30, 2019 10:09 am Ответить с цитатой Вернуться к началу

По простому не сделать. Надо под каждую линию отдельно настраивать будет...

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Авг 30, 2019 10:11 am Ответить с цитатой Вернуться к началу

Заготовка под это есть в хелпере Ами.
Код:

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

СообщениеДобавлено: Пт Авг 30, 2019 10:56 am Ответить с цитатой Вернуться к началу

Олег, спасибо!

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

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

Может твой плагин AS_File тут поможет... не знаю как приспособить. Так конечно полазил по форуму поиском, почитал, но не силен в этом. Есть еще вариант делать через vbscript (насколько понимаю).

Если без цикла нельзя обойтись - может тогда предыдущую свечку в файл добавлять (с флажком, если ранее запись уже была)?

Дай направление, детали сам домучать постараюсь.
Не понимаю, сколько раз в цикле ами пишет в файл по каждой свечке...

Будет ли решением считывать просто предыдущую строчку файла? - она гарантированно по закрытой свече, получается... но тогда будет постоянная запись в файл - жалко диск... как будет оптимально?...
Посмотреть профиль Отправить личное сообщение
voter



Зарегистрирован: 10.08.2014
Сообщения: 25

СообщениеДобавлено: Пт Авг 30, 2019 12:16 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Заготовка под это есть в хелпере Ами.


Поразбирался сам немного.
Я правильно понимаю (?) что:
1) график перерисовывается с частотой, заданной в настройках - Tools-> Preferences->Intraday->Realtime chart refresh interval.

Тогда получается, что цикл по всем строчкам выполняется 1 раз в секунду (у меня такой интервал установлен в данной настройке). При этом по сути обновляется только последняя строчка, но файл перезаписывается целиком.

2) Можно укоротить цикл, чтобы он брал не всю историю, а например с 19-00 вчера и последнюю свечку тоже можно не экспортировать - она попадет в файл как только добавится новая... и произойдет это с задержкой не более 1 секунды при вышеуказанной настройке... так?..
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Авг 30, 2019 12:58 pm Ответить с цитатой Вернуться к началу

Много нюансов. По моим наблюдениям ами перерисовывает график тогда, когда считает необходимым. Если на графике ничего не меняется, то не перерисовывает совсем.
Я бы сделал так.
Писать в файл только предпоследнюю свечку (она уже окончательно сформирована). Время последней свечки запоминать в статическую переменную и когда появится новая свечка её время будет отличаться от запомненного. В этот момент и вписывать в файл предпоследнюю. Одновременно перезапомнить время новой последней свечки.
Как то так.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
voter



Зарегистрирован: 10.08.2014
Сообщения: 25

СообщениеДобавлено: Пт Авг 30, 2019 4:13 pm Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Пт Авг 30, 2019 10:12 pm Ответить с цитатой Вернуться к началу

А вот это што?

if( StaticVarGet("PrevCandleTime") ==! LastValue(TimeNum()) )

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
voter



Зарегистрирован: 10.08.2014
Сообщения: 25

СообщениеДобавлено: Пт Авг 30, 2019 11:54 pm Ответить с цитатой Вернуться к началу

000 писал(а):
А вот это што?

if( StaticVarGet("PrevCandleTime") ==! LastValue(TimeNum()) )


Глаз замылился уже к тому времени и голова (и ами принял). Но "!=" не решает проблемы.
В понедельник продолжу - поток котировок остановился уже.
Помощь пока не требуется - появились идеи и нашел ошибки.
Посмотреть профиль Отправить личное сообщение
voter



Зарегистрирован: 10.08.2014
Сообщения: 25

СообщениеДобавлено: Пн Сен 02, 2019 4:31 pm Ответить с цитатой Вернуться к началу

Вроде все вышло:

Код:

   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()) );
      }
   }


Правда времени много ушло и сил, но может потом полегче будет...
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen