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

 
É possível calcular a equidade mínima usando dados de ordem histórica?
 
forexnew:
É possível calcular o patrimônio líquido mínimo usando dados históricos sobre pedidos?
.


Entenda uma coisa - o que está especificado em "dados de ordemhistórica "??? Você está interessado no preço de fechamento, quer seja lucro ou prejuízo para o pedido selecionado...? E daí? O histórico da ordem não mostra o valor do saque da conta no patrimônio líquido (a perda atual) quando a ordem esteve no mercado, ou seja, a perda no seu fechamento pode chegar a, digamos, 500 unidades monetárias. Isto será mostrado no histórico da ordem enquanto o patrimônio líquido poderia ter diminuído para -1000 unidades monetárias quando a ordem esteve no mercado. Observação: O Testador de Estratégia calcula as perdas no patrimônio líquido.

A resposta à sua pergunta: você não pode.

 
LOA:

Bom dia!

Os profissionais ajudam - não vou a lugar nenhum sem você!

Já abordei esta questão, mas não encontrei o erro, queria realmente compreendê-lo eu mesmo, rachei meu cérebro por alguns dias, mas até agora não tenho muita experiência.

A última discussão terminou com a idéia de que talvez a razão esteja no código desses indicadores que estou tentando usar.

Eu escrevi um indicador (são meus primeiros passos) que mostra a quebra do ME_Proboy_F5

O problema é..... O indicador não é redesenhado quando novas barras são formadas e é reposto a zero na última barra após o tick recebido. Ele é redesenhado se você alterar o tf ou exibir as propriedades.

O indicador solicita dados de outros indicadores, todos exceto um ME_Proboy_F_5 (eu coloco seu código também) funciona bem. Não consigo encontrar nenhum erro no segundo indicador também. O indicador é redesenhado, mas é lento, ou seja, é exibido corretamente no segundo reinício (mudar as propriedades do FF ou do display).

Eu ficaria muito grato pela ajuda.

Proboy_Order_F5 - este é o principal indicador, sobre o qual eu pergunto

ME_Proboy_F5 - o segundo, que é duvidoso


Desculpe-me por continuar incomodando você com minha pergunta, mas eu realmente quero chegar ao fundo da questão.

A aplicação do limite de função=MathMin(Bars-1, Bars-counterd_bars-1) não resolveu o problema, mas eu aceitei as recomendações, trabalhei no estilo de programação, espero que tenha funcionado, me livrei de variáveis desnecessárias.

Veja acima a essência do problema

Arquivos anexados:
 
Roman.:


Uma coisa que você deve entender - o que está especificado em "dados de ordem histórica"??? Você está interessado em preço de fechamento, lucro ou prejuízo para a ordem selecionada? Então, o que é isso? O histórico da ordem não mostra o valor do saque da conta no patrimônio líquido (perda atual) quando a ordem esteve no mercado, ou seja, a perda em seu fechamento pode chegar a, digamos, 500 unidades da moeda, mas seria mostrado no histórico da ordem enquanto o patrimônio líquido poderia ter diminuído para -1000 unidades da moeda quando a ordem esteve no mercado. Observação: O testador de estratégia calcula a perda no patrimônio líquido.

A resposta à sua pergunta: você não pode.

Entretanto, existe um indicador https://c.mql5.com/mql4/forum/2010/11/Equity_v7.zip onde a equidade é de alguma forma calculada com base em dados históricos. Ainda não descobri como fazer isso. Talvez, a equidade possa ser calculada com base em pontos-chave (fechamento de pedidos), mas como se parece na forma de uma única fórmula?

 

Aqui está o código com a condição de que as ordens devem ser apagadas após o vencimento do tempo, esta é a condição

MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber

Então, por que se inserimos esta condição no primeiro se operador, então o outro operador localizado dentro dele não considera esta condição?

Ou seja, este código não funciona e apaga todas as ordens pendentes de uma só vez.

  for(int counter=0;counter<OrdersTotal();counter++)
    {
    if(OrderSelect(counter,SELECT_BY_POS,MODE_TRADES) == false) break;

    if(MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber) //Если текущее время больше чем время истечения
      {
        
        
      if(OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
        {
        OrderDelete(OrderTicket());
        }
        
      }
    }

E este código funciona e não elimina os pedidos de uma só vez.

  for(int counter=0;counter<OrdersTotal();counter++)
    {
    if(OrderSelect(counter,SELECT_BY_POS,MODE_TRADES) == false) break;

    if(MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber) //Если текущее время больше чем время истечения
      {
        
        
      if(OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP && MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber)
        {
        OrderDelete(OrderTicket());
        }
        
      }
    }
 
sss2019:

Aqui está o código com a condição de que as ordens devem ser apagadas após o vencimento do tempo, esta é a condição

Então, por que se inserimos esta condição no primeiro se operador, então o outro operador localizado dentro dele não considera esta condição?

Ou seja, este código não funciona e apaga todas as ordens pendentes de uma só vez.

E este código funciona e não elimina os pedidos de uma só vez.

Ambos os códigos não são corretos, portanto, analiso seu código e não sei o que é correto/correto.

Tomemos o exemplo mais simples. Você tem 2 ordens que precisam ser retiradas.

1) for(int counter=0;counter<OrdersTotal();counter++)

o início de um bom 0 é inferior a dois e o primeiro pedido é retirado com segurança, mas depois

2)

 for(int counter=0;counter<OrdersTotal();counter++)

contador = 1, mas só resta uma ordem! Significa que a condição (1<1) não é cumprida e o laço termina...

 
ilunga:

Note que ambos os códigos não são corrigidos, portanto não sei o que funciona bem ou mal para você.

Tomemos o exemplo mais simples. Você tem 2 pedidos, ambos precisam ser apagados.

1) for(int counter=0;counter<OrdersTotal();counter++)

O 0 bom é menos de dois e o primeiro pedido foi eliminado com sucesso, mas depois

2)

contador = 1, mas só resta uma ordem! Isso significa que a condição (1<1) não é cumprida e o laço termina...


Não, mas isso é o que acontece, neste momento elimina TODAS as ordens, de forma limpa. O problema é que ele os apaga imediatamente.
 
LOA:

Boa tarde!

Eu escrevi um indicador (estes são meus primeiros passos) que mostra claramente a quebra do ME_Proboy_F5


Bons primeiros passos, Olga Alexandrovna. 330 linhas de código

 
forexnew:

Entretanto, existe um indicador https://c.mql5.com/mql4/forum/2010/11/Equity_v7.zip onde a equidade é de alguma forma calculada com base em dados históricos. Eu ainda não entendi o método. Talvez, a equidade possa ser calculada com base nos momentos-chave (o pedido fecha), mas como se parece na forma de uma fórmula?




Familiarize-se com os conceitos de EQUIDADE e BALANÇO e quais são suas diferenças.

Este indicador mostra a linha de patrimônio líquido em tempo real, já que a linha de patrimônio líquido é o lucro/perda atual em posições não fechadas, "É possível determinar realmente o patrimônio líquido por pontos-chave (fechamento de ordens)" - não é possível, portanto você considerará a mudança da linha de patrimônio líquido em posições fechadas.

"A equidade é de alguma forma calculada com base em dados históricos" - não. Este indicador calcula a linha de equidade para o momento atual - por posições abertas no Mercado.

 

Boa noite! encontrei isto no tutorial de S. Kovalev. Kovalev, mas no terminal MT4 não há nada além de "woof! Por favor, avise, quem sabe onde pedir emprestado um conjunto de sinais sonoros para diferentes operações, para que eu não tenha que ficar olhando para o computador o tempo todo? Obrigado por uma possível dica!

   switch(Mess_Number)                 // Elegir texto del mensaje segun el numero 
     {
      case 1:
         Graf_Text="Closed order Buy "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 2:
         Graf_Text="Closed order Sell "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 3:
         Graf_Text="Deleted pending order "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 4:
         Graf_Text="Opened order Buy "+ Number;
         PlaySound("Ok.wav");                                       break;
      case 5:
         Graf_Text="Opened order Sell "+ Number;
         PlaySound("Ok.wav");                                       break;
      case 6:
         Graf_Text="Placed pending order "+ Number;
         PlaySound("Ok.wav");                                       break;
      case 7:
         Graf_Text="Order "+Number+" modified into the market one";
         PlaySound("Transform.wav");                                break;
      case 8:
         Graf_Text="Reopened order "+ Number;
         PlaySound("Bulk.wav");                                     break;
      case 9:
         Graf_Text="Partly closed order "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 10:
         Graf_Text="New minimum distance: "+ Number;
         PlaySound("Inform.wav");                                   break;
      case 11:
         Graf_Text=" Not enough money for "+
         DoubleToStr(Value,2) + " lots";
         Color_GT=Red;
         PlaySound("Oops.wav");                                     break;
      case 12:
         Graf_Text="Trying to close order "+ Number;
         PlaySound("expert.wav");                                   break;
      case 13:
         if (Number>0)
            Graf_Text="Trying to open order Sell..";
         else
            Graf_Text="Trying to open order Buy..";
         PlaySound("expert.wav");                                   break;
      case 14:
         Graf_Text="Invalid password. EA doesn't function.";
         Color_GT=Red;
         PlaySound("Oops.wav");                                     break;
      case 15:
         switch(Number)                 // Elegir texto del mensaje segun el numero del error 
           {
            case 2:   Graf_Text="Common error.";                    break;
            case 129: Graf_Text="Wrong price. ";                    break;
            case 135: Graf_Text="Price changed. ";                  break;
            case 136: Graf_Text="No prices. Awaiting a new tick.."; break;
            case 146: Graf_Text="Trading subsystem is busy";        break;
            case 5 :  Graf_Text="Old version of the terminal.";     break;
            case 64:  Graf_Text="Account is blocked.";              break;
            case 133: Graf_Text="Trading is prohibited";            break;
            default:  Graf_Text="Occurred error " + Number;//otros errores 
           }
         Color_GT=Red;
         PlaySound("Error.wav");                                    break;
      case 16:
         Graf_Text="Expert Advisor works only for EURUSD";
         Color_GT=Red;
         PlaySound("Oops.wav");                                     break;
      default:
         Graf_Text="default "+ Mess_Number;
         Color_GT=Red;
         PlaySound("Bzrrr.wav");                    
     }