Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Роботы |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55 След. |
Автор |
Сообщение |
superolegb
Зарегистрирован: 25.08.2015
Сообщения: 17
|
Cross(C, SAR(0.02, 0.2)) AND C > SAR(0.02, 0.2);
Первое выражение означает цена закрытия пересекла параболик, любое пересечение.Любое не нужно, нужно или сверху вниз или снизу вверх. Шорт и лонг разные пересечения. А второе выражение , то что параболик под ценой(тоесть лонг).
В том то и дело что не обязательно чтобы код робота отображал, лучше конечно чтобы был отдельный индикатор. Я же говорю не знаю как увязать сигналы на покупку продажу в роботе , со стрелочками в индикаторе.Поэтому и прошу помочь как это сделать. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Первое выражение
Код: |
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
|
Но если такой :
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
|
Разумеется отдельно. Дело в том, что зачастую код для тестирования в неизменном виде для робота не подходит. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
superolegb
Зарегистрирован: 25.08.2015
Сообщения: 17
|
Все равно так не выходит, роботу без разницы что там стрелочки показывают.....он считает и без них. Когда запускаешь бот, то он считает все с начала графика и если график когда-то в 10 утра показал что вошел в лонг, а я запускаю его в 16-00 например, то бот будет ждать когда позиция закроется и уже потом торговать как нужно. Хотелось бы что бы он начал считать с момента когда я нажму на Explore.
И еще такой вопросик. Почему бот открывает позицию в лонг а потом не дожидаясь выхода из него входит в шорт,получается как будто лонг и шор т не связаны друг с другом. Как поставить проверку что если в лонге то шорт не трогать.
Уже все перерыл, эти проблемы никак решить не могу. Заранее спасибо за ответ. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
superolegb писал(а): |
Все равно так не выходит, роботу без разницы что там стрелочки показывают.....он считает и без них. Когда запускаешь бот, то он считает все с начала графика и если график когда-то в 10 утра показал что вошел в лонг, а я запускаю его в 16-00 например, то бот будет ждать когда позиция закроется и уже потом торговать как нужно. Хотелось бы что бы он начал считать с момента когда я нажму на Explore.
|
Ну если ты его запускаешь в 16:00 то он же не может войти в позу по цене которая была в 10:00 Вот он и ждет следующего актуального сигнала. А надо чтобы он входил в 16 по 10ти часовому сигналу? А какой в этом смысл?
superolegb писал(а): |
И еще такой вопросик. Почему бот открывает позицию в лонг а потом не дожидаясь выхода из него входит в шорт,получается как будто лонг и шор т не связаны друг с другом. Как поставить проверку что если в лонге то шорт не трогать.
Уже все перерыл, эти проблемы никак решить не могу. Заранее спасибо за ответ. |
Для ответа мне надо видеть код робота. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
superolegb
Зарегистрирован: 25.08.2015
Сообщения: 17
|
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
|
Олег, я опять упёрся в своё невежество и желание выжать из стратегии еще немного процентов профита.
Вот кусок робота со стопом:
Код: |
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
|
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
|
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 |
и так же для шорта.
Если уберешь удаление сигналов, то не будет дожидаться выхода. Но, в зависимости от остального кода робота, может быть он на этих не удаленных сигналах будет доливать к уже существующей позиции.
Кроме того мне не понятно как была оттестирована подобная торговля....
ну ладно.
На счет лонгов и шортов. Надо переписывать код по другому чтобы пока система в лонге он в шорт не лез.
Вообще по системе у тебя просто стоит профит ордер и никакого стопа или выхода если профит вдруг не сработал. Этак ты совсем без денег останешься
И еще. Выход по профиту у тебя видимо планируется немедленно при срабатывании. А в коде стоит задержка исполнения.
Код: |
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
|
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
|
000 писал(а): |
if(pos > 0 AND C[BarCount-1] > AS_READ_PARAM("Quik_Robot", Name(), "price")*(1 + (0.947/divSL_RI[BarCount - 2])/100)) |
Хоспади Иисуси....ответ был в той же строчке а я его не увидел, какая тупость....
Олег, как вы вообще терпите таку тупость?
Спасибо!
ЗЫ Сорри за оффтоп |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
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
|
Всем привет!
Олег, сам не нашел ответа, прошу подсказать...
В коде робота есть фрагмент задания тайм-фрейма, например, 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
|
Надо взять и написать индикатор типа
Код: |
Plot(Interval(1), "", ColorRed); |
кинуть его на график и посмотреть что он возвращает в случае V-share/contracts и R-range (in ticksize). |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Роботы |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55 След. |
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|