Рассчитывал применить в стиле обработки ордеров в цикле, например как работает счётчик открытых ордеров по типу.
Я ведь так и сказал, без всяких глобальных переменных. Зачем передавать данные куда-то, если советник сам может их получить? Таким образом, это не тот случай, когда стоит применять глобальные переменные.
Я ведь так и сказал, без всяких глобальных переменных. Зачем передавать данные куда-то, если советник сам может их получить? Таким образом, это не тот случай, когда стоит применять глобальные переменные.
У меня на самом деле стоит задача как не закрывать ордер частями серией в одном месте при выполнении условия
Есть 3 вида закрытий частями лота:
1. Если выполнено условие и время открытия больше времени закрытия, то можно закрыть часть лота (работает 1 раз) 2. Если выполнено условие и нет СЛ в БУ, то можно закрыть ещё часть лота и установить СЛ в БУ (работает 1 раз) 3. Надо закрыть ещё часть лота, но не знаю какое событие придумать чтобы закрытие было 1 раз а не серией
Поэтому и пытаюсь посчитать сколько было закрытий частями у ордера, чтобы ограничить п.3 количеством, т.е. если закрытий было 2, то можно закрыть ещё 1 раз.
У меня на самом деле стоит задача как не закрывать ордер частями серией в одном месте при выполнении условия
Есть 3 вида закрытий частями лота:
1. Если выполнено условие и время открытия больше времени закрытия, то можно закрыть часть лота (работает 1 раз) 2. Если выполнено условие и нет СЛ в БУ, то можно закрыть ещё часть лота и установить СЛ в БУ (работает 1 раз) 3. Надо закрыть ещё часть лота, но не знаю какое событие придумать чтобы закрытие было 1 раз а не серией
Поэтому и пытаюсь посчитать сколько было закрытий частями у ордера, чтобы ограничить п.3 количеством, т.е. если закрытий было 2, то можно закрыть ещё 1 раз.
Конкретно в этом случае можно придумать что-то типа установки ТП или перемещения СЛ еще на один пункт (в +1 от безубытка).
Конкретно в этом случае можно придумать что-то типа установки ТП или перемещения СЛ еще на один пункт (в +1 от безубытка).
не оптимальный способ. Вообще нехороший - DC (точнее ММ) этот пункт-два съест и не подавится. Спред он же дёргается. Вы закроете (вам закроют) сделку по худшей цене и с максимальным спредом.
А ночью так вообще.
и он может вообще несработать. Стопы могут не срабатывать. Лимитки могут несрабатывать, но лимитку можно отбить по телефону
не оптимальный способ. Вообще нехороший - DC (точнее ММ) этот пункт-два съест и не подавится. Спред он же дёргается. Вы закроете (вам закроют) сделку по худшей цене и с максимальным спредом.
А ночью так вообще.
и он может вообще несработать. Стопы могут не срабатывать. Лимитки могут несрабатывать, но лимитку можно отбить по телефону
У меня на самом деле стоит задача как не закрывать ордер частями серией в одном месте при выполнении условия
Есть 3 вида закрытий частями лота:
1. Если выполнено условие и время открытия больше времени закрытия, то можно закрыть часть лота (работает 1 раз) 2. Если выполнено условие и нет СЛ в БУ, то можно закрыть ещё часть лота и установить СЛ в БУ (работает 1 раз) 3. Надо закрыть ещё часть лота, но не знаю какое событие придумать чтобы закрытие было 1 раз а не серией
Поэтому и пытаюсь посчитать сколько было закрытий частями у ордера, чтобы ограничить п.3 количеством, т.е. если закрытий было 2, то можно закрыть ещё 1 раз.
Задача решается подсчетом количеств частичных закрытий. Алгоритм такого подсчета я описал. Но, видимо, этого недостаточно. Тогда вот готовый код:
voidOnStart()
{
for (int i = OrdersTotal() - 1; i >= 0; --i)
{
if (!OrderSelect(i, SELECT_BY_POS))
continue;
int nTicket = OrderTicket();
double fClosedVolume = 0;
int nCnt = GetCountOfPartiallyClosure(fClosedVolume);
if (nCnt > 0)
Print("Order #", nTicket, ", count of partially closure: ", nCnt, ", closed volume: ", DoubleToString(fClosedVolume, 2));
}
}
int GetCountOfPartiallyClosure(double &fClosedVolume)
{
string sComment = OrderComment();
int nTicketPos = StringFind(sComment, "from #");
if (nTicketPos < 0)
return0;
datetime dtOpenTime = OrderOpenTime();
int nFirstTicket = int(StringToInteger(StringSubstr(sComment, nTicketPos + 6)));
if (!OrderSelect(nFirstTicket, SELECT_BY_TICKET, MODE_HISTORY))
return1;
fClosedVolume = OrderLots();
int nCnt = 1;
for (int i = OrdersHistoryTotal() - 1; i >= 0; --i)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
continue;
if (OrderTicket() == nFirstTicket)
continue;
if (OrderCloseTime() < dtOpenTime)
return nCnt;
sComment = OrderComment();
nTicketPos = StringFind(sComment, "to #");
if (nTicketPos < 0)
continue;
int nTicket = int(StringToInteger(StringSubstr(sComment, nTicketPos + 4)));
if (nTicket == nFirstTicket)
{
++nCnt;
nFirstTicket = OrderTicket();
fClosedVolume += OrderLots();
}
}
return nCnt;
}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
В mt4 же нет частичного закрытия...
Всё там есть. Нет только бирживых функций, которые там и ненадо.
Глобальные переменные это больше мусора чем требуемого итога.
Рассчитывал применить в стиле обработки ордеров в цикле,
например как работает счётчик открытых ордеров по типу.
Я ведь так и сказал, без всяких глобальных переменных. Зачем передавать данные куда-то, если советник сам может их получить? Таким образом, это не тот случай, когда стоит применять глобальные переменные.
Я ведь так и сказал, без всяких глобальных переменных. Зачем передавать данные куда-то, если советник сам может их получить? Таким образом, это не тот случай, когда стоит применять глобальные переменные.
У меня на самом деле стоит задача как не закрывать ордер частями серией в одном месте при выполнении условия
Есть 3 вида закрытий частями лота:
1. Если выполнено условие и время открытия больше времени закрытия, то можно закрыть часть лота (работает 1 раз)
2. Если выполнено условие и нет СЛ в БУ, то можно закрыть ещё часть лота и установить СЛ в БУ (работает 1 раз)
3. Надо закрыть ещё часть лота, но не знаю какое событие придумать чтобы закрытие было 1 раз а не серией
Поэтому и пытаюсь посчитать сколько было закрытий частями у ордера, чтобы ограничить п.3 количеством, т.е. если закрытий было 2, то можно закрыть ещё 1 раз.
У меня на самом деле стоит задача как не закрывать ордер частями серией в одном месте при выполнении условия
Есть 3 вида закрытий частями лота:
1. Если выполнено условие и время открытия больше времени закрытия, то можно закрыть часть лота (работает 1 раз)
2. Если выполнено условие и нет СЛ в БУ, то можно закрыть ещё часть лота и установить СЛ в БУ (работает 1 раз)
3. Надо закрыть ещё часть лота, но не знаю какое событие придумать чтобы закрытие было 1 раз а не серией
Поэтому и пытаюсь посчитать сколько было закрытий частями у ордера, чтобы ограничить п.3 количеством, т.е. если закрытий было 2, то можно закрыть ещё 1 раз.
Конкретно в этом случае можно придумать что-то типа установки ТП или перемещения СЛ еще на один пункт (в +1 от безубытка).
Конкретно в этом случае можно придумать что-то типа перемещения СЛ еще на один пункт (в +1 от безубытка).
Действительно хорошая мысль!
Конкретно в этом случае можно придумать что-то типа установки ТП или перемещения СЛ еще на один пункт (в +1 от безубытка).
не оптимальный способ. Вообще нехороший - DC (точнее ММ) этот пункт-два съест и не подавится. Спред он же дёргается. Вы закроете (вам закроют) сделку по худшей цене и с максимальным спредом.
А ночью так вообще.
и он может вообще несработать. Стопы могут не срабатывать. Лимитки могут несрабатывать, но лимитку можно отбить по телефону
не оптимальный способ. Вообще нехороший - DC (точнее ММ) этот пункт-два съест и не подавится. Спред он же дёргается. Вы закроете (вам закроют) сделку по худшей цене и с максимальным спредом.
А ночью так вообще.
и он может вообще несработать. Стопы могут не срабатывать. Лимитки могут несрабатывать, но лимитку можно отбить по телефону
Тема не об этом. А спред здесь вообще не при чем.
Тема не об этом. А спред здесь вообще не при чем.
вот поэтому у вас проблемы, вы не научились считать деньги по сделке
У меня на самом деле стоит задача как не закрывать ордер частями серией в одном месте при выполнении условия
Есть 3 вида закрытий частями лота:
1. Если выполнено условие и время открытия больше времени закрытия, то можно закрыть часть лота (работает 1 раз)
2. Если выполнено условие и нет СЛ в БУ, то можно закрыть ещё часть лота и установить СЛ в БУ (работает 1 раз)
3. Надо закрыть ещё часть лота, но не знаю какое событие придумать чтобы закрытие было 1 раз а не серией
Поэтому и пытаюсь посчитать сколько было закрытий частями у ордера, чтобы ограничить п.3 количеством, т.е. если закрытий было 2, то можно закрыть ещё 1 раз.
Задача решается подсчетом количеств частичных закрытий. Алгоритм такого подсчета я описал. Но, видимо, этого недостаточно. Тогда вот готовый код:
Задача решается подсчетом количеств частичных закрытий. Алгоритм такого подсчета я описал. Но, видимо, этого недостаточно. Тогда вот готовый код:
Считает хорошо, но на втором ордере всё зависло в тестере.