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



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

СообщениеДобавлено: Пн Ноя 11, 2013 4:36 pm Ответить с цитатой Вернуться к началу

Всем привет. раньше на старых ами все было нормально с роботом на тиках. Сейчас при запуске нового AA ругается на неправильный таймфрейм, а если через старый, то ругается что символа нет в фильтре. Но мы то знаем что там все есть. Раньше все работало.

И еще вопрос - а можно ли ами заставить ААшничать не раз в секуду, а если у меня 200 тиков ТФ, то раз в 200 тиков Smile
Еще вопрос про задержку квик-ами в тиках. То есть на сколько я запаздываю получая тики из квика и отправляя туда заявку.

Filter = 1;

TimeFrame = -200; // таймфрейм tik.
Account = ""; // Номер счета
Client_Code = ""; // Код Клиента
Quik = "C:\\quik_5.24.0.58"; // путь к Квику

///////////////////////////////////

text = iz = sd = order = "";
color = coloriz = colorDefault;
price = 0;
str = Now(0) + " " + Name();
pos = AS_READ_PARAM("Quik_Robot", Name(), "pos");

////////////////////////////////////



///////////// проверка наличия символа в списке для торговли ////////////////

k = 0;
Permit_Ticker = False;
do {
Tick = StrExtract(Tickers, k);
k++;
if(Name() == Tick)
Permit_Ticker = True;
} while(Tick != "");

/////////// Функции ////////////

procedure orders(bs, pr, Lot)
{
connection = 0;

QC = AS_QUIK_CONNECT(Quik);

if (QC == 1)
{
connection = 1;
text = "Есть соединение с сервером";
Color = colorGreen;
}
else if (QC == -1)
{
text = "нет соединения с квиком";
Color = colorRed;
}
else if (QC == -2)
{
text = "нет соединения с сервером";
Color = colorRed;
}
else
{
text = "фигня какая то";
Color = colorRed;
}

if(connection == 1)
{
order = AS_QUIK_SEND_SYNC_NEWORDER( "123", // OrderID - Любые цифры
Account,
Client_Code,
"L", // Тип заявки M-рыночная, L-лимитированная
Class,
SecCode,
bs,
pr,
Lot);

}

if(StrToNum(order) > 100)
{
iz = "исполнена";
coloriz = colorGreen;
str = str + " заяка исполнена" + " ответ сервера=" + order;
if(pos > 0 AND bs == "S") // закрытие лонга
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0);

else if(pos == 0 AND bs == "S") // шорт
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", -1*Lot);
else if(pos < 0 AND bs == "B") // закрытие шорта
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0);
else if(pos == 0 AND bs == "B") // лонг
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", Lot);
str = str + " позиция на момент исполнения " + pos;
}

}

////////// конец Функций //////////

if (TimeFrame == Interval() AND Permit_Ticker)
{
if(Buy[BarCount-1] AND pos == 0) {
str = str + " Buy";
sd = "Buy";
orders("B", round(C[BarCount-1]) + Otstup, Lots);
AS_WRITE_FILE("log.quik", str);
}
if(Sell[BarCount-1] AND pos > 0) {
str = str + " Sell";
sd = "Sell";
orders("S", round(C[BarCount-1]) - Otstup, abs(pos));
AS_WRITE_FILE("log.quik", str);
}
if(Short[BarCount-1] AND pos == 0) {
str = str + " Short";
sd = "Short";
orders("S", round(C[BarCount-1]) - Otstup, Lots);
AS_WRITE_FILE("log.quik", str);
}
if(Cover[BarCount-1] AND pos < 0) {
str = str + " Cover";
sd = "Cover";
orders("B", round(C[BarCount-1]) + Otstup, abs(pos));
AS_WRITE_FILE("log.quik", str);
}
}
else if(TimeFrame != Interval(1)) {
PopupWindow( "Не соответствует временной интервал в настройках АА и в коде",
"ошибка", timeout = 5, left = -1, top = -1 );
}

SetOption( "NoDefaultColumns", 1 );
AddTextColumn(Name(), "Символ", 1.0, colorDefault, colorDefault, 60);
AddColumn( C[BarCount-1], "Последняя цена", 1.2, colorDefault, colorDefault, 100 );
AddColumn( AS_READ_PARAM("Quik_Robot", Name(), "pos"), "Позиция", 1.0, colorDefault,
IIf(AS_READ_PARAM("Quik_Robot", Name(), "pos") > 0, colorGreen,
IIf(AS_READ_PARAM("Quik_Robot", Name(), "pos") < 0, colorRed, colorDefault)), 60);


AddTextColumn(sd, "Сигнал", 1.0, colorDefault, colorDefault, 60);
AddTextColumn(text, "Соединение", 1.2, colorDefault, color, 170);
AddTextColumn(iz, "Исполнение заявки", 1.2, colorDefault, coloriz, 120 );
AddTextColumn(order, "Заявка", 1.2, colorDefault, IIf(StrToNum(order) > 100, colorGreen,
IIf(order == "", colorDefault, colorRed)), 90);
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Ноя 11, 2013 10:02 pm Ответить с цитатой Вернуться к началу

1. Правильно ругается. У тебя в коде робота в одном месте
TimeFrame == Interval()
а дальше
TimeFrame != Interval(1)
???
Функция Interval при работе с тиками должна иметь ключ 1.
Т.е. во втором случае у тебя правильно.
Нет. Чаще чем 1 раз в секунду никак. По крайней мере мне не удалось.

Скорее всего максимум на пару секунд, но я с квиком не работаю.

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



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

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

Олег, поставил единичку, но всеравно ругается.
Image
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Значит в настройках АА не выставлен правильный тиковый интервал.

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



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

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

000 писал(а):
Значит в настройках АА не выставлен правильный тиковый интервал.


Стоит 200 тиков.

Image

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


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

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

Так. Прогони вот такой код в АА
Код:
Filter = 1;
TimeFrame = -200;
if (TimeFrame == Interval(1))
 AddColumn(1, "интервал");
else
 AddColumn(Interval(1), "интервал");

На одном символе, только последний бар, фрейм 200 тиков.
Что напишет в таблице?

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



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

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

Image

Если ставлю current то срабатывает, если filter, то нет.
ImageImage

Но по крайней мере на интервал не ругается.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Так. А что у тебя там за фильтр?

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



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

СообщениеДобавлено: Ср Ноя 13, 2013 7:34 am Ответить с цитатой Вернуться к началу

000 писал(а):
Так. А что у тебя там за фильтр?

Как и в предыдущей версии Favorites
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Я пробовал свой код с фильтром фаворитес. Все работало.

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



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

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

Олег, а робот то получему ругается на АА тогда у меня? Твой код работает нормально
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Ноя 13, 2013 4:38 pm Ответить с цитатой Вернуться к началу

Ночью поковыряюсь в том коде который ты выложил. Может что найду.

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


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

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

Проверил вот такой код
Код:

Filter = 1;

TimeFrame = -200; // ????????? tik.
Account = ""; // ????? ?????
Client_Code = ""; // ??? ???????
Quik = "C:\\quik_5.24.0.58"; // ???? ? ?????


Tickers = "SBER,GAZP";

if(Name() == "GAZP") {            //?????? ??? ?? ?????????? ? ???
   SecCode         = "GAZP";            
   Class         = "EQBR";
   Lots            = 5;
   TickS         = 0.1;               // ??????????? ??? ???? ????????? ??????
   Otstup         = 20;               // ?????? ????? ?????????? ???? ??????? ???? ?? Otstup ??????
}
else if(Name() == "SBER") {      //?????? ??? ?? ?????????? ? ???
   SecCode         = "SBER";            
   Class         = "EQBR";
   Lots            = 2;
   TickS         = 0.01;               // ??????????? ??? ???? ????????? ??????
   Otstup         = 1;                  // ?????? ????? ?????????? ???? ??????? ???? ?? Otstup ??????
}

//////////////???????///////////////

Buy1 = Cross(C, MA(C, 40)) AND C > MA(C, 20);
Sell1 = Cross(MA(C, 20), C);
Short1 = Cross(MA(C, 40), C) AND C < MA(C, 20);
Cover1 = Cross(C, MA(C, 20));

///////////????? ???????////////////

Buy1 = Ref(Buy1, -1);
Sell1 = Ref(Sell1, -1);
Short1 = Ref(Short1, -1);
Cover1 = Ref(Cover1, -1);

///////////////////////////////////

text = iz = sd = order = "";
color = coloriz = colorDefault;
price = 0;
str = Now(0) + " " + Name();
pos = AS_READ_PARAM("Quik_Robot", Name(), "pos");

////////////////////////////////////

         


///////////// проверка наличия символа в списке для торговли ////////////////

k = 0;
Permit_Ticker = False;
do {
  Tick = StrExtract(Tickers, k);
  k++;
  if(Name() == Tick)
    Permit_Ticker = True;
} while(Tick != "");

///////////    Функции  ////////////

procedure orders(bs, pr, Lot)
{
  connection = 0;

//  QC = AS_QUIK_CONNECT(Quik);
QC = 1;

   if (QC == 1)
   {
      connection = 1;
      text = "Есть соединение с сервером";
      Color = colorGreen;
   }
   else if (QC == -1)
   {
      text = "нет соединения с квиком";
      Color = colorRed;   
   }
   else if (QC == -2)
   {
      text = "нет соединения с сервером";
      Color = colorRed;
   }
   else
   {
      text = "фигня какая то";
      Color = colorRed;
   }
 
   if(connection == 1)
   {
      order = AS_QUIK_SEND_SYNC_NEWORDER(   "123",            // OrderID - Любые цифры
                                                Account,
                                                Client_Code,
                                                "L",                  // Тип заявки M-рыночная, L-лимитированная
                                                Class,
                                                SecCode,
                                                bs,
                                                pr,
                                                Lot);
   }

   if(StrToNum(order) > 100)
   {
      iz = "исполнена";
      coloriz = colorGreen;
      str = str + "  заяка исполнена" + " ответ сервера=" + order;
      if(pos > 0 AND bs == "S")                // закрытие лонга
         AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0);
      else if(pos == 0 AND bs == "S")         // шорт
         AS_WRITE_PARAM("Quik_Robot", Name(), "pos", -1*Lot);
      else if(pos < 0 AND bs == "B")          // закрытие шорта
         AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0);
      else if(pos == 0 AND bs == "B")       // лонг
         AS_WRITE_PARAM("Quik_Robot", Name(), "pos", Lot);
      str = str + "  позиция на момент исполнения " + pos;
   }
   else {
      iz = "не исполнена";
      coloriz = colorRed;
      str = str + "  заяка НЕ исполнена" + " ответ сервера=" + order;
   }
}
////////// ????? ??????? //////////

if (TimeFrame == Interval(1) AND Permit_Ticker)
{
  if(Buy1[BarCount-1] AND pos == 0) {
    str = str + " Buy";
    sd = "Buy";
    orders("B", round(C[BarCount-1]) + Otstup, Lots);
    AS_WRITE_FILE("log.quik", str);
  }
  if(Sell1[BarCount-1] AND pos > 0) {
    str = str + " Sell";
    sd = "Sell";
    orders("S", round(C[BarCount-1]) - Otstup, abs(pos));
    AS_WRITE_FILE("log.quik", str);
  }
  if(Short1[BarCount-1] AND pos == 0) {
    str = str + " Short";
    sd = "Short";
    orders("S", round(C[BarCount-1]) - Otstup, Lots);
    AS_WRITE_FILE("log.quik", str);
  }
  if(Cover1[BarCount-1] AND pos < 0) {
    str = str + " Cover";
    sd = "Cover";
    orders("B", round(C[BarCount-1]) + Otstup, abs(pos));
    AS_WRITE_FILE("log.quik", str);
  }
}
else if(TimeFrame != Interval(1)) {
  PopupWindow( "Не соответствует временной интервал в настройках АА и в коде",
                     "ошибка", timeout = 5, left = -1, top = -1 );
}

SetOption( "NoDefaultColumns", 1 );
AddTextColumn(Name(), "Символ", 1.0, colorDefault, colorDefault, 60);
AddColumn( C[BarCount-1], "Последняя цена", 1.2, colorDefault, colorDefault, 100 );
AddColumn( AS_READ_PARAM("Quik_Robot", Name(), "pos"), "Позиция", 1.0, colorDefault,
IIf(AS_READ_PARAM("Quik_Robot", Name(), "pos") > 0, colorGreen,
IIf(AS_READ_PARAM("Quik_Robot", Name(), "pos") < 0, colorRed, colorDefault)), 60);


AddTextColumn(sd, "??????", 1.0, colorDefault, colorDefault, 60);
AddTextColumn(text, "??????????", 1.2, colorDefault, color, 170);
AddTextColumn(iz, "?????????? ??????", 1.2, colorDefault, coloriz, 120 );
AddTextColumn(order, "??????", 1.2, colorDefault, IIf(StrToNum(order) > 100, colorGreen,
IIf(order == "", colorDefault, colorRed)), 90);

На ????? не обращай внимание. Все работает.
Единственное если попытаться проверить синтаксис кнопкой Verify syntax, то ругается. Ну и хрен с ним.

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



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

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

Спасибо. На тайм уже не ругается. А что сделал и главное почему не работало?

И еще вопрос - я досконально не вникал, но у меня заявка не уходит. Пишет ответ сервера 7. Где можно посмотреть что это может быть за ошибка?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Ноя 14, 2013 6:04 pm Ответить с цитатой Вернуться к началу

Ничего не делал. Sad
Ошибка
Цитата:
отсутствует соединение между библиотекой Trans2QUIK.dll и терминалом QUIK - "7"

Тут http://www.amisite.ru/files/as_quik_afl.htm

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen