Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Olá,
Estou tentando usar a função RAssignStringVector, mas parece que apenas o primeiro caractere de cada termo é copiado para a sessão do R.
Por exemplo, o vetor MQL5
{"abcd","2000","2000}
é copiado para o R como
{"a", "2", "2"}
Isso é um problema ou estou errado?
Observe que estou usando RAssignVector com vetor duplo sem problemas.
Obrigado.
Claudio.
Eu não uso o MT5, desculpe
Atenção!
No arquivo R.mqh, os nomes das variáveis vetor e matriz começaram a gerar um erro durante a compilação. Renomeie-as para outros nomes e tudo funcionará. Eu usei vectr e matr.
O editor destaca essas palavras em azul como um tipo de dados como int, double. Aparentemente, elas reservam palavras para novos tipos.
Descrição de todas as funções (copiada da versão anterior https://www.mql5.com/en/code/11112)
/**
* Retorna a versão da dll. Os 16 bits superiores do valor de retorno
* são a versão principal e os 16 bits inferiores, a secundária. Esse
* é usado em RInit() para garantir que esse arquivo de cabeçalho e
* zza dll se encaixem.
*/
int RGetDllVersion();
/**
* Isso não deve ser chamado diretamente, pois será
* chamado por RInit() após a verificação bem-sucedida da versão.
* Você deve chamar RInit() para iniciar uma nova sessão do R.
*/
long RInit_(string commandline,int debuglevel);
/**
* Encerrar a sessão do R. Chame isso em sua função deinit().
* Depois disso, o identificador não será mais válido.
*/
void RDeinit(long rhandle);
/**
* Retorne true se a sessão do R pertencente a esse identificador ainda estiver
* em execução. O R será encerrado em caso de erro fatal no código
* que você enviar. Você deve verificar isso no início
* de sua função de início e interromper todas as ações. O último
* comando antes da falha será encontrado no registro.
* Se o R não estiver mais em execução, essa biblioteca não emitirá mais
* mensagens de registro e ignorará silenciosamente todos os comandos.
*/
bool RIsRunning(long rhandle);
/**
* retorna true se o R ainda estiver executando um comando (resultante
* de uma chamada a RExecuteAsync())
*/
bool RIsBusy(long rhandle);
/**
* executa o código e não espera. Entretanto, qualquer chamada subsequente
* aguardará, pois só pode haver um thread em execução em
* qualquer momento. Use RIsBusy() para verificar se a execução foi concluída
*/
void RExecuteAsync(long rhandle,string code);
/**
* executa o código e espera até que ele seja concluído. Isso não
* retornará nada. Basicamente, você pode conseguir o mesmo com
* as funções RGet*(), pois avaliar a expressão também é
* apenas executar o código, a única diferença é que essas funções
* RGet*() tentarão adicionalmente analisar e retornar
* a saída, enquanto RExecute() apenas executará, aguardará e
* ignorará toda a saída.
*/
void RExecute(long rhandle,string code);
/**
* atribua um bool ao nome da variável. Em R, esse tipo é chamado de "lógico"
*/
void RAssignBool(long rhandle,string variable,bool value);
/**
* atribua um inteiro ao nome da variável.
*/
void RAssignInteger(long rhandle,string variable,int value);
/**
* atribua um double ao nome da variável.
*/
void RAssignDouble(long rhandle,string variable,double value);
/**
* atribua uma string ao nome da variável. Em R, esse tipo é chamado de "caractere"
*/
void RAssignString(long rhandle,string variable,string value);
/**
* atribui um vetor ao nome da variável. Se o tamanho não corresponder ao
* tamanho real da matriz, coisas ruins poderão acontecer.
*/
void RAssignVector(long rhandle,string variable,double &vectr[],int size);
/**
* atribua um vetor de caracteres (uma matriz de strings) à variável. Se você precisar de
* um fator, deverá executar o código para convertê-lo após esse comando. Em
* versões recentes do R, um vetor de strings não precisa de mais memória do que
* um fator e é mais fácil acrescentar novos elementos a ele.
*/
void RAssignStringVector(long rhandle,string variable,string &vectr[],int size);
/**
* atribua uma matriz ao nome da variável. A matriz deve ter o número da linha como a
* primeira dimensão (byrow=TRUE será usado nos dados brutos). Essa função é muito
* mais rápida do que construir uma matriz enorme (centenas de linhas) do zero, acrescentando
* novas linhas no final com RRowBindVector() para cada linha. Essa função é otimizada
* para obter uma enorme taxa de transferência com uma única chamada de função usando file-IO com os
* dados binários brutos. Para matrizes e vetores muito pequenos com apenas alguns elementos,
* isso pode ser uma sobrecarga muito grande e as outras funções serão mais rápidas. Quando você
* tiver a matriz com possivelmente milhares de linhas transferidas para o R, deverá
* usar apenas RRowBindVector() para aumentá-la lentamente com a chegada de novos
* vetores de dados, em vez de sempre enviar uma nova cópia da matriz inteira.
*/
void RAssignMatrix(long rhandle,string variable,double &matr[],int rows,int cols);
/**
* anexar uma linha a uma matriz ou dataframe. Isso será executado
* variable <- rbind(variable, vector)
* se o tamanho não corresponder ao tamanho real da matriz, poderão ocorrer coisas ruins.
*/
void RAppendMatrixRow(long rhandle,string variable,double &vectr[],int size);
/**
* retorna true se a variável existir, false caso contrário.
*/
bool RExists(long rhandle,string variable);
/**
* avalia a expressão e retorna um bool. A expressão pode ser qualquer código R
* que será avaliado como lógico. Se for um vetor de lógicas, apenas
* o primeiro elemento será retornado.
*/
bool RGetBool(long rhandle,string expression);
/**
* avalia a expressão e retorna um inteiro. A expressão pode ser qualquer código R
* que será avaliado como um número inteiro. Se for um ponto flutuante, ele será
* arredondado; se for um vetor, somente o primeiro elemento será retornado.
*/
int RGetInteger(long rhandle,string expression);
/**
* evaluate expression and return a double. A expressão pode ser qualquer código R
* que será avaliado como um número de ponto flutuante; se for um vetor,
* somente o primeiro elemento será retornado.
*/
double RGetDouble(long rhandle,string expression);
/**
* evaluate expression and return a vector of doubles. A expressão pode
* ser qualquer coisa que seja avaliada como um vetor de números de ponto flutuante.
* O valor de retorno é o número de elementos que podem ser copiados para a matriz
*. Ele nunca será maior que o tamanho, mas pode ser menor.
* Avisos são emitidos no nível de depuração 1 se os tamanhos não corresponderem.
* >>> Limitado a 100.000 elementos
*/
int RGetVector(long rhandle,string expression,double &vectr[],int size);
/**
* faça um print(expression) para fins de depuração. A saída será
* enviada para o monitor de depuração no nível de depuração 0.
*/
void RPrint(long rhandle,string expression);