[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 97

 
MaxZ:

Deve estar me faltando algo:



NewOrder foi tratado com agradecimento, agora a etapa funciona
 
SeALALex:

Eu implementei o NewOrder, obrigado, agora o pedido funciona.

Tenha cuidado com este código. Foi escrito na mosca e não foi testado! :)))

E eu só escrevi uma maneira de resolver seu problema.


A propósito, você deu o seguinte código antes:

Болк открытия на бай
if(Buy==true) 
  {Buy=false;

   ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask, Digits),5,SL,TP,Order,070177,0,Orange);
   if(ticket>0)
    { 
     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
      {Print("BUY order opened : ",OrderOpenPrice());
       Alert("Buy Order for ",Symbol());
       SendMail("Buy Order "+Symbol()+" "+Ask,SL);     
       }
     }
     else Print("Error opening BUY order : ",GetLastError()); 
     return(0); 
   }

E se houver um reembolso, por exemplo? Então a ordem de compra não será aberta, enquanto o sinal pode estar correto. E em algumas horas você verá que o preço subiu muito, mas a ordem de compra não abriu por causa do reembolso...

 
MaxZ:

Tenha cuidado com este código. Foi escrito na mosca e não foi testado! :)))

E eu só escrevi uma maneira de resolver seu problema.


A propósito, você citou o seguinte código anteriormente:

E se houver um reembolso, por exemplo? Então a ordem de compra não será aberta, enquanto o sinal pode estar correto. E você verá que o preço subiu muito em algumas horas, mas a ordem de compra não abriu devido à solicitação...


E como você faz o seguro contra isso?

 
SeALALex:


e como você se protege contra isso?

A maneira mais básica é reescrever o código de forma diferente:

Болк открытия на бай
if(Buy==true) 
  {ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask, Digits),5,SL,TP,Order,070177,0,Orange);
   if(ticket>0)
    { 
     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
      {Buy=false;
       Print("BUY order opened : ",OrderOpenPrice());
       Alert("Buy Order for ",Symbol());
       SendMail("Buy Order "+Symbol()+" "+Ask,SL);     
       }
     }
     else Print("Error opening BUY order : ",GetLastError()); 
     return(0); 
   }

Enquanto o pedido não abrir, o sinal para abrir uma posição longa de compra ficará pendurado no estado Verdadeiro.

 
MaxZ:

A maneira mais elementar é reescrever o código de forma diferente:

Até que o pedido seja aberto, o sinal para abrir uma posição longa de compra ficará pendurado em um estado Verdadeiro.


Muito obrigado! E muito obrigado ao Roman!

Preciso aumentar o lote em uma série de ordens de compra em aberto sem margem (porque a margem às vezes nos afeta de tal forma que reduz o lote, e eu não preciso dela), preciso de um aumento rigoroso de um certo tamanho em uma série de ordens. Isto é, se houver uma tendência de acordo com um critério um sinal de compra, então de acordo com o segundo critério um sinal de compra adicional aparece e uma ordem é aberta; após o primeiro critério ainda é um sinal de compra e de acordo com o segundo, após uma pequena correção aparece um sinal de compra adicional e uma outra ordem é aberta, mas com uma ordem maior (o tamanho é definido nos parâmetros iniciais); após todas as ordens de compra serem fechadas aparece um sinal de venda e então tudo começa novamente com o tamanho inicial do lote.

Por favor, que peça de código deve ser mostrada?

 
SeALALex:


Muito obrigado! E muito obrigado ao Roman!

Mas ainda não consigo aumentar muito em um determinado passo, preciso aumentar muito em uma série de pedidos de compra em aberto sem margem (porque a margem às vezes diminui muito, e eu não preciso dela), preciso aumentar estritamente em um determinado tamanho em uma série de pedidos.

Se você não estiver usando margem nos cálculos de lotes e operar somente com parâmetros constantes especificados, por exemplo, em variáveis externas, os lotes aumentarão de forma correspondente somente com valores constantes. O princípio, pelo qual o código pode ser escrito, dei acima.

SeALALALex:


Ou seja, se houver uma tendência de acordo com um critério um sinal de compra, então de acordo com o segundo critério aparece um sinal de compra adicional - uma ordem é aberta, então de acordo com o primeiro critério o sinal de compra ainda permanece e de acordo com o segundo, após uma pequena correção o sinal de compra aparece novamente e mais uma ordem é aberta, mas com um tamanho maior (o tamanho é definido nos parâmetros iniciais) e após todas as ordens de compra são fechadas aparece um sinal de venda e então tudo começa novamente com o tamanho inicial do lote.

Por favor, que peça de código você precisa mostrar?

Você tem variáveis Lots, LotsInitial e LotsStep. Quando a tendência muda, você zera Lots e atribui um valor inicial a LotsInitial. Se a tendência ainda estiver ocorrendo e um sinal já tiver sido enviado para abrir um novo pedido, você aumenta a variável Lots com a etapa LotsStep e abre um pedido.

Você parece entender toda a lógica, mas de alguma forma não pode transformá-la em se declarações. Ora, eu não sei.

Talvez isto possa ajudar:

extern LotsInitial = 0.5;
extern LotsStep    = 0.1;
       Lots;

int start()
{
   ...

   if ((Тренд окончен) && (Все ордера закрыты) && (Пришёл сигнал о возможном начале нового тренда))
      Lots = LotsInitial;
 
   if ((Тренд подтверждён) && (Коррекция) && (Пришёл ещё сигнал открыться по тренду))
      Lots += LotsStep;
  
   ...
}
 
MaxZ:

Se você não vai usar margem nos cálculos de lotes e operar somente com parâmetros constantes, definidos por exemplo em variáveis externas, os lotes serão aumentados em conformidade somente por valores constantes. O princípio, de acordo com o qual o código pode ser escrito, eu dei acima.

Você tem as variáveis Lots e LotsStep. Quando a tendência muda, você zera os lotes e atribui um valor inicial. Se a tendência ainda estiver em tendência e um sinal já estiver aberto, você aumenta a variável Lots em incrementos de LotsStep e abre uma nova ordem.

Você vê que entende toda a lógica, mas por alguma razão não pode transformá-la em declarações... Ora, eu não sei.


Posso colocar parte do código como um arquivo responsável pela abertura como um arquivo e você olha... Eu fiz, mas parece que há algo errado com o código que coloquei, ele abre mais um passo, mas não é bem assim.
Arquivos anexados:
 
SeALALex:

Posso colar uma parte do código responsável pela abertura como um arquivo e você olha para ele... colado, mas parece que há algo errado com o código, uma vez que eu o afixei abre mais um passo, mas com um tiro no escuro.

Você teria consertado todos os erros primeiro. Por que você acrescentaria algo à sua EA se ela não funciona sem ela? Embora, este código não se pareça com um EA totalmente funcional. Você deve ter cortado partes dele e agora você quer que eu corrija os erros. :)))

Por exemplo, o init() não está fechado... E variável obscura: LastOrder...

Por favor, corrija estes erros.

 
MaxZ:

É melhor consertar todos os erros primeiro. Por que você acrescentaria algo ao Expert Advisor se ele não funcionaria sem ele? O código não parece ter a funcionalidade completa do Expert Advisor. Você deve ter cortado partes dele e agora você quer que eu corrija os erros. :)))

Por exemplo, o init() não está fechado... E variável obscura: LastOrder...

Por favor, corrija os erros.


Sim, eu o montei como um conjunto de construção parece funcionar, agora tento mais ou menos trazer de uma forma normal e vou apresentar
 
splxgf:


Não se trata de ND. ponto é o tamanho do ponto, multiplicá-lo por zero cinco seria, por exemplo, 0,00005, não vejo sentido em comparar este número com OrderClosePrice()-OrderTakeProfit(). A TP não garante exatamente o mesmo preço de fechamento. Além disso, as condições de verificação serão diferentes para Bais e Selves.

Este projeto é mais confiável.



Obrigado!! pela leitura. Além disso, haverá condições de teste diferentes para a bai e para os eus - Uma verdade incrível!!!