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


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

СообщениеДобавлено: Ср Июн 08, 2011 11:17 pm Ответить с цитатой Вернуться к началу

У RTS после запятой не может быть цифр
Цитата:

Контракты котируются в базисных пунктах Индекса РТС – значение индекса с точностью до двух знаков после запятой, умноженное на 100.

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



Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user

СообщениеДобавлено: Ср Июн 08, 2011 11:20 pm Ответить с цитатой Вернуться к началу

belin писал(а):
Сравнил два кода, отличаются только по бай и селл, и у меня было 190000.0 (кажется, код твоим затер) а у тебя 190000. Я ставил 190000.0 по старой привычке, чтобы отличать от целого числа и потом проще было передать Ref(Close,-1) + запас на проскальзывание, а он может быть и не округлённым до целого, ведь при лимитниках нас это интересует, меня , например.

Подумал, может в округлении дело и косячат Double- смарта и float Ами? И если у РТС нет знаков после запятой, как SmartCom пихает туда Double?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Июн 08, 2011 11:33 pm Ответить с цитатой Вернуться к началу

А разве если Double, то обязательно есть десятичные знаки?
Вообще, не знаю как смарт, а квик через tri очень критично относится к лишним знакам.

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



Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user

СообщениеДобавлено: Ср Июн 08, 2011 11:50 pm Ответить с цитатой Вернуться к началу

000 писал(а):
А разве если Double, то обязательно есть десятичные знаки?
Вообще, не знаю как смарт, а квик через tri очень критично относится к лишним знакам.

Мы говорим именно о лимитных заявках, Ами тоже в числах содержит некий незначительный мусор, и тогда как купить по цене не хуже Close + Atr(10)? Чтобы не купить на выносе? Если нужно округлять, только скажи, об(int)им всё что только можно, но грядущие пользователи могут не понять, сам на вопросы в форуме отвечаешь, знаешь как народ коды пишет
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Июн 08, 2011 11:57 pm Ответить с цитатой Вернуться к началу

Вот если посмотришь код робота для квика, то увидишь там вот такую строку
Код:
Otstup = round(LastValue(C)*Otstup/100/TickSize)*TickSize;

Эта строка округляет цену подаваемой заявки в зависимости от зазмера тика тргуемой бумаги.
Без этого никак нельзя....

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



Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user

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

Вопросов нет, сегодня после открытия будем тестировать. Спасибо. Пора отдыхать- (посмотреть форумы, кино и т.д.)
Посмотреть профиль Отправить личное сообщение
belin



Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user

СообщениеДобавлено: Чт Июн 09, 2011 10:51 am Ответить с цитатой Вернуться к началу

ВСЁ РАБОТАЕТ. Да, похоже всё дело было в знаке после запятой, без него первая заявка не проходит, как Олег и говорил, с месс. возможно неправильный символ, (подсоединение к смарту и всё такое), а следующие ставиятся нормально, после разрыва соединения, пересоединения всё нормально, только если выйти из Ами, приходится пропустить первую заявку, но её нет в системе, можно легко обработать. Один раз увидел "нет связи с сервером", удивился, но в этот момент связи действительно не было. ВСЁ РАБОТАЕТ. Сейчас погоняю на ценах за пределами лимитов, этих данных у нас дата плагин не поставляет, возможны выходы за пределы. Можно продолжать дальнейшую разработку со снятием заявок. Ждём.
Посмотреть профиль Отправить личное сообщение
belin



Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user

СообщениеДобавлено: Чт Июн 09, 2011 11:07 am Ответить с цитатой Вернуться к началу

И за пределами лимитов всё работает, плагин доставляет заявку на биржу, а уж то что система её отклонила, пока ему не известно, но мы надеемся на продолжение. Если лупить по маркету, то уже можно запускать простенького робота, на демо однозначно можно. Вопрос о приходящем времени постановки заявки пока снимаю, сегодня время в минутах на минутной базе с минутной настройкой експлорера приходит правильное, возможно вчера из-за моих ошибок, было что-то не так.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Июн 09, 2011 2:04 pm Ответить с цитатой Вернуться к началу

Погоняй его плиз как следует. Просьба сообщать о любом косяке

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



Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user

СообщениеДобавлено: Чт Июн 09, 2011 4:06 pm Ответить с цитатой Вернуться к началу

Да я бы погонял, но подлый демо сервер, как узнал что можно тестировать стоит гад после 14-00 клиринга, а на ММВБ я не работаю.
Посмотреть профиль Отправить личное сообщение
belin



Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user

СообщениеДобавлено: Чт Июн 09, 2011 5:04 pm Ответить с цитатой Вернуться к началу

Да, гады закрыли тестовый ФОРТС на два дня.
Вот, с сайта: Уважаемые пользователи тестового доступа!

Тестовая торговля на FORTS будет недоступна в течение двух дней 9-го и 10-го июня в связи с работами по обновлению тестовой торговой системы биржей РТС.

Работа будет возобновлена 14 июня по обычному расписанию.
В связи с этим, в указанные дни на тестовом сервере 89.175.35.229 будет доступна торговля только на ММВБ.

В связи с этим вопросы по ММВБ, если взять скажем ЛУКОЙЛ, цену нужно ставить с точностью до копеек? Насколько я понимаю, у лукойла 1 бумага в лоте, а у Газпрома 10, в количестве, передаваемом в функцию ITOrder нужно передавать число лотов или число акций?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Июн 09, 2011 8:49 pm Ответить с цитатой Вернуться к началу

Я или сегодня попозже или завтра выложу код простенького робота для тестирования. Погоняшь хоть на фортс хоть на мамбе...

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


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

СообщениеДобавлено: Чт Июн 09, 2011 11:57 pm Ответить с цитатой Вернуться к началу

Вот робот. Должен работать, но возможно, что есть косяки.... Если по нему что непонятно - спрашивайте.
Код:

Filter = 1;

TimeFrame = 5*60;    // таймфрейм в секундах.
Accaunt   = "ST5015-RF-01";

Tickers = "RIM1,SRM1"; // торгуемые символы через запятую без пробелов. Для контроля ошибок
/////////////

///////////////
// задаем размер лотов и коды символов
/////////////

if(Name() == "RIM1")
{
  NameForPos = "RIM1";  // это для записи файла с текущей позицией,
     //на случай если имя бумаги в Ами содержит запрещенные символы
  Lots     = 1;
  Code  = "RTS-6.11_FT";
}
else if(Name() == "SRM1")
{
  NameForPos = "SRM1";  // это для записи файла с текущей позицией,
     //на случай если имя бумаги в Ами содержит запрещенные символы
  Lots     = 5;
  Code  = "SBRF-6.11_FT";
}

////////// Функции //////////
function ReadPos() {
  fh = fopen( NameForPos + "_robot.it", "r");
  if( fh ) {
    p = fgets( fh );
    p = StrToNum(p);
  }
  else {
    fh = fopen( NameForPos + "_robot.it", "w");
    fputs( "0", fh);
    p = 0;
  }
  fclose( fh );

  return p;
}

procedure WritePos( q ) {
  fh = fopen( NameForPos + "_robot.it", "w");
  fputs( NumToStr( q, 1.0, False ), fh);
  fclose( fh );
}

procedure LogWrite(s) {
  fh = fopen( "robot_log.it", "a");
  s = s + "\n";
  fputs( s, fh);
  fclose( fh );
}

pos = ReadPos();
str = Now(0) + "  " + Name();

procedure order(bs) {

   AddTextColumn(ITOrder(Accaunt, Code, bs, 1, 1, 0, Lots, 0), "номер ордера");
   N = ITOrderMessage();
   AddTextColumn(N, "ответ IT Trade");

   if(StrToNum(N) > 0) {
         str = str + "  заяка исполнена" + " ответ сервера=" + N;
       if(pos > 0 AND bs == 2)             {   // закрытие лонга
            WritePos(0);
         }
         else if(pos == 0 AND bs == 3)      {   // шорт
            WritePos(-1*Lots);
         }
         else if(pos < 0 AND bs == 4)       {   // закрытие шорта
            WritePos(0);
         }
         else if(pos == 0 AND bs == 1)    {   // лонг
            WritePos(Lots);
         }
         str = str + "  заяка исполнена";
   }
   else {
         str = str + "  заяка НЕ исполнена" + " ответ сервера=" + N;
   }
}

///////////// проверка наличия символа в списке для торговли ////////////////
k = 0;
Permit_Ticker = False;
do {
  Tick = StrExtract(Tickers, k);
  k++;
  if(Name() == Tick)
    Permit_Ticker = True;
} while(Tick != "");


//////////////Система///////////////
Buy1 =  Cross(C, MA(C, 10));
Sell1 = Cross(MA(C, 10), C);
Short1 = 0;
Cover1 = 0;
//////////////Система///////////////

AddColumn( C[BarCount-1], "цена", 1.2, colorDefault, colorDefault, 70 );
AddColumn( pos, "позиция", 1.0, colorDefault, IIf(pos > 0, colorGreen, colorDefault), 60);



if (TimeFrame == Interval() AND Permit_Ticker)
{
   if(Buy1[BarCount-2]) {
      order(1);
      str = str + "  Buy";
      AddTextColumn("Buy", "Buy");
      LogWrite(str);
   }
   else if(Sell1[BarCount-2]) {
      order(2);
      str = str + "  sell";
      AddTextColumn("Sell", "Sell");
      LogWrite(str);
   }
   if(Short1[BarCount-2]) {
      order(3);
      str = str + "  Short";
      AddTextColumn("Short", "Short");
      LogWrite(str);
   }
   else if(Cover1[BarCount-2]) {
      order(4);
      str = str + "  Cover";
      AddTextColumn("Cover", "Cover");
      LogWrite(str);
   }

}
else if(TimeFrame != Interval()) {
   PopupWindow( "Не соответствует временной интервал в настройках АА и в коде",
                     "ошибка", timeout = 5, left = -1, top = -1 );
}


Робот пишет лог файл robot_log.it в папку куда установлен Ами и файлы с текущей позицией по бумаге типа RIM1_robot.it

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



Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user

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

Пределал код под Газпром на 1 минутках, на тестовом сервере сегодня только ММВБ, Жду сигналов, робот только лонговый, а день шортовый, если не будет сигналов ещё переделаю на высокочастотник на 5 сукунд. интересно за один день демосчет на ММВБ слить можно?
Посмотреть профиль Отправить личное сообщение
belin



Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user

СообщениеДобавлено: Пт Июн 10, 2011 12:19 pm Ответить с цитатой Вернуться к началу

Заработало!!!, GAZP_Robot.it есть, но в нём всегда 0, Explorer настроен на curent symbol, n last qoutation =1, run every 5sec. Напокупал по 10 акций каждые 5 сек, пока не остановил. В Логе робота первая заявка возможно неправильный символ заявки нет, а далее покупает каждые 5 секунд,
10.06.2011 13:41:00 GAZP заявка НЕ исполнена ответ сервера=возможно неправильный символ Buy
10.06.2011 13:41:05 GAZP заявка НЕ исполнена ответ сервера=доставлен на сервер Buy
10.06.2011 13:41:11 GAZP заявка НЕ исполнена ответ сервера=доставлен на сервер Buy
10.06.2011 13:41:18 GAZP заявка НЕ исполнена ответ сервера=доставлен на сервер Buy
10.06.2011 13:41:23 GAZP заявка НЕ исполнена ответ сервера=доставлен на сервер Buy
10.06.2011 13:41:29 GAZP заявка НЕ исполнена ответ сервера=доставлен на сервер Buy
10.06.2011 13:41:34 GAZP заявка НЕ исполнена ответ сервера=доставлен на сервер Buy
10.06.2011 13:41:40 GAZP заявка НЕ исполнена ответ сервера=доставлен на сервер Buy
Сижу разбираюсь.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen