Общие вопросы по разработке > Простой алгоритм
Простой алгоритм
Доброго времени суток.
Я не программист от слова "совсем" всетаки.
Появился такой вопрос: как, не основываясь на индикаторе, создать робота, который просто будет выставлять лимитную заявку на покупку по цене Bid и после исполнения заявки выставит аналогичную по размеру заявку на продажу по цене Ask. И таким образом зациклить робота на покупку/продажу, т.е. купил-продал-еще купил-продал...
Спасибо.
П.С. Пробовал делать основываясь на цене low и high свечи, но получается, что надо ставить середину свечи как цену пробития для продажи. В общем не работает)
Я не программист от слова "совсем" всетаки.
Появился такой вопрос: как, не основываясь на индикаторе, создать робота, который просто будет выставлять лимитную заявку на покупку по цене Bid и после исполнения заявки выставит аналогичную по размеру заявку на продажу по цене Ask. И таким образом зациклить робота на покупку/продажу, т.е. купил-продал-еще купил-продал...
Спасибо.
П.С. Пробовал делать основываясь на цене low и high свечи, но получается, что надо ставить середину свечи как цену пробития для продажи. В общем не работает)
- evge
- Администратор
- Сообщения: 1811
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 366 раз
- Контактная информация:
Re: Простой алгоритм
Добрый день!
Код: Выделить всё
function Initialize()
{
StrategyName = "SimpleRobot";
AddInput("Input1", Inputs.Candle, 1, true, "");
LongLimit = 1;
ShortLimit = -1;
}
function OnUpdate()
{
if (CurrentPosition() == 0)
{
EnterLongLimit(GetBid());
CloseLongLimit(GetAsk());
}
}
никогда такого не было и вот опять
Re: Простой алгоритм
Большое спасибо!
П.С. Конечно он будет сливать на долгой дистанции. Вопрос во времени работы, количестве лотов и тд и тп. В конце концов надо за ним тоже следить. Да и дополнительное условие надо будет делать. Работать и работать. Но начало есть) Я просто не могу сообразить много чего в алгоритме, т.е. как написать.
П.С. Конечно он будет сливать на долгой дистанции. Вопрос во времени работы, количестве лотов и тд и тп. В конце концов надо за ним тоже следить. Да и дополнительное условие надо будет делать. Работать и работать. Но начало есть) Я просто не могу сообразить много чего в алгоритме, т.е. как написать.
- evge
- Администратор
- Сообщения: 1811
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 366 раз
- Контактная информация:
Re: Простой алгоритм
Первый вариант кода не сработает вторая команда CloseLongLimit();
Поэтмоу
Правильнее так:
т.к. две команды за один Update не примет и позиция останется открытой без заявки на закрытие.
во втором варианте кода позиция будет открыта на одной свече.
а на следующей если проверка будет пройдена и позиция уже открыта то выставится CloseLongLimit.
Поэтмоу
Правильнее так:
Код: Выделить всё
function Initialize()
{
StrategyName = "SimpleRobot";
AddInput("Input1", Inputs.Candle, 1, true, "");
LongLimit = 1;
ShortLimit = -1;
}
function OnUpdate()
{
if (CurrentPosition() == 0)
{
EnterLongLimit(GetBid());
}
if (CurrentPosition() > 0)
{
CloseLongLimit(GetAsk());
}
}
т.к. две команды за один Update не примет и позиция останется открытой без заявки на закрытие.
во втором варианте кода позиция будет открыта на одной свече.
а на следующей если проверка будет пройдена и позиция уже открыта то выставится CloseLongLimit.
никогда такого не было и вот опять
- evge
- Администратор
- Сообщения: 1811
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 366 раз
- Контактная информация:
Re: Простой алгоритм
нужно учитывать один момент в коде выше. CloseLongLimit установит ордер на цену Ask при появлении нового бара, а это не обязательно цена Ask, которая была больше чем Bid при открытии позиции.
Поэтому усложним задачу и запомним цену Ask в момент открытия, чтобы по данной цене устанавливать CloseLongLimit на следующем баре после открытия позиции, при условии что позиция уже открыта, т.е. CurrentPosition() > 0.
чем меньше будет таймфрейм, тем точнее будет срабатывание Ask.
Поэтому усложним задачу и запомним цену Ask в момент открытия, чтобы по данной цене устанавливать CloseLongLimit на следующем баре после открытия позиции, при условии что позиция уже открыта, т.е. CurrentPosition() > 0.
Код: Выделить всё
/**
**/
function Initialize()
{
StrategyName = "SimpleRobot";
AddInput("Input1", Inputs.Candle, 1, true, "");
LongLimit = 1;
ShortLimit = -1;
AddGlobalVariable("Ask", Types.Double, 0);
}
function OnUpdate()
{
if (CurrentPosition() == 0)
{
EnterLongLimit(GetBid());
Ask = GetAsk();
}
if (CurrentPosition() > 0)
{
CloseLongLimit(Ask);
}
}
чем меньше будет таймфрейм, тем точнее будет срабатывание Ask.
никогда такого не было и вот опять
Re: Простой алгоритм
На сколько понимаю, на одном баре открыть последовательно обе позиции не получится? Если да, то это несколько меняет частоту работы робота....ну ладно, подумаю.
В любом случае спасибо.
В любом случае спасибо.
- evge
- Администратор
- Сообщения: 1811
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 366 раз
- Контактная информация:
Re: Простой алгоритм
на одном баре не исполнятся EnterLongLimit() и CloseLongLimit()
Нужно дождаться выполнения EnterLongLimit() и затем уже отправлять ордер на закрытие позиции
Нужно дождаться выполнения EnterLongLimit() и затем уже отправлять ордер на закрытие позиции
никогда такого не было и вот опять
Re: Простой алгоритм
Возникла идея добавить к данной стратегии индикатор EMA (можно и просто МА), в качестве индикатора тренда. Соответсвенно запускать робота только в случае растущего тренда. При смене тренда закрывать позицию (если открыта) по текущей цене.
Вернуться в «Общие вопросы по разработке»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя