Ao criar o tópico"AccountInfo... Information relevance", aprendi que há funções que usam dados "armazenados em cache no ambiente do software" e há funções que sempre têm "acesso direto aos dados reais".
You have just registered and most likely you have questions such as, "How do I insert a picture to my a message?" "How do I format my MQL5 source code?" "Where are my personal messages kept?" You may have many other questions. In this article, we have prepared some hands-on tips that will help you get accustomed in MQL5.community and take full advantage of its available features.
E depois que modifico a função para não incluir ordens pendentes, o resultado é 0
double NewOrderAllowedVolume(string symbol)
{
double allowed_volume=0;
//--- obter a limitação do volume máximo de um pedidodouble symbol_max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
//--- obter a limitação de volume por um símbolodouble max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);
//--- obter o volume da posição aberta por um símbolodouble opened_volume=PositionVolume(symbol);
if(opened_volume>=0)
{
//--- se já tivermos usado o volume disponívelif(max_volume-opened_volume<=0)
return(0);
//--- o volume da posição aberta não excede max_volume//double orders_volume_on_symbol=PendingsVolume(symbol);//allowed_volume=max_volume-opened_volume-orders_volume_on_symbol;
allowed_volume=max_volume-opened_volume;
if(allowed_volume>symbol_max_volume) allowed_volume=symbol_max_volume;
}
return(allowed_volume);
}
Isso ocorre porque o max_volume é 0 e o open_volume é 0;
Por que o volume máximo é 0 se não há posições abertas?
Predefined Macro Substitutions - Named Constants - Constants, Enumerations and Structures - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
Obrigado.
'SYMBOL_VOLUME_LIMIT' - identificador não declarado.............
'SymbolInfoDouble' - nenhuma das sobrecargas pode ser aplicada à chamada da função.............
O problema é só comigo?
'SYMBOL_VOLUME_LIMIT' - identificador não declarado.............
'SymbolInfoDouble' - nenhuma das sobrecargas pode ser aplicada à chamada da função.............
É só comigo?
Você pode fazer isso?
Mais uma pergunta sobre a função SeriesInfoInteger().
Ao criar o tópico"AccountInfo... Information relevance", aprendi que há funções que usam dados "armazenados em cache no ambiente do software" e há funções que sempre têm "acesso direto aos dados reais".
A qual categoria de funções pertence a função SeriesInfoInteger()?
O código a seguir é usado na função CheckVolumeValue :
int ratio=(int)MathRound(volume/volume_step);
if(MathAbs(ratio*volume_step-volume)>0.0000001)
{
description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",
volume_step,ratio*volume_step);
return(false);
}
Mas ele é mais correto:
int ratio = (int)MathRound((volume-min_volume)/volume_step);
if (MathAbs(ratio*volume_step+min_volume-volume)>0.0000001)
{
description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",
volume_step,ratio*volume_step+min_volume);
return(false);
}
Porque a etapa mínima da alteração de volume deve ser contada a partir do valor mínimo.
E talvez o trecho de código
//--- вычислим значение маржи
bool check=OrderCalcMargin(type,Symbol(),lots,last_tick.ask,margin);
deva ser substituído por:
//--- вычислим значение маржи
double price = (type == ORDER_TYPE_BUY || type == ORDER_TYPE_BUY_LIMIT || type == ORDER_TYPE_BUY_STOP || type == ORDER_TYPE_BUY_STOP_LIMIT) ? last_tick.ask : last_tick.bid;
bool check=OrderCalcMargin(type,Symbol(),lots,price,margin);
Devido a alterações na MQL5, agora o volume total máximo permitido para um símbolo pode ser obtido da seguinte forma:
Não use a variante antiga! Era assim:
O artigo foi corrigido e o novo código de especialista Check_Order_And_Volume_Limits.mq5 foi anexado a ele.Prezado administrador
Tentei usar essa função, mas ela retornou 0 em todos os casos.
Minha versão do MT5 é 2280
double orders_volume_on_symbol=PendingsVolume(symbol);dá erro, não existe tal função
E depois que modifico a função para não incluir ordens pendentes, o resultado é 0
Isso ocorre porque o max_volume é 0 e o open_volume é 0;
Por que o volume máximo é 0 se não há posições abertas?
Construir 2715