[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 564

 
rigonich:

O erro 1 é gerado somente se todos os parâmetros passados para a funçãoOrderModify( ) forem iguais a todos os parâmetros da ordem modificável que você selecionou( por número de bilhete) ou a funçãoOrderSelect() para modificação.

1 (ERR_NO_RESULT) - se nenhum dos parâmetros foi alterado ou não há erro, mas o resultado é desconhecido, o mais provável é que a ordem não seja modificada por algum motivo...
 
abeiks:

Sim, concordo, programação não é o meu forte, é por isso que estou aprendendo e fazendo perguntas aqui. Tentei adicionar o fechamento das posições ao seu algoritmo, mas não funcionou (todas as posições de compra estavam fechando) então decidi abordar o problema do outro lado e ver a solução de fechar as duas últimas posições de compra em um bloco de fechamento pronto que me foi fornecido e oferecido.

Eu ficaria muito grato se você pudesse me mostrar como fechar as duas últimas posições de compra. Vou entender onde cometi um erro.

 int Slippage = 3;
int Close_buy_2pos()
{
    int ordercount = 0, OpenOrders = OrdersTotal();
    for (int cnt = OpenOrders - 1; cnt >= 0; cnt--)   // scan all orders and positions. ..
    {
        if (!OrderSelect (cnt, SELECT_BY_POS)) return (ordercount);
        if (OrderSymbol() != Symbol()) continue;
        if (OrderMagicNumber() != magic) continue;
        if (OrderType() != OP_BUY) continue;
        if (OrderClose (OrderTicket(), OrderLots(), Bid, Slippage)) ordercount++;
        else return (ordercount);
        if (ordercount == 2) break;
    } 
    Print ("::::::::::::::::::::::::: ordercount = ", ordercount);    
    return (ordercount);   
}

Em um caso geral, é assim. Se usarmos a variante "idiota" (é o que eu uso), então temos que iniciar um loop: primeiro, encontrar a última posição aberta COMPRAR, depois excluí-la do bilhete e repetir o loop quantas vezes forem necessárias.

P.S. Funções de escrita para COMPRA e VENDA separadamente - é uma idéia errada desde o início (IMHO).

E a função, nesse caso, não parecerá muito mais complicada:

int Slippage = 3;
int Close_LastPos (string fs_Symbol,
                   int fi_Magic,
                   int fi_Type = -1,   // тип закрываемых позиций
                   int fi_cnt = 1)     // количсетво закрываемых позиций
{
    int ordercount = 0, OpenOrders = OrdersTotal();
    double ld_PriceClose;
    for (int cnt = OpenOrders - 1; cnt >= 0; cnt--)   // scan all orders and positions. ..
    {
        if (!OrderSelect (cnt, SELECT_BY_POS)) return (ordercount);
        if (OrderSymbol() != fs_Symbol) continue;
        if (OrderMagicNumber() != fi_Magic) continue;
        if (OrderType() != fi_Type) if (fi_Type != -1) continue;
        if (OrderType() > 1) continue;
        if (OrderType() == OP_BUY) ld_PriceClose = NormalizeDouble (Bid, Digits);
        else ld_PriceClose = NormalizeDouble (Ask, Digits);
        if (OrderClose (OrderTicket(), OrderLots(), ld_PriceClose, Slippage)) ordercount++;
        else return (ordercount);
        if (ordercount == fi_cnt) break;
    } 
    Print ("::::::::::::::::::::::::: ordercount = ", ordercount);    
    return (ordercount);   
}
 
Ekburg:

1 (ERR_NO_RESULT) - se nenhum dos parâmetros foi alterado ou Não há erro mas o resultado é desconhecido, muito provavelmente apenas que a ordem não é modificada por algum motivo ...
ERR_NO_RESULT não é um ou outro, mas não há erro, mas o resultado é desconhecido. Nos casos em que este erro retorna é descrito acima. Se a função GetLastError() for chamada após a funçãoOrderModify(), ela retornará definitivamente o código de erro(ou seja, a razão pela qual a ordem não foi modificada) ou 0 (em caso de modificação bem sucedida).

 
TarasBY:

No caso geral, sim. Se usarmos a variante "idiota" (é a que eu uso), então temos que iniciar um loop: primeiro, encontrar a última posição aberta COMPRAR, depois excluí-la do bilhete e repetir o loop quantas vezes forem necessárias.

P.S. Funções de escrita para COMPRA e VENDA separadamente - é uma idéia errada desde o início (IMHO).

E a função, neste caso, não pareceria muito mais complicada:


Obrigado, vou dar uma olhada nisso.

 

Boa noite a todos, poderiam me dizer por que MetaTrader4 (o mais recente) não faz nenhuma atualização? Instalei-o ontem, mas a última data de atualização mostra 30 de novembro, e não há dinâmica em nenhum par de moedas, e quando compro qualquer moeda, o mercado está fechado. (Eu tenho uma conta Demo). Você pode me dizer como permitir a atualização ou o que eu tenho que fazer para acompanhar as mudanças de preços?

 
Lucifer982:

Boa noite a todos, poderiam por favor dizer ao verde e inexperiente por que MetaTrader4 (o mais recente) não faz nenhuma atualização? Instalei-o ontem, mas a última data de atualização mostra 30 de novembro, e não há dinâmica em nenhum par de moedas, e quando compro qualquer moeda, o mercado está fechado. (Eu tenho uma conta Demo). Você pode me dizer como permitir a atualização ou o que eu tenho que fazer para acompanhar as mudanças de preços?


O sistema começará a se atualizar dentro de algumas horas (dependendo de seu fuso horário). DoC tem um dia de folga aos sábados e domingos. Portanto, eles não têm nada com que se preocupar)))).

Ou a segunda opção: escrever uma reclamação para o Service Desk do Ministério da Fazenda.

 
T1000:


Ele se ligará dentro de algumas horas (dependendo de seu fuso horário). O balcão de atendimento tem um dia de folga no sábado, domingo, para que não tenham nenhum idiota))))

Ou a segunda opção: escrever uma reclamação para o Service Desk do Ministério da Fazenda.


Estou vendo, obrigado, vou esperar)
 

como obter o número total de pedidos abertos de um determinado par?

Tenho um gráfico aberto, a EA está trabalhando em 10 símbolos.

Decidi deixar os comentários no gráfico mostrar o número total de pedidos abertos para cada símbolo.

Como faço isso? Se OrderTotal mostra a quantidade total de

 
gheka:

_ de que forma?

Por exemplo, assim.

 
Quantas vezes você já me ajudou? Obrigado).
DmitriyN:

Por exemplo, assim.

Razão: