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


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

СообщениеДобавлено: Вт Апр 21, 2009 10:40 am Ответить с цитатой Вернуться к началу

Уф....
Вот.
Не проверял.
Код:

FileName = "C:/Program Files/Quick/trans.tri"; // слэши прямые!!! имя файла с транзакциями для квика

//////////// Формируем транзакцию. /////////////
////////////////////////////////////////////////
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////
////////////////////////////////////////////////


// записываем строку с транзакцией в tri если там такой нет
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, sprice, sdir, ssys, sAcc, SCli, sLot, sClasscod, sform)
{
   CCS="";
   if (SCli != "")  CCS="CLIENT_CODE="+SCli+";";

   transid = "TRANS_ID=" + FullName() + LastValue(TimeNum()) + ssys + sdir + "; ";

   str = transid  +
   "PRICE="       + NumToStr(sprice, format = sform, separator=False) + "; " +
   "QUANTITY="    + NumToStr(sLot, format = 1.0, separator=False) + "; "+
   "OPERATION="   + sOper + "; " +
   "CLASSCODE="   + sClasscod + "; " +
   "ACTION="      + "NEW_ORDER; " +
   "TYPE="        + "L; " +
   "SECCODE="     + Name() + "; "+
   "ACCOUNT="     + sAcc + "; " +
   CCS;

   savetrifile(transid, str);
}

// проверяем сигнал и если есть, то передаем на формирование строки
function tri(Bu, Se, Sh, Co, s, Acc, Cli, Lot, Otst, Classcod)
{
  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)))));
}
dir = 0;

   if(Bu)
   {
      price = Close[BarCount-1] + Otstup;
      dir = "1";
      sys = s;
      makeandsave("B", price, sys, Acc, Cli, Lot, Classcod);
   }
   if(Se)
   {
      price = Close[BarCount-1] - Otst;
      dir = "2";
      sys = s;
      makeandsave("S", price, sys, Acc, Cli, Lot, Classcod);
   }
   if(Sh)
   {
      price = Close[BarCount-1] - Otst;
      dir = "3";
      sys = s;
      makeandsave("S", price, sys, Acc, Cli, Lot, Classcod);
   }
   if(Co)
   {
      price = Close[BarCount-1] + Otst;
      dir = "4";
      sys = s;
      makeandsave("B", price, dir, sys, Acc, Cli, Lot, Classcod, form);
   }
}

///////// Конец формирования транзакции. ///////
////////////////////////////////////////////////


/////////////////// Системы. ///////////////////
////////////////////////////////////////////////

////////////////////////////////////////////////////
////////// Правила системы 1 ///////////////
////////////////////////////////////////////////////

////// Эта часть должна быть в каждой системе //////

// к каким символам применять систему (должны точно соответствовать символам в Ами).
ApplyForSumb = "SBER,LKOH";

// Аккаун, клиент, сайз и т.п. для этой системы
Account        = "L01-00000F00";   // аккаунт для системы 1
Client         = "49501";          // код клиента для системы 1
Lots           = 1;                // сколько лотов торгует система 1
Otstup         = 2;                // в процентах. Заявка будет выставлена хуже текущей цены на столько процентов
Classcode = GroupID(1);
////////////// Конец обязательной части ///////////


if(StrFind(ApplyForSumb, Name()) > 0) {  // Если обрабатываемый символ торгуется этой системой
   
///// Собственно система /////

   Buy1 =  Cross(C, MA(C, 10));
   Sell1 = Cross(MA(C, 10), C);
   Short1 = Sell1;
   Cover1 = Buy1;

// фильтруем "лишние" сигналы
   Buy1 = ExRem( Buy1, Sell1 );
   Sell1 = ExRem( Sell1, Buy1 );
   Short1 = ExRem( Short1, Cover1 );
   Buy1 = ExRem( Cover1, Short1 );

// оставляем только последний зафиксированный сигнал
   Buy1 = LastValue(Ref(Buy1, -1));
   Sell1 = LastValue(Ref(Sell1, -1));
   Short1 = LastValue(Ref(Short1, -1));
   Cover1 = LastValue(Ref(Cover1, -1));

///// Конец системы /////

  tri(Buy1, Sell1, Short1, Cover1, 1/*номер системы*/, Account, Client, Lots, Otstup, Classcode);
}

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


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

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

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

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



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

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

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


привет, Олег!
Подскажы, плиз, раз уж ты сделал код для нескольких систем на 2-х таймфреймах через 1 код в AA, можеш написать подобный код, но для 2-х разных .tri файлов ?
Было бы очень полезно обрабатывать одним кодом 2 разных фортс-акаунта на 2-х таймфреймах, скажем 5М и 15М.
Суть моего вопроса в том, што появица ли возможность функцыонирования нескольких торговых роботов на 1 ПК (aka ЭВМ). Very Happy
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

А зачем 2 разных tri ? Почему нельзя в одном?

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



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

СообщениеДобавлено: Вт Апр 28, 2009 10:39 am Ответить с цитатой Вернуться к началу

000 писал(а):
А зачем 2 разных tri ? Почему нельзя в одном?


Если запихнуть 2 разные системы на 1 щет, скажем для торговли RI*, то сигналы будут накладываца и сомневаюсь што штото хорошее из этого выйдет. Хотя может я не прав. Подскажы, плиз, если 2 системы с разными таймфреймами залить в 1 код и применить их к одному инструменту на одном щете, то будет ли результат совпадать с суммарным результатом от торговли каждой системой отдельно на разных щетах?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Просто надо будет идентификатор системы/счета в ID записи в tri добавить и все. Собственно там это уже сделано.
tri(Buy1, Sell1, Short1, Cover1, 1/*номер системы*/, Account, Client, Lots, Otstup, Classcode);

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



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

СообщениеДобавлено: Вт Апр 28, 2009 8:17 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Просто надо будет идентификатор системы/счета в ID записи в tri добавить и все. Собственно там это уже сделано.
tri(Buy1, Sell1, Short1, Cover1, 1/*номер системы*/, Account, Client, Lots, Otstup, Classcode);


Спасибо! штото я невнимательный стал, жара влияет ).
Буду ковырять системы для работы без фун. Equity.
Посмотреть профиль Отправить личное сообщение
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Чт Апр 30, 2009 6:14 am Ответить с цитатой Вернуться к началу

000 писал(а):
Просто надо будет идентификатор системы/счета в ID записи в tri добавить и все. Собственно там это уже сделано.
tri(Buy1, Sell1, Short1, Cover1, 1/*номер системы*/, Account, Client, Lots, Otstup, Classcode);


Олег, а АА ругается на отсутствие buy sell.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

СообщениеДобавлено: Чт Апр 30, 2009 7:52 am Ответить с цитатой Вернуться к началу

Для скана они обязательно нужны. Напиши там Buy = Sell = Short = Cover = 0;
или через expore.

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


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Чт Апр 30, 2009 8:16 am Ответить с цитатой Вернуться к началу

000 писал(а):
Для скана они обязательно нужны. Напиши там Buy = Sell = Short = Cover = 0;
или через expore.

Спасибо, две системы засовываю, сделал так.


Код:
///////// Установки ///////////

TimeFrame      = 5;                  // таймфрейм в минутах.
Account         = "SPBFUT";   // ваш аккаунт на бирже
Client         = "SPBFU";            // код клиента
Lots            = 10;
Otstup         = 5;                     // в процентах. заявка будет выставлена хуже текущей цены на столько процентов
FileName      ="c:/tranzi/trans.tri"; // слэши прямые!!! имя файла с транзакциями для квика


///правила систем


//////////// Формируем транзакцию.//////////////
////////////////////////////////////////////////
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////
////////////////////////////////////////////////

Classcode = GroupID(1);
Otstup = round(LastValue(C)*Otstup/100/TickSize)*TickSize;


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, operID, sprice)
{
   CCS="";
   if (Client != "")  CCS="CLIENT_CODE="+Client+";";

   transid = "TRANS_ID=" +FullName() + NumToStr(operID, format=1.0) + LastValue(TimeNum())+"; ";



   str = transid   +
"PRICE="         +NumToStr(sprice, format = 1.0, 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()/60 & FullName() != "")
{
   if(Buy1)
   {
     price = Close[BarCount-1] + Otstup;
      makeandsave("B", 1, price);
   }
   if(Sell1)
   {
      price = Close[BarCount-1] - Otstup;
      makeandsave("S", 2, price);
   }
   if(Short1)
   {
      price = Close[BarCount-1] - Otstup;
      makeandsave("S", 3, price);
   }
   if(Cover1)
   {
      price = Close[BarCount-1] + Otstup;
      makeandsave("B", 4, price);
   }
  if(Buy2)
   {
     price = Close[BarCount-1] + Otstup;
      makeandsave("B", 5, price);
   }
   if(Sell2)
   {
      price = Close[BarCount-1] - Otstup;
      makeandsave("S", 6, price);
   }
   if(Short2)
   {
      price = Close[BarCount-1] - Otstup;
      makeandsave("S", 7, price);
   }
   if(Cover2)
   {
      price = Close[BarCount-1] + Otstup;
      makeandsave("B", 8, price);
   }

}

_________________
Юра

Последний раз редактировалось: commenced (Пн Май 04, 2009 9:40 am), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

СообщениеДобавлено: Чт Апр 30, 2009 8:31 am Ответить с цитатой Вернуться к началу

Вроде все нормально. Только смотри, Equity() и соответственно ApplyStop() использовать нельзя.
Если разные системы работают на разных бумагах, то все эти навороты и вовсе не нужны.

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


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Чт Апр 30, 2009 8:48 am Ответить с цитатой Вернуться к началу

000 писал(а):
Вроде все нормально. Только смотри, Equity() и соответственно ApplyStop() использовать нельзя.
Если разные системы работают на разных бумагах, то все эти навороты и вовсе не нужны.


Использую exrem. Бумага одна, тайм один. Системы одна нормальная одна похуже, торговать двумя собираюсь для деверсификации методов торговли.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
dar



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

СообщениеДобавлено: Чт Сен 10, 2009 4:57 pm Ответить с цитатой Вернуться к началу

Тут писали, что: если две системы то ApplyStop() использовать нельзя - это с чем связано? У меня на обе системы стоп в процентах одинаковый - будет ApplyStop() работать или нет?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Для того чтобы использовать ApplyStop() в роботе торгующем через АА необходимо в код добавить функцию Equity()
В таком случае если 2 робота торгуют на одной бумаге эта функция фильтранет "лишние" сигналы на вход в сделку. Если одна система в лонге, то Buy другой системы будет отфильтрован...
Вот поэтому с использованием ApplyStop() проблеммы....

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



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

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

А если на разных тикерах(на одном тикере одна система) то и Equity и ApplayStop можно, так ?
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen