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


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

СообщениеДобавлено: Сб Сен 12, 2009 5:07 pm Ответить с цитатой Вернуться к началу

Да.

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



Зарегистрирован: 08.04.2008
Сообщения: 24
Откуда: Астрахань

СообщениеДобавлено: Ср Ноя 25, 2009 11:49 am Ответить с цитатой Вернуться к началу

Привет всем!
долго читал эту тему,но все равно не догоняю в чем косяк Sad
Хелп плиз!
ситуация такая: есть 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);
   }

}


.. и в .три файлах пустота Sad
ткните лицом где ошибка, а?
Посмотреть профиль Отправить личное сообщение ICQ Number
Mike



Зарегистрирован: 08.04.2008
Сообщения: 24
Откуда: Астрахань

СообщениеДобавлено: Ср Ноя 25, 2009 12:06 pm Ответить с цитатой Вернуться к началу

попробовал заюзать код с первой страницы в этой ветке- выдает Error 30.Syntax Error.

Код:

  transid = "TRANS_ID="   +FullName()+LastValue(TimeNum())+dir+sys"; ";


курсор стоит после
Код:
+dir+sys

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


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

СообщениеДобавлено: Чт Ноя 26, 2009 1:45 am Ответить с цитатой Вернуться к началу

Так попробуй
Код:

///////// Установки ///////////

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
Откуда: Астрахань

СообщениеДобавлено: Чт Ноя 26, 2009 11:22 am Ответить с цитатой Вернуться к началу

спасибо Олег за помощь, но Ами все равно ругается
Error 29. Variable 'account' used without having been initialized
типа мы не обозначили эту переменную, хотя в коде все есть..

в три файлы все пишет кроме номеров аккаунтов Sad
Код:

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]Image[/img][/img]
Посмотреть профиль Отправить личное сообщение ICQ Number
Mike



Зарегистрирован: 08.04.2008
Сообщения: 24
Откуда: Астрахань

СообщениеДобавлено: Чт Ноя 26, 2009 11:35 am Ответить с цитатой Вернуться к началу

аа, ну да, проверки на аккаунты в коде-то нету Smile
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


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

СообщениеДобавлено: Чт Ноя 26, 2009 11:44 am Ответить с цитатой Вернуться к началу

Блин. account забыл. Сам сможешь вставить в функцию?

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



Зарегистрирован: 08.04.2008
Сообщения: 24
Откуда: Астрахань

СообщениеДобавлено: Чт Ноя 26, 2009 11:49 am Ответить с цитатой Вернуться к началу

усе , разобрался!
работает так:
Код:

///////// Установки ///////////

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

СообщениеДобавлено: Чт Ноя 26, 2009 11:50 am Ответить с цитатой Вернуться к началу

Приятно, когда все хорошо работает !

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



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

СообщениеДобавлено: Пт Ноя 27, 2009 5:30 am Ответить с цитатой Вернуться к началу

Я роботов делю тем, что запускаю несколько копий ами, в каждой свой робот.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Ноя 27, 2009 8:58 am Ответить с цитатой Вернуться к началу

А как данные передавать? Квиковский плагин не работает если несколько копий Ами запущено.
В смысле работает только в одной копии...

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



Зарегистрирован: 08.04.2008
Сообщения: 24
Откуда: Астрахань

СообщениеДобавлено: Пт Ноя 27, 2009 9:58 am Ответить с цитатой Вернуться к началу

да-да, пытался тоже таким образом поступить (несколькой копий ами), да только не вышло ничо.. Даже если для каждой копии ами запустить свой квик - в одном из них данные не шли.
Чтоб работало на компе 2 ами/2 квика делал так: запускал виртуальную винду от MojoPack и в ней уже настраивал дубли. Только машину сильно грузило..
Посмотреть профиль Отправить личное сообщение ICQ Number
burga



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

СообщениеДобавлено: Пт Ноя 27, 2009 10:54 am Ответить с цитатой Вернуться к началу

000 писал(а):
А как данные передавать? Квиковский плагин не работает если несколько копий Ами запущено.
В смысле работает только в одной копии...


У меня разные роботы на разных таймфреймах, соответственно я одну и ту же бумагу с разными таймфреймами передаю разными символами (GAZP5, GAZP60) ну и разнесены они у меня по разным базам.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Ноя 27, 2009 2:06 pm Ответить с цитатой Вернуться к началу

Т.е если с разными фреймами и разные имена тикеров, то передает?
Стабильно? А 3 Ами не пробовал?

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



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

СообщениеДобавлено: Пт Ноя 27, 2009 6:09 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Т.е если с разными фреймами и разные имена тикеров, то передает?
Стабильно? А 3 Ами не пробовал?


Да, стабильно, только базы тоже разные с разными базовыми таймфреймами.
С 3-мя не пробовал.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen