[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 562

 
Ekburg:

Você pode me dizer o que poderia estar errado com este código? É uma parada móvel, mas quando testada, gera erro 1, quando modificada. Por que a ordem não é modificada?

Quando estava corrigindo este erro (até agora sem sucesso), ao compilar o código principal do Expert Advisor na função de impressão, ele começou a retornar um erro, dizendo que precisava de vírgulas invertidas, mas tudo está correto, e para corrigir este erro eu tenho que remover e colocar uma nova vírgula invertida...

bool trailingstop()
{
se ((OrderMagicNumber()==11111)==verdadeiro)
{
Imprimir("Manter posição de compra");
while(OrderCloseTime()==0)
{
if ((Bid-OrderStopLoss())>(StopLevel*Point))
{
if (OrderModify(OrderTicket(),OrderOpenPrice(),ND(Bid-StopLevel*Point),0,0))
Print("Stop Loss of the order with the number ",OrderTicket()," e o número mágico ",OrderMagicNumber()," mudado com sucesso para ",OrderStopLoss());
ou imprimir("O nível Stop Loss do pedido com o número ",OrderTicket()," e número mágico ",OrderMagicNumber(),". Erro ",GetLastError());
}
}
se (OrderCloseTime()>0)
{
Print("O pedido com o número ",OrderTicket()," e o número mágico ",OrderMagicNumber()," fechado ao preço ",OrderClosePrice()," com um lucro/perda ",OrderProfit())
retorno(true);
}
}
senão
{
se ((OrderMagicNumber()==22222)==verdadeiro)
{
Imprimir((Vender posição);
while(OrderCloseTime()==0)
{
if ((OrderStopLoss()-Ask)>(StopLevel*Point))
{
if (OrderModify(OrderTicket(),OrderOpenPrice(),ND(Ask+StopLevel*Point),0,0))
Print("Stop Loss of the order with the number ",OrderTicket()," e o número mágico ",OrderMagicNumber()," mudado com sucesso para ",OrderStopLoss());
ou imprimir("O nível Stop Loss do pedido com o número ",OrderTicket()," e número mágico ",OrderMagicNumber(),". Erro ",GetLastError());
}
}
se (OrderCloseTime()>0)
{
Print("O pedido com o número ",OrderTicket()," e o número mágico ",OrderMagicNumber()," fechado ao preço ",OrderClosePrice()," com um lucro/perda ",OrderProfit())
retorno(true);
}
}
caso contrário, retornar (falso);
}
}


Erro 1 não é um erro. isto significa que o pedido já foi modificado. inserir verificação para parâmetros de modificação antes de OrderModify() (se a parada do pedido não for igual a parada , (ND(Bid-StopLevel*Point)ou ND(Ask+StopLevel*Point)), entãoOrderModify(), caso contrário retornar).
 
rigonich:

O erro 1 não é um erro. Isto significa que a ordem já foi modificada. Insira a verificação dos parâmetros de modificação antes de OrderModify() (se a perda de parada da ordem não for igual à perda de parada, (ND(Bid-StopLevel*Point) ouND(Ask+StopLevel*Point)), entãoOrderModify(), caso contrário retorne).


Esta verificação está acima: se ((Bid-OrderStopLoss())>(StopLevel*Point)), ou eu o entendi mal

E o testei em um movimento brusco, mesmo visualmente, é claramente visível que a perda de parada da ordem e a expressão não são iguais.

 
Usual_Trader:


Num relance, o que eu vejo na função de fechamento de pedidos, você precisa selecionar o pedido pelo ticketOrderSelect(Ticket, SELECT_BY_TICKET), o número de lotes indica não a variável Lts, porque ela é recalculada toda vez, mas usa OrderLots() E outra coisa, você continua trabalhando na barra 0, respectivamente, o critério em uma barra pode desaparecer, seus pedidos podem não abrir onde você gostaria. Substituir a barra 0 por 1 e 1 por 2 nos parâmetros indicadores



Muito obrigado pela resposta), mas o critério não funciona como eu gostaria (nem todos os cruzamentos de estocásticos mostram pedidos ( ) e eu gostaria de abrir pedidos no bar 0, mas acho que preciso de uma condição adicional: depois de abrir um pedido no bar atual não tenho que fazer nada até o bar fechar, mas não tenho idéia de como fazer isso (pode estar usando matrizes de séries temporais????) Por favor, avise.
Arquivos anexados:
 
Ekburg:


Esta verificação está acima: se ((Bid-OrderStopLoss())>(StopLevel*Point)), ou eu o entendi mal.

Eu verifiquei em um movimento brusco onde você pode ver claramente que a perda da ordem e a expressão não são iguais.


O problema é o seguinte: como você não tem OrderSelect() nesta função, ela deve ser usada em algum lugar do laço com a busca de pedidos. Se este loop organiza a busca desde a ordem zero até a última, então após a modificação da primeira ordem, ou se alguma ordem já foi encontrada, quando OrderSelect() for chamada na próxima vez, a ordem de ordem muda e a função pode selecionar uma ordem que já tenha sido modificada. Portanto, devemos verificar se o valor da ordem StopLoss é igual ao que enviamos para a função OrderModify()

if(ND(Bid-StopLevel*Point)==OrderStopLoss())return(true);
 

abeiks:

Há algum tempo eu venho tentando refazer para fechar apenas as duas últimas posições de compra, mas isso falha. Você pode dizer a como refazer o bloco?

//+------------------------------------------------------------------+
//|                                                         0000.mq4 |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
void Close_2buy()
   {
   bool     result;
   int      Count=2,Ticket=-1,error;
   datetime time=0;
   while(Count>0)
      {
      for (int f=OrdersTotal()-1; f>=0; f--) // 
         {
         OrderSelect(f, SELECT_BY_POS);
         if (OrderSymbol()==Symbol() &&(OrderMagicNumber()==magic ) 
         && (OrderType() == OP_BUY )) 
            {
            if(OrderOpenTime()>time)
               {
               time=OrderOpenTime();Ticket=OrderTicket();
            }
         }
      }
      if(OrderSelect(Ticket,SELECT_BY_TICKET)==True);
         {
         result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),0,CLR_NONE);
         if(result!=TRUE){error=GetLastError();Print("LastError = ", error);}
      }
      else{error=GetLastError();Print("LastError = ", error);} 
      Ticket=-1;time=0;Count--;
   }
   return;
} 
 
ametist444:

Olá!

Você pode me dizer quais arquivos precisam ser baixados e onde instalá-los no mt4 para obter esta janela?

Não entendo como fazê-lo naSimulação em diferentes períodos de tempo do instrumento em teste

Quero ver apenas três gráficos diários, de quatro horas e de hora em hora

Quero ver três gráficos diários, de quatro horas e horários. Por favor, ajude-me, não consegui fazer isso a noite toda!



As janelas como (visual) abrem ao testar o EA em modo visual.


 
peshihod:

Que tipo de StopLoss?

Devo ter escrito mal :(

Temos um algoritmo para a abertura de pedidos.

Preciso dele para abrir a próxima ordem em outra direção (quando as condições aparecerem), se a última ordem foi fechada de alguma forma.

Todos os trabalhos, mas se eu tiver fechado por um stop loss, por exemplo, para vender, e as condições para abrir uma venda nessa direção, a abertura continua. O que precisamos é esperar por condições para comprar.

Ou seja, precisamos verificar o último pedido fechado, para que não coincida com o de abertura (alternância compra-venda-compra-venda). Apenas um pedido ou à espera de um sinal está em operação.

Entendo que provavelmente deveríamos usar o OrderHistoryTotal(), mas como seria em uma EA funcional?

Obrigado.

 
delf:

Há um algoritmo para a abertura de pedidos.

Precisamos de qualquer variante da última ordem para abrir a próxima em uma direção diferente (quando as condições aparecem).

Em outras palavras, precisamos verificar o último pedido fechado para que ele não coincida com o de abertura (alternância compra-venda-compra-venda). Há apenas uma ordem ou sinal esperando para ser aberto.

Esta alternância sempre ocorre em qualquer caso, e apenas uma ordem está sempre em operação?

Então é mais fácil acrescentar controle sobre o número de pedidos à condição:

if(OrdersTotal()==0)
{
	if(OldOrder==OrderBuy)
		{
		...
		}
	else
		{
		...
		}
}
 
rigonich:


O problema é o seguinte: como você não tem OrderSelect() nesta função, ela parece ser usada em algum lugar do laço com uma busca de pedidos. Se este loop organiza a busca desde a ordem zero até a última, então após a modificação da primeira ordem, ou se alguma ordem já foi enterrada neste tick, quandoOrderSelect() é chamada em seguida, a seqüência de ordem de ordem de ordem muda e a função pode selecionar uma ordem que já tenha sido modificada. Portanto, devemos verificar se o valor da ordem StopLoss é igual ao que enviamos para a função OrderModify()


Não, o problema de alterar o número de ordem de posição quando um deles é fechado foi resolvido, eu verifiquei mais de uma vez pensando que poderia haver um erro lá, mas tudo está OK lá, a ordem requerida é selecionada e o prejuízo é calculado corretamente para ela, mas a ordem não quer ser modificada...
 

delf:

A última ordem deve ser fechada em qualquer direção e a próxima ordem deve ser aberta na outra direção (quando as condições forem atendidas, respectivamente).

Opção mais estrita

#define OrderBuy  0
#define OrderSell 1
int NewOrder;
int RezultatSend; 

int start()
{
... 
... 

if(OrdersTotal()==0)
{
if(NewOrder==OrderBuy)
   {
   if(/*Условие для Buy*/)
      { RezultatSend=OrderSend(/*...buy*/);     //Ставим Buy
        if(RezultatSend!=-1)NewOrder=OrderSell; //Если ставка прошла
      }
   }
 else
   {
   if(/*Условие для Sell*/)
      { RezultatSend=OrderSend(/*...*/);       //Ставим Sell
        if(RezultatSend!=-1)NewOrder=OrderBuy; //Если ставка прошла
      }
   }
}

...
...

}  
Razão: