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



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

СообщениеДобавлено: Ср Сен 02, 2015 8:32 am Ответить с цитатой Вернуться к началу

Cross(C, SAR(0.02, 0.2)) AND C > SAR(0.02, 0.2);

Первое выражение означает цена закрытия пересекла параболик, любое пересечение.Любое не нужно, нужно или сверху вниз или снизу вверх. Шорт и лонг разные пересечения. А второе выражение , то что параболик под ценой(тоесть лонг).

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


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

СообщениеДобавлено: Ср Сен 02, 2015 9:03 am Ответить с цитатой Вернуться к началу

Первое выражение
Код:
Cross(C, SAR(0.02, 0.2))

Это не любое пересечение а Закрытие пересекает параболик СНИЗУ ВВЕРХ. Т.е. закрытие было НИЖЕ параболика а стало ВЫШЕ.

На счет стрелочек. Я теперь не могу понять в чем вопрос.

Вот такой код
Код:

Buy = Cross(C, SAR(0.02, 0.2)) AND C > SAR(0.02, 0.2);
Sell = Cross(SAR(0.02, 0.2), C) ;
Short = Cross(SAR(0.02, 0.2), C) AND C < SAR(0.02, 0.2);
Cover = Cross(C, SAR(0.02, 0.2));


PlotShapes(Buy*shapeUpArrow,colorGreen,0,Low);
PlotShapes(Sell*shapeDownArrow,colorRed,0,High);
PlotShapes(Short*shapeHollowDownArrow,colorGreen,0,High);
PlotShapes(Cover*shapeHollowUpArrow,colorRed,0,Low);


Нарисует стрелки.
А вот такой
Код:
Buy1 = Cross(C, SAR(0.02, 0.2)) AND C > SAR(0.02, 0.2);
Sell1 = Cross(SAR(0.02, 0.2), C) ;
Short1 = Cross(SAR(0.02, 0.2), C) AND C < SAR(0.02, 0.2);
Cover1 = Cross(C, SAR(0.02, 0.2));

надо запихать в робота...

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



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

СообщениеДобавлено: Ср Сен 02, 2015 10:21 am Ответить с цитатой Вернуться к началу

Но если такой :
Buy1 = Cross(C, SAR(0.02, 0.2)) AND C > SAR(0.02, 0.2);
Sell1 = Cross(SAR(0.02, 0.2), C) ;
Short1 = Cross(SAR(0.02, 0.2), C) AND C < SAR(0.02, 0.2);
Cover1 = Cross(C, SAR(0.02, 0.2));

запихать в робота, то тогда тестирование невозможно. Тестер говорит что нет переменных Buy Sell.....тестеру нужны без всяких индексов. Как в этом случае быть? Или делать отдельно для теста и отдельно для торговли?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Сен 02, 2015 11:35 am Ответить с цитатой Вернуться к началу

Разумеется отдельно. Дело в том, что зачастую код для тестирования в неизменном виде для робота не подходит.

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



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

СообщениеДобавлено: Чт Сен 03, 2015 1:06 pm Ответить с цитатой Вернуться к началу

Все равно так не выходит, роботу без разницы что там стрелочки показывают.....он считает и без них. Когда запускаешь бот, то он считает все с начала графика и если график когда-то в 10 утра показал что вошел в лонг, а я запускаю его в 16-00 например, то бот будет ждать когда позиция закроется и уже потом торговать как нужно. Хотелось бы что бы он начал считать с момента когда я нажму на Explore.

И еще такой вопросик. Почему бот открывает позицию в лонг а потом не дожидаясь выхода из него входит в шорт,получается как будто лонг и шор т не связаны друг с другом. Как поставить проверку что если в лонге то шорт не трогать.

Уже все перерыл, эти проблемы никак решить не могу. Заранее спасибо за ответ.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Сен 03, 2015 3:07 pm Ответить с цитатой Вернуться к началу

superolegb писал(а):
Все равно так не выходит, роботу без разницы что там стрелочки показывают.....он считает и без них. Когда запускаешь бот, то он считает все с начала графика и если график когда-то в 10 утра показал что вошел в лонг, а я запускаю его в 16-00 например, то бот будет ждать когда позиция закроется и уже потом торговать как нужно. Хотелось бы что бы он начал считать с момента когда я нажму на Explore.

Ну если ты его запускаешь в 16:00 то он же не может войти в позу по цене которая была в 10:00 Вот он и ждет следующего актуального сигнала. А надо чтобы он входил в 16 по 10ти часовому сигналу? А какой в этом смысл?
superolegb писал(а):

И еще такой вопросик. Почему бот открывает позицию в лонг а потом не дожидаясь выхода из него входит в шорт,получается как будто лонг и шор т не связаны друг с другом. Как поставить проверку что если в лонге то шорт не трогать.

Уже все перерыл, эти проблемы никак решить не могу. Заранее спасибо за ответ.

Для ответа мне надо видеть код робота.

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



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

СообщениеДобавлено: Чт Сен 03, 2015 3:25 pm Ответить с цитатой Вернуться к началу

trailARRAY = Null;
trailstop =0;
trailARRAY_s = Null;
trailstop_s =0;


Buy = Cross(C, SAR(0.02, 0.2));
Sell = 0 OR trailstop;
Short = Cross(SAR(0.02, 0.2), C) ;
Cover = 0 OR trailstop_s ;

StopLevel = 1+1/100;//Param("trailing long", Long_, 0.1, 10, 0.1)/100;
StopLevel_s = 1+1/100;//Param("trailing short", Short_, 0.1, 10, 0.1)/100;

trailARRAY = Null;
trailstop =0;
trailARRAY_s = Null;
trailstop_s =0;


/////////////////////long_profit/////////////////////////
for( i = 1; i < BarCount; i++ )
{
if(Buy[ i ]AND trailstop == 0 )
{
trailstop = O[i] * stoplevel;
}
else Buy[ i ] = 0 ; // remove excess buy signals

if( trailstop > 0 AND H[ i ] > trailstop )
{
Sell[ i ] = 1;
SellPrice[ i ] = trailstop;
trailstop = 0;
}
if( trailstop > 0 )
{
//trailstop = MO[ i ] *stoplevel, trailstop );
trailARRAY[ i ] = trailstop;
}

}

/////////////////////SHORT_profit/////////////////////////
for( j = 1; j < BarCount; j++ )
{

if(Short[ j ] AND trailstop_s == 0)
{
trailstop_s = O[j] / stoplevel_s;
}
else Short[ j ] = 0; // remove excess buy signals

if( trailstop_s > 0 AND L[ j ]<trailstop_s )
{
Cover[ j ] = 1;
CoverPrice[ j ] = trailstop_s;
trailstop_s = 0;
}

if( trailstop_s > 0 )
{
//trailstop_s = Max( O[ j ] / stoplevel_s, trailstop_s );
trailARRAY_s[ j ] = trailstop_s;
}

}


///////////Конец Системы////////////

Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);

Buy = Ref(Buy, -1);
Sell = Ref(Sell, -1);
Short = Ref(Short, -1);
Cover = Ref(Cover, -1);

"А надо чтобы он входил в 16 по 10ти часовому сигналу? А какой в этом смысл? "
нет так не надо,надо что бы он все забыл( то что было до 16-00)и начинал торговать когда я запускаю бота.
Посмотреть профиль Отправить личное сообщение
Enhema



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

СообщениеДобавлено: Чт Сен 03, 2015 3:36 pm Ответить с цитатой Вернуться к началу

Олег, я опять упёрся в своё невежество и желание выжать из стратегии еще немного процентов профита.
Вот кусок робота со стопом:

Код:
divSL_RI = IIf(Ref(ATR(29),-1)>240, 0.65, 1);

Buy1 = RTS_Buy;
Sell1 = RTS_Sell;
Short1 = RTS_Short;
Cover1 = RTS_Cover;

stopBar = AS_READ_PARAM("Quik_Robot", Name(), "stopBar");
profitBar = AS_READ_PARAM("Quik_Robot", Name(), "profitBar");

/// stops ///
if(pos > 0 AND C[BarCount-1] > AS_READ_PARAM("Quik_Robot", Name(), "price")*(1 + (0.947/divSL_RI)/100))
{
   Sell1 = 1;
   str = str + "  takeprofit Long";
   AS_WRITE_PARAM("Quik_Robot", Name(), "profitBar", BarCount);
}


Я понимаю, что в конструкцию IF нельзя вставлять массив divSL_RI. Есть ли какой-нибудь способ обойти это элегантно и просто?
Или опять нужно в циклы лезть?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Enhema писал(а):
Олег, я опять упёрся в своё невежество и желание выжать из стратегии еще немного процентов профита.
Вот кусок робота со стопом:

Код:
divSL_RI = IIf(Ref(ATR(29),-1)>240, 0.65, 1);

Buy1 = RTS_Buy;
Sell1 = RTS_Sell;
Short1 = RTS_Short;
Cover1 = RTS_Cover;

stopBar = AS_READ_PARAM("Quik_Robot", Name(), "stopBar");
profitBar = AS_READ_PARAM("Quik_Robot", Name(), "profitBar");

/// stops ///
if(pos > 0 AND C[BarCount-1] > AS_READ_PARAM("Quik_Robot", Name(), "price")*(1 + (0.947/divSL_RI)/100))
{
   Sell1 = 1;
   str = str + "  takeprofit Long";
   AS_WRITE_PARAM("Quik_Robot", Name(), "profitBar", BarCount);
}


Я понимаю, что в конструкцию IF нельзя вставлять массив divSL_RI. Есть ли какой-нибудь способ обойти это элегантно и просто?
Или опять нужно в циклы лезть?

if(pos > 0 AND C[BarCount-1] > AS_READ_PARAM("Quik_Robot", Name(), "price")*(1 + (0.947/divSL_RI[BarCount - 2])/100))

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


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

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

2 superolegb
У тебя в системе очень много неточностей и я не могу однозначно ответить на твои вопросы.
Что касается
Цитата:
нет так не надо,надо что бы он все забыл( то что было до 16-00)и начинал торговать когда я запускаю бота.

У тебя удаляются сигналы пока система в позиции. Вот тут
Код:
for( i = 1; i < BarCount; i++ )
{
if(Buy[ i ]AND trailstop == 0 )
{
trailstop = O[i] * stoplevel;
}
else Buy[ i ] = 0 ; // remove excess buy signals

и так же для шорта.

Если уберешь удаление сигналов, то не будет дожидаться выхода. Но, в зависимости от остального кода робота, может быть он на этих не удаленных сигналах будет доливать к уже существующей позиции. Smile
Кроме того мне не понятно как была оттестирована подобная торговля....

ну ладно.
На счет лонгов и шортов. Надо переписывать код по другому чтобы пока система в лонге он в шорт не лез.

Вообще по системе у тебя просто стоит профит ордер и никакого стопа или выхода если профит вдруг не сработал. Этак ты совсем без денег останешься Smile

И еще. Выход по профиту у тебя видимо планируется немедленно при срабатывании. А в коде стоит задержка исполнения.
Код:
Buy = Ref(Buy, -1);
Sell = Ref(Sell, -1);
Short = Ref(Short, -1);
Cover = Ref(Cover, -1);

Т.е. профит исполняется по цене закрытия. Это как минимум странно.

Ну и еще такие мелочи как
Для лонга есть
Код:
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);

А для шорта нету....

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



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

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

for( i = 1; i < BarCount; i++ )
{
if(Buy[ i ]AND trailstop == 0 )
{
trailstop = O[i] * stoplevel;
}
else Buy[ i ] = 0 ; // remove excess buy signals

да тут удаляются,но только лишние сигналы на покупку, а вот сигналы входа в шорт не отсеиватся. я уж попробовал
else Buy[ i ] = 0 and Short[ i ] = 0 ;
один фиг не реагирует. Убирать else Buy[ i ] = 0 нельзя, на каждом моменте входа тогда у него сигнал.
Посмотреть профиль Отправить личное сообщение
Enhema



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

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

000 писал(а):

if(pos > 0 AND C[BarCount-1] > AS_READ_PARAM("Quik_Robot", Name(), "price")*(1 + (0.947/divSL_RI[BarCount - 2])/100))


Хоспади Иисуси....ответ был в той же строчке а я его не увидел, какая тупость....
Олег, как вы вообще терпите таку тупость? Smile
Спасибо!
ЗЫ Сорри за оффтоп
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

superolegb писал(а):
for( i = 1; i < BarCount; i++ )
{
if(Buy[ i ]AND trailstop == 0 )
{
trailstop = O[i] * stoplevel;
}
else Buy[ i ] = 0 ; // remove excess buy signals

да тут удаляются,но только лишние сигналы на покупку, а вот сигналы входа в шорт не отсеиватся. я уж попробовал
else Buy[ i ] = 0 and Short[ i ] = 0 ;
один фиг не реагирует. Убирать else Buy[ i ] = 0 нельзя, на каждом моменте входа тогда у него сигнал.

Ничего не могу сказать. Я потерял ход мысли. Какое это имеет отношение к предыдущим вопросам?

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



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

СообщениеДобавлено: Ср Сен 23, 2015 1:09 pm Ответить с цитатой Вернуться к началу

Всем привет!

Олег, сам не нашел ответа, прошу подсказать...

В коде робота есть фрагмент задания тайм-фрейма, например, 120 секунд будут заданы так:
TimeFrame = 120;

Если я хочу, чтобы робот работал по (120) тиковому графику меняем фрагмент на:
TimeFrame = -120;

Следует это вроде из комментариев к функции Interval:
Доступные форматы:
format = 0 - возвращает период бара в секундах
format = 1 - возвращает тиковый интервал. В случае тиковой компрессии возвращает отрицательное значение. Так функция Interval() примененная к 10ти тиковому графику вернет значение -10

Вопрос. А как быть с интервалами типа V-share/contracts и R-range (in ticksize) которые можно настраивать на вкладке Intraday в параметрах? Как указать их в коде робота?...
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Надо взять и написать индикатор типа
Код:
Plot(Interval(1), "", ColorRed);

кинуть его на график и посмотреть что он возвращает в случае V-share/contracts и R-range (in ticksize).

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen