Erros, bugs, perguntas - página 2019

 
fxsaber:

Tem sido escrito sobre muitas vezes. Não corrigido por qualquer razão.

Já o vi escrito antes sobre flechas que nem sempre podem ser exibidas imediatamente após uma transacção. Abri também uma candidatura deste tipo. Mas para ter tais omissões na lista do separador História, ainda não viu nenhum post.

P.S. E sim, depois de fornecer provas e todos os dados necessários para reproduzir o bug, por alguma razão um completo ignorar durante uma semana inteira, embora desde o início tenha respondido, recusando-se a concordar que existe um bug.

 
Anatoli Kazharski:

Já o vi escrito antes que as setas podem nem sempre aparecer imediatamente após uma troca. Abri também uma candidatura deste tipo. Mas ainda não vi tais omissões na lista do separador História.

É necessário trocar as abas várias vezes, depois o histórico torna-se correcto. É muito desagradável durante a depuração.

 
fxsaber:

Os separadores têm de ser trocados várias vezes, depois a história torna-se correcta. É muito aborrecido durante a depuração.

Sim, é muito aborrecido em alguns casos quando se desenvolvem e depuram estratégias comerciais.

Não reparei que mudar as tabulações tenha de alguma forma alterado o conteúdo da lista do histórico:


 
Anatoli Kazharski:

Não tenho notado que a troca de separadores altera de alguma forma o conteúdo da lista do histórico:

Clique com o botão direito do rato e altere as Ofertas/Ordem.

 
Anatoli Kazharski:

Sim, isto é um grande obstáculo em alguns casos no desenvolvimento e depuração de estratégias comerciais.

Não reparei que a troca de separadores tenha alterado de forma alguma o conteúdo da lista do histórico:


Existe tal coisa. Eu poupo-me com um deslizador de velocidade e uma pausa.
 
fxsaber:

Clique com o botão direito do rato e altere Transacções/Ordem.

Sim, tais acções restabelecem a lista do histórico do negócio:


 
Comentários não relacionados com este tópico foram transferidos para "Perguntas dos principiantes do MQL4 MT4 MetaTrader 4".
 
Todos os símbolos reais na conta estão na forma "EURUSD.hello". Depois de criar um "EURUSD" personalizado, não haverá problemas ao copiar do serviço de Sinais?
 

Por favor, adicione os seguintes valores

ENUM_DEAL_DEAL_REASON

Identificador

Descrição

DEAL_REASON_LIMIT

O negócio foi executado como resultado de uma ordem limite que desencadeou

DEAL_REASON_MARKET

O negócio foi executado como resultado de uma ordem de mercado

DEAL_REASON_STOP

O negócio foi executado como resultado de uma ordem de paragem que desencadeou


Parece ser desnecessário. Mas há situações em que a ordem foi parcialmente executada, criando um acordo,caso em que DEAL_ORDER será encontrado, mas não estará na tabela de história, uma vez que a ordem ainda está viva.

Por outras palavras, para descobrir o tipo de encomenda, que causou o negócio, nem sempre é útil consultar o histórico da encomenda. Se não quisermos fazer confusão na procura de ordens entre as "mortas e vivas", podemos simplesmente acrescentar mais bandeiras de execução - depois das existentes, para manter a compatibilidade com ENUM_ORDER_REASON eENUM_POSITION_REASON. Ao mesmo tempo é desejável adicionar as mesmas bandeiras àENUM_POSITION_REASON para ser compatível

POSITION_REASON_LIMIT  == DEAL_REASON_LIMIT
POSITION_REASON_MARKET == DEAL_REASON_MARKET
POSITION_REASON_STOP   == DEAL_REASON_STOP
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Сделка является отражением факта совершения торговой операции на основании ордера, содержащего торговый приказ. Каждая сделка описывается свойствами, позволяющими получить информацию о ней. Для чтения значений свойств используются функции вида Идентификатор позиции, в открытии, изменении или закрытии которой участвовала эта сделка. Каждая...
 

Uma pergunta sobre a OrderCalcMargin surgiu numa linha vizinhahttps://www.mql5.com/ru/forum/216697/page3


Teste: vamos verificar 2 formas diferentes de calcular o depósito através da substituição de preços de abertura diferentes.

#define  TOSTRING(A) #A+" = "+(string)(A)
void OnStart()
  {
   double margin_1=999,price_1;

   Print(TOSTRING(price_1=SymbolInfoDouble(Symbol(),SYMBOL_ASK)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print(TOSTRING(price_1=SymbolInfoDouble(Symbol(),SYMBOL_BID)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print(TOSTRING(price_1=10.0));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print(TOSTRING(price_1=1.0));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
  }

// Альтернатива OrderCalcMargin
bool MyOrderCalcMargin(const ENUM_ORDER_TYPE action,const string symbol,const double volume,const double price,double &margin)
  {
   double MarginInit,MarginMain;

   const bool Res=SymbolInfoMarginRate(symbol,action,MarginInit,MarginMain);

   margin=Res ? MarginInit*price*volume*SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE)/
          (SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE)*AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0;

   return(Res);
  }

Aqui está o LOG

LF      0       04:28:05.464    test (AUDJPY,H1)        price_1=SymbolInfoDouble(Symbol(),SYMBOL_ASK) = 88.712
KP      0       04:28:05.464    test (AUDJPY,H1)        price_1= 88.712 margin_1= 26.19 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
CR      0       04:28:05.464    test (AUDJPY,H1)        price_1= 88.712 margin_1= 26.19399834 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
ED      0       04:28:05.464    test (AUDJPY,H1)        price_1=SymbolInfoDouble(Symbol(),SYMBOL_BID) = 88.7
PR      0       04:28:05.464    test (AUDJPY,H1)        price_1= 88.7 margin_1= 26.19 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
KS      0       04:28:05.464    test (AUDJPY,H1)        price_1= 88.7 margin_1= 26.1904551 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
EP      0       04:28:05.464    test (AUDJPY,H1)        price_1=10.0 = 10.0
HK      0       04:28:05.464    test (AUDJPY,H1)        price_1= 10.0 margin_1= 26.19 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
HH      0       04:28:05.464    test (AUDJPY,H1)        price_1= 10.0 margin_1= 2.95270069 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
KN      0       04:28:05.464    test (AUDJPY,H1)        price_1=1.0 = 1.0
FS      0       04:28:05.464    test (AUDJPY,H1)        price_1= 1.0 margin_1= 26.19 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
PR      0       04:28:05.464    test (AUDJPY,H1)        price_1= 1.0 margin_1= 0.29527007 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true

A função OrderCalcMargin não considera o preço de abertura ao calcular a margem

Isto parece estar relacionado com a taxa de câmbio da moeda cotada, que tem de ser recalculada para o tempo e preço de abertura.

Se a moeda cotada for USD (e a moeda da conta também for USD), então a margem calculada será alterada de acordo com o preço de abertura.

Log para GBPUSD

KK      0       05:25:15.763    test (GBPUSD,H1)        price_1=SymbolInfoDouble(Symbol(),SYMBOL_ASK) = 1.32354
CR      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.32354 margin_1= 44.12 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
DD      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.32354 margin_1= 44.118 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
GD      0       05:25:15.763    test (GBPUSD,H1)        price_1=SymbolInfoDouble(Symbol(),SYMBOL_BID) = 1.32341
LS      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.32341 margin_1= 44.11 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
NQ      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.32341 margin_1= 44.11366667 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
DG      0       05:25:15.763    test (GBPUSD,H1)        price_1=10.0 = 10.0
LM      0       05:25:15.763    test (GBPUSD,H1)        price_1= 10.0 margin_1= 333.33 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
NO      0       05:25:15.763    test (GBPUSD,H1)        price_1= 10.0 margin_1= 333.33333333 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
HM      0       05:25:15.763    test (GBPUSD,H1)        price_1=1.0 = 1.0
ED      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.0 margin_1= 33.33 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
OD      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.0 margin_1= 33.33333333 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true

É ou deveria ser um Bug?

OrderCalcMargin и проблема с ним связанная.
OrderCalcMargin и проблема с ним связанная.
  • 2017.10.04
  • www.mql5.com
Один советник работает на счёте MetaQuotes-Demo на семи валютных парах и на трёх парах реальном счёте робо. Итого 10 экземпляров советника запущено...
Razão: