Автор |
Сообщение |
KpuK
Зарегистрирован: 03.11.2009
Сообщения: 14
|
Подскажите что еще исправить в коде:
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
|
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
|
Первая часть проверят нет ли такой записи в файле. Если есть, то процедура ничего не делает
Код: |
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
|
Как то так, может конечно еще что лишнее)
И может кому пригодится.
Чуть позже могу рассказать что пытаюсь сделать, если интересно)
Код: |
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
|
Еслт Олег не против, то выложу следующий код для квика.
Есть преимущества выставления заявок самим квиком а не ами, есть и недостатки.
Код: |
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
|
Наверное Квиком заявки давать лучше (еслм стабильно работает) Основной недостаток это то, что протестировать систему никак, а если протестировать в Ами, то необходимо убедится, что сигналы кода Квика и тест системы в Ами совпадают. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
KpuK
Зарегистрирован: 03.11.2009
Сообщения: 14
|
000 писал(а): |
Наверное Квиком заявки давать лучше (еслм стабильно работает) Основной недостаток это то, что протестировать систему никак, а если протестировать в Ами, то необходимо убедится, что сигналы кода Квика и тест системы в Ами совпадают. |
Можно и тестить, чуть больше код будет.
не очень понял что значит совпадают сигналы?
Сигналы генерит Ами и пишет их в файл, Квик сканирует файл и выставляет заявку, в принципе тоже самое как в твоем роботе. Но тут квик генерит заявку и может ее отслеживать. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
sas55
Зарегистрирован: 15.03.2009
Сообщения: 61
Откуда: Омск
|
А мона подробней пжл |
_________________ "Если мы выиграем на финансовом фронте, то мы выиграем всё" В.И.Ленин |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
KpuK писал(а): |
Сигналы генерит Ами и пишет их в файл, Квик сканирует файл и выставляет заявку, в принципе тоже самое как в твоем роботе. Но тут квик генерит заявку и может ее отслеживать. |
Ясно. Я просто не сразу понял. Думал чисто Квик без Ами... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
KpuK
Зарегистрирован: 03.11.2009
Сообщения: 14
|
Смысл такой. В ами разрабатываем стратегию, тестируем и дорабатываем робота. Выше я писал как. В результате он будет писать в файл одну строчку, вида "B" или "S", в принципе достаточно.
Дальше используя встренный язык Квика пишем часть робота формирующую заявки.
Плюсы и минусы такого способа можно обсудить.
ПО поводу тестирвания в самом квике, это можно сделать, но его возможности гораздо меньше амиброкера.
Кстати. Код для Квика дописывал на работе, не проверял окончательный вариант. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
KpuK
Зарегистрирован: 03.11.2009
Сообщения: 14
|
000 писал(а): |
KpuK писал(а): |
Сигналы генерит Ами и пишет их в файл, Квик сканирует файл и выставляет заявку, в принципе тоже самое как в твоем роботе. Но тут квик генерит заявку и может ее отслеживать. |
Ясно. Я просто не сразу понял. Думал чисто Квик без Ами... |
Можно и чисто квик но в упрощенном виде)
Хотя в Квике есть основные индикаторы и ими можно пользоваться. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|