Inicializar e reinicializar automaticamente a EA a partir de um arquivo - página 7

 
Fry_Антон:

Estou vendo.

Especificidades: amanhã vou pensar em como conseguir uma posição na FORTS. Na verdade, o que eu preciso acima de tudo é saber o preço real de abertura de uma posição que se desobstruiu (reabriu ao preço de desobstrução).

A posição na FORTS é obtida pela soma dos negócios em uma (ou mais ordens). Na compensação há um comércio técnico sem bilhete, precisamos descobrir como determinar o preço POSITION_PRICE_OPEN que era antes da compensação.

Pode ser armazenado. Decidir apenas sobre a vida útil. Por exemplo, para esquecer se a EA está fora do mercado (sem posições).
 
Dmitry Fedoseev:

Obviamente, se:

Você tem que continuar a cinzelar. Mas ao menos não bloqueie o especialista. Talvez menos descaradamente cinzelar, à medida que o número de erros aumenta, aumenta a pausa entre as tentativas. A solução mais simples é tentar algumas vezes e fazer uma pausa até que o próximo bar abra.

E quanto às penalidades da Bolsa por mais de 2.000 transações? Digamos que eu tenho 50 EAs e 2.000 transações já passaram. O que fazer a seguir, receber penalidades monetárias da Bolsa?
 
Fry_Антон:

Estou vendo.

Especificidades: amanhã vou pensar em como conseguir uma posição na FORTS. Na verdade, o que eu preciso acima de tudo é saber o preço real de abertura de uma posição que foi aberta (reaberta ao preço de abertura).

A posição na FORTS é obtida pela soma dos negócios em uma (ou mais ordens). Na compensação há um comércio técnico sem bilhete, precisamos descobrir como determinar o preço POSITION_PRICE_OPEN que era antes da compensação.

//+------------------------------------------------------------------+
//| Expert Get position price function                               |
//+------------------------------------------------------------------+
double GetPositionPrice( const string aSymbol )
{
  double price_in = 0;
  double volume_in = 0;
  
  if ( PositionSelect( aSymbol ) )
  {
    ulong pos_id = ulong( PositionGetInteger( POSITION_IDENTIFIER ) );
    
    if ( pos_id > 0 )
    {
      if ( HistorySelectByPosition( pos_id ) )
      {
        int deals = HistoryDealsTotal();
      
        for( int i = 0; i < deals; i++ )
        {
          ulong deal_ticket = HistoryDealGetTicket( i );
          ulong order_ticket = ulong( HistoryDealGetInteger( deal_ticket, DEAL_ORDER ) );
        
          if ( order_ticket > 0 )
          {
            ENUM_DEAL_ENTRY deal_entry = ENUM_DEAL_ENTRY( HistoryDealGetInteger( deal_ticket, DEAL_ENTRY ) );
              
            if ( deal_entry == DEAL_ENTRY_IN )
            {
              double price = HistoryDealGetDouble( deal_ticket, DEAL_PRICE );
              double volume = HistoryDealGetDouble( deal_ticket, DEAL_VOLUME );
                                
              price_in += price * volume;
              volume_in += volume;  
            }
          }
        }
        if ( volume_in > 0 ) return( NormalizeDouble( price_in / volume_in, _Digits ) );
      }
      else
      {
        Print( "GetPositionPrice: Невозможно получить историю позиции по символу ", aSymbol );
      }
    }
    else
    {
      Print( "GetPositionPrice: Невозможно определить идентификатор позиции по символу ", aSymbol );
    }
  }
  return( 0 );
}
 
Михаил:

Ótimo! Amanhã, eu o fecharei.

Você me poupou muito tempo. Obrigado (risos)

 
Fry_Антон:

ótimo! Vou anexá-lo amanhã.

Você me poupou muito tempo. Obrigado.

Memo:

Esta função é SOMENTE para os negócios recebidos!

(ou seja, não houve redução de posição).

Se você precisar de ambos, então acrescente à funçãoDEAL_ENTRY_OUT

 
Михаил:

Memo:

Esta função é SOMENTE para os negócios recebidos!

(ou seja, sem diminuição de posição)

Se você precisar de ambos, então acrescente à funçãoDEAL_ENTRY_OUT

que eu entendi imediatamente. É o próprio princípio que é importante aqui: a busca de identidade na história e é essencialmente a resposta completa à pergunta acima.


Francamente falando, eu não entendo a lógica dos desenvolvedores, por que eles decidiram projetar um acordo técnico de compensação de forma tão "desajeitada".

Tanto objetos gráficos em gráficos, como propriedades de posição na história e, além disso, propriedades de uma posição aberta (rentabilidade) - tudo é enganoso não apenas para um simples código em um EA, mas para qualquer comerciante em geral.

 
kond777:
E quanto às penalidades da Bolsa por mais de 2.000 transações? Suponha que eu tenha 50 EAs e 2.000 transações tenham passado. O que devo fazer em seguida, receber multas monetárias da Bolsa?

Você não aprenderá a resposta à sua pergunta.

Para não receber multas, é necessário parar o trabalho do especialista (você e eu discutimos isso há muito tempo).

Se nosso milagre-programador diz que é necessário parar, ele admite assim que é

admitindo ser ....., que não sabe nada sobre programação

especialistas em negociação de ações....

 
Михаил:

Você não aprenderá a resposta à sua pergunta.

Para não receber multas, é necessário parar o trabalho do especialista (você e eu discutimos isso há muito tempo).

Se nosso milagre-programador diz que é necessário parar, ele admite assim que é

admitindo ser ....., que não sabe nada sobre programação

Consultores especializados para negociação de ações....

Na minha opinião,Dmitry Fedoseev dá a impressão de uma pessoa conhecedora, acredito que ele provavelmente será capaz de oferecer uma solução para este problema.
 
Михаил:

Sim, porque você está aconselhando a uma pessoa o que é bom para o MT4 e é completamente "fútil" no MT5!

É óbvio a partir de suas mensagens que você não tem idéia de como o MT5 funciona.

E não cabe a você julgar se o princípio da programação especializada é vergonhoso ou não!

Não vejo você como uma autoridade, mas como um garoto atrevido e arrogante!

Você está com ciúmes? E com razão, é melhor ser um filhote de cachorro jovem do que um velho pássaro do paraíso.
 
Алексей Тарабанов:
Ciúmes? Você está certo - melhor ser um filhote de cachorro jovem do que um velho pássaro do paraíso.
Há mais gás na poça...