Автор |
Сообщение |
Alex
Зарегистрирован: 13.03.2011
Сообщения: 29
|
Обнаружил приписку, которая убила не только меня, но и всю мою систему -
"Робот написан так, что выставляет заявки сразу после закрытия бара на котором получен сигнал. Фактически сразу на открытии следующего бара."
Черт, а если у меня система на пробой Хаев???
Сделка должна открываться, если Н новой свечки зайдет за границу прошлого Н, а закрываться по Клоуз этой свечки. Если будем открывать сделки по Клоуз, то ... ну сами понимаете...
ВЫРУЧАЙТЕ!
Что делать то? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Робот меховский? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Alex
Зарегистрирован: 13.03.2011
Сообщения: 29
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Так. Ну и в чем проблема? Достаточно просто разобраться что там и к чему и сразу видно, что сигнал сдвигается на начало следующего бара тут
Код: |
Buy = LastValue(Ref(Buy, -1));
Sell = LastValue(Ref(Sell, -1));
Short = LastValue(Ref(Short, -1));
Cover = LastValue(Ref(Cover, -1)); |
Т.е. если убрать Ref, то и сигналы будут исполняться немедленно.
Код: |
Buy = LastValue(Buy);
Sell = LastValue(Sell);
Short = LastValue(Short);
Cover = LastValue(Cover); |
Другой вопрос, что при этом надо внимательнее следить за возможными ошибками в коде. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Alex
Зарегистрирован: 13.03.2011
Сообщения: 29
|
Да??? А я принял "надпись" за чистую монету...
Но мне кажется, "это" задано в коде ниже -
Формируем транзакцию.
Код: |
if (TimeFrame == Interval() & FullName() != "")
{
if(Buy)
{
price = Close[BarCount-1] + Otstup;
dir = "1";
makeandsave("B", price);
}
if(Sell)
{
price = Close[BarCount-1] - Otstup;
dir = "2";
makeandsave("S", price);
}
if(Short)
{
price = Close[BarCount-1] - Otstup;
dir = "3";
makeandsave("S", price);
}
if(Cover)
{
price = Close[BarCount-1] + Otstup;
dir = "4";
makeandsave("B", price);
}
}
else if (TimeFrame != Interval())
|
Нет?
И кстати, куда вставлять во эти строки-
_SECTION_BEGIN
_SECTION_END();
Как бы логично поставить их по краям кода, но подумал - может надо их ставить по краям непосредственно Условий или вообще не надо, что бы не нарушать mehanizatorа?[/code] |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Имеешь виду это Close[BarCount-1] ? Нет. Это просто особенность BarCount.
Строки
_SECTION_BEGIN
_SECTION_END();
Вообще никуда вставлять не надо. А зачем их вставлять? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Alex
Зарегистрирован: 13.03.2011
Сообщения: 29
|
Так, стоп... Тогда "эта" надпись для меня становиться все более загадочной.
Тогда я не понимаю имею ли право кардинально изменить в нем вот этот код:
Код: |
////////// Правила системы ///////////////
Buy = Cross(C, MA(C, 10));
Sell = Cross(MA(C, 10), C);
Short = Sell;
Cover = Buy;
//////////////////////////////////////////
Equity(1, 0);
Buy = LastValue(Ref(Buy, -1));
Sell = LastValue(Ref(Sell, -1));
Short = LastValue(Ref(Short, -1));
Cover = LastValue(Ref(Cover, -1));
|
... что бы это не повлияло непосредственно на работу входов/выходов.
Если "да" - тогда написали бы там, что то типа "Макет робота" и не писали бы о том, что он открывает сделки ТОЛЬКО по закрытию бара...
Собственно, меня из-за этого и "переклинило"...
ЗЫ.
Как я понимаю, вот эти строки тоже не нужны?
Код: |
SetBarsRequired(300000,30000);
SetChartOptions(0,chartShowArrows|chartShowDates);
SetPositionSize(1, 4);
|
Или что то вместо них написать?
ЗЗЫ.
А еще он пишет мне вот такую ошибку в коде
Код: |
if (TimeFrame == Interval() & FullName() != "")
{
if(Buy)
{
price = Close[BarCount-1] + Otstup;
dir = "1";
makeandsave("B", price);
}
///////////
Error 6. Condition in IF, WHILE, FOR statements has to be Numeric or Boolean type. You can not use array here, please use [] (array subscript operator) to access array elements
|
...А там написано - !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! - вот...думаю...
ЗЗЗЫ.
А еще задолбала выпрыгивать надпись:
"Не соответствует временной интервал в настройках АА и в коде".
Все ведь правильно задал. Я десять раз проверил...
В чем тут может быть проблема? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
давай так. Что делает робот? Он отслеживает сигналы системы, в конкретном примере эти
Код: |
Buy = Cross(C, MA(C, 10));
Sell = Cross(MA(C, 10), C);
Short = Sell;
Cover = Buy;
|
и записывает их в файл .tri который потом обрабатывает квик. При этом робот следит чтобы одна и та же запись не появлялась 2 раза. Поскольку данная конкретная системы отслеживает сигналы по закрытию бара было принято решение, что самый простой и соответственно надежный способ узнать, что бар действительно закрылся это дождаться появления следующего бара.
Для этого сигнал системы тупо передвинут на следующий бар. В результате если на закрытии бара возникает сигнал, то сразу по открытию следующего бара он будет записан в tri...
Если у тебя сигнал не по закрытию, то убирай сдвиг и вперед.
На счет
Код: |
SetBarsRequired(300000,30000);
SetChartOptions(0,chartShowArrows|chartShowDates);
SetPositionSize(1, 4); |
Первая строка роботу не нужна, но можнт понадобится некоторым системам. В общем её лучше вставить, хуже от неё точно не будет.
Вторая совершенно точно не нужна абсолютно
Третья строка влияет на работу функции Equity(). В принципе тоже можно вставить, хуже не будет. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Alex писал(а): |
ЗЗЫ.
А еще он пишет мне вот такую ошибку в коде
Код: |
if (TimeFrame == Interval() & FullName() != "")
{
if(Buy)
{
price = Close[BarCount-1] + Otstup;
dir = "1";
makeandsave("B", price);
}
///////////
Error 6. Condition in IF, WHILE, FOR statements has to be Numeric or Boolean type. You can not use array here, please use [] (array subscript operator) to access array elements
|
|
Скорее всего ты убрал LasValue тут.
Код: |
Buy = LastValue(Ref(Buy, -1));
Sell = LastValue(Ref(Sell, -1));
Short = LastValue(Ref(Short, -1));
Cover = LastValue(Ref(Cover, -1));
|
Alex писал(а): |
ЗЗЗЫ.
А еще задолбала выпрыгивать надпись:
"Не соответствует временной интервал в настройках АА и в коде".
Все ведь правильно задал. Я десять раз проверил...
В чем тут может быть проблема? |
Проблема может быть только в одном. не правильно задал.
Обязательно надо тут
Код: |
TimeFrame = 60; // таймфрейм в секундах. |
и ТУТ опция Periodicity |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Alex
Зарегистрирован: 13.03.2011
Сообщения: 29
|
Ага... все. Боюсь показаться "самым умным", но там нужно было просто в Квике включить импорт транзакций из файла.
Мне кажется это нигде не написано. А зря...
Надеюсь, последний вопрос -
Теперь он пишет "Не правильный идентефикатор транзакции".
Вот тут я даже не знаю куда ткнуть... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Квик такое пишет? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Alex
Зарегистрирован: 13.03.2011
Сообщения: 29
|
000 писал(а): |
Квик такое пишет? |
Да, Квик.
Позвонил им в ТП, сказали, что в Information на АМИ нужно написать не Full name=RIM1, а какие нибудь 2 цифры.
Это исправил.
Теперь другое. Пишет "неправильный Класс". Это нужно поменять в Group 0...200.
Сейчас ищу как и на что...
ЗЫ.
Возможно, замена на 2 цифры тоже не совсем верно. Просто у меня пропала одна ошибка и появилась другая. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Alex
Зарегистрирован: 13.03.2011
Сообщения: 29
|
|
Посмотреть профиль Отправить личное сообщение |
|
Alex
Зарегистрирован: 13.03.2011
Сообщения: 29
|
Урааа! У меня получилось!
И даже прибыльная сделка. Может оставить mehanizator торговать?
Выражаю особую благодарность Олегу за посильную помощь.
Если кто еще не знает, в Goup=SPBFUT для РТС.
Где бы посмотреть все эти обозначения для остальных инструментов?
(имею ввиду не только русские, но и америку)
Еще пару вопросов и закончим на этом...
...на сегодня...
1) Почему то открылась сделка на 2 лота, хотя у меня задан один?
Это потому что Cover = Buy; или какая то ошибка?
2) "Ламмерс форева". Как удалить из АМИ лишнюю Database? И как сделать, что бы нужная открывалась автоматически, а не та на которой случайно не убрал галочку при создании?
(не могу найти нужную кнопочку )
3) Можно ли запустить на одном АМИ несколько ботов?
Это делается так же как и с одним?
4) Как сделать ограничение убытков? Имею ввиду не Стоп-Лосс, а %от Эквити.
Все. Еще раз спасибо. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Alex писал(а): |
Позвонил им в ТП, сказали, что в Information на АМИ нужно написать не Full name=RIM1, а какие нибудь 2 цифры.
Это исправил.
Теперь другое. Пишет "неправильный Класс". Это нужно поменять в Group 0...200.
Сейчас ищу как и на что...
|
А инструкцию то не судьба была прочитать?
Там написано и про 2 цифры и про классы...
Alex писал(а): |
1) Почему то открылась сделка на 2 лота, хотя у меня задан один?
Это потому что Cover = Buy; или какая то ошибка?
|
Посмотри файл tri. Там должно быть 2 записи на покупку с QUANTITY=1.
Смотри последную цифру в TRANS_ID= 1 - buy, 2 - sell, 3 - short, 4 - cover.
Alex писал(а): |
2) "Ламмерс форева". Как удалить из АМИ лишнюю Database? И как сделать, что бы нужная открывалась автоматически, а не та на которой случайно не убрал галочку при создании?
(не могу найти нужную кнопочку )
|
меню tools -> preferences, закладка Data. Там устанавливается БД по умолчанию.
Alex писал(а): |
3) Можно ли запустить на одном АМИ несколько ботов?
Это делается так же как и с одним?
|
Нет. Надо делать один который будет работать за несколько.
Alex писал(а): |
4) Как сделать ограничение убытков? Имею ввиду не Стоп-Лосс, а %от Эквити.
|
Вопрос непонятен. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|