Автор |
Сообщение |
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Да. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Mike
Зарегистрирован: 08.04.2008
Сообщения: 24
Откуда: Астрахань
|
Привет всем!
долго читал эту тему,но все равно не догоняю в чем косяк
Хелп плиз!
ситуация такая: есть 2 квика (с разными счетами соотв-но), площадка ФОРТС, система одна, бумага одна. Один из квиков поставляет данные для Амиброкера (т/ф - 5минут). Загнал в АА код . Необходимо чтобы с этого кода по сигналам системы велась запись в разные .три файлы (trans1.tri для первого квика, кол-во лотов - 8,; и trans2.tri для вторго квика, кол-во лотов - 5).
Зачем в разные .три файлы? пробовал завязать оба квика на считывание одного и того же .три файла - результат непонятный - то один квик пропустит сигнал, то второй. Грешу на то, что возникает момент когда оба квика пытаются получить доступ к .три файлу - получается лажа.
Пробовал также просто создать отдельную afl-ку с кодом робота для одного счета и отдельную - для другого (с путями к разным .три файлам). Результат отрицательный. АА может обрабатывать только один afl?
короче сделал так:
Код: |
///////// Установки ///////////
TimeFrame = 300; //т/фрейм в секундах.
//////////////////////////////////
Account1 = "SPBFUT00001";
Account2 = "SPBFUT00002";
Client = ""; // код клиента
Lots1 = 8;
Lots2 = 5;
Otstup = 1;
FileName1 = "C:/trans1.tri";
FileName2 = "C:/trans2.tri";
dir = 0;
////////// Правила системы ///////////////
бла-бла
//////////// Формируем транзакцию.//////////////
////////////////////////////////////////////////
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////
////////////////////////////////////////////////
Classcode = GroupID(1);
Otstup = round(LastValue(C)*Otstup/100/TickSize)*TickSize;
procedure savetrifile(stransid,sstr,ff)
{
if(ff == 1 )
{
Filename = Filename1;
}
else if (ff == 2)
{
Filename = Filename2;
}
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, sprice,ak)
{
if(ak == 1)
{
Account = Account1;
Lots = Lots1;
}
else if (ak == 2)
{
Account = Account2;
Lots = Lots2;
}
CCS="";
if (Client != "") CCS="CLIENT_CODE="+Client+";";
transid = "TRANS_ID=" +FullName()+LastValue(TimeNum())+"; ";
str = transid +
"PRICE=" +NumToStr(sprice, format = 1.3, separator=False)+"; " +
"QUANTITY=" +NumToStr(Lots, format = 1.0)+"; "+
"OPERATION=" +sOper+"; "+
"CLASSCODE=" +Classcode+"; "+
"ACTION=" +"NEW_ORDER; "+
"TYPE=" +"L; "+
"SECCODE=" +Name()+"; "+
"ACCOUNT=" +Account+"; "+
CCS;
savetrifile(transid, str);
}
if (TimeFrame == Interval() & FullName() != "")
{
if(Buy)
{
price = Close[BarCount-1] + Otstup;
makeandsave("B", price);
}
if(Sell)
{
price = Close[BarCount-1] - Otstup;
makeandsave("S", price);
}
if(Short)
{
price = Close[BarCount-1] - Otstup;
makeandsave("S", price);
}
if(Cover)
{
price = Close[BarCount-1] + Otstup;
makeandsave("B", price);
}
}
|
.. и в .три файлах пустота
ткните лицом где ошибка, а? |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
Mike
Зарегистрирован: 08.04.2008
Сообщения: 24
Откуда: Астрахань
|
попробовал заюзать код с первой страницы в этой ветке- выдает Error 30.Syntax Error.
Код: |
transid = "TRANS_ID=" +FullName()+LastValue(TimeNum())+dir+sys"; ";
|
курсор стоит после
вапще туплю.. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Так попробуй
Код: |
///////// Установки ///////////
TimeFrame = 60; // таймфрейм в секундах.
Account1 = "L01-00000F00";
Account2 = "L02-00000F00";
Client1 = "49501"; // код клиента1
Client2 = "49502"; // код клиента2
Lots1 = 1;
Lots2 = 2;
Otstup = 2; // в процентах. Заявка будет выставлена хуже текущей цены на столько процентов
FileName1 = "C:/Program Files/Quick/trans1.tri"; // слэши прямые!!! имя файла с транзакциями для квика
FileName2 = "C:/Program Files/Quick/trans2.tri"; // слэши прямые!!! имя файла с транзакциями для квика
dir = 0;
////////// Правила системы ///////////////
Buy = Cross(C, MA(C, 10));
Sell = Cross(MA(C, 10), C);
Short = Sell;
Cover = Buy;
//////////////////////////////////////////
Equity(1, 0);
Buy = LastValue(Ref(Buy, -1));
Sell = LastValue(Ref(Sell, -1));
Short = LastValue(Ref(Short, -1));
Cover = LastValue(Ref(Cover, -1));
//////////// Формируем транзакцию.//////////////
////////////////////////////////////////////////
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////
////////////////////////////////////////////////
Classcode = GroupID(1);
if(TickSize == 0)
{
PopupWindow( "Не задан размер тика значение TickSize", "ошибка", timeout = 5, left = -1, top = -1 );
}
else
{
Otstup = round(LastValue(C)*Otstup/100/TickSize)*TickSize;
form = (1 + 0.1 * abs(floor(IIf(log10(TickSize)>0, 0, log10(TickSize)))));
}
procedure savetrifile(stransid, sstr, sFileName)
{
f = fopen(sFileName, "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(sFileName, "a");
if(f)
{
fputs(sstr+"\n",f);
fclose(f);
}
}
}
function makeandsave(sOper, sprice, Lots, Client, FileName)
{
CCS="";
if (Client != "") CCS="CLIENT_CODE="+Client+";";
transid = "TRANS_ID=" +FullName()+LastValue(TimeNum())+dir+"; ";
str = transid +
"PRICE=" +NumToStr(sprice, format = form, separator=False)+"; " +
"QUANTITY=" +NumToStr(Lots, format = 1.0, separator=False)+"; "+
"OPERATION=" +sOper+"; "+
"CLASSCODE=" +Classcode+"; "+
"ACTION=" +"NEW_ORDER; "+
"TYPE=" +"L; "+
"SECCODE=" +Name()+"; "+
"ACCOUNT=" +Account+"; "+
CCS;
savetrifile(transid, str, FileName);
}
if (TimeFrame == Interval() & FullName() != "")
{
if(Buy)
{
price = Close[BarCount-1] + Otstup;
dir = "1";
makeandsave("B", price, Lots1, Client1, FileName1);
makeandsave("B", price, Lots2, Client2, FileName2);
}
if(Sell)
{
price = Close[BarCount-1] - Otstup;
dir = "2";
makeandsave("S", price, Lots1, Client1, FileName1);
makeandsave("S", price, Lots2, Client2, FileName2);
}
if(Short)
{
price = Close[BarCount-1] - Otstup;
dir = "3";
makeandsave("S", price, Lots1, Client1, FileName1);
makeandsave("S", price, Lots2, Client2, FileName2);
}
if(Cover)
{
price = Close[BarCount-1] + Otstup;
dir = "4";
makeandsave("B", price, Lots1, Client1, FileName1);
makeandsave("B", price, Lots2, Client2, FileName2);
}
}
else if (TimeFrame != Interval())
PopupWindow( "Не соответствует временной интервал в настройках АА и в коде",
"ошибка", timeout = 5, left = -1, top = -1 );
else
PopupWindow( "Не задан двузначный номер в поле FullName", "ошибка", timeout = 15, left = -1, top = -1 );
//// mehanizator (c) 2004, http://www.russian-trader.ru
//// 000 (c) 2008, http://www.amisite.ru
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Mike
Зарегистрирован: 08.04.2008
Сообщения: 24
Откуда: Астрахань
|
спасибо Олег за помощь, но Ами все равно ругается
Error 29. Variable 'account' used without having been initialized
типа мы не обозначили эту переменную, хотя в коде все есть..
в три файлы все пишет кроме номеров аккаунтов
Код: |
TRANS_ID=011115001; PRICE=7027; QUANTITY=8; OPERATION=B; CLASSCODE=SPBFUT; ACTION=NEW_ORDER; TYPE=L; SECCODE=SRZ9; ACCOUNT=0;
TRANS_ID=011115004; PRICE=7027; QUANTITY=8; OPERATION=B; CLASSCODE=SPBFUT; ACTION=NEW_ORDER; TYPE=L; SECCODE=SRZ9; ACCOUNT=0;
|
[img][/img][/img] |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
Mike
Зарегистрирован: 08.04.2008
Сообщения: 24
Откуда: Астрахань
|
аа, ну да, проверки на аккаунты в коде-то нету |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Блин. account забыл. Сам сможешь вставить в функцию? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Mike
Зарегистрирован: 08.04.2008
Сообщения: 24
Откуда: Астрахань
|
усе , разобрался!
работает так:
Код: |
///////// Установки ///////////
TimeFrame = 300;
Account=0;
Account1 = "SPBFUT00001";
Account2 = "SPBFUT00002";
Client1 = ""; // код клиента1
Client2 = ""; // код клиента2
Lots1 = 3;
Lots2 = 2;
Otstup = 2; // в процентах. Заявка будет выставлена хуже текущей цены на столько процентов
FileName1 = "C:/trans1.tri"; // слэши прямые!!! имя файла с транзакциями для квика
FileName2 = "C:/trans2.tri"; // слэши прямые!!! имя файла с транзакциями для квика
dir = 0;
/////////////////////////////////////////////
////////// Правила системы ///////////////
buy=cross(ma(c,10),ma(c,20));
sell=cross(ma(c,20),ma(c,10));
short=sell;
cover=buy;
Buy=ExRem(Buy,Sell) ;
Sell=ExRem(Sell,Buy);
Short=ExRem(Short,Cover) ;
Cover=ExRem(Cover,Short);
Buy=Ref(Buy,-1);
Sell=Ref(Sell,-1);
Short=Ref(Short,-1);
Cover=Ref(Cover,-1);
Buy = LastValue(Ref(Buy, -0));
Sell = LastValue(Ref(Sell, -0));
Short = LastValue(Ref(Short, -0));
Cover = LastValue(Ref(Cover, -0));
////////////////////////////////////////
//////////// Формируем транзакцию.//////////////
////////////////////////////////////////////////
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////
////////////////////////////////////////////////
Classcode = GroupID(1);
if(TickSize == 0)
{
PopupWindow( "Не задан размер тика значение TickSize", "ошибка", timeout = 5, left = -1, top = -1 );
}
else
{
Otstup = round(LastValue(C)*Otstup/100/TickSize)*TickSize;
form = (1 + 0.1 * abs(floor(IIf(log10(TickSize)>0, 0, log10(TickSize)))));
}
procedure savetrifile(stransid, sstr, sFileName)
{
f = fopen(sFileName, "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(sFileName, "a");
if(f)
{
fputs(sstr+"\n",f);
fclose(f);
}
}
}
function makeandsave(sOper, sprice, Lots, Client, FileName, Account)
{
CCS="";
if (Client != "") CCS="CLIENT_CODE="+Client+";";
transid = "TRANS_ID=" +FullName()+LastValue(TimeNum())+dir+"; ";
str = transid +
"PRICE=" +NumToStr(sprice, format = form, separator=False)+"; " +
"QUANTITY=" +NumToStr(Lots, format = 1.0, separator=False)+"; "+
"OPERATION=" +sOper+"; "+
"CLASSCODE=" +Classcode+"; "+
"ACTION=" +"NEW_ORDER; "+
"TYPE=" +"L; "+
"SECCODE=" +Name()+"; "+
"ACCOUNT=" +Account+"; "+
CCS;
savetrifile(transid, str, FileName);
}
if (TimeFrame == Interval() & FullName() != "")
{
if(Buy)
{
price = Close[BarCount-1] + Otstup;
dir = "1";
makeandsave("B", price, Lots1, Client1, FileName1,Account1);
makeandsave("B", price, Lots2, Client2, FileName2,Account2);
}
if(Sell)
{
price = Close[BarCount-1] - Otstup;
dir = "2";
makeandsave("S", price, Lots1, Client1, FileName1,Account1);
makeandsave("S", price, Lots2, Client2, FileName2,Account2);
}
if(Short)
{
price = Close[BarCount-1] - Otstup;
dir = "3";
makeandsave("S", price, Lots1, Client1, FileName1,Account1);
makeandsave("S", price, Lots2, Client2, FileName2,Account2);
}
if(Cover)
{
price = Close[BarCount-1] + Otstup;
dir = "4";
makeandsave("B", price, Lots1, Client1, FileName1,Account1);
makeandsave("B", price, Lots2, Client2, FileName2,Account2);
}
}
else if (TimeFrame != Interval())
PopupWindow( "Не соответствует временной интервал в настройках АА и в коде",
"ошибка", timeout = 5, left = -1, top = -1 );
else
PopupWindow( "Не задан двузначный номер в поле FullName", "ошибка", timeout = 15, left = -1, top = -1 );
|
запись в .три файлы идет без ошибок.
Спасибо всем! |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Приятно, когда все хорошо работает ! |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
burga
Зарегистрирован: 04.09.2009
Сообщения: 23
|
Я роботов делю тем, что запускаю несколько копий ами, в каждой свой робот. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А как данные передавать? Квиковский плагин не работает если несколько копий Ами запущено.
В смысле работает только в одной копии... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Mike
Зарегистрирован: 08.04.2008
Сообщения: 24
Откуда: Астрахань
|
да-да, пытался тоже таким образом поступить (несколькой копий ами), да только не вышло ничо.. Даже если для каждой копии ами запустить свой квик - в одном из них данные не шли.
Чтоб работало на компе 2 ами/2 квика делал так: запускал виртуальную винду от MojoPack и в ней уже настраивал дубли. Только машину сильно грузило.. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
burga
Зарегистрирован: 04.09.2009
Сообщения: 23
|
000 писал(а): |
А как данные передавать? Квиковский плагин не работает если несколько копий Ами запущено.
В смысле работает только в одной копии... |
У меня разные роботы на разных таймфреймах, соответственно я одну и ту же бумагу с разными таймфреймами передаю разными символами (GAZP5, GAZP60) ну и разнесены они у меня по разным базам. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Т.е если с разными фреймами и разные имена тикеров, то передает?
Стабильно? А 3 Ами не пробовал? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
burga
Зарегистрирован: 04.09.2009
Сообщения: 23
|
000 писал(а): |
Т.е если с разными фреймами и разные имена тикеров, то передает?
Стабильно? А 3 Ами не пробовал? |
Да, стабильно, только базы тоже разные с разными базовыми таймфреймами.
С 3-мя не пробовал. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|