Автор |
Сообщение |
roma095
Зарегистрирован: 02.02.2012
Сообщения: 170
|
Всем привет. раньше на старых ами все было нормально с роботом на тиках. Сейчас при запуске нового AA ругается на неправильный таймфрейм, а если через старый, то ругается что символа нет в фильтре. Но мы то знаем что там все есть. Раньше все работало.
И еще вопрос - а можно ли ами заставить ААшничать не раз в секуду, а если у меня 200 тиков ТФ, то раз в 200 тиков
Еще вопрос про задержку квик-ами в тиках. То есть на сколько я запаздываю получая тики из квика и отправляя туда заявку.
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
|
1. Правильно ругается. У тебя в коде робота в одном месте
TimeFrame == Interval()
а дальше
TimeFrame != Interval(1)
???
Функция Interval при работе с тиками должна иметь ключ 1.
Т.е. во втором случае у тебя правильно.
Нет. Чаще чем 1 раз в секунду никак. По крайней мере мне не удалось.
Скорее всего максимум на пару секунд, но я с квиком не работаю. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
roma095
Зарегистрирован: 02.02.2012
Сообщения: 170
|
Олег, поставил единичку, но всеравно ругается.
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Значит в настройках АА не выставлен правильный тиковый интервал. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
roma095
Зарегистрирован: 02.02.2012
Сообщения: 170
|
000 писал(а): |
Значит в настройках АА не выставлен правильный тиковый интервал. |
Стоит 200 тиков.
Или в новой версии это где то еще настраивается? В предыдущей в настройках как у меня на картинке выше |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Так. Прогони вот такой код в АА
Код: |
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
|
Если ставлю current то срабатывает, если filter, то нет.
Но по крайней мере на интервал не ругается. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Так. А что у тебя там за фильтр? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
roma095
Зарегистрирован: 02.02.2012
Сообщения: 170
|
000 писал(а): |
Так. А что у тебя там за фильтр? |
Как и в предыдущей версии Favorites |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Я пробовал свой код с фильтром фаворитес. Все работало. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
roma095
Зарегистрирован: 02.02.2012
Сообщения: 170
|
Олег, а робот то получему ругается на АА тогда у меня? Твой код работает нормально |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ночью поковыряюсь в том коде который ты выложил. Может что найду. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Проверил вот такой код
Код: |
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
|
Спасибо. На тайм уже не ругается. А что сделал и главное почему не работало?
И еще вопрос - я досконально не вникал, но у меня заявка не уходит. Пишет ответ сервера 7. Где можно посмотреть что это может быть за ошибка? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ничего не делал.
Ошибка
Цитата: |
отсутствует соединение между библиотекой Trans2QUIK.dll и терминалом QUIK - "7" |
Тут http://www.amisite.ru/files/as_quik_afl.htm |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|