Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 672
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
пишу советник, который работает по мартингейлу.
Как заставить его закрывать все открытые им ордера при достижении максимально допустимого убытка в пунктах на одной валютной паре?
пишу советник, который работает по мартингейлу.
Как заставить его закрывать все открытые им ордера при достижении максимально допустимого убытка в пунктах на одной валютной паре?
double GetProfitinCurrency(string order_symbol="",int order_type=-1,int order_magic=-1)
{
double profit=0;
int i,k=OrdersTotal();
if(order_symbol=="0") order_symbol=Symbol();
for(i=0; i<k; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(order_magic<0 || OrderMagicNumber()==order_magic)
{
profit+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
}
return(profit);
}
функция возвращает профит в октрытых позах, можно фильтровать по символу, типу, магику
Далее закрываете все позиции
{
int i,k=OrdersTotal();
if(order_symbol=="0") order_symbol=Symbol();
for(i=k-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(order_magic<0 || OrderMagicNumber()==order_magic) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),1,CLR_GREEN);
}
}
}
}
}
...
функция возвращает профит в октрытых позах, можно фильтровать по символу, типу, магику
Далее закрываете все позиции
ну в смысле я же Вам выше все дал,
соответственно профит это понятие общее
-20 это -20
if(GetProfitinCurrency(Symbol(),-1,-1)<-20)CPD(Symbol(),-1,-1);
double GetProfitinCurrency(string order_symbol="",int order_type=-1,int order_magic=-1)
{
double profit=0;
int i,k=OrdersTotal();
if(order_symbol=="0") order_symbol=Symbol();
for(i=0; i<k; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(order_magic<0 || OrderMagicNumber()==order_magic)
{
profit+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
}
return(profit);
}
Спасибо теперь я понял.
В коде еще не ясен такой момент: (order_type<0 || OrderType()==order_type) ЭТО можно читать примерно как "и ордер на продажу или покупку"?
да order_type = OP_BUY OP_SELL -1
компилятор еще ругается на ClosePosBySelect.
Эту функцию отдельно надо прописать?
Vladislav Andruschenko
RichLux:
компилятор еще ругается на ClosePosBySelect.
Эту функцию отдельно надо прописать?
{
int i,k=OrdersTotal();
if(order_symbol=="0") order_symbol=Symbol();
for(i=k-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(order_magic<0 || OrderMagicNumber()==order_magic) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),1,CLR_GREEN);
}
}
}
}
}