АвторСообщение



Сообщение: 1
Зарегистрирован: 19.05.14
Репутация: 0
ссылка на сообщение  Отправлено: 21.05.14 04:49. Заголовок: Вопрос по бинарам


Подскажите что добавить в советник чтобы ордер закрывался через нужное мне время (момент экспирации в бинарах) ? - для тестирования советника в тестере стратегий.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 13 [только новые]







Сообщение: 455
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 21.05.14 12:30. Заголовок: mitanq пишет: Подск..


mitanq пишет:

 цитата:
Подскажите что добавить в советник чтобы ордер закрывался через нужное мне время (момент экспирации в бинарах) ? - для тестирования советника в тестере стратегий.


Универсального способа не существует, т. к. каждая программа индивидуальна.
Если же объяснить сам принцип, то он заключается в следующем:
1. В настроечные параметры советника добавляются один или два параметра, указывающие время открытия сделки. Например:

 цитата:
input int i_startHour = 10;
input int i_startMinute = 15;


Первый параметр указывает час времени старта, второй - минуты времени старта.

2. Блок программы, который осуществляет открытие сделки, обволакивается следующими условиями, проверяющими достижение указанного времени суток:

 цитата:
static datetime lastOpenDay = 0;
int neededMinutes = i_startHour * 60 + i_startMinute;
if (lastOpenDay != iTime(NULL, PERIOD_D1, 0))
{
int currentMinutes = TimeHour() * 60 + TimeMinute();
if (currentMinutes <= neededMinutes)
{
// Открытие сделки
....
// Если успешно открылись:
lastOpenDay != iTime(NULL, PERIOD_D1, 0);
}
}



Здесь статическая переменная lastOpenDay следит за тем, чтобы сделка не открылась более одного раза в сутки, при условии постоянной работы программы, без отключений.

Это лишь один из способов, который мне больше нравится. Но возможны и другие подходы.

Спасибо: 1 
ПрофильЦитата Ответить



Сообщение: 2
Зарегистрирован: 19.05.14
Откуда: Ryazan
Репутация: 0
ссылка на сообщение  Отправлено: 21.05.14 14:44. Заголовок: Ого. Я имел в виду д..


Ого. Я имел в виду другое. На одной валютной паре советник открывает ордер. Да записывает время и magic и пошёл отчёт времени. Там 15 мин. 30 мин. Как будет указано в специальной переменной. И как только он увидел это время закрывает ордер с этим magic. Как вот сам процесс проверки сделать. Может просто каждую секунду записывать и прибавлять ?

Судьба - это цепь событий, которую мы непереставая куем самостоятельно своими мыслями и поступками. Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 3
Зарегистрирован: 19.05.14
Откуда: Ryazan
Репутация: 0
ссылка на сообщение  Отправлено: 21.05.14 14:45. Заголовок: Кстати в ваш комплек..


Кстати в ваш комплексный советник хочу добавить. Он супер.

Судьба - это цепь событий, которую мы непереставая куем самостоятельно своими мыслями и поступками. Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 461
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 21.05.14 17:41. Заголовок: mitanq пишет: Ого. ..


mitanq пишет:

 цитата:
Ого. Я имел в виду другое. На одной валютной паре советник открывает ордер. Да записывает время и magic и пошёл отчёт времени. Там 15 мин. 30 мин. Как будет указано в специальной переменной. И как только он увидел это время закрывает ордер с этим magic. Как вот сам процесс проверки сделать. Может просто каждую секунду записывать и прибавлять ?


Старость, не радость... Я прочитал: "чтобы ордер открывался через нужное мне время".

Тем не менее, смысл это не меняет и даже немного упрощает алгоритм:
1. Остается.
2. После открытия ордера запоминаем его тикет (тикет возвращается функцией OrderSend).
3. Просто вставляем этот кусок кода в функцию start (OnTick в новом MQL4):

 цитата:

int neededMinutes = i_startHour * 60 + i_startMinute;
int currentMinutes = TimeHour() * 60 + TimeMinute();
if (currentMinutes <= neededMinutes && OrderSelect(ticket, SELECT_BY_TICKET) && OrderCloseTime() == 0)
{
// Закрытие сделки
double price = Ask;
if (OrderType() == OP_BUY)
price = Bid;
bool isClose = OrderClose(ticket, OrderLots(), price, 0);
}



где переменная ticket - это тикет открытого ордера.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 462
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 21.05.14 18:02. Заголовок: Кстати, если нужно з..


Кстати, если нужно закрывать не очень много ордеров, то можно воспользоваться следующим простым советником - CloseByTime.
В первом параметре указывается абсолютное дата/время, при наступлении которого следует закрыть ордер, а во втором - сам тикет, который указан в графе "Ордер" окна "Терминал" МТ4.
Нужно лишь учитывать, что советник работает только по тикам. Поэтому, если с указанного времени до момента экспирации в терминал не поступит ни одного тика, то ордер закрыт не будет. То есть нужно делать некоторый запас по времени, чтобы после указанного времени успел прийти хотя бы один тик.

Эксперт можно запустить на нескольких графиках (с разными параметрами) и таким образом следить за несколькими ордерами. Символ закрываемого ордера и символ графика, к которому прикреплен советник, должны совпадать. Иначе ордер не сможет закрыться.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 4
Зарегистрирован: 19.05.14
Откуда: Ryazan
Репутация: 0
ссылка на сообщение  Отправлено: 21.05.14 19:00. Заголовок: Вот это отлично. БОЛ..


Извиняюсь. Я не корректно написал. Алгоритм нужен именно для тестера стратегий....Для отработки стратегии.
Поставил в настройках эксперта время закрытия ордера и все.

В советнике который торгует на демо я добавил параметр в настройки. Он Добавляет в комментарии ордера время. Ордер открывается именно на это время.
И закрывается автоматически.

В тестере стратегий соответственно так не получится.

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

А для тестера стратегий только один советник. Чтобы открывал на определенное время и закрывал (имитация реальной работы).
И соответственно наверное надо будет считать в переменную еще количество закрытых ордеров в плюсе. Это я думаю не сложно, сравнить открытый и закрытый. Сделка идет не по пунктам, а 70 % от выставленного ордера.

Так как бинары приобретаю все большую популярность - этот алгоритм думаю будет в тему...



Судьба - это цепь событий, которую мы непереставая куем самостоятельно своими мыслями и поступками. Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 464
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 22.05.14 12:49. Заголовок: mitanq пишет: Алгор..


mitanq пишет:

 цитата:
Алгоритм нужен именно для тестера стратегий....Для отработки стратегии.


В этом случае поможет только первый вариант - встраивать приведенный код в код эксперта. Универсального решения здесь не получится, над каждой программой придется работать отдельно.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 5
Зарегистрирован: 19.05.14
Откуда: Ryazan
Репутация: 0
ссылка на сообщение  Отправлено: 22.05.14 14:51. Заголовок: Эх. Понятно. Придётс..


Эх. Понятно. Придётся копать mql4 справку. Я так и е понял в какой переменной указать время закрытия. (((

Судьба - это цепь событий, которую мы непереставая куем самостоятельно своими мыслями и поступками. Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 467
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 22.05.14 17:55. Заголовок: mitanq пишет: Эх. П..


mitanq пишет:

 цитата:
Эх. Понятно. Придётся копать mql4 справку. Я так и е понял в какой переменной указать время закрытия. (((


Если будут конкретные вопросы (попытались сделать - не получилось), выкладывайте код своей попытки. Помогу. Именно помогу, а не напишу за Вас.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 6
Зарегистрирован: 19.05.14
Откуда: Ryazan
Репутация: 0
ссылка на сообщение  Отправлено: 22.05.14 15:17. Заголовок: Уважаемый scriptong ..


Уважаемый scriptong вопрос по комплексному советник у. У трёх индикаторов cci. Rsi. Dmarker. Сигналы выхода из зон перекупленности но в другие стороны. То есть если сверху вниз и по графикам если смотреть выход из зоны сверху и должен быть сигнал sell. А там buy. А как сделать чтобы сигнал был на вход в зону перекупленности? Эффективнее. Подскажите? Хотя бы для rsi.

Судьба - это цепь событий, которую мы непереставая куем самостоятельно своими мыслями и поступками. Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 468
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 22.05.14 17:58. Заголовок: mitanq пишет: Сигна..


mitanq пишет:

 цитата:
Сигналы выхода из зон перекупленности но в другие стороны. То есть если сверху вниз и по графикам если смотреть выход из зоны сверху и должен быть сигнал sell. А там buy. А как сделать чтобы сигнал был на вход в зону перекупленности? Эффективнее. Подскажите? Хотя бы для rsi.


Нужно лишь поменять условия. Сейчас не буду рыться в соответствующих исходниках, но если было так:

 цитата:
double rsi1 = iRSI(NULL, 0, period, price, 1);
double rsi2 = iRSI(NULL, 0, period, price, 2);
if (rsi1 < highLevel && rsi2 > highLevel) // Выход из зоны перекупленности
{
// Сигнал продажи
}


то разворот прост:

 цитата:
if (rsi1 > highLevel && rsi2 < highLevel) // Вход в зону перекупленности
{
// Сигнал чего-то
}



Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 7
Зарегистрирован: 19.05.14
Откуда: Ryazan
Репутация: 0
ссылка на сообщение  Отправлено: 22.05.14 19:07. Заголовок: Вот нашел: if (Mai..


Вот нашел:

if (Main[2] < RSILowLevel && Main[1] > RSILowLevel && Main[1] < RSIHighLevel)
GlobalVariableSet(Signal, 1); // Buy
if (Main[2] > RSIHighLevel && Main[1] < RSIHighLevel && Main[1] > RSILowLevel)
GlobalVariableSet(Signal, -1); // Sell

По пробую вот так: ?


if (Main[2] > RSILowLevel && Main[1] < RSILowLevel && Main[2] < RSIHighLevel)
GlobalVariableSet(Signal, 1); // Buy
if (Main[2] < RSIHighLevel && Main[1] > RSIHighLevel && Main[2] > RSILowLevel)
GlobalVariableSet(Signal, -1); // Sel

Работает.....)))














Судьба - это цепь событий, которую мы непереставая куем самостоятельно своими мыслями и поступками. Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 473
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 27.05.14 11:05. Заголовок: mitanq пишет: По пр..


mitanq пишет:

 цитата:
По пробую вот так: ?


if (Main[2] > RSILowLevel && Main[1] < RSILowLevel && Main[2] < RSIHighLevel)
GlobalVariableSet(Signal, 1); // Buy
if (Main[2] < RSIHighLevel && Main[1] > RSIHighLevel && Main[2] > RSILowLevel)
GlobalVariableSet(Signal, -1); // Sel

Работает.....)))



Да, верно.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  2 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет