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



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

СообщениеДобавлено: Ср Янв 06, 2010 6:19 pm Ответить с цитатой Вернуться к началу

Подскажите что еще исправить в коде:

procedure savetrifile(stransid,sstr)
{
f = fopen(FileName, "r");
found = 0;
if(f)
{
while(!feof(f))
{
s = fgets(f);
if(StrFind( s, stransid) > 0) found = 1;
}
fclose(f);
}
if (NOT found)
{
f = fopen(FileName, "a");
if(f)
{
fputs(sstr+"\n",f);
fclose(f);
}
}
}


function makeandsave(sOper)
{
CCS="";
if (Client != "") CCS="CLIENT_CODE="+Client+";";

str =
"OPERATION=" +sOper+"; "+
"SECCODE=" +Name()+"; "+
CCS;

savetrifile(transid, str);
}

if (TimeFrame == Interval() & FullName() != "")
{
if(Buy)
{
makeandsave("B");
}
if(Sell)
{
makeandsave("S");
}

}


что бы сделать запись в файл в виде

B
SBER03

(то есть направление сделки и бумага, в двух строчках)
Посмотреть профиль Отправить личное сообщение
KpuK



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

СообщениеДобавлено: Ср Янв 06, 2010 8:22 pm Ответить с цитатой Вернуться к началу

procedure savetrifile(sstr, sstr1)
{
f = fopen(FileName, "r");
found = 0;
if(f)
{
while(!feof(f))
{
s = fgets(f);
if(StrFind( s, stransid) > 0) found = 1;
}
fclose(f);
}
if (NOT found)
{
f = fopen(FileName, "a");
if(f)
{
fputs(sstr+"\n",f);
fputs(sstr1+"\n",f);
fclose(f);
}
}
}


function makeandsave(sOper)
{
str =
"OPERATION=" +sOper+"; "+
str1=
"SECCODE=" +Name()+"; "+

savetrifile(str, str1);
}

if (TimeFrame == Interval() & FullName() != "")
{
if(Buy)
{
makeandsave("B");
}
if(Sell)
{
makeandsave("S");
}

}


Как то так?
Не очень понял зачем первая часть savetrifile(sstr)
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Янв 07, 2010 9:35 am Ответить с цитатой Вернуться к началу

Первая часть проверят нет ли такой записи в файле. Если есть, то процедура ничего не делает
Код:

procedure savetrifile(stransid,sstr)
{
   f = fopen(FileName, "r"); // открываем для чтения
   found = 0;
   if(f)  // если открылся удачно
   {
      while(!feof(f))  // пока не дошли до конца файла
      {
         s = fgets(f); // берем строку
         if(StrFind( s, stransid) > 0) found = 1;  // если в строке уже есть stransid то нашли
      }
      fclose(f); // закрываем файл
   }
   if (NOT found)  // если не нашли
      {
         f = fopen(FileName, "a"); открываем файл для редактирования
            if(f)
            {
               fputs(sstr+"\n",f);
               fclose(f);
            }
      }
}

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



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

СообщениеДобавлено: Чт Янв 07, 2010 9:21 pm Ответить с цитатой Вернуться к началу

Как то так, может конечно еще что лишнее)
И может кому пригодится.
Чуть позже могу рассказать что пытаюсь сделать, если интересно)



Код:
procedure savetrifile(sstr) {
 

    f=fopen(FileName,"a");
    if (f) {
      fputs(sstr+"\n"+seccode+"\n",f);
      fclose(f);
    }
  }


function makeandsave(sOper) {


    str=StrFormat(sOper);
    savetrifile(str);
}

if ((Buy[BarCount-1]==1)OR(Sell[BarCount-1]==1)OR(Short[BarCount-1]==1)OR(Cover[BarCount-1]==1)) {
  ifbuy=IIf(Buy[BarCount-1]==1,1,0); 
  ifsell=IIf(Sell[BarCount-1]==1,1,0); 
  ifshort=IIf(Short[BarCount-1]==1,1,0); 
  ifcover=IIf(Cover[BarCount-1]==1,1,0);   
  if (ifbuy) {
     makeandsave("B");
priceb=C;
  }
  if (ifsell) {
      makeandsave("S");
  }
  if (ifshort) {
    makeandsave("S");
  }
  if (ifcover) {
      makeandsave("B");
  }
}
Посмотреть профиль Отправить личное сообщение
KpuK



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

СообщениеДобавлено: Сб Янв 09, 2010 11:41 am Ответить с цитатой Вернуться к началу

Еслт Олег не против, то выложу следующий код для квика.
Есть преимущества выставления заявок самим квиком а не ами, есть и недостатки.

Код:
PORTFOLIO_EX TORG;
DESCRIPTION TORG;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;




PROGRAM
USE_CASE_SENSITIVE_CONSTANTS

file="trans_log.txt"
file1="pos_log.txt"

'ПЕРЕМЕННЫЕ
NEW_GLOBAL ("TORG", "")
NEW_GLOBAL ("Tiker", "")
NEW_GLOBAL ("POS", "")
new_global("v_trans_id_cntr",1)
new_global("trans_params", "") 
new_global("trans_result", "")
new_global("v_quantity", 50)

v_classcode = "EQBR"
v_account = "L01-00000F00"
v_client_code = "999999"


POS=READ_LINE( file1,1,0)
s=READ_LINE( file,1,0)
t=READ_LINE( file,2,0)


if s <>"" and t <> ""
     if s <> pos
     TORG=s
     Tiker=t
     bidask = GET_PARAM (v_classcode, t, "offer")
     n = GET_NUMBER_OF("ALL_TRADES")
   PUT_ORDER(s,bidask,n)   
end if
end if

if torg<>"" and Tiker <> ""
     output=CREATE_MAP()
       output=SET_VALUE(output,"TORG" , TORG)
        output=SET_VALUE(output,"Tiker" , Tiker)
        output=SET_VALUE(output,"Bidask" , bidask)
       ADD_ITEM(1,output)
      end if
CLEAR_FILE (file)
TORG = ""
Tiker=""


FUNC PUT_ORDER(s,bidask,par_trans_id)

FOR m FROM 1 TO 10
if s == "B"
par_price=bidask-n/100
end if

if s == "S"
par_price=bidask+n/100
end if


  v_trans_id_cntr = v_trans_id_cntr + 1 
  par_trans_id = par_trans_id&v_trans_id_cntr
  trans_params = set_value (trans_params, "ACCOUNT", v_account)
  trans_params = set_value (trans_params, "TRANS_ID", par_trans_id)
  trans_params = set_value (trans_params, "ACTION", "NEW_ORDER")
  trans_params = set_value (trans_params, "CLASSCODE", v_classcode)
  trans_params = set_value (trans_params, "SECCODE", t)
  trans_params = set_value (trans_params, "OPERATION", s)
  trans_params = set_value (trans_params, "PRICE", par_price&"")
  trans_params = set_value (trans_params, "QUANTITY", v_quantity)
  trans_params = set_value (trans_params, "CLIENT_CODE", v_client_code)
  trans_params = set_value (trans_params, "TYPE", "L")
' время ожидания ответа об исполнении транзакции 15
 trans_result = SEND_TRANSACTION (5, trans_params)
' содержимое транзакции
    WRITELN ("qpile_trans_params.tri","TRANS_ID="&par_trans_id&"; CLASSCODE="&v_classcode&"; SECCODE="&t&"; ACCOUNT="&v_account&"; TYPE=L; ACTION=NEW_ORDER; OPERATION="&s&"; PRICE="&par_price&"; QUANTITY="&v_quantity&"; CLIENT_CODE;"&v_client_code   )
' результат выполнения транзакции
  WRITELN ("qpile_trans.log", ": " & "Result: " & get_value (trans_result, "RESULT") & ", Result_ex: " & get_value (trans_result, "RESULT_EX") & ", OrderNum: " & get_value (trans_result, "ORDER_NUMBER") & ", Description: " & get_value (trans_result, "DESCRIPTION"))



end for

pos=s
END FUNC

 
  CLEAR_FILE (file1)
  WRITELN (file1,POS)
 
 
 
END_PROGRAM

PARAMETER TORG;
PARAMETER_TITLE TORG;
PARAMETER_DESCRIPTION TORG;
PARAMETER_TYPE STRING(30);
END

PARAMETER Tiker;
PARAMETER_TITLE Tiker;
PARAMETER_DESCRIPTION Tiker;
PARAMETER_TYPE STRING(30);
END

PARAMETER Bidask;
PARAMETER_TITLE bidask;
PARAMETER_DESCRIPTION bidask;
PARAMETER_TYPE NUMERIC(10,2);
END

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


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

СообщениеДобавлено: Сб Янв 09, 2010 1:44 pm Ответить с цитатой Вернуться к началу

Наверное Квиком заявки давать лучше (еслм стабильно работает) Основной недостаток это то, что протестировать систему никак, а если протестировать в Ами, то необходимо убедится, что сигналы кода Квика и тест системы в Ами совпадают.

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



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

СообщениеДобавлено: Сб Янв 09, 2010 2:26 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Наверное Квиком заявки давать лучше (еслм стабильно работает) Основной недостаток это то, что протестировать систему никак, а если протестировать в Ами, то необходимо убедится, что сигналы кода Квика и тест системы в Ами совпадают.


Можно и тестить, чуть больше код будет.
не очень понял что значит совпадают сигналы?
Сигналы генерит Ами и пишет их в файл, Квик сканирует файл и выставляет заявку, в принципе тоже самое как в твоем роботе. Но тут квик генерит заявку и может ее отслеживать.
Посмотреть профиль Отправить личное сообщение
sas55



Зарегистрирован: 15.03.2009
Сообщения: 61
Откуда: Омск

СообщениеДобавлено: Сб Янв 09, 2010 4:49 pm Ответить с цитатой Вернуться к началу

А мона подробней пжл Shocked

_________________
"Если мы выиграем на финансовом фронте, то мы выиграем всё" В.И.Ленин
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


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

СообщениеДобавлено: Сб Янв 09, 2010 5:18 pm Ответить с цитатой Вернуться к началу

KpuK писал(а):

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

Ясно. Я просто не сразу понял. Думал чисто Квик без Ами... Smile

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



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

СообщениеДобавлено: Сб Янв 09, 2010 5:28 pm Ответить с цитатой Вернуться к началу

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

Дальше используя встренный язык Квика пишем часть робота формирующую заявки.

Плюсы и минусы такого способа можно обсудить.

ПО поводу тестирвания в самом квике, это можно сделать, но его возможности гораздо меньше амиброкера.

Кстати. Код для Квика дописывал на работе, не проверял окончательный вариант.
Посмотреть профиль Отправить личное сообщение
KpuK



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

СообщениеДобавлено: Сб Янв 09, 2010 5:30 pm Ответить с цитатой Вернуться к началу

000 писал(а):
KpuK писал(а):

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

Ясно. Я просто не сразу понял. Думал чисто Квик без Ами... Smile


Можно и чисто квик но в упрощенном виде)
Хотя в Квике есть основные индикаторы и ими можно пользоваться.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen