Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 82
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
сделал по быстрому, тебе выдаст последний убыточный, что с ним делать и какие параметры подправить под себя уже думаю разберешся
спасибо, разобрался вроде..
Как теперь сделать чтобы лот везвращать к исходному значению после тейк профита?
{
lot=0.1
}
спасибо, разобрался вроде..
Как теперь сделать чтобы лот везвращать к исходному значению после тейк профита?
{
lot=0.1
}
у меня такая схема
if (OrdersTotal()==0)
{
открыть первоначальным лотом
}
else
...
то есть если нет ордеров то старым лотом уже не откроет
можно конечно запоминать каждый, но тут не говорят как это делать.Счётчик надо завести и сбрасывать его на начальное значение при достижении заданного порога:
{
//---
int b_STOP,s_STOP,b=0,s=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY) b++;
if (OrderType()==OP_SELL) s++;
if (OrderType()==OP_BUYSTOP) b_STOP++;
if (OrderType()==OP_SELLSTOP) s_STOP++;
}
if (OrderType()==OP_BUY)
{
if(b>=1&&s==1)//бай позиций больше или 1 и появилась SELL позиция
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
CLOSEORDER(OP_SELL);
}
}
}
}
Обьясните, почему не работает функция OrderProfit()<0 ?
{
if(OrderSelect(q,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderType()<2 && OrderMagicNumber()==magic)
{
if (OrderProfit()<0)
{
if (DayOfWeek()==1)
{
day1++;
Print ("Понедельник SL=",day1);
}
if (DayOfWeek()==2)
{
day2++;
Print ("Вторник SL=",day2);
}
}
}
}
}
хочу смотреть сколько стоплоссов по дням недели
{
if(OrderSelect(l,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()<0 && OrderType()<2)
{
oldticket=OrderTicket();
}
if (oldticket>=ticket)
{
ticket=oldticket;
lot=OrderLots()*4;
}
if (OrderProfit()>0 && OrderType()<2)
{
lot=0.01;
}
}
}
и здесь я так понимаю по той же причине не работает
Обьясните, почему не работает функция OrderProfit()<0 ?
{
if(OrderSelect(q,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderType()<2 && OrderMagicNumber()==magic)
{
if (OrderProfit()<0)
{
if (DayOfWeek()==1)
{
day1++;
Print ("Понедельник SL=",day1);
}
if (DayOfWeek()==2)
{
day2++;
Print ("Вторник SL=",day2);
}
}
}
}
}
хочу смотреть сколько стоплоссов по дням недели
{
if(OrderSelect(l,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()<0 && OrderType()<2)
{
oldticket=OrderTicket();
}
if (oldticket>=ticket)
{
ticket=oldticket;
lot=OrderLots()*4;
}
if (OrderProfit()<0 && OrderType()<2)
{
lot=0.01;
}
}
}
и здесь я так понимаю по той же причине не работает
Потому, что DayOfWeek() возвращает порядковый номер дня недели последнего известного времени сервера.
А вам нужно день недели времени закрытия ордера: TimeDayOfWeek(OrderCloseTime());
Потому, что DayOfWeek() возвращает порядковый номер дня недели последнего известного времени сервера.
А вам нужно день недели времени закрытия ордера: TimeDayOfWeek(OrderCloseTime());
а результат такой же, будто происходит игнорирование if (OrderProfit()<0) и идет зацикливание, у переменных большие значения получаются.
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963666
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Вторник SL=1430207
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963665
а по поводу цикла с лотом? копировал неправильно сюда, исправил знак if (OrderProfit()>0 && OrderType()<2), но это сути не меняет, без этого условия цикл правильно работает. почему так?
а результат такой же, будто происходит игнорирование if (OrderProfit()<0) и идет зацикливание, у переменных большие значения получаются.
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963666
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Вторник SL=1430207
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963665
а по поводу цикла с лотом? копировал неправильно сюда, исправил знак if (OrderProfit()>0 && OrderType()<2), но это сути не меняет, без этого условия цикл правильно работает. почему так?
Где у вас объявлены day1 и day2 ?
Где у вас объявлены day1 и day2 ?
я так подозреваю как то не правильно я выбираю ордер, что не работает (OrderProfit()<0), как то конкретнее указать какой ордер мне нужен. Не понимаю почему он пропускает ордер, когда последний закрылся по тейку и других там нет. может быть если в истории перебирать как то по другому нужно цикл строить?
{
if(OrderSelect(w,SELECT_BY_POS,MODE_HISTORY))
потому что в советники циклы с похожими условиями, и работают как надо, но работает по OrdersTotal()
{
if(OrderSelect(n,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic)
{
if(OrderType()>OP_SELL)
{
//---
int b_STOP,s_STOP,b=0,s=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY) b++;
if (OrderType()==OP_SELL) s++;
if (OrderType()==OP_BUYSTOP) b_STOP++;
if (OrderType()==OP_SELLSTOP) s_STOP++;
}
if (OrderType()==OP_BUY)
{
if(b>=1&&s==1)//бай позиций больше или 1 и появилась SELL позиция
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
CLOSEORDER(OP_SELL);
}
}
}
}
В пределах одного цикла такая задача не решается. В этом цикле запоминаете в массив тикеты ордеров на удаление, в другом цикле - удаляйте по тикетам.
Кроме того, у вас с фигурными скобками неразбериха, работаете с ордерами за границами блока OrderSelect{}, это неправильно.