Rustam Bikbulatov: Olá a todos. Por favor, me diga como mudar este código para(int i=OrdensTotal()-1;i>=0;i--){
No momento, está fechando as mais recentes abertas. Você quer que feche primeiro os primeiros!
for( int i = 0; i < OrdersTotal(); i++ ) { if( /*Функция закрытия. Если вернула истину*/ ) i--; }
Tente desta forma. Ao invés de comentários, você deve usar a função para fechar o pedido. Eu não verifiquei sua funcionalidade. E aqui, acho que teremos que chamar a função que calcula a quantidade de pedidos a cada vez, já que o número de pedidos diminuirá.
Rustam Bikbulatov: Olá a todos. Você pode me dizer como mudar este código para(int i=OrdensTotal()-1;i>=0;i--){
No momento, está fechando as mais recentes abertas. Quero que feche primeiro os primeiros!
//+------------------------------------------------------------------+ //| Закрыть все позиции начиная с первых | //+------------------------------------------------------------------+
double CloseOrders()
{ for(int i=0; i<OrdersTotal(); ) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderMagicNumber() != mn) break;
int type = OrderType();
bool result = false;
switch(type) { //Close opened long positions caseOP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage, CloseColor ); break;
//Close opened short positions caseOP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), Slippage, CloseColor ); break; }
A opção que tenho sugerido é geralmente incongruente para o fechamento.
Se você está falando em fechar do velho para o novo, então você está fechando a grade. Tendo alguma experiência com grades, tudo o que posso dizer com certeza é que você não deve escolher pela idade do cargo, mas por seu lote, e você deve fechar de um lote maior para um menor. Se a grade é de lote único, então não há diferença na ordem de fechamento. Use funções prontas para fechar, e não invente algo que já foi inventado)
A opção que tenho sugerido é geralmente incongruente para o fechamento.
Se você está falando em fechar do velho para o novo, então você está fechando a grade. Tendo alguma experiência com grades, tudo o que posso dizer com certeza é que você não deve escolher pela idade do cargo, mas por seu lote, e você deve fechar de um lote maior para um menor. Se a grade é de lote único, então não há diferença na ordem de fechamento. Use funções prontas para fechamento, e não invente algo que já foi inventado)
Cavalheiros desenvolvedores! Bom dia para todos. Estou interessado em uma pergunta sobre como criar um modelo de Expert Advisor (roteiro) ao criá-lo. Isso pode ser editado em algum lugar e como isso é feito?
Olá a todos. Você pode me dizer como mudar este código para(int i=OrdersTotal()-1;i>=0;i--){
Olá a todos. Por favor, me diga como mudar este código para(int i=OrdensTotal()-1;i>=0;i--){
{
if( /*Функция закрытия. Если вернула истину*/ )
i--;
}
Tente desta forma. Ao invés de comentários, você deve usar a função para fechar o pedido. Eu não verifiquei sua funcionalidade. E aqui, acho que teremos que chamar a função que calcula a quantidade de pedidos a cada vez, já que o número de pedidos diminuirá.
Você também pode tentar uma variante desse tipo:
/*Функция закрытия ордера*/
fecha de forma desajeitada)
não é correto, mas por enquanto (até certo ponto) funciona: no fechamento bem sucedido do i...
Olá a todos. Você pode me dizer como mudar este código para(int i=OrdensTotal()-1;i>=0;i--){
//| Закрыть все позиции начиная с первых |
//+------------------------------------------------------------------+
double CloseOrders()
{
for(int i=0; i<OrdersTotal(); )
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
break;
if (OrderMagicNumber() != mn)
break;
int type = OrderType();
bool result = false;
switch(type)
{
//Close opened long positions
case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage, CloseColor );
break;
//Close opened short positions
case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), Slippage, CloseColor );
break;
}
if(result == false)
{
Print("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
i++;
}
}
return (True);
}
// End
Fecha de maneira desajeitada)