FORTES Por favor, ajude - página 30

 
demonsn:
Obrigado. Acrescentou sua opção como uma verificação paralela. Agora é apenas uma questão de pegar o momento certo.

Tenho 100% de certeza que vai funcionar!

Porque você não preencheu a estrutura corretamente (não apenas os campos, mas também os valores).

Estranho que o compilador não tenha "jurado".

Você:

MqlTradeRequest.action = TRADE_ACTION_DEAL;

É necessário:

MtRequest.action = TRADE_ACTION_DEAL;
 

Mas não! O código em minha mensagem não é do Expert Advisor, é um fragmento corrigido de logs onde as informações de depuração são escritas pelo Expert Advisor. Erro meu, erro meu).

A própria EA preenche a estrutura conforme necessário, mas o resultado da verificação é diferente. Ele ou calcula a margem corretamente ou dá algum absurdo como no exemplo.

Aqui está um fragmento do site ao vivo

   MqlTradeRequest MtRequest = {0}; 

   switch(OrderType)
   {
      case ORDER_TYPE_BUY:         
         MtRequest.price     = CurrentTick.ask;         
         break;

      case ORDER_TYPE_SELL:         
         MtRequest.price     = CurrentTick.bid;
         break;

      default:
         LogFile.Log(LOG_PRINT,__FUNCTION__," error: Invalid OrderType");
         return(false);
   }

   MtRequest.tp        = 0.0;
   MtRequest.sl        = 0.0;
   MtRequest.action    = TRADE_ACTION_DEAL;
   MtRequest.magic     = 0;
   MtRequest.symbol    = strSymbol;
   MtRequest.volume    = dblLots;
   MtRequest.deviation = Config.Deviation;
   MtRequest.type      = OrderType;
   MtRequest.type_filling = Config.OrdersFillingType;
 

Faça-o:

   MqlTradeRequest MtRequest = {0}; 
   MqlTradeRequest MtResult = {0}; 

   switch(OrderType)
   {
      case ORDER_TYPE_BUY:         
         MtRequest.price     = CurrentTick.ask;         
         break;

      case ORDER_TYPE_SELL:         
         MtRequest.price     = CurrentTick.bid;
         break;

      default:
         LogFile.Log(LOG_PRINT,__FUNCTION__," error: Invalid OrderType");
         return(false);
   }

   MtRequest.action    = TRADE_ACTION_DEAL;
   MtRequest.magic     = 77777777777777;
   MtRequest.symbol    = strSymbol;
   MtRequest.volume    = dblLots;
   MtRequest.type      = OrderType;
   MtRequest.type_filling = Config.OrdersFillingType;
   MtRequest.type_time = ORDER_TIME_DAY;
 

Aqui está outro momento no diário de bordo:

 MqlTradeRequest structure:
   action: Action Deal
   magic: 0
   order: 0
   symbol: Si-12.15
   volume: 2.00
   price: 63365
   stoplimit: 0
   sl: 0
   tp: 0
   deviation: 50
   type: ORDER_TYPE_SELL
   type_filling: ORDER_FILLING_FOK
   type_time: gtc
   expiration: 1970.01.01 00:00
   comment: (null)

 MqlTradeCheckResult structure:
   retcode: 10019 (There is not enough money to complete the request)
   balance: 133921.71
   equity: 132772.57
   profit: 0.00
   margin: 172148.68
   margin_free: -39376.11
   margin_level: 77.13
   comment: No money

Eu passo a mesma estrutura para OrderSend( ) e tudo se abre perfeitamente!

A propósito, construa 1194.

Venda de Si-12.15, 2 lotes. GO para 1 contrato é 5090 rublos. Um comércio deve ter o QR 5090*2 = 10180 RUB. Mas a função retorna 172148.68 RUB, o que equivale a 172148.68 / 5090 = 33.82 contratos!

Que milagre...

 
demonsn:

Aqui está outro momento no diário de bordo:

Eu passo a mesma estrutura para OrderSend() e tudo abre bem!

A propósito, construa 1194.

Venda de Si-12.15, 2 lotes. GO para 1 contrato é 5090 rublos. Um comércio deve ter o QR 5090*2 = 10180 RUB. E a função retorna 172148,68 rublos, o que corresponde a 172148,68 / 5090 = 33,82 contratos!

Que maravilhas...

1. Eu lhe dei uma amostra de como preencher corretamente a estrutura, e você ignora este conselho.

Então por que você está perguntando?

2. 1194 build não é compatível com os servidores atuais (Renat mencionou isto. Use build 1159 por enquanto).

3. eu não uso OrderCheck() de forma alguma, eu mesmo verifico os fundos.

//+------------------------------------------------------------------+
//| Expert Check money function                                      |
//+------------------------------------------------------------------+ 
bool CheckMoney( const string a_symbol, const long volume )
{
  if ( volume <= 0 )
  {
    Print( "Check Money: Объём лота указан не правильно!" );
    retutn ( false );
  } 
//---
  double a_go = SymbolInfoDouble( a_symbol, SYMBOL_MARGIN_INITIAL ) * double( volume);
  double free_margin = ( AccountInfoDouble( ACCOUNT_FREEMARGIN ) / 100 ) * 90; //90% от свободных средств
//---  
  if ( a_go <= free_margin )
  {
    return( true );
  }
  Print( "Check Money: Не достаточно средств!" );
  return( false );
}
 
Михаил:

1. Eu lhe dei uma amostra de como preencher a estrutura corretamente, e você ignora este conselho.

Por que você está perguntando então?

2) Build 1194 não é compatível com os servidores atuais (Renat mencionou isto. Use build 1159 por enquanto).

3. eu não uso OrderCheck() de forma alguma, eu mesmo verifico os meios.


1. Não o ignoro de forma alguma. Não estou ignorando de forma alguma. Incluí sua amostra no código, agora estou observando-o.

2. Oh, cara! Eu não sabia disso.

3. eu fiz a mesma coisa. E a função é quase exatamente a mesma, exceto 90% (boa idéia, a propósito)

Eu levantei esta questão porque minha função (semelhante à sua) verifica a CS e permite a abertura de posição, enquanto que a OrderCheck() padrão às vezes falha.


Isto provavelmente se refere ao ponto 2.

No diário de bordo do terminal há muitas mensagens como:

2015.10.22 21:28:13.966 Ticks   old tick @RTS (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick RTS-12.15 (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick @RTS (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick RTS-12.15 (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick @RTS (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick RTS-12.15 (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:27:40.995 Ticks   old tick @LKOH (tick: 2015.10.22 18:27:48, last: 2015.10.22 18:27:49) 0/0
2015.10.22 21:27:40.995 Ticks   old tick LKOH-12.15 (tick: 2015.10.22 18:27:48, last: 2015.10.22 18:27:49) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
 
demonsn:


1. Por que eu deveria ignorá-lo? Não estou ignorando de forma alguma. Incluí sua amostra no código, agora estou observando.

2. Oh, cara! Eu não sabia disso.

3. eu fiz a mesma coisa. E a função é quase exatamente a mesma, exceto 90% (boa idéia, a propósito)

Eu fiz esta pergunta precisamente porque minha função (semelhante à sua) verifica o CS e permite a abertura de posição, enquanto que o OrderCheck() padrão às vezes apresenta falhas.

Portanto, use seu próprio em FORTS - é muito mais correto :)
 
Михаил:
Portanto, use todo o seu próprio em FORTS - é muito mais correto :)

É assim que você acaba fazendo isso! Tentado em algum lugar a usar o código ou biblioteca de outra pessoa, a fim de economizar tempo na escrita de uma "roda" ou testar alguma idéia.

Mas no final você tem que passar uma semana para detectar erros e defeitos de outros desenvolvedores. No final, tudo é reescrito para você, para que não haja vestígios do código dos outros.

 

Olá!

Colas de futuros apareceram na janela de teste, o que por si só é muito agradável, porém, ao tentar combinar a cola com o contrato, descobri que não há nenhuma negociação na cola - tudo está bem nos contratos - há muitas negociações. Verifiquei quatro instrumentos Si,RTS,GAZR,SBRF e o período 01.01.2015 -24.10.2015.

 
Andrey Kotrin:

Olá!

Colas de futuros apareceram na janela de teste, o que por si só é muito agradável, porém, ao tentar combinar a cola com o contrato, descobri que não há nenhuma negociação na cola - tudo está bem nos contratos - há muitas negociações. Verifiquei quatro instrumentos Si,RTS,GAZR,SBRF e o período 01.01.2015 -24.10.2015.

O testador não funciona corretamente em futuros.