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

 
yaaarik777:

Boa noite!

Por favor, ajude-me a escrever o código, eu não sinto que possa fazê-lo eu mesmo, eis a essência:


A linha de fundo é a seguinte: aqui neste fio para ajudar o sofrimento e a busca.
Se você precisa fazer isso por você - isto é um freelance. E para ajudá-lo a dizer o que você quer obter, mostrar o que você fez e descrever o que falhou.
 
Maxim Kuznetsov:
A questão é esta: aqui neste fio para ajudar o sofrimento e a busca.
Se você precisa fazer isso por você - isso está no freelance. E para obter ajuda, você precisa dizer o que quer obter, mostrar o que está fazendo e descrever o que falhou.


A questão é que não entendo como fazer a EA analisar apenas as ordens de um par em particular, ao invés das ordens de todos os pares no terminal.

Se você puder, por favor, me dê uma idéia ou exemplo de código, pois os livros didáticos descrevem separadamente o que funciona e como funciona, mas não há muitos exemplos concretos.

Ficaria grato por sua ajuda.

Obrigado.

 
Olá.
Faz muito tempo que não pego em correntes de ar, e quando peguei, acabou

Eu não sei como jogar.
Estou pedindo ajuda.
Há uma boa EA à moda antiga que usa o indicador ZigZag da Rosh
E funciona bem como um relógio suíço.
Anexou o código para não baixar o assessor especializado dado no final do texto.

A idéia da EA era que as ordens fossem abertas e fechadas no momento de

coincidência de diferentes ZigZags.
Agora eu preciso substituir o indicador Rosh por outro

também uma das primeiras versões do ZigZag, da época do MT3.
Mas este indicador tem um algoritmo diferente de desenho ZigZag.

Seu nome é High_Low v2 (ZigZag), (no anexo de porque o nome brilhou)

Pelo método de intuição, que às vezes funcionava, eu simplesmente mudei as condições
duplo zz1 = iCustom( NULL, 60, "ZigZag_Rosh",12, 5, 3, 0, 0, 0);
duplo zz2 = iCustom( NULL, 60, "ZigZag_Rosh",48, 20, 12, 0, 0, 0);
em
duplo zz1 = iCustom( NULL, 0, "High_Low v2 (ZigZag)",300, 6, 0, 0, 0);

duplo zz2 = iCustom( NULL, 0, "High_Low v2 (ZigZag)",300, 6, 0, 0, 0);

Isto é, eu substituí o nome de um indicador personalizado e seu

No caso dos fractais, por exemplo, funcionou para mim.

.
Os parâmetros são os mesmos, pois dois Zigzags não precisam ser os mesmos.

Eu não precisei da coincidência de dois Zigzags, preciso apenas do fato de sua variação.
Eu substituí o número 60 por 0 para trabalhar em todas as TFs.

Após a substituição, a EA compilou sem erros, mas se recusa fortemente a trabalhar quando anexada a

Além disso, ela se recusa a trabalhar no Testador de Estratégia.

não quer trabalhar.

A pergunta é: O que está errado?
E outra pergunta, qual é a maneira correta de fazer isso?
Obrigado, desculpe pelo grande texto.


//+------------------------------------------------------------------+
//| ZZ.mq4 |
//| Copyright © 2011, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#direitos autorais "Copyright © 2011, MetaQuotes Software Corp.
#link da propriedade "http://www.metaquotes.net"

#incluir <stdlib.mqh>

#define MAGIC 20110220

duplo TakeProfit externo = 50;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização de especialistas |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| Calcular posições abertas |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(símbolo de corda)
{
int pos=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==falso) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL) pos++;
}
}
//---- volume de pedidos de devolução
if(pos>0) return(pos)
}
//+------------------------------------------------------------------+
//| Verifique as condições de pedidos em aberto |
//+------------------------------------------------------------------+
CheckForOpen()
{
int res;

//---- get ZZ
duplo zz1 = iCustom( NULL, 60, "ZigZag_Rosh",12, 5, 3, 0, 0, 0);
duplo zz2 = iCustom( NULL, 60, "ZigZag_Rosh",48, 20, 12, 0, 0, 0);
//---- condições de compra
if(CompareDubles(zz1,Low[0]) && CompareDoubles(zz2,Low[0])
{

res=OrderSend(Symbol(),OP_BUY,1,Ask,3,0,Ask+TakeProfit*Point,"",MAGIC,0,Bl

ue);
retornar;
}
//---- condições de venda
if(CompareDubles(zz1,High[0]) && CompareDoubles(zz2,High[0])
{

res=OrderSend(Symbol(),OP_SELLL,1,Bid,3,0,Bid-TakeProfit*Point,",MAGIC,0,Re

d);
retornar;
}

//----
}
//+------------------------------------------------------------------+
//| Verifique as condições de fechamento do pedido |
//+------------------------------------------------------------------+
verificação nula CheckForClose()
{
//---- get ZZ
duplo zz1 = iCustom( NULL, 60, "ZigZag_Rosh",12, 5, 3, 0, 0, 0);
duplo zz2 = iCustom( NULL, 60, "ZigZag_Rosh",48, 20, 12, 0, 0, 0);
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==falso) break;
if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continua;
//---- check order type
if(OrderType()==OP_BUY)
{
if(CompareDubles(zz1,High[0]) && CompareDoubles(zz2,High[0])

OrderClose(OrderTicket(),OrderLots(),Bid,3;)
pausa;
}
if(OrderType()==OP_SELL)
{
if(CompareDubles(zz1,Low[0]) && CompareDoubles(zz2,Low[0])

OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
pausa;
}
}
//----
}
//+------------------------------------------------------------------+
//| Função Start |
//+------------------------------------------------------------------+
início nulo()
{
//---- verificação de histórico e comércio
if(Bars<100 || IsTradeAllowed()==falso) retorna;
//---- calcular pedidos em aberto pelo símbolo atual
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
senão CheckForClose();
//----
}
//+------------------------------------------------------------------+













MetaQuotes Software Corp.
MetaQuotes Software Corp.
  • www.metaquotes.net
Торговая платформа MetaTrader 5 - это бесплатный инструмент трейдера, позволяющий торговать на форексе и фондовых биржах.
Arquivos anexados:
 
yaaarik777:


A questão é que eu não entendo como fazer a EA contar apenas as ordens de um par em particular, e não o total de todos os pares no terminal.

Não entendo como fazer um EA calcular apenas ordens de um par em particular, e não a soma de todos os pares no terminal.

Serei muito grato pela ajuda.

Eu agradeceria muito.

sinta-se à vontade para olhar a CodeBase - cada EA tem um loop de pedidos :-)

Por exemplo https://www.mql5.com/ru/code/16588 (o primeiro que encontrei)

  for(int index = orders-1; index >= 0; index--)
      {
      if(OrderSelect(index,SELECT_BY_POS,MODE_HISTORY)==false)
         {
         Print("Error in history!");
         break;
         }
      if(OrderSymbol()==symbol && OrderMagicNumber()==MAGICMA)
         {
         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
            {
            if(OrderProfit()>0) break;
            if(OrderProfit()<0) losses++;
            }
         }
      }

a condição"if(OrderSymbol()==símbolo && OrderMagicNumber()==MAGICMA)" é exatamente o que seleciona pedidos por um símbolo específico e com um MAGIC específico

PS/ no código copiar-colar acima em caso de erro de OrderSelect não está correto, a maneira correta de fazer isso é continuar (caso a ordem não seja atendida, talvez haja um problema com algum mecanismo MetaTrader interno, mas a próxima ordem não será pulada)

Middle Moving Average
Middle Moving Average
  • votos: 6
  • 2016.10.18
  • Dmitriy Kudryashov
  • www.mql5.com
Вариант советника, основанного на среднем значении цены для расчета Moving Average.
 
Maxim Kuznetsov:

sinta-se à vontade para olhar a CodeBase - cada EA tem um loop de pedidos :-)

Por exemplo https://www.mql5.com/ru/code/16588 (o primeiro que encontrei)

Não está apenas no CodeBase, está em um dos dois tópicos do fórum, o importante é começar a procurar e haverá mais de uma centena deles em diferentes interpretações.
 
Obrigado, eu irei visitar
 

Olá pessoal!!! me ajudem a escrever uma função que devolva um sinal de compra ou venda. Ainda não sei como trabalhar com barras em MQL (embora eu não saiba muitas coisas!).

A condição é a seguinte: a barra-mãe é uma barra dentro da qual, ou seja, dentro da alta e da baixa é uma barra com o preço fechado (é importante!!! exatamente o preço fechado.) Uma vez que alguma barra fura a barra-mãe e fecha acima da alta ou abaixo da baixa, ela agora se torna a barra-mãe!

Se o preço fechado da barra-mãe for maior que o preço aberto, devolvemos o sinal para comprar.

Se o preço fechado da barra-mãe for inferior ao preço aberto, devolvemos o sinal para vender.

É muito importante definir o período de tempo na variável externa.

Mas aqui está o problema, pelo menos para mim, como o Expert Advisor pode encontrar a última barra mate na tabela? Sim, visualmente eu posso vê-la imediatamente! ....

Seria conveniente para mim especificar o índice da última barra MAT em uma variável externa e então a função começará a dançar a partir dela; ou outra variante para pegar uma barra com o índice, por exemplo, 50 e ir através do laço até zero.

Por favor, ajudem os órfãos!!!

 

Boa tarde!

Você pode me dar uma idéia? Precisamos de uma EA para não poder abrir um pedido se um pedido já tiver sido aberto a este preço. Como implementar o cheque?

 
Kot:

Boa tarde!

Você pode me dar uma idéia? Precisamos de uma EA para não poder abrir um pedido se um pedido já tiver sido aberto a este preço. Como implementar o cheque?

Esta é uma tarefa difícil. Por desespero, eu costumava atribuir uma ordem mágica ao_preço/_ponto desejado, dado o deslize.

É muito mais fácil em mql5: há uma posição com um preço que não corresponde ao preço solicitado e um pedido com o preço solicitado.

 
Kot:

Boa tarde!

Você pode me dar uma idéia? Precisamos de uma EA para não poder abrir um pedido se um pedido já tiver sido aberto a este preço. Como implementar o cheque?


Você escreve um loop de pedidos, no qual compara o preço de abertura de cada pedido com o valor do preço dado, e se houver uma correspondência, então a bandeira de um novo pedido não é hasteada.