У меня это работает так:
bool CloseOrder1() { for(int i=OrdersTotal()-1; i>=0; i--) { if(!OrderSelect(i,SELECT_BY_POS)) { Print("Orders not found"); } if(OrderSymbol()!=Symbol()) continue; if(OrderMagicNumber()!=Magic1) continue; if(OrderType()==OP_BUY) { if(OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrAqua)) { PlaySound("CoinsDrop2.wav"); if(MartinOrder==true && OrderProfit()<0&&CheckVolumeValue(OrderLots()*2)==true&& TimeToStr(TimeCurrent(),TIME_MINUTES)>=StartTime && TimeToStr(TimeCurrent(),TIME_MINUTES)<StopTime) { if(NormalizeDouble(((OrderOpenPrice()-Bid)/2),Digits)>StopLevel) { if(OrderSend(NULL,OP_SELL,OrderLots()*2,Bid,Slippage,OrderOpenPrice(), (Bid-NormalizeDouble(((OrderOpenPrice()-Bid)/2),Digits)),"MartinOrderSell",Magic3,0,Red)) Print("MartinOrderSell"); } else { if(OrderSend(NULL,OP_SELL,OrderLots()*2,Bid,Slippage,Ask+StopLevel, Bid-StopLevel,"MartinOrderSell",Magic3,0,Red)) Print("MartinOrderSell"); } } } } } return (true); }
Здесь для Вас может быть много лишнего, можно переписать условия по своему...
Либо искать последний убыточный ордер и после этого открывать противоположный с нужными параметрами...
Так можно найти лот последнего убыточного ордера:
double FindLastLossOrder()//функция поиска лота последней убыточной сделки { double Lotest=0; datetime t=0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if(OrderMagicNumber()==Magic) { if(OrderCloseTime()>t) { if(OrderProfit()<0) { Lotest=OrderLots(); } t=OrderCloseTime(); } } } } return(Lotest); }

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Нужен код, чтобы после пойманного лося открывался ордер в противоположную сторону.
Пробовал писать
"если (аккаунтбаланс -= стоплосс)
открываем ордер на покупку/продажу"
но так не работает, я новичок
//
if(Ask > ima2 && ima > ima1 && Ask > superprofit && check == true && DisplayAlert == true && OrdersTotal() < 1)
{
ticket = OrderSend(Symbol(), OP_BUY, Lot, Ask, Slippage, 0, 0, "", Magic, 0, Green);
if(ticket > 0)
{
TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);
SL = NormalizeDouble(Ask - StopLoss*Point, Digits);
if(OrderSelect(ticket, SELECT_BY_TICKET))
if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Ошибка модификации ордера на покупку");
else Print("Ошибка открытия ордера на покупку");
//
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderType()<2
&& OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
if(t<OrderCloseTime()){t=OrderCloseTime();LastProfit+=OrderProfit();}}
}
if(LastProfit < 0)
{
ticket = OrderSend(Symbol(), OP_SELL, Lot, Bid, Slippage, 0, 0, "", Magic, 0, Red);
if(ticket > 0)
SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
if(OrderSelect(ticket, SELECT_BY_TICKET))
if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Ошибка модификации ордера на продажу");
else Print("Ошибка открытия ордера на продажу");
}
}
}
//
if(Bid < ima2 && ima < ima1 && Bid < superprofit1 && check1 == true && DisplayAlert == true && OrdersTotal() < 1)
{
ticket = OrderSend(Symbol(), OP_SELL, Lot, Bid, Slippage, 0, 0, "", Magic, 0, Red);
if(ticket > 0)
{
SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
if(OrderSelect(ticket, SELECT_BY_TICKET))
if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Ошибка модификации ордера на продажу");
else Print("Ошибка открытия ордера на продажу");
//
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderType()<2
&& OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
if(t<OrderCloseTime()){t=OrderCloseTime();LastProfit+=OrderProfit();}}
}
if(LastProfit < 0)
{
ticket = OrderSend(Symbol(), OP_BUY, Lot, Ask, Slippage, 0, 0, "", Magic, 0, Green);
if(ticket > 0)
TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);
SL = NormalizeDouble(Ask - StopLoss*Point, Digits);
if(OrderSelect(ticket, SELECT_BY_TICKET))
if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Ошибка модификации ордера на покупку");
else Print("Ошибка открытия ордера на покупку");
}
}
}
Пробовал так, но это не работает