Форум » Консультации по программированию » Вопрос по бинарам » Ответить

Вопрос по бинарам

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

Ответов - 13

Scriptong: 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 следит за тем, чтобы сделка не открылась более одного раза в сутки, при условии постоянной работы программы, без отключений. Это лишь один из способов, который мне больше нравится. Но возможны и другие подходы.

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

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


Scriptong: 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 - это тикет открытого ордера.

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

mitanq: Извиняюсь. Я не корректно написал. Алгоритм нужен именно для тестера стратегий....Для отработки стратегии. Поставил в настройках эксперта время закрытия ордера и все. В советнике который торгует на демо я добавил параметр в настройки. Он Добавляет в комментарии ордера время. Ордер открывается именно на это время. И закрывается автоматически. В тестере стратегий соответственно так не получится. Простой советник для закрытия к сожалению не пойдет. Дело в том что я торгую бинарными опционами в mt4 (Два брокера работают с mt4 на бинарах). А в бинарных опционах ордера открываются на определенное время, после истечении которого закрываются автоматически. А для тестера стратегий только один советник. Чтобы открывал на определенное время и закрывал (имитация реальной работы). И соответственно наверное надо будет считать в переменную еще количество закрытых ордеров в плюсе. Это я думаю не сложно, сравнить открытый и закрытый. Сделка идет не по пунктам, а 70 % от выставленного ордера. Так как бинары приобретаю все большую популярность - этот алгоритм думаю будет в тему...

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

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

Scriptong: mitanq пишет: Эх. Понятно. Придётся копать mql4 справку. Я так и е понял в какой переменной указать время закрытия. ((( Если будут конкретные вопросы (попытались сделать - не получилось), выкладывайте код своей попытки. Помогу. Именно помогу, а не напишу за Вас.

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

Scriptong: 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) // Вход в зону перекупленности { // Сигнал чего-то }

mitanq: Вот нашел: 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 Работает.....)))

Scriptong: 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 Работает.....))) Да, верно.



полная версия страницы