Porque é possível obter o valor certo de MA a partir da barra zero do gráfico apenas se o duplo deslocamento negativo for passado para CopyBuffer? CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf);
Porque é possível tirar o valor correcto de MA da barra zero do gráfico, apenas se passar um turno duplo negativo para CopyBuffer? CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf);
MA_Buf[0] tem agora o valor correcto.
Desenhe primeiro uma imagem e especifique o que é "barra zero" para o seu indicador com o parâmetro shift.
o tempo de acesso é o mesmo, a optimização do código em MQL é muito fixe, por isso use o que for conveniente.
de acordo com os meus testes, o tempo de acesso pode ser diferente, dependendo de onde a variável é descrita e com que modificadores, mas existe uma velocidade de 2-5%, que em princípio pode ser reduzida à implementação numa determinada construção, depende do número da construção
Pode dizer-me a forma mais fácil e rápida de obter o resultado da última transacção para o símbolo actual? Porque a partir da documentação tudo é tão complicado. Para obter o resultado primeiro precisa de encontrar o bilhete do negócio exigido, para encontrar o bilhete precisa de encontrar o negócio no histórico pelo seu índice, o índice deve ser pesquisado no histórico, para não mencionar que também precisa de filtrar pelo símbolo.
WinZip: Poderia aconselhar como obter fácil e rapidamente o resultado da última troca com o símbolo actual? Porque a documentação é muito complexa. Para obter o resultado, é necessário encontrar primeiro o bilhete do comércio exigido, para encontrar o bilhete é necessário encontrar o comércio na história pelo seu índice, o índice deve ser procurado na história, para não mencionar que devemos filtrar pelo símbolo.
Para evitar ir sempre ao histórico de negociação - basta apanhar o negócio naOnTradeTransaction com o tipo
TRADE_TRANSACTION_DEAL_ADD - adicionar transacção ao histórico
//+------------------------------------------------------------------+//| TradeTransaction function |//+------------------------------------------------------------------+voidOnTradeTransaction(constMqlTradeTransaction &trans,
constMqlTradeRequest &request,
constMqlTradeResult &result)
{
//--- get transaction type as enumeration valueENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in historyif(type==TRADE_TRANSACTION_DEAL_ADD)
{
long deal_ticket =0;
long deal_order =0;
long deal_time =0;
long deal_time_msc =0;
long deal_type =-1;
long deal_entry =-1;
long deal_magic =0;
long deal_reason =-1;
long deal_position_id =0;
double deal_volume =0.0;
double deal_price =0.0;
double deal_commission =0.0;
double deal_swap =0.0;
double deal_profit =0.0;
string deal_symbol ="";
string deal_comment ="";
string deal_external_id ="";
if(HistoryDealSelect(trans.deal))
{
deal_ticket =HistoryDealGetInteger(trans.deal,DEAL_TICKET);
deal_order =HistoryDealGetInteger(trans.deal,DEAL_ORDER);
deal_time =HistoryDealGetInteger(trans.deal,DEAL_TIME);
deal_time_msc =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC);
deal_type =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
deal_entry =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_magic =HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
deal_reason =HistoryDealGetInteger(trans.deal,DEAL_REASON);
deal_position_id =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);
deal_volume =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
deal_price =HistoryDealGetDouble(trans.deal,DEAL_PRICE);
deal_commission =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION);
deal_swap =HistoryDealGetDouble(trans.deal,DEAL_SWAP);
deal_profit =HistoryDealGetDouble(trans.deal,DEAL_PROFIT);
deal_symbol =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_comment =HistoryDealGetString(trans.deal,DEAL_COMMENT);
deal_external_id =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID);
}
elsereturn;
ENUM_DEAL_ENTRY enum_deal_entry=(ENUM_DEAL_ENTRY)deal_entry;
if(deal_symbol==m_symbol.Name() && deal_magic==InpMagic)
{
if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
{
...
}
}
}
}
m_symbol.Name() - símbolo actual, InpMagic - identificador único do Expert Advisor
Ou seja, o tempo de acesso é o mesmo, a optimização do código no MQL é muito fixe, por isso o que for conveniente, utilize-o.
de acordo com os meus testes, o tempo de acesso pode ser diferente, dependendo de onde a variável é descrita e com que modificadores, mas com uma velocidade de 2-5%, que em princípio pode ser reduzida à implementação numa determinada construção, depende do número da construção
Concordo que o optimizador funciona bem, mas confiar sempre no optimizador do compilador está errado. É preciso pensar antecipadamente em como o código é executado no nível de memória, inicialização e retorno de valor. Ou seja, calcular o número de acções executadas por operação e, se houver menos acções, o código é mais rápido. E tomar como prática escrever um código óptimo de uma só vez. Em códigos curtos talvez não haja diferença, mas quando há um projecto com centenas de ficheiros, é quando aparecerão atrasos, e só haverá um profiler e reescreverá o código. Cada um escolhe o seu ancinho )).
Também google para palavras-chave
__inline__forceinline
Por estranho que pareça, estão em mql como indocumentados.
Se tiver sido introduzido, então há uma diferença.
A leitura de uma variável rubricada é sempre mais rápida do que a leitura de uma função.
Não há diferença. Não consigo encontrar a ligação agora - mas a resposta foi dada há muito tempo atrás.
Não há diferença. Não consigo encontrar a ligação agora - mas a resposta foi dada há muito tempo atrás.
Para Juan e os avisos do compilador, não há diferença ))
Não há diferença. Quando se compila tudo, tudo se reúne numa única chamada. É por isso que é melhor fazer tudo através de funções.
E comecemos também um fio à parte sobre o assunto e discutamos sobre ele como sobre os pips e os pontos... Isso vai dar às pessoas algo para fazer...
Vocês adoram impor as vossas opiniões a toda a gente.
Há um Mestrado com algum turno. Que MA_shift = 5;
Porque é possível obter o valor certo de MA a partir da barra zero do gráfico apenas se o duplo deslocamento negativo for passado para CopyBuffer?
CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf);
MA_Buf[0] tem agora o valor correcto.
Há um Mestrado com algum turno. Que MA_shift = 5;
Porque é possível tirar o valor correcto de MA da barra zero do gráfico, apenas se passar um turno duplo negativo para CopyBuffer?
CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf);
MA_Buf[0] tem agora o valor correcto.
Desenhe primeiro uma imagem e especifique o que é "barra zero" para o seu indicador com o parâmetro shift.
Leitura de uma variável, mais rápida do que uma função.
Nem por isso, verifiquei qual é mais rápido que _Symbol ou Symbol()https://www.mql5.com/ru/forum/160683/page933#comment_12780905.
o tempo de acesso é o mesmo, a optimização do código em MQL é muito fixe, por isso use o que for conveniente.
de acordo com os meus testes, o tempo de acesso pode ser diferente, dependendo de onde a variável é descrita e com que modificadores, mas existe uma velocidade de 2-5%, que em princípio pode ser reduzida à implementação numa determinada construção, depende do número da construção
Poderia aconselhar como obter fácil e rapidamente o resultado da última troca com o símbolo actual? Porque a documentação é muito complexa. Para obter o resultado, é necessário encontrar primeiro o bilhete do comércio exigido, para encontrar o bilhete é necessário encontrar o comércio na história pelo seu índice, o índice deve ser procurado na história, para não mencionar que devemos filtrar pelo símbolo.
Para evitar ir sempre ao histórico de negociação - basta apanhar o negócio naOnTradeTransaction com o tipo
TRADE_TRANSACTION_DEAL_ADD - adicionar transacção ao histórico
m_symbol.Name() - símbolo actual, InpMagic - identificador único do Expert Advisor
não é um facto, verifiquei qual é mais rápido que _Símbolo ou Símbolo()https://www.mql5.com/ru/forum/160683/page933#comment_12780905
Ou seja, o tempo de acesso é o mesmo, a optimização do código no MQL é muito fixe, por isso o que for conveniente, utilize-o.
de acordo com os meus testes, o tempo de acesso pode ser diferente, dependendo de onde a variável é descrita e com que modificadores, mas com uma velocidade de 2-5%, que em princípio pode ser reduzida à implementação numa determinada construção, depende do número da construção
Concordo que o optimizador funciona bem, mas confiar sempre no optimizador do compilador está errado.
Por estranho que pareça, estão em mql como indocumentados.É preciso pensar antecipadamente em como o código é executado no nível de memória, inicialização e retorno de valor.
Ou seja, calcular o número de acções executadas por operação e, se houver menos acções, o código é mais rápido. E tomar como prática escrever um código óptimo de uma só vez.
Em códigos curtos talvez não haja diferença, mas quando há um projecto com centenas de ficheiros, é quando aparecerão atrasos,
e só haverá um profiler e reescreverá o código. Cada um escolhe o seu ancinho )).
Também google para palavras-chave