Стратегии и роботы > Возможно ли создать робота с алгоритмом маркетмейкера
-
- Сообщения: 38
- Зарегистрирован: 10 июн 2017, 20:50
- Благодарил (а): 1 раз
Возможно ли создать робота с алгоритмом маркетмейкера
Есть ли возможность в альфадиректе создать робота, работающего от данных из стакана?
То есть, задача - купить - чтобы робот выставил заявку перед заявкой на покупку в ствкане, и переставлял её соответственно. При этом нужна возможность ограничить выставление заявки не выше определенной цены.
То есть, задача - купить - чтобы робот выставил заявку перед заявкой на покупку в ствкане, и переставлял её соответственно. При этом нужна возможность ограничить выставление заявки не выше определенной цены.
- evge
- Администратор
- Сообщения: 1811
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 366 раз
- Контактная информация:
Re: Возможно ли создать робота с алгоритмом маркетмейкера
Да, есть функции получения лучшего bid, лучшего ask из стакана на момент их вызова.
Конечно такие функции в роботе будут работать только в живую, т.к. на истории никакого стакана нет, эти функции вернут цену закрытия.
Функции работы с ценой
GetAsk() – функция возвращает лучший аск в очереди заявок.
GetBid() – функция возвращает лучший бид в очереди заявок.
GetLast() – функция возвращает цену последней сделки на момент вызова.
Конечно такие функции в роботе будут работать только в живую, т.к. на истории никакого стакана нет, эти функции вернут цену закрытия.
Функции работы с ценой
GetAsk() – функция возвращает лучший аск в очереди заявок.
GetBid() – функция возвращает лучший бид в очереди заявок.
GetLast() – функция возвращает цену последней сделки на момент вызова.
никогда такого не было и вот опять
-
- Сообщения: 38
- Зарегистрирован: 10 июн 2017, 20:50
- Благодарил (а): 1 раз
Re: Возможно ли создать робота с алгоритмом маркетмейкера
Спасибо за ответ.
Если возможно, еще два вопроса.
1. Эти функции с помощью конструктора роботов можно использовать, или их надо в код будет вставить( опыта в создании роботов нет пока)
2. Есть ли возможность при выставления заявки учитывать и объем заявок в стакане (например , выставить заявку перед лучшей ценой с обьемом 10 лотов)?
Если возможно, еще два вопроса.
1. Эти функции с помощью конструктора роботов можно использовать, или их надо в код будет вставить( опыта в создании роботов нет пока)
2. Есть ли возможность при выставления заявки учитывать и объем заявок в стакане (например , выставить заявку перед лучшей ценой с обьемом 10 лотов)?
- evge
- Администратор
- Сообщения: 1811
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 366 раз
- Контактная информация:
Re: Возможно ли создать робота с алгоритмом маркетмейкера
dkostiunin писал(а):1. Эти функции с помощью конструктора роботов можно использовать, или их надо в код будет вставить( опыта в создании роботов нет пока)
Через код. Если есть опыт программирования любой, то разобраться не составит труда в коде индикаторов и стратегий и "все" возможности описаны в документации.
Полезно изучать чужой код и код из библиотеки индикаторов, здесь на сайте в соответствующем разделе и разделе пользовательских индикаторов или загрузив индикаторы из библиотеки, непосредственно в АД4.
В скриптах синтаксис C#, скриптовый язык сильно ограниченный. Поверьте, там всё довольно просто
dkostiunin писал(а):2. Есть ли возможность при выставления заявки учитывать и объем заявок в стакане (например , выставить заявку перед лучшей ценой с обьемом 10 лотов)?
Параметров у функций нет, т.е. объем они не учитывают, а просто возвращают лучшую цену ask, bid.
Может быть какие-то изменения будут в новых версиях ад и в данной части. Периодически скачивать документацию на сайте alfadirect.ru, она может измениться.
"справочник" по функциям языка в этом документе
Терминал 4.0. Скрипты пользовательских индикаторов и стратегий
Постоянно работаю с ним, когда надо что-либо уточнить по доступным методам.
никогда такого не было и вот опять
-
- Сообщения: 38
- Зарегистрирован: 10 июн 2017, 20:50
- Благодарил (а): 1 раз
Re: Возможно ли создать робота с алгоритмом маркетмейкера
Подскажите пожалуйста
Надо выставить трейлинг стоп на 0,1% ниже открытой позиции, если цена спроса выше цены открытой позиции на 1%
Такой код не работает
что я не правильно делаю?
Надо выставить трейлинг стоп на 0,1% ниже открытой позиции, если цена спроса выше цены открытой позиции на 1%
Такой код не работает
что я не правильно делаю?
Код: Выделить всё
if ( GetBid()=(CurrentPLper() > 1) )
{
TrailingStopLoss(0.1, SignalPriceType.DeltaInPercentFromAveragePrice);
}
- evge
- Администратор
- Сообщения: 1811
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 366 раз
- Контактная информация:
Re: Возможно ли создать робота с алгоритмом маркетмейкера
dkostiunin писал(а):Подскажите пожалуйста
Надо выставить трейлинг стоп на 0,1% ниже открытой позиции, если цена спроса выше цены открытой позиции на 1%
Такой код не работает
что я не правильно делаю?Код: Выделить всё
if ( GetBid()=(CurrentPLper() > 1) )
{
TrailingStopLoss(0.1, SignalPriceType.DeltaInPercentFromAveragePrice);
}
Цена открытой позиции AverPrice() - учетная цена
GetBid() - возвращает цену лучшего bid
"=" - это присваивание
"==" - сравнение
Если речь о Long
Код: Выделить всё
if ( CurrentPosition() > 0 && GetBid() >= AverPrice() + AverPrice() * 0.01 * 1 )
{
TrailingStopLoss(0.1, SignalPriceType.DeltaInPercentFromAveragePrice);
}
Здесь * 1 - 1%, можно подставить параметр или нужную константу
формула такого вида лишь для наглядности, понимания и удобства использования т.к. конкретно можно указать процент числом (параметром)
конечно можно было проще написать так
Код: Выделить всё
if ( CurrentPosition() > 0 && GetBid() >= AverPrice() * 1.01 )
{
TrailingStopLoss(0.1, SignalPriceType.DeltaInPercentFromAveragePrice);
}
что равнозначно, но процент задавать придётся через 1.01 - 1%, 1.05 - 5% и т.д.
здесь в коде нет проверки на выставление ранее стопа. Так что ещё это необходимо, хотя стоп перевыставлятся не должен, но лишние действия будут происходить постоянно на каждом баре при >= %
никогда такого не было и вот опять
-
- Сообщения: 38
- Зарегистрирован: 10 июн 2017, 20:50
- Благодарил (а): 1 раз
Re: Возможно ли создать робота с алгоритмом маркетмейкера
спасибо за разъяснение.
Если не сложно посмотрите пожалуйста код стратегии AveragePositionBuy
Я попытался переделать на шорт, откомпилировалось, потестировал на истории - работает
Запустил сейчас роботов на двух разных субсчетах (одного в шорт другого лонг) - лонг работает, шорт - позиции не открывает.
кусок оригинала лонга
переделал на шорт изменив знаки
в роботе инструмент поставил один фьючерс газпрома, настройки (таймфрейм и пр.) все сделал одинаково, но в шорт не открывает позицию
что то упустил?
Если не сложно посмотрите пожалуйста код стратегии AveragePositionBuy
Я попытался переделать на шорт, откомпилировалось, потестировал на истории - работает
Запустил сейчас роботов на двух разных субсчетах (одного в шорт другого лонг) - лонг работает, шорт - позиции не открывает.
кусок оригинала лонга
Код: Выделить всё
if (LastPrice >= 100000000.0 && CurrentPosition() != 0)
LastPrice = AverPrice();
if ( Input1.Close[0] < LastPrice - Delta )
{
EnterLong(Qty);
LastPrice = Input1.Close[0];
}
if ( Input1.Close[0] > LastPrice + Delta)
{
CloseLong(Qty);
LastPrice = Input1.Close[0];
}
переделал на шорт изменив знаки
Код: Выделить всё
if (LastPrice >= 100000000.0 && CurrentPosition() != 0)
LastPrice = AverPrice();
if ( Input1.Close[0] > LastPrice + Delta )
{
EnterShort(Qty);
LastPrice = Input1.Close[0];
}
if ( Input1.Close[0] < LastPrice - Delta)
{
CloseShort(Qty);
LastPrice = Input1.Close[0];
}
в роботе инструмент поставил один фьючерс газпрома, настройки (таймфрейм и пр.) все сделал одинаково, но в шорт не открывает позицию
что то упустил?
- evge
- Администратор
- Сообщения: 1811
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 366 раз
- Контактная информация:
Re: Возможно ли создать робота с алгоритмом маркетмейкера
dkostiunin писал(а):но в шорт не открывает позицию
может параметры неверные на входе или робота как советника запустили и реальную сделку он не совершает.
никогда такого не было и вот опять
-
- Сообщения: 38
- Зарегистрирован: 10 июн 2017, 20:50
- Благодарил (а): 1 раз
Re: Возможно ли создать робота с алгоритмом маркетмейкера
По поводу параметров, может там надо писать с отрицательным знаком количество на вход?
я уже по всякому пробовал, ничего не происходит, он просто заявки не отправляет.
Если роботов в режим советника запускать, они все равно в диспетчере показывают сигналы, этот код ничего не делает в режиме ни в режиме робота ни в режиме советника. Только в режиме тестирования работает.
Видимо какой то ньюанс в коде.
на всякий случай вот полный код
я уже по всякому пробовал, ничего не происходит, он просто заявки не отправляет.
Если роботов в режим советника запускать, они все равно в диспетчере показывают сигналы, этот код ничего не делает в режиме ни в режиме робота ни в режиме советника. Только в режиме тестирования работает.
Видимо какой то ньюанс в коде.
на всякий случай вот полный код
Код: Выделить всё
function Initialize()
{
StrategyName = "AverageSell";
AddParameter("Qty", 1, "Qty ", 1);
AddParameter("Delta", 100, "Delta", 1);
AddInput("Input1", Inputs.Candle, 1, true, "");
LongLimit = 0;
ShortLimit = 0;
AddGlobalVariable("LastPrice", Types.Double, 100000000.0);
}
function OnUpdate()
{
if (LastPrice >= 100000000.0 && CurrentPosition() != 0)
LastPrice = AverPrice();
if ( Input1.Close[0] > LastPrice + Delta )
{
EnterShort(Qty);
LastPrice = Input1.Close[0];
}
if ( Input1.Close[0] < LastPrice - Delta)
{
CloseShort(Qty);
LastPrice = Input1.Close[0];
}
}
- evge
- Администратор
- Сообщения: 1811
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 366 раз
- Контактная информация:
Re: Возможно ли создать робота с алгоритмом маркетмейкера
Теперь понятно.
замените на
т.к. при первом варианте никогда не исполнится открытие позиции
а так же
на
Код: Выделить всё
AddGlobalVariable("LastPrice", Types.Double, 100000000.0);
замените на
Код: Выделить всё
AddGlobalVariable("LastPrice", Types.Double, 0.0);
т.к. при первом варианте никогда не исполнится открытие позиции
а так же
Код: Выделить всё
if (LastPrice >= 100000000.0 && CurrentPosition() != 0)
на
Код: Выделить всё
if (LastPrice == 0.0 && CurrentPosition() != 0)
никогда такого не было и вот опять
Вернуться в «Стратегии и роботы»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя