void CheckForClose(int Magic) { for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!=Magic || OrderSymbol()!=Curr_symb) continue; //---- check order type if(OrderType()==OP_BUY) { if(x3<x2) OrderClose(OrderTicket(),OrderLots(),Bid,3); break; } if(OrderType()==OP_SELL) { if(x3>x2) OrderClose(OrderTicket(),OrderLots(),Ask,3); break; } } //---- }
наверно так
почитайте хэлп по функции OrderClose
https://www.mql5.com/ru/forum/105913 (закрытие позиций по сигналу индюка))
Там есть пример со стохастиком:
//********* Закрытие позиций **************************************** if (AutoClose) { //если выключатель включен //----переменные для закрытия позиций ---- double Stochast_0 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,0); double Stochast_1 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,1); //---------------------------------------------------------------------- for (int v=0; v<OrdersTotal(); v++) {//перебираем ордера if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) {//выбираем из открытых if (OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNum){//по заданному магику //----------------------------------------------------- if (OrderType() == OP_BUY) { if(Stochast_1>75 && Stochast_0<75) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем бай-позицию return(0); // выходим } } //-------------------------------------------------------- if (OrderType() == OP_SELL) { if(Stochast_1<25 && Stochast_0>25) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);//закрываем сел-позицию return(0); // выходим } } //------------------------------------------------------- } // Symbol() } // select } //total } //AutoClose
А вот как это кусок сделать чтобы работал неполучается
if(x3<x2)
{
OrderClose(total,Lots,Bid,2);
return(0);
}
double x1=iMA(NULL,0,MovingPeriod_1,MovingShift,MODE_SMA,PRICE_CLOSE,0); double x2=iMA(NULL,0,MovingPeriod_2,MovingShift,MODE_SMA,PRICE_CLOSE,0); //-
а потом - пойдет "ваш кусок"...
Не забудьте во внешних параметрах задать:
extern int MovingPeriod_1 = 14;//период быстрой ма
extern int MovingPeriod_2= 21;//период медленной ма
Ну кто-нибудь помогите плиз
https://book.mql4.com/ru/trading/orderclose
2 IgorM
void CheckForClose(int Magic) { for(int i=0;i<OrdersTotal();i++) { //- Это неверно для цикла с удалением ордеров - сотни раз обсуждалось if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!=Magic || OrderSymbol()!=Curr_symb) continue; //---- check order type if(OrderType()==OP_BUY) { if(x3<x2) OrderClose(OrderTicket(),OrderLots(),Bid,3); break; } if(OrderType()==OP_SELL) { if(x3>x2) OrderClose(OrderTicket(),OrderLots(),Ask,3); break; } } //---- }
https://book.mql4.com/ru/trading/orderclose
2 IgorM
спс, я посмотрю, просто эту функцию себе оставил из программы для автоматического написания советников Forex EA Generator
если не сложно исправьте эту ф-цию плз
спс, я посмотрю, просто эту функцию себе оставил из программы для автоматического написания советников Forex EA Generator
если не сложно исправьте эту ф-цию плз
void CheckForClose(int Magic) { for(int i=OrdersTotal()-1;i>=0;i--) { //- при переборе в другую сторону после удаления ордера меняется нумерация и ордера могут быть пропущены if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!=Magic || OrderSymbol()!=Curr_symb) continue; //---- check order type if(OrderType()==OP_BUY) { if(x3<x2) OrderClose(OrderTicket(),OrderLots(),Bid,3); break; } if(OrderType()==OP_SELL) { if(x3>x2) OrderClose(OrderTicket(),OrderLots(),Ask,3); break; } } //---- }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Помогите пожалуйста закрыть открытые ордера по условию индикаторов, а именно интересует случай когда одна MA больше другой вот кусок из программы который работает только на покупку но закрывает она только по SL или TP а надо чтобы закрывала при пересечении одной MA другой
if (x3>x2 && x2>x1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,"-",0,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("открыта позиция BUY : ",OrderOpenPrice());
}
else Print("Ошибка при открытии BUY позиции : ",GetLastError());
return(0);
}
А вот как это кусок сделать чтобы работал неполучается
if(x3<x2)
{
OrderClose(total,Lots,Bid,2);
return(0);
}