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





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

Добрый день
Олег, а какие изменения нужно внести в раздел "Сюда руками не лазить" чтобы команда в QUIK посылалась немедленно, (как только соответствующая команда появляется в анализаторе), а не ждала открытия нового бара.
Заранее спасибо
commenced
Советник


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

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

N2NN писал(а):
Добрый день
Олег, а какие изменения нужно внести в раздел "Сюда руками не лазить" чтобы команда в QUIK посылалась немедленно, (как только соответствующая команда появляется в анализаторе), а не ждала открытия нового бара.
Заранее спасибо


Команда посылается немедленно, только причем здесь анализатор, если робот на основе сканера.

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


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

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

commenced писал(а):


Команда посылается немедленно, только причем здесь анализатор, если робот на основе сканера.

В Ами это называется АА. Автоматический анализатор. Smile

N2NN писал(а):
Добрый день
Олег, а какие изменения нужно внести в раздел "Сюда руками не лазить" чтобы команда в QUIK посылалась немедленно, (как только соответствующая команда появляется в анализаторе), а не ждала открытия нового бара.
Заранее спасибо

Никаких изменений не надо. Как уже было сказано команда и так посылается немедленно в момент её возникновения.

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


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

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

Код:
Buy = LastValue(Buy);
Sell = LastValue(Sell);
Short = LastValue(Short);
Cover = LastValue(Cover);

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

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(Buy)
   {
     price = Close[BarCount-1] + Otstup;
      makeandsave("B", 1, price);
   }
   if(Sell)
   {
      price = Close[BarCount-1] - Otstup;
      makeandsave("S", 2, price);
   }
   if(Short)
   {
      price = Close[BarCount-1] - Otstup;
      makeandsave("S", 3, price);
   }
   if(Cover)
   {
      price = Close[BarCount-1] + Otstup;
      makeandsave("B", 4, price);
   }

}//// mehanizator (c) 2004, ссылки мне запрещены
//// 000 (c) 2008, реклама покоцана мной


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

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


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

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

Давай угадаю. У тебя базовый фрейм меньше, чем фрейм на котором работает робот и ID этих заявок в tri разное?

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


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

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

000 писал(а):
Давай угадаю. У тебя базовый фрейм меньше, чем фрейм на котором работает робот и ID этих заявок в tri разное?


Да, а базовый фрейм ему разве не побарабану, в АА выставлен тоже час.

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


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

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

Там фигня в том, что робот определяет отправлена ли уже заявка по этому сигналу находя её (заявку в tri). А заявка идентифицируется по ID. А ID составляется из имени, времени и типа сигнала
Код:

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

Когда базовый фрейм меньше чем рабочий получается так, что время последней свечки последовательно равно времени последних свечек её состовляющих. Поэтому оно меняется, а значит меняется и ID. Вот робот и не узнает заявку и отправляет её снова... Как вариант можно вставлять в идентификатор время прошлой (уже закрытой) свечки. Попробуй сделать так
Код:

transid = "TRANS_ID="   +FullName()+LastValue(Ref(TimeNum(), -1))+dir+"; ";

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


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

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

000 писал(а):
Там фигня в том, что робот определяет отправлена ли уже заявка по этому сигналу находя её (заявку в tri). А заявка идентифицируется по ID. А ID составляется из имени, времени и типа сигнала
Код:

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

Когда базовый фрейм меньше чем рабочий получается так, что время последней свечки последовательно равно времени последних свечек её состовляющих. Поэтому оно меняется, а значит меняется и ID. Вот робот и не узнает заявку и отправляет её снова... Как вариант можно вставлять в идентификатор время прошлой (уже закрытой) свечки. Попробуй сделать так
Код:

transid = "TRANS_ID="   +FullName()+LastValue(Ref(TimeNum(), -1))+dir+"; ";


Ок

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


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

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

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

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



Buy = LastValue(Buy);
Sell = LastValue(Sell);
Short = LastValue(Short);
Cover = LastValue(Cover);

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

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(Buy)
   {
     price = Close[BarCount-1] + Otstup;
      makeandsave("B", 1, price);
   }
   if(Sell)
   {
      price = Close[BarCount-1] - Otstup;
      makeandsave("S", 2, price);
   }
   if(Short)
   {
      price = Close[BarCount-1] - Otstup;
      makeandsave("S", 3, price);
   }
   if(Cover)
   {
      price = Close[BarCount-1] + Otstup;
      makeandsave("B", 4, price);
   }

}//// mehanizator (c) 2004, ссылки мне запрещены
//// 000 (c) 2008, реклама покоцана мной


Олег подскажи пожалуста какие необходимо внести изменения. чтоб не зависить от тайма. а от номера свечи и проверка чтоб есно проводилась следующим образом. если заявка с текущего бара 567 ушла не отправлять до появления следующего сигнала с текущего бара с номером отличым от 567.

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


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

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

Вот тут
Код:

...
function makeandsave(sOper, operID, sprice)
{
   CCS="";
   if (Client != "")  CCS="CLIENT_CODE="+Client+";";

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

исправь LastValue(TimeNum()) на Barcount и в начале кода напиши SetBarsRequired(100000, 0);

Имей ввиду, что это я не проверял...

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


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

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

000 писал(а):
Вот тут
Код:

...
function makeandsave(sOper, operID, sprice)
{
   CCS="";
   if (Client != "")  CCS="CLIENT_CODE="+Client+";";

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

исправь LastValue(TimeNum()) на Barcount и в начале кода напиши SetBarsRequired(100000, 0);

Имей ввиду, что это я не проверял...


Спасибо.

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


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

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

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

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


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

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

Вот прямо с ходу ничего в голову не пришло... Sad Буду думать. А что мешает сделать базу с базовым фреймом равным торгуемому?

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


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

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

000 писал(а):
Вот прямо с ходу ничего в голову не пришло... Sad Буду думать. А что мешает сделать базу с базовым фреймом равным торгуемому?


Просто базового нет, в смысле время вообще отсутствует есть массив HOLC и номер бара Smile

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


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

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

Если фрейм установленный в качестве базового и фрейм заданный в настройках АА равны, то, в любом случае, должно работать нормально.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen