double balance=AccountBalance(); for(int i=OrdersTotal()-1; i>=0; i--) if((AccountEquity()/balance-1)*100>percents) if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderType()==OP_BUY) OrderClose (OrderTicket(),OrderLots(),"EURUSD",bid,0); else if(OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),"USDCAD",ask,0); }
//+------------------------------------------------------------------+ //|Трал по эквити | //+------------------------------------------------------------------+ void EcvitiTral(){int i, n ,x;double Gpr=0; if(OrdersTotal()<1){gEqviti=AccountBalance();return;} for(i=0;i<OrdersTotal();i++){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ Gpr=Gpr+OrderProfit()+OrderSwap()+OrderCommission(); } } if((AccountBalance()+Gpr)-EqvTralStep>gEqviti){gEqviti=gEqviti+EqvTralStep;} else{if(gEqviti>AccountBalance()&&gEqviti>StartDepo){ CloseAll();if(OrdersTotal()<1){gEqviti=AccountBalance();return;}}} return; }
Люди, вы чего это тут понаписывали? Что за наименование инструмента в функции OrderClose?
Согласно справке, третьим параметром идет ЦЕНА ЗАКРЫТИЯ, а не символ:
bool OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE)
Поэтому закрытие надо делать так:
if((AccountEquity()/balance-1)*100>percents) for(int i = 0; i < OrdersTotal(); i++) if(OrderSelect(i , SELECT_BY_POS)) if(OrderMagicNumber() == MagicNumber && (OrderSymbol() == "EURUSD" || OrderSymbol() == "USDCAD")) { RefreshRates(); if(OrderType() == OP_BUY) double Price = Bid; else if(OrderType() == OP_SELL) Price = Ask; if(OrderClose(OrderTicket(), OrderLots(), Price, 10) i--; }
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Подскажите пожалуйста кто знает как закрыть одновременно 2 ордера (разнонаправленных), открытых по разным инструментам, при достижении суммарного профита по ним в размере 1% от депо?
вот как я себе это напредставлял,
double balance=AccountBalance();
for (int i=OrdersTotal()-1; i>=0; i--)
if ((AccountEquity()/balance-1)*100>percents)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
OrderClose (OrderTicket(),Lot_C,"EURUSD",bid,0);
OrderClose (OrderTicket(),Lot_F,"USDCAD",ask,0);
}
но в этом случае закрытие происходит частично. Остается часть позиции которая изначально была открыта большим лотом (что то типа close by получается)