Вы уверены что у Вас все фигурные скобки стоят. Местами их не хватает. Логика из-за этого хромает. И вернее всего результат получается не тот что Вы ожидали
Вить, ты чё, в отъезде был? Не видать что-то тебя долго было...
Вы уверены что у Вас все фигурные скобки стоят. Местами их не хватает. Логика из-за этого хромает. И вернее всего результат получается не тот что Вы ожидали
Если Вы насчет кода индикатора - то там со скобками все нормально, индикатор работает, дает сигналы в виде стрелок(на покупку/продажу-4 и 5 индикаторные буфферы). А вот при считывании этих стрелок из индикатора в советнике получается ерунда. Советник я привел не полностью, потому что там главное понять как считать считать сигнал и сделать соответствующую операцию. В общем проблема в считывании сигнала.
Чтобы тут вставить правильно код нажмине сперва на SRC, а потом скопируйте туда код.
Если я правильно вас понял в определённый момент времени надо открыть один OP_BUYSTOP и один OP_SELLSTOP ? Допустимо ли в этот момент наличие каких-либо других отложенных ордеров? Напр. есть отложенники, но перед тем как открыть новые надо удалить старые?
if (hour1 == TimeHour(TimeCurrent()) && minute1 == TimeMinute(TimeCurrent()))// если время подошло то
{
min=Low[iLowest(Symbol(),0,MODE_LOW,6,1)]; // вычисляем минимальную цену последних 6 свечей
max=High[iHighest(Symbol(),0,MODE_HIGH,6,1)]; // вычисляем максимальную цену последних 6 свечейdouble volum=max-min;// общий объем локалки последних 6 свечей М5if ((volum<=n)==true)// если объем свечей меньше или равно n пунктов
{
OrderSend ( Symbol (), OP_BUYSTOP, параметры);// открываем отложенный ордер байстопOrderSend ( Symbol (), OP_SELLSTOP, параметры);// открываем отложенный ордер селлстоп
}
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY)&& OrderTakeProfit()==true) ///если первый открывшийся отложенный ордер закрыт с профитом
{
OrderDelete(1);// удаляем второй открытый отложенный ордер
}
}
bool closeorder;//определим закрытие ордеров
closeorder=true;
if (closeorder==true)//
{
int hour2 = TimeHour(StrToTime(time2));// вычисляем время закрытия ордеровint minute2 = TimeMinute(StrToTime(time2));
if (hour2 == TimeHour(TimeCurrent()) && minute2 == TimeMinute(TimeCurrent()))// если время
{
for(int i=OrdersTotal()-1; i>=0; i--)// определяем количество открытых позиций, и отложенных ордеров и закрываем все возможные позиции, и отложенные ордераif (OrderSelect(1,SELECT_BY_POS,MODE_TRADES))break; //определяем место где будем искать ( рабочие позиции)if (OrderType()==OP_BUY ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slippage);// Закрытие ордера бай если такой естьif (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),slippage);//Закрытие ордера селл если такой есть
{
for(int D=OrdersTotal()-1; D>=0; D--)
if (OrderSelect(D,SELECT_BY_TICKET,MODE_TRADES)==true)
if (OrderType()==OP_BUYSTOP ) OrderDelete(D); //удаляем отложенный байстопif (OrderType()==OP_SELLSTOP) OrderDelete(D);// удаляем отложенный селлстоп
уже кинул общий код, чтобы было понятнее.. В конце дня закрытие всех возможных позиций и ордеров хотелось сделать..
а во время открытия двух отложенников (утром) по плану нет никакких открытых ордеров или открытых до этого позиций, т.к. они по времени должны все быть закрыты вечером в определенное время. Интересно у меня хоть полное закрытие ордеров правильно описано?=)))
Мне, честно говоря, неизвестна логика вашей функции. Должна она удалять объекты или должна их строить, мне неизвестно. Скажите, что хотите от неё и мы тут посмотрим, где заковыка в логике. Впрочем, раз ф-ция пытается построить граф. объект, но выдаёт ошибку, значит он уже есть. Вот что дальше по логике вашей программы? Можно построить новый объект с другим именем (например, к именам объектов добавляйте текущее время (TimeToStr(TimeCurrent()))), либо, если объект уже есть, но нужно изменить его свойства, то не стройте объект по-новой, а просто измените его свойства. Тогда ошибка не появится больше.
Всё просто. Главное - знать, чего хочется... :)
Вообще то, функция всего навсего как визуальная замена принта, только выводит всё на экран. Написано не особо ещё грамотно, но работает.. :) Доберусь, перепишу. А вот тогда можно и подумать над тем вопросом что был.
Кстати, если не строить новые объекты, а а изменять свойства уже существующих, то опять же... Головняк будет. По задумке, нужно выводить последние N-косяков на экран. Если постоянно крайний объект переписывать, то будет только 1 объект, с канкретным косяком(ошибкой). Можно пойти дальше, и через цикл отобрать столько объектов, сколько нужно и только их переписывать, но это не стоит видимо усилий, т.к. функция лишь для теста, и заморачиваться не особо горю желание, в силу того, что и так много чего нужно сделать. Как-нибудь попроавлю код той функции, и доведу её до ума, а тогда и можно подумать!
Созрел такой вопрос. В плане эксперимента пишу такую вещь. Собирается пачка ордеров, которые есстесственно открываются друг за другом по определённым сигналам. Нужно, чтоб когда закрылся последний ордер, закрыть все остальные рыночные и отложенные ордера вообще...
Можно всё писать через массивы, конечно, но я пошёл обычным способом. Вот так:
for (int li_ord=OrdersTotal()-1; li_ord>=0; li_ord--)
{
if (!OrderSelect(li_ord,SELECT_BY_POS)) continue;
if (OrderMagicNumber() != i_magic) continue;
if (OrderSymbol() != Symbol()) continue;
g_ticket = OrderTicket();
g_type = OrderType();
// Закрытие всех ордеров, если последний ордер закрытif (GetLastOrderState() != 0)
{
if (g_type > 1)
{
DeletePendingOrders(g_ticket);
}
else
{
CloseMarketOrders(g_ticket);
}
}
}
Условие:
if (GetLastOrderState() != 0)
проверяет, является ли последний открытый ордер закрытым! Дальше, мы начинаем удалять отложки и закрывать рыночные ордера...
Вот сама функция, чтоб не было сомнений, что с ней что-нибудь не так(Критика и замечания приветствуются, и даже более чем приветствуются:))) ):
//+-------------------------------------------------------------------------------------+//| Получаем состояние последней позиции (Открыта или закрыта) |//+-------------------------------------------------------------------------------------+double GetLastOrderState()
{
double lastOrderCloseTime = -1, // Время закрытия последнего ордера
lastOrderOpenTime = -1; // Время открытия последнего ордераfor (int i=OrdersTotal()-1; i>=0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS)) continue;
if (OrderMagicNumber() != i_magic) continue;
if (OrderSymbol() != Symbol()) continue;
if (lastOrderOpenTime < OrderOpenTime())
{
lastOrderOpenTime = OrderOpenTime();
lastOrderCloseTime = OrderCloseTime();
}
}
return (lastOrderCloseTime);
}
Если Вы насчет кода индикатора - то там со скобками все нормально, индикатор работает, дает сигналы в виде стрелок(на покупку/продажу-4 и 5 индикаторные буфферы). А вот при считывании этих стрелок из индикатора в советнике получается ерунда. Советник я привел не полностью, потому что там главное понять как считать считать сигнал и сделать соответствующую операцию. В общем проблема в считывании сигнала.
Вообще то, функция всего навсего как визуальная замена принта, только выводит всё на экран. Написано не особо ещё грамотно, но работает.. :) Доберусь, перепишу. А вот тогда можно и подумать над тем вопросом что был.
Кстати, если не строить новые объекты, а а изменять свойства уже существующих, то опять же... Головняк будет. По задумке, нужно выводить последние N-косяков на экран. Если постоянно крайний объект переписывать, то будет только 1 объект, с канкретным косяком(ошибкой). Можно пойти дальше, и через цикл отобрать столько объектов, сколько нужно и только их переписывать, но это не стоит видимо усилий, т.к. функция лишь для теста, и заморачиваться не особо горю желание, в силу того, что и так много чего нужно сделать. Как-нибудь попроавлю код той функции, и доведу её до ума, а тогда и можно подумать!
Я как-то делал функцию, которая выводит сообщения в окно пустого индюкатора. Можно настраивать цвета выводимых строк. Она уже отлажена. Если вдруг, могу и поделиться.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Вы уверены что у Вас все фигурные скобки стоят. Местами их не хватает. Логика из-за этого хромает. И вернее всего результат получается не тот что Вы ожидали
Вить, ты чё, в отъезде был? Не видать что-то тебя долго было...
Сегодня дома был (почти)
Сегодня дома был (почти)
Вы уверены что у Вас все фигурные скобки стоят. Местами их не хватает. Логика из-за этого хромает. И вернее всего результат получается не тот что Вы ожидали
Если Вы насчет кода индикатора - то там со скобками все нормально, индикатор работает, дает сигналы в виде стрелок(на покупку/продажу-4 и 5 индикаторные буфферы). А вот при считывании этих стрелок из индикатора в советнике получается ерунда. Советник я привел не полностью, потому что там главное понять как считать считать сигнал и сделать соответствующую операцию. В общем проблема в считывании сигнала.
Чтобы тут вставить правильно код нажмине сперва на SRC, а потом скопируйте туда код.
Если я правильно вас понял в определённый момент времени надо открыть один OP_BUYSTOP и один OP_SELLSTOP ? Допустимо ли в этот момент наличие каких-либо других отложенных ордеров? Напр. есть отложенники, но перед тем как открыть новые надо удалить старые?
уже кинул общий код, чтобы было понятнее.. В конце дня закрытие всех возможных позиций и ордеров хотелось сделать..
а во время открытия двух отложенников (утром) по плану нет никакких открытых ордеров или открытых до этого позиций, т.к. они по времени должны все быть закрыты вечером в определенное время. Интересно у меня хоть полное закрытие ордеров правильно описано?=)))
Мне, честно говоря, неизвестна логика вашей функции. Должна она удалять объекты или должна их строить, мне неизвестно. Скажите, что хотите от неё и мы тут посмотрим, где заковыка в логике. Впрочем, раз ф-ция пытается построить граф. объект, но выдаёт ошибку, значит он уже есть. Вот что дальше по логике вашей программы? Можно построить новый объект с другим именем (например, к именам объектов добавляйте текущее время (TimeToStr(TimeCurrent()))), либо, если объект уже есть, но нужно изменить его свойства, то не стройте объект по-новой, а просто измените его свойства. Тогда ошибка не появится больше.
Всё просто. Главное - знать, чего хочется... :)
Вообще то, функция всего навсего как визуальная замена принта, только выводит всё на экран. Написано не особо ещё грамотно, но работает.. :) Доберусь, перепишу. А вот тогда можно и подумать над тем вопросом что был.
Кстати, если не строить новые объекты, а а изменять свойства уже существующих, то опять же... Головняк будет. По задумке, нужно выводить последние N-косяков на экран. Если постоянно крайний объект переписывать, то будет только 1 объект, с канкретным косяком(ошибкой). Можно пойти дальше, и через цикл отобрать столько объектов, сколько нужно и только их переписывать, но это не стоит видимо усилий, т.к. функция лишь для теста, и заморачиваться не особо горю желание, в силу того, что и так много чего нужно сделать. Как-нибудь попроавлю код той функции, и доведу её до ума, а тогда и можно подумать!
Созрел такой вопрос. В плане эксперимента пишу такую вещь. Собирается пачка ордеров, которые есстесственно открываются друг за другом по определённым сигналам. Нужно, чтоб когда закрылся последний ордер, закрыть все остальные рыночные и отложенные ордера вообще...
Можно всё писать через массивы, конечно, но я пошёл обычным способом. Вот так:
Условие:
проверяет, является ли последний открытый ордер закрытым! Дальше, мы начинаем удалять отложки и закрывать рыночные ордера...
Вот сама функция, чтоб не было сомнений, что с ней что-нибудь не так(Критика и замечания приветствуются, и даже более чем приветствуются:))) ):
Если Вы насчет кода индикатора - то там со скобками все нормально, индикатор работает, дает сигналы в виде стрелок(на покупку/продажу-4 и 5 индикаторные буфферы). А вот при считывании этих стрелок из индикатора в советнике получается ерунда. Советник я привел не полностью, потому что там главное понять как считать считать сигнал и сделать соответствующую операцию. В общем проблема в считывании сигнала.
Как-то так.
Вообще то, функция всего навсего как визуальная замена принта, только выводит всё на экран. Написано не особо ещё грамотно, но работает.. :) Доберусь, перепишу. А вот тогда можно и подумать над тем вопросом что был.
Кстати, если не строить новые объекты, а а изменять свойства уже существующих, то опять же... Головняк будет. По задумке, нужно выводить последние N-косяков на экран. Если постоянно крайний объект переписывать, то будет только 1 объект, с канкретным косяком(ошибкой). Можно пойти дальше, и через цикл отобрать столько объектов, сколько нужно и только их переписывать, но это не стоит видимо усилий, т.к. функция лишь для теста, и заморачиваться не особо горю желание, в силу того, что и так много чего нужно сделать. Как-нибудь попроавлю код той функции, и доведу её до ума, а тогда и можно подумать!
Это ваше : А надо так:
Как-то так.
спасибо за поправку, но алгоритм правильно не заработал...