[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 56
Eu entendo teoricamente, mas na prática não funciona, você pode olhar para o meu código e me dizer o que está errado
Entendo que esta é uma EA muito simples, mas estou apenas começando minha jornada)))) e já tenho um problema
// A essência do Expert Advisor é que primeiro ele abre o primeiro pedido de compra // então coloca paradas em duas direções // em um dos lados como continuação de uma ordem em aberto // no outro lado mais duas vezes em caso de inversão de gráfico // as paradas são feitas em relação ao último pedido aberto pelo conselheiro // com cada nova abertura de uma nova ordem pendente, todas as anteriores são eliminadas // e novas paradas pendentes já estão abertas em relação a uma nova ordem aberta.
Paradas podem ser entendidas como duas coisas - ordens de parada (Take Profit e Stop Loss) e ordens de parada (Bystop e Sell Stop). O que aqui se entende por "pára" provavelmente só é entendido por você. Por favor, seja preciso com os termos. O computador tem que receber instruções precisas. A descrição também deve ser tão precisa quanto possível
drknn: Paradas podem ser entendidas como duas coisas - ordens de parada (Take Profit e Stop Loss) e ordens de parada (Bystop e Sell Stop). O que aqui se entende por "pára" provavelmente só é entendido por você. Por favor, seja preciso com os termos. Você tem que dar instruções precisas ao computador. A descrição também deve ser tão precisa quanto possível
Sinto muito pela inexatidão, mas as ordens de parada são ordens de parada (Buy Stop and Sell Stop)
Esta função está escrita de forma incorreta. Os pedidos devem ser pesquisados do último para o primeiro na lista de pedidos. Seu método fará com que 1 ordem seja pulada porque depois de apagada, a lista de ordens será movida por suas posições. O laço deve ser organizado da seguinte forma:
for (int i=OrdersTotal()-1;i>=0;i--){
Além disso, se o pedido não for selecionado, você não precisa fazer uma brisa - não precisa sair do ciclo - você precisa descobrir o motivo pelo qual o pedido não é selecionado. Isso é o seguinte:
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
Print("При выборе ордера № ",i," произошла ошибка № ",GetLastError());
res=OrderDelete(OrderTicket()); - isto também não é correto o suficiente. A função OrderDelete() tem um tipo booleano. E além de dar uma ordem para apagar a ordem, também precisamos lidar com a situação se a ordem não puder ser apagada. Em outras palavras, é assim:
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()
{
//----if (CalculateCurrentOrders1(Symbol())==0)
OpenBuy();
if (CalculateCurrentOrders2(Symbol())<=1)
DeleteStopOrders();
if (CalculateCurrentOrders2(Symbol())<=1)
OpenStops();
//----return(0);
}
O código da função de início não está escrito corretamente.
Com a primeira função, você soma as ordens de compra e venda. Você precisa contar os pedidos de compra separadamente e os pedidos de venda separadamente. A questão é a seguinte. Se houver 1 ordem de compra no mercado, então a parada de compra deve ser definida com um lote maior. Certo? E se houver uma ordem de venda no mercado, então a parada de compra deve ser definida com um lote normal e a parada de venda com um lote maior. Então, como você detecta qual ordem está aberta no mercado se você soma as ordens de Compra e Venda em uma única função? Tente refazer o código à luz destes fatos.
O indicador é um indicador cruzado. Atrai muitas flechas para um lado, depois muitas para o outro. Como fazer apenas os primeiros a serem sorteados. Eu tentei da maneira descrita no código, mas as setas mudam quando eu troco de Quadro.
Por favor, informe como fazê-lo corretamente.
Eu teria que olhar para o indicador. Talvez haja uma solução
nemo811: Por favor, ajude-me a corrigir meu Consultor Especialista. Você precisa fazer com que funcione com pedidos (próprios e abertos pelo usuário) do par de moedas no gráfico do qual ele está instalado. Referimo-nos ao momento da fixação do lucro ou do prejuízo. Na versão atual, quando ocorre uma condição (captura de um depósito %), ele tenta fechar todas as posições (com MAGIC=0) para todos os pares de moedas e eu não preciso dele. É necessário delimitar completamente todos os pares de moedas. Meus agradecimentos de antemão.
A mesma coisa que você tem que fazer em quadros de mensagens diferentes - isto é spam, e você pode obter uma proibição.
(A classe é boa, mas ainda há um problema)))
Eu entendo teoricamente, mas na prática não funciona, você pode olhar para o meu código e me dizer o que está errado
Entendo que esta é uma EA muito simples, mas estou apenas começando minha jornada)))) e já tenho um problema
// A essência do Expert Advisor é que primeiro ele abre o primeiro pedido de compra
// então coloca paradas em duas direções
// em um dos lados como continuação de uma ordem em aberto
// no outro lado mais duas vezes em caso de inversão de gráfico
// as paradas são feitas em relação ao último pedido aberto pelo conselheiro
// com cada nova abertura de uma nova ordem pendente, todas as anteriores são eliminadas
// e novas paradas pendentes já estão abertas em relação a uma nova ordem aberta.
Paradas podem ser entendidas como duas coisas - ordens de parada (Take Profit e Stop Loss) e ordens de parada (Bystop e Sell Stop). O que aqui se entende por "pára" provavelmente só é entendido por você. Por favor, seja preciso com os termos. Você tem que dar instruções precisas ao computador. A descrição também deve ser tão precisa quanto possível
Sinto muito pela inexatidão, mas as ordens de parada são ordens de parada (Buy Stop and Sell Stop)
Peço desculpas pela imprecisão: quero dizer, ordens de parada (Buy Stop e Sell Stop).
Esta função está escrita de forma incorreta. Os pedidos devem ser pesquisados do último para o primeiro na lista de pedidos. Seu método fará com que 1 ordem seja pulada porque depois de apagada, a lista de ordens será movida por suas posições. O laço deve ser organizado da seguinte forma:
Além disso, se o pedido não for selecionado, você não precisa fazer uma brisa - não precisa sair do ciclo - você precisa descobrir o motivo pelo qual o pedido não é selecionado. Isso é o seguinte:
res=OrderDelete(OrderTicket()); - isto também não é correto o suficiente. A função OrderDelete() tem um tipo booleano. E além de dar uma ordem para apagar a ordem, também precisamos lidar com a situação se a ordem não puder ser apagada. Em outras palavras, é assim:
Mais tarde verei o resto.
O código da função de início não está escrito corretamente.
Com a primeira função, você soma as ordens de compra e venda. Você precisa contar os pedidos de compra separadamente e os pedidos de venda separadamente. A questão é a seguinte. Se houver 1 ordem de compra no mercado, então a parada de compra deve ser definida com um lote maior. Certo? E se houver uma ordem de venda no mercado, então a parada de compra deve ser definida com um lote normal e a parada de venda com um lote maior. Então, como você detecta qual ordem está aberta no mercado se você soma as ordens de Compra e Venda em uma única função? Tente refazer o código à luz destes fatos.
Você pode me dizer como fazer o download automático do histórico a partir do corretor? É um pouco inconveniente pressionar para casa por uma hora.
Você pode me dizer como fazer o download automático do histórico a partir do corretor? É um pouco inconveniente pressionar para casa por uma hora.
Pergunta sobre o indicador.
O indicador é um indicador cruzado. Atrai muitas flechas para um lado, depois muitas para o outro. Como fazer apenas os primeiros a serem sorteados. Eu tentei da maneira descrita no código, mas as setas mudam quando eu troco de Quadro.
Por favor, informe como fazê-lo corretamente.
Eu teria que olhar para o indicador. Talvez haja uma solução
Por favor, ajude-me a corrigir meu Consultor Especialista. Você precisa fazer com que funcione com pedidos (próprios e abertos pelo usuário) do par de moedas no gráfico do qual ele está instalado. Referimo-nos ao momento da fixação do lucro ou do prejuízo. Na versão atual, quando ocorre uma condição (captura de um depósito %), ele tenta fechar todas as posições (com MAGIC=0) para todos os pares de moedas e eu não preciso dele. É necessário delimitar completamente todos os pares de moedas. Meus agradecimentos de antemão.
A mesma coisa que você tem que fazer em quadros de mensagens diferentes - isto é spam, e você pode obter uma proibição.
E escrever a mesma coisa em linhas diferentes - é spam e pode obter uma proibição
Peço desculpas - como sempre quero fazer tudo de uma só vez))
Obrigado por sua atenção e compreensão ))
Foi capaz de resolver o problema sozinho:
Inseriu uma linha complicada se (OrderSymbol()!=SMB || OrderMagicNumber()!=MAGIC) continuar;
para um lugar igualmente complicado. Depois disso, tudo funcionou como pretendido.
Obrigado pela dica com o mágico. Eu não sou um programador, então às vezes e não penso em algo por falta de conhecimento.