Bibliotecas: Symbol - página 11

 

O desafio

CLONE(SYMBOL_FORMULA)

é questionável. Normalmente, os símbolos personalizados em MQL5 calculam barras e ticks por si mesmos, e a transferência da fórmula torna impossível gerenciar um novo símbolo. A ideia (solicitação de correção) é criar um símbolo personalizado a partir de um símbolo sintético com uma fórmula.

Agora comentei essa clonagem, mas, embora a fórmula não esteja mais visível nas propriedades, o símbolo personalizado resultante parece ainda clonar as barras sintéticas em algum tipo de forma distorcida. Ainda não entendo o que está acontecendo.

ZЫ. Removi meu programa gerador, mas o símbolo personalizado gerado por ele continua a ser atualizado por ticks de forma síncrona com o sintético com base no qual foi criado. Poltergeist. Há uma falha no terminal.

 
Stanislav Korotky #:

O desafio é questionável. Normalmente, os símbolos personalizados em MQL5 calculam barras e ticks por si mesmos, e a transferência da fórmula torna impossível gerenciar um novo símbolo. A ideia (fiche-request) é criar um símbolo personalizado a partir de um sintético com uma fórmula.

De fato, pode não valer a pena fazer uma clonagem completa.

Agora comentei essa clonagem, mas, embora a fórmula não esteja mais visível nas propriedades, o símbolo personalizado resultante parece ainda clonar as barras sintéticas em algum tipo de forma distorcida. Ainda não entendo o que está acontecendo.

ZЫ. Removi meu programa gerador, mas o símbolo personalizado gerado por ele continua a ser atualizado por ticks de forma síncrona com o sintético com base no qual foi criado. Poltergeist. Há uma falha no terminal.

Infelizmente, há muitos bugs lá.

 

@fxsaber

Às vezes, após reiniciar o terminal, o testador para de abrir posições em um símbolo personalizado.

Ou conta com lucro zero.

Com o que isso pode estar relacionado?

Arquivos anexados:
4y48yl.PNG  32 kb
y4xlvu2.PNG  35 kb
 

Observe as moedas do símbolo ANTES e DEPOIS da reinicialização do Terminal...

Certa vez, tive que escrever um serviço para restaurar automaticamente as moedas personalizadas.

 
fxsaber #:

Observe as moedas do símbolo ANTES e DEPOIS de o Terminal ser reinicializado....

Certa vez, tive que escrever um serviço para restaurar automaticamente as moedas personalizadas.

Agora, mesmo que eu exclua todos os símbolos personalizados criados no terminal e exclua a pasta com as bases personalizadas, um símbolo personalizado com falha ainda é criado.

Eu crio um símbolo personalizado com este código

// Criar uma cópia do símbolo para acelerar o testador
#property script_show_inputs

#include <Symbol.mqh>

void OnStart()
{
  const SYMBOL Symb("TESTER_" + _Symbol); // Criou um símbolo

  if (Symb.IsExist()) // Se o símbolo for criado
  {
    Symb = _Symbol; // Copiou todas as propriedades e o histórico de barras (+ histórico de ticks, se personalizado) do símbolo principal - clone

    // Tornar as moedas do símbolo a moeda da conta
    Symb.SetProperty(SYMBOL_CURRENCY_PROFIT, AccountInfoString(ACCOUNT_CURRENCY));
    Symb.SetProperty(SYMBOL_CURRENCY_MARGIN, AccountInfoString(ACCOUNT_CURRENCY));

    if (Symb.On()) // Incluído no Market Watch
      ChartOpen(Symb.Name, PERIOD_CURRENT); // Abriu um novo gráfico de símbolos
  }
}

Se o seu serviço for a solução para o problema, compartilhe-o

 

Agora instalei o terminal em uma nova virtualização e o problema é o mesmo.

Talvez haja algo nas compilações mais recentes?

 

Acho que encontrei o problema.

Se você criar um símbolo com o nome

EURUSD_1

tudo estará bem.

Se você criar um símbolo com o nome

1_EURUSD

Então, o inferno acontece.

Arquivos anexados:
1.PNG  90 kb
2.PNG  91 kb
 
EgorKim de símbolos personalizados após a recarga do Terminal.
// O serviço corrige as moedas de todos os caracteres personalizados.
#property service

bool CorrectCurrency( const string Symb, const string Currency )
{  
  return(SymbolInfoInteger(Symb, SYMBOL_CUSTOM) && 
         CustomSymbolSetString(Symb, SYMBOL_CURRENCY_BASE, Currency) &&
         CustomSymbolSetString(Symb, SYMBOL_CURRENCY_MARGIN, Currency) &&
         CustomSymbolSetString(Symb, SYMBOL_CURRENCY_PROFIT, Currency));
}

void CorrectSymbols( void )
{
  const string Currency = AccountInfoString(ACCOUNT_CURRENCY);
  
  for (int i = SymbolsTotal(false) - 1; i >= 0; i--)
    CorrectCurrency(SymbolName(i, false), Currency);
    
  return;
}

void OnStart()
{
  CorrectSymbols();
}
 
EgorKim #:

1_EURUSD

então o inferno acontece.

Isso ocorre se o símbolo tiver margem calculada como no Forex; em outras variantes de cálculo de margem, o símbolo do usuário pode ser chamado como você quiser.