Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 672 1...665666667668669670671672673674675676677678679...1599 Новый комментарий Vladislav Andruschenko 2016.11.15 18:34 #6711 RichLux: пишу советник, который работает по мартингейлу.Как заставить его закрывать все открытые им ордера при достижении максимально допустимого убытка в пунктах на одной валютной паре? 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); } функция возвращает профит в октрытых позах, можно фильтровать по символу, типу, магику Далее закрываете все позиции void CPD(string order_symbol="",int order_type=-1,int order_magic=-1) { 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); } } } } } код закрытия сделки Как закрыть первый ордер Помощь в кодировании RichLux 2016.11.15 20:18 #6712 Vladislav Andruschenko: ...функция возвращает профит в октрытых позах, можно фильтровать по символу, типу, магику Далее закрываете все позиции Спасибо, но меня интересует закрытие по убытку. Как это можно реализовать? Vladislav Andruschenko 2016.11.15 20:31 #6713 ну в смысле я же Вам выше все дал, соответственно профит это понятие общее-20 это -20 if(GetProfitinCurrency(Symbol(),-1,-1)<-20)CPD(Symbol(),-1,-1); RichLux 2016.11.15 20:59 #6714 Vladislav Andruschenko: 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) ЭТО можно читать примерно как "и ордер на продажу или покупку"? Vladislav Andruschenko 2016.11.15 21:01 #6715 RichLux: да order_type = OP_BUY OP_SELL -1 RichLux 2016.11.15 21:53 #6716 компилятор еще ругается на ClosePosBySelect.Эту функцию отдельно надо прописать? Vladimir Karputov 2016.11.16 13:16 #6717 Комментарии, не относящиеся к этой теме, были перенесены в "Вывел на график текущее время". Vladimir Karputov 2016.11.16 13:20 #6718 Vladislav AndruschenkoRichLux:компилятор еще ругается на ClosePosBySelect.Эту функцию отдельно надо прописать? void CPD(string order_symbol="",int order_type=-1,int order_magic=-1) { 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); } } } } } greeng2016 2016.11.16 19:00 #6719 Здравствуйте. Какой код добавить , чтобы появление алерта любого индикатора определялось в советнике ?как определить появление алерта через iCustom ? Может быть вы знаете уже существующие индикаторы\советники для этого ? Vitaly Muzichenko 2016.11.16 21:46 #6720 RichLux: пишу советник, который работает по мартингейлу.Как заставить его закрывать все открытые им ордера при достижении максимально допустимого убытка в пунктах на одной валютной паре? Если нужно действительно в пунктах, а не в деньгах, то вот функция, применять так-же, как и прошлую//===============================================================================================//------------------ Возвращает суммарный профит открытых позиций в пунктах --------------------+//===============================================================================================double GetProfitOpenPosInPoint(string symb="0", int type=-1, int mg=-1) { double p=0, prb=0, prs=0, pr=0; if(symb=="0") { symb=Symbol();} for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if((OrderSymbol()==symb||symb=="")&&(type<0||OrderType()==type)&&(mg<0||OrderMagicNumber()==mg)) { p=MarketInfo(OrderSymbol(), MODE_POINT)*Sign; if(OrderType()==OP_BUY) { prb+=((MarketInfo(OrderSymbol(), MODE_BID)-OrderOpenPrice())/p); } if(OrderType()==OP_SELL) { prs+=((OrderOpenPrice()-MarketInfo(OrderSymbol(), MODE_ASK))/p); } pr=prb+prs; } }} return(pr); } Советники: ilan_reg_18 Любые вопросы новичков по Спрашивайте! 1...665666667668669670671672673674675676677678679...1599 Новый комментарий
пишу советник, который работает по мартингейлу.
Как заставить его закрывать все открытые им ордера при достижении максимально допустимого убытка в пунктах на одной валютной паре?
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);
}
}
}
}
}
как определить появление алерта через iCustom ?
Может быть вы знаете уже существующие индикаторы\советники для этого ?
пишу советник, который работает по мартингейлу.
Как заставить его закрывать все открытые им ордера при достижении максимально допустимого убытка в пунктах на одной валютной паре?
Если нужно действительно в пунктах, а не в деньгах, то вот функция, применять так-же, как и прошлую
//------------------ Возвращает суммарный профит открытых позиций в пунктах --------------------+
//===============================================================================================
double GetProfitOpenPosInPoint(string symb="0", int type=-1, int mg=-1) {
double p=0, prb=0, prs=0, pr=0;
if(symb=="0") { symb=Symbol();}
for(int i=0; i<OrdersTotal(); i++) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if((OrderSymbol()==symb||symb=="")&&(type<0||OrderType()==type)&&(mg<0||OrderMagicNumber()==mg)) {
p=MarketInfo(OrderSymbol(), MODE_POINT)*Sign;
if(OrderType()==OP_BUY) {
prb+=((MarketInfo(OrderSymbol(), MODE_BID)-OrderOpenPrice())/p);
}
if(OrderType()==OP_SELL) {
prs+=((OrderOpenPrice()-MarketInfo(OrderSymbol(), MODE_ASK))/p);
}
pr=prb+prs;
}
}}
return(pr);
}