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


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

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

Ну прально. Моя ошибка. Вот это
Код:

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

    if(StrToNum(N) > 0) {

замени на
Код:

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

   if(StrToNum(M) > 0) {

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



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

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

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


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

СообщениеДобавлено: Пт Июн 10, 2011 3:25 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) {

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

   if(StrToNum(M) > 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] AND pos == 0) {
       order(1);
       str = str + "  Buy";
       AddTextColumn("Buy", "Buy");
       LogWrite(str);
    }
    else if(Sell1[BarCount-2] AND pos > 0) {
       order(2);
       str = str + "  sell";
       AddTextColumn("Sell", "Sell");
       LogWrite(str);
    }
    if(Short1[BarCount-2] AND pos == 0) {
       order(3);
       str = str + "  Short";
       AddTextColumn("Short", "Short");
       LogWrite(str);
    }
    else if(Cover1[BarCount-2] AND pos < 0) {
       order(4);
       str = str + "  Cover";
       AddTextColumn("Cover", "Cover");
       LogWrite(str);
    }

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

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



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

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

Да, всё работает!!! Поздравляю!!! И большое СПАСИБО.


Последний раз редактировалось: belin (Пт Июн 10, 2011 6:07 pm), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
belin



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

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

Да, всё работает, с 18-04 до 18-45 совершил 10 сделок каждый раз сервер отвечал номером заявки, лишь на первом шаге ответ сервера отрицательный (подсоединение), но уже на втором через время соответствующее run every ...sec, робот входил в позицию. Номера заявок отличаются от номеров, которые транслируются в Смарте, но я так понимаю, что это приходят внутренние номера. Если лупить по маркету, то уже можно работать как в Квике. Можно потихоньку пробовать на боевом. Только не на ММВБ, здесь сегодняшние пробы обошлись в -1000 деморублей, правда, я работал на минутках. И вообще за день 31 сделка, (заявок на 2 больше - 2 подсоединения) каждый раз сервер отвечал и всё сработало.
Посмотреть профиль Отправить личное сообщение
max



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

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

Привет
Завтра хочу запустить "Бендера" в пока режиме демо, а там посмотрим
Хотел бы "на берегу" уточнить два момента
1.У себя в коде я пишу
Buy=ExRem(Buy,Sell);
Sell=ExRem(Sell,Buy);
Short=ExRem(Short,Cover);
Cover=ExRem(Cover,Short);
Во избежании всякого косячного

Нужно ли добавить это в "код" робота?

2.Как я понимаю, при наступлении события Бай Селл Шорт или Ковер
робот отсылает маркет заявку?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Да и Да.
Хотя 1 не обязательно. Робот сам смотрит позицию и если текщая лонг, то больше покупать не станет до тех пор пока не закроется лонг.

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



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

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

Олег, отличная работа, большое вам спасибо
Посмотреть профиль Отправить личное сообщение
max



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

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

Блин а я все не могу протестить
РТС как всегда - жопа с ручкой
не работает тестовый сервер уже неделю
Посмотреть профиль Отправить личное сообщение
belin



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

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

max писал(а):
Блин а я все не могу протестить
РТС как всегда - жопа с ручкой
не работает тестовый сервер уже неделю

Я на тестовой ММВБ пока проверяю прохождение заявок, нареканий нет. Вроде сегодня обещали сделать тестовый Фортс, но это РТС, они ещё вчера обещали, пробуй пока на ММВБ, я полдня разбирался с роботом пока не пошло.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Сегодня погонял на демо ММВБ.
Вот такой код "системы" на минутках.
Код:

  Buy1 =  frac(Minute()/2) > 0;
  Sell1 = frac(Minute()/2) == 0;
  Short1 = 0;
  Cover1 = 0;

Покупка/продажа каждую минуту. Отработало хорошо.

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


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

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

Вот еще что. Хотел было еще на Газпроме его запустить, а у меня на демке смарт наколбасил хренову тучу тикеров в Ами и названия там типа OAO "Газпром".. (с кавычками). Это на самом деле (на реале) тоже так? Там кавычки всю малину портят....

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



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

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

belin писал(а):
max писал(а):
Блин а я все не могу протестить
РТС как всегда - жопа с ручкой
не работает тестовый сервер уже неделю

Я на тестовой ММВБ пока проверяю прохождение заявок, нареканий нет. Вроде сегодня обещали сделать тестовый Фортс, но это РТС, они ещё вчера обещали, пробуй пока на ММВБ, я полдня разбирался с роботом пока не пошло.


да мне именно РТС проверить надо
блин время жалко уходит
Посмотреть профиль Отправить личное сообщение
belin



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

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

000 писал(а):
Вот еще что. Хотел было еще на Газпроме его запустить, а у меня на демке смарт наколбасил хренову тучу тикеров в Ами и названия там типа OAO "Газпром".. (с кавычками). Это на самом деле (на реале) тоже так? Там кавычки всю малину портят....

Как на реале -не знаю, ММВБ не торгую, а на демо я Газпром гонял всё проходило с таким куском кода в образце твоего робота
Код:

else if(Name() == "GAZP")
{
  NameForPos = "GAZP";  // это для записи файла с текущей позицией,
     //на случай если имя бумаги в Ами содержит запрещенные символы
  Accaunt   = "ST5015-MS-01";
  Lots     = 10;
  Code  = "GAZP";
}

И не понял про какие кавычки говорится?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

У тебя имя тикера в Ами Name() == "GAZP", а у меня в Ами он называется OAO "Газпром"... т.е. в роботе надо писать
Код:
if(Name() == "OAO "Газпром"")

Разумеется такая запись не прокатывает....

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen