Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
10.02.2025, 19:22:13
Начало Помощь Поиск Войти Регистрация
Новости: ООО «Скрин маркет системз», правообладатель программы «Система брокерского обслуживания «TRANSAQ» официально заявляет, что не ведет никакой деятельности в мессенджерах или социальных сетях. 
Подробности на нашем сайте  WWW.TRANSAQ.RU.

Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: Ошибка !!! Не могу открыть файл (file::ropen/2/) « предыдущая тема следующая тема »
Страниц: [1] 2 3 Печать
Автор Тема: Ошибка !!! Не могу открыть файл (file::ropen/2/)  (Прочитано 23142 раз)
Yegor Hi And
Full Member
***
Сообщений: 138


Просмотр профиля Email
« : 27.05.2011, 13:14:02 »


У меня еще не разу не получилось чтение из файла, при всех попытках пишет сообщение "Не могу открыть файл (file::ropen/2/)". Я перепробовал самые разные комбинации

new_object("file");
readLn();
close();
wopen("data.txt");

упорно пишет свою ошибку
потом я решил взять пример из руководства (см. ниже) он там тоже выдал ошибку.

В чем проблемма ???

static c1 = 0;
static c2 = 0;

var file;

function init()
{
   file = new_object("file");
   file.ropen("data.txt");
   if (file.isopen()) {
      c1 = file.readLn();
      c2 = file.readLn();
      file.close();
   }
   file.wopen("data.txt");
}


function onNewCandle()
{
   c2 += 1;
   file.seek(0);
   file.writeLn(c1);
   file.writeLn(c2);
}

function calc()
{
   if (isHistoryCalculated()) {
      c1 += 1;
   }
   line[0] = 0;
}
Записан

Предлагаю реализовать Ваши торговые идеи на ATF, пишите в личку
mega_traider
Newbie
*
Сообщений: 21


Просмотр профиля Email
« Ответ #1 : 27.05.2011, 13:17:42 »

Надо писать полный путь к файлу, причем экранируя '\', то есть, например, в вашем случае "C:\\data.txt".
Записан
Yegor Hi And
Full Member
***
Сообщений: 138


Просмотр профиля Email
« Ответ #2 : 27.05.2011, 13:38:50 »

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

Предлагаю реализовать Ваши торговые идеи на ATF, пишите в личку
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #3 : 27.05.2011, 14:22:30 »

file::ropen/2/ выводится, когда файл не может открыть Windows. Вероятно у вас файл открыт в другом скрипте? Или вы его редактируете каким-либо образом в тот же момент?

Приведите код полностью и описание ошибки, которое дает ATF.
Записан
Yegor Hi And
Full Member
***
Сообщений: 138


Просмотр профиля Email
« Ответ #4 : 27.05.2011, 15:10:11 »

Спасибо, за ответ.
код указан полностью и текст сообщения об ошибке тоже, (код взят из руководства).
Ни в каком скрипте файл не открыт, но вполне возможно, что файл не открывается по той причине, о которой вы говорите. Компьютер стоит в компьютерном зале брокера, а они очень бдят доступ к файлам. Не смотря на это доступ к записи и созданию файлов есть.
Я попробую на домашнем компе и отпишусь.
Записан

Предлагаю реализовать Ваши торговые идеи на ATF, пишите в личку
Yegor Hi And
Full Member
***
Сообщений: 138


Просмотр профиля Email
« Ответ #5 : 28.05.2011, 15:59:04 »

Дома на Интре этот скрипт заработал. Выдает ошибку чтения (file::ropen/2/) только в самый первый запуск когда файла нет, что вполне естественно. Потом создает файл и работает как задумано. При снятии скрипта с графика в файле остается наработанная информация. При повторной установке и запуске старая инфа стирается...

как сделать так чтобы информация из файла не стиралась ?
Записан

Предлагаю реализовать Ваши торговые идеи на ATF, пишите в личку
Yegor Hi And
Full Member
***
Сообщений: 138


Просмотр профиля Email
« Ответ #6 : 28.05.2011, 19:12:02 »

Сегодня уже 4 часа сижу, пытаюсь записать данные в файл, а потом их считать. перепробовал кучу вариантов, НЕ РАБОТАЕТ. та же ошибка чтения...

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

Уважаемые разработчики, пожалуйста задокументируйте как работают функции чтения /записи в файл.

Результат выполнения следующего кода:

при запуске ошибка чтения
запись в оба файла количество заданных лотов
выдача на каждой новой свече тестового сообщения о попытке чтения
и все


#line 0 solid #00C000


extern ma_period = 1;

extern lot_s = 1;
extern "string" client = "INTRA108565";

//static bought = 0;
//static sold = 0;

var bought = 0; // любое число чтобы не был не 0 не пусто
var sold = 0;

var f;
var f_buy;
var f_sell;
//var f_test;


function init()
{
   var m = ma_period;
   
   setInitCandles(m);
   setBounds(0, m, 0);


        f = new_object("file");
        f.waopen(client + "_" + getFormattedDate(getSystemTime())+ ".txt"); // getSecName()

        f_buy = new_object("file");
        //f_buy.wopen(client + "_" + getSecName() + "_" + "BUY.txt"); // getSecName()

        f_sell = new_object("file");
       // f_sell.wopen(client + "_" + getSecName() + "_" + "SELL.txt"); // getSecName()

      //  f_test = new_object("file");
    //    f_test.wopen("TEST.txt"); // getSecName()

}

function read_bought()
{
      signal::output("try buy");
      signal::output(client + "_" + getSecName() + "_" + "BUY.txt");
        f_buy.ropen("client + "_" + getSecName() + "_" + "BUY.txt"); // getSecName()
      var read_figures = 0;
      if (lot_s < 10) {read_figures = 1;}
      if (lot_s < 100) {read_figures = 2;}
      if (lot_s < 1000) {read_figures = 3;}
      if (f_buy.isopen())
      {
            f_buy.seek(0);
            bought = f_buy.read(read_figures);
         f_buy.close();
      }
}
   
function read_sold()   
{
      signal::output("try sell");
      signal::output(client + "_" + getSecName() + "_" + "SELL.txt");
      f_sell.ropen(client + "_" + getSecName() + "_" + "SELL.txt"); // getSecName()
      
      var read_figures = 0;
      if (lot_s < 10) {read_figures = 1;}
      if (lot_s < 100) {read_figures = 2;}
      if (lot_s < 1000) {read_figures = 3;}
      if (f_sell.isopen())
      {
            f_sell.seek(0);
            sold = f_sell.read(read_figures);
         f_sell.close();
      }
      //else
         

}

function calc()
{

   line[0] = 0;

//вход

if (close[-1] > open[-1]) // самое простое условие
   {
      read_bought();
      if (bought != 0)
      {   
         if (getClient() != client) {   setClient(client); }

         signal::alert("OPEN buy " + getSecName() );
         trade_action::buy(lot_s, ::lots );
         //bought = lot_s;
         f_buy.wopen(client + "_" + getSecName() + "_" + "BUY.txt"); // getSecName()
            f_buy.seek(0);
            f_buy.write(lot_s);
         f_buy.close();
      }
   }

if (close[-1] < open[-1])
      {
      read_sold();   
      if (sold != 0)   
         {
         if (getClient() != client) {   setClient(client); }

         signal::alert("OPEN sell " + getSecName() );
         trade_action::sell(lot_s, ::lots );
         //sold = lot_s;
         f_sell.wopen(client + "_" + getSecName() + "_" + "SELL.txt"); // getSecName()
            f_sell.seek(0);
            f_sell.write(lot_s);
         f_sell.close();
      }
   }
//выход

if (close[-1] < open[-1])
   {
      read_bought();
      if (bought == lot_s)
         {   
         if (getClient() != client) {   setClient(client); }
         signal::alert("CLOSE buy " + getSecName() );
         trade_action::sell(bought, ::lots );
         //bought = 0;
         
         f_buy.wopen(client + "_" + getSecName() + "_" + "BUY.txt"); // getSecName()
            f_buy.seek(0);
            f_buy.write("0");
         f_buy.close();
      }
   }

if (close[-1] > open[-1])
      {
   read_sold();   
   if (sold != 0)   
   {
         if (getClient() != client) {   setClient(client); }
         signal::alert("CLOSE sell " + getSecName() );
         trade_action::buy(sold, ::lots );
         //sold = 0;
         f_sell.wopen(client + "_" + getSecName() + "_" + "SELL.txt"); // getSecName()
            f_sell.seek(0);
            f_sell.write("0");
         f_sell.close();
      }
   }

}//calc

Записан

Предлагаю реализовать Ваши торговые идеи на ATF, пишите в личку
nikolz
Sr. Member
****
Сообщений: 285


Просмотр профиля Email
« Ответ #7 : 28.05.2011, 19:23:51 »

Yegor Hi And!
Чтобы файл не стирался надо использовать для открытия функцию:
waopen(filename)   Открыть файл на запись, дописывая в конец файла.


« Последнее редактирование: 28.05.2011, 19:33:03 от nikolz » Записан
nikolz
Sr. Member
****
Сообщений: 285


Просмотр профиля Email
« Ответ #8 : 28.05.2011, 19:33:09 »

если для открытия записи используете wopen, то seek не нужен
Записан
nikolz
Sr. Member
****
Сообщений: 285


Просмотр профиля Email
« Ответ #9 : 28.05.2011, 19:33:51 »

так как ATF подобен СИ,
то предполагаю, что waopen(filename)    реализован режим открытия "a+"
В этом режим разрешено чтение и запись в конец файла

Попробуйте открыть файлы в init функцией waopen(filename) и не открывайте и не закрывайте их при чтении и записи


А к разработчикам просьба прояснить по функции waopen(filename)
это возможность чтения и записи в конец файла ( режим "a+" для СИ)?
« Последнее редактирование: 29.05.2011, 07:18:09 от nikolz » Записан
Yegor Hi And
Full Member
***
Сообщений: 138


Просмотр профиля Email
« Ответ #10 : 28.05.2011, 23:09:23 »

Спасибо nikolz

если в init ставить waopen, но не ставить дополнительно ropen перед чтением, то пишет
"попытка чтения файла, открытого на запись. (file::read/3/)"
если ставить то пишет
"Не могу открыть файл (file::ropen/2/)"
Записан

Предлагаю реализовать Ваши торговые идеи на ATF, пишите в личку
nikolz
Sr. Member
****
Сообщений: 285


Просмотр профиля Email
« Ответ #11 : 29.05.2011, 07:24:36 »

следовательно мое предположение не верно.

Просьба к разработчикам :
Реализуйте для работы с файлами ( см. С/C++):
1)режим открытия "a+" - чтение и возможность записи в конец файла
2) функцию  fflush() - немедленная запись в файл
« Последнее редактирование: 29.05.2011, 07:31:57 от nikolz » Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #12 : 30.05.2011, 09:58:11 »

По поводу waopen, то оно реализовано так:

ofile.open(s.c_str(), std::ios_base::app | std::ios_base::out);

Где ofile - объект типа std::ofstream.

По поводу fflush, то ATF всегда вызывает функцию flush после записи, то есть команда

file.write(s);

На C++ выглядела бы как

ofile<<s;
ofile<<std::flush;
Записан
Yegor Hi And
Full Member
***
Сообщений: 138


Просмотр профиля Email
« Ответ #13 : 30.05.2011, 16:40:21 »

Спасибо Heller,

я пытаюсь сейчас разобраться с С++, к сожалению я на этом языке редко программировал.
Скажите, а как быть с ATF, как можно читать и писать в одни и те же файлы как в моей задаче и что бы не было ошибок чтения/записи.
Может попробовать открывать файлы через разные объекты :

что то типа
f_read = new_object("file");
f_write = new_object("file");
...
f_read.ropen("SAME_FILE_NAME")
// операции с данными
f_read.close();
...
f_write.waopen("SAME_FILE_NAME")
// операции с данными
f_write.close();
« Последнее редактирование: 30.05.2011, 16:42:04 от Yegor Hi And » Записан

Предлагаю реализовать Ваши торговые идеи на ATF, пишите в личку
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #14 : 31.05.2011, 12:10:14 »

Одновременно писать и читать в файл в ATF нельзя на данный момент. Так же используется эксклюзивный доступ к файлам в ATF - если файл открыт в одном скрипте, то работать с файлом с тем же именем из другого скрипта не получится.
Записан
Страниц: [1] 2 3 Печать 
Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: Ошибка !!! Не могу открыть файл (file::ropen/2/) « предыдущая тема следующая тема »
Перейти в:  


Войти

Powered by MySQL Powered by PHP Powered by SMF 2.0.10 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!