Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 424

 
novichok2018:

Sim, obrigado, eu li a página. Somente meu conhecimento em MKL4 foi suficiente para perceber que em meu loop as posições vão de zero a último, enquanto no exemplo vice versa, de último a zero.Eu ainda não sei onde inseriro intervalo. Quando mudei o laço para inverter, as posições pararam de fechar.

Ao fechar posições, o laço deve ser invertido para evitar saltar posições. O operador de quebra não é necessário neste loop - é a quebra do loop e a saída de seu corpo. O que você precisa é continuar - a transição para a próxima iteração de loop.

E só você sabe porque não está fechando e o que você fez por isso.

 
Artyom Trishkin:

Ao fechar posições, o laço deve ser invertido para que nenhuma posição seja pulada. Você não precisa de operador de quebra neste loop - é uma interrupção e saída do corpo do loop. O que você precisa é continuar - a transição para a próxima iteração de loop.

Só você sabe porque não pode fechar, e o que você fez por isso.


Eu segui exatamente as instruções. Aqui está o código corrigido:

void ClosePoz()
  { int total=OrdersTotal();
  if(total>0)
   {
      for(int i=OrdersTotal()-1;i>=0;i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {double WPR0 = iWPR(NULL,PERIOD_M5,bars,0);
         if(OrderType()==OP_BUY && MathAbs(WPR0)>80)
           OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,clrNONE);                  
         }
         continue;
      }
    } 
  } 
  

Agora fecha as duas posições mas não fecha uma, mas espera pela segunda. É uma loucura. Pensei talvez ter inserido a funçãoClosePoz() em um lugar errado.O resultado é zero. Eu estou clamando por ajuda. Não pode ser que ninguém seja capaz de resolver o problema.

 

como sacar a conta original ($100)?

 
novichok2018:

Fez exatamente como instruído. Aqui está o código corrigido:

Agora fecha as duas posições, mas não fecha uma, espera pela outra. Isto é uma loucura. Pensei talvez ter inserido a funçãoClosePoz() em um lugar errado.O resultado é zero. Eu estou clamando por ajuda. Não pode ser que ninguém seja capaz de resolver o problema.

Eu não sei. Eu o desenhei no meu joelho. É claro que não posso verificar - suas condições não são suficientes, então você mesmo o faz.

//+------------------------------------------------------------------+
void ClosePoz(const string symbol_name,const int magic_number,const double wpr_buy,const double wpr_sell)
  { 
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
        {
         ENUM_ORDER_TYPE type=OrderType();
         if(type>ORDER_TYPE_SELL)               continue;
         if(OrderMagicNumber()!=magic_number)   continue;
         if(OrderSymbol()!=symbol_name)         continue;
         int digits=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
         if(type==ORDER_TYPE_BUY)
           {
            double close_price=SymbolInfoDouble(OrderSymbol(),SYMBOL_BID);
            if(iWPR(NULL,PERIOD_M5,bars,0))>wpr_buy)
              {
               ResetLastError();
               if(!OrderClose(OrderTicket(),OrderLots(),close_price,slippage,clrNONE);
                  Print(__FUNCTION__" > Позиция Buy #",OrderTicket()," не закрыта. Ошибка: ",GetLastError());
              }
           }                
         else
           {
            double close_price=SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK);
            if(iWPR(NULL,PERIOD_M5,bars,0))<wpr_sell)
              {
               ResetLastError();
               if(!OrderClose(OrderTicket(),OrderLots(),close_price,slippage,clrNONE);
                  Print(__FUNCTION__" > Позиция Sell #",OrderTicket()," не закрыта. Ошибка: ",GetLastError());
              }
           }                
        }
     }
  } 
//+------------------------------------------------------------------+
E o WPR dentro da função para verificar - de alguma forma não é normal. WPR deve ser uma das condições de chamada de função de fechamento
 
Não é possível modificar o número de lotes em uma ordem pendente.
 
igrok333:
Entendo que você não pode modificar o número de lotes em uma ordem pendente.

Abra apenas um adicional, com o volume que você precisa.

 
Alekseu Fedotov:

Abra apenas um adicional com o volume que você deseja

Pode ser mais fácil apagar um existente e criar um novo. Afinal, o volume necessário não precisa ser maior do que o já colocado. E é mais fácil seguir uma ordem.

 

Bom dia eu tenho uma pergunta, vou explicar como eu a entendo

Existe um algoritmo escrito para Expert Advisors que compra velas na parte inferior e vende velas na parte superior?

como adaptá-lo a uma EA ?
 
iisvlg: Existe um algoritmo escrito para EAs que coloca uma vela de compra na parte inferior e uma vela de venda na parte superior e como adaptá-la a uma EA?

Isso seria ótimo!!!

 
iisvlg:

Bom dia eu tenho uma pergunta, vou explicar como eu a entendo

Existe um algoritmo escrito para Expert Advisors que compra velas na parte inferior e vende velas na parte superior?

E como adaptá-lo a uma EA ?

Colocar LIMITE DE COMPRA em Baixo, e LIMITE DE VENDA em Alto.

Sobre os algoritmos, cavar a base