Precisa de ajuda com 'array fora de alcance'
Página 1 de 742 1 2 ÚltimaÚltima
Results 1 to 10 of 13

Thread: Precisa de ajuda com 'array fora de alcance'

  1. #1
    Ei pessoal,

    Meus olhos estão sangrando


    Alguém pode ver o que há de errado com o meu código, estou tentando há horas.

    Erro ao anexar ao gráfico: array fora do intervalo - nesta linha: double current_high = High[current_bar_index];

    Código inserido int ThisBarTrade = 0;/ ---------------------------------------------------------- ------------------- /| Função de inicialização do indicador personalizado |/ ---------------------------------------------------------- ------------------- int OnInit() {/--- mapeamento de buffers do indicador/Cada vez que o indi é recarregado (ou seja, alternar entre TFs, new apply , etc ...),/a barra atual não é verificada quanto a condições. ThisBarTrade = Time#91;0#93;;/--- return(INIT_SUCCEEDED); }/ ---------------------------------------------- -------------------- /| Função de desinicialização do indicador de cliente |/ ---------------------------------------------------------- ------------------- int deinit() { return(0); }/ ---------------------------------------------- -------------------- /| Função de iteração do indicador personalizado |/ ---------------------------------------------------------- ------------------- int OnCalculate(const int rate_total, const int prev_calculated, const datetime time#91;#93;, const double open#91;#93; , const double high#91;#93;, const double low#91;#93;, const double close#91;#93;, const long tick_volume#91;#93;, const long volume#91;#93; , const int spread#91;#93;) {/--- pares de string#91;#93;; int comprimento = getAvailableCurrencyPairs(pares); if (Bars != ThisBarTrade ) { ThisBarTrade = Bars;/garante apenas uma oportunidade de negociação por barra/Percorre os símbolos for(int i=0; i lt; length; i ) {/Alert(Pair #, i 1, : , pairs#91;i#93; );/Obtém o índice int current_bar_index = iHighest(pairs#91;i#93;, PERIOD_M5, MODE_HIGH, 1, 0); int anterior_bar_index = iHighest(pairs#91;i#93;, PERIOD_M5, MODE_HIGH, 1, 1); int current_bar_index_low = iLowest(pairs#91;i#93;, PERIOD_M5, MODE_LOW, 1, 0); int anterior_bar_index_low = iLowest(pairs#91;i#93;, PERIOD_M5, MODE_LOW, 1, 1);/Obter preços double current_high = High#91;current_bar_index#93;; double previous_high = High#91;previous_bar_index#93;; double current_low = Low#91;current_bar_index_low#93;; double previous_low = Low#91;previous_bar_index_low#93;;/Logic - Start if (( previous_low 1.0 * Point ) gt; current_low || ( previous_high - 1.0 * Point ) lt; current_high ) { Alert(Pair #, i 1, : , pairs#91;i#93; , tem um máximo mais alto ou um mínimo mais baixo); }/Logic - End }/for length }/if Bars/--- retorna o valor de prev_calculated para a próxima chamada return(rates_total); }/ ---------------------------------------------- -------------------- // ---------------------------------------------------------- ------------------- int getAvailableCurrencyPairs(string availableCurrencyPairs#91;#93;) {/--- bool selected = false; const int symbolCount = SymbolsTotal(selecionado); int currencypairsCount; ArrayResize(availableCurrencyPairs, symbolsCount); int idxCurrencyPair = 0; for(int idxSymbol = 0; idxSymbol lt; symbolCount; idxSymbol ) { string símbolo = SymbolName(idxSymbol, selected); string firstChar = StringSubstr(símbolo, 0, 1); if(firstChar != # StringLen(symbol) == 6) { availableCurrencyPairs#91;idxCurrencyPair #93; = símbolo; } } currencypairsCount = idxCurrencyPair; ArrayResize(availableCurrencyPairs, currencypairsCount); retornar moedaparesCount; }/ ---------------------------------------------- -------------------- class CFix { } ExtFix;/Força a avaliação de expressões durante a depuração

  2. #2

    {quote} iHigh etc retorna o preço duplo real, não um índice int. A seção em/Obter preços, está usando os preços do gráfico: High[], Low[], etc são os preços do gráfico atual. Portanto, cada índice que você obtém acima está sendo usado apenas com preços A/U. Deve ser apenas 4 linhas no total não 8. current_high=iHigh(symbol,tf,index); etc
    Obrigado Beerun!! Então agora ele também verifica outros pares, certo? Pares de string de código inseridos#91;#93;; int comprimento = getAvailableCurrencyPairs(pares); if (Bars != ThisBarTrade ) { ThisBarTrade = Bars;/garante apenas uma oportunidade de negociação por barra/Percorre os símbolos for(int i=0; i lt; length; i ) {/Obtém preços double current_high = iHigh(pairs#91;i#93;, PERIOD_M5, 0 ); double previous_high = iHigh(pairs#91;i#93;, PERIOD_M5, 1); double current_low = iLow(pairs#91;i#93;, PERIOD_M5, 0); double previous_low = iLow(pares#91;i#93;, PERIOD_M5, 1);/Logic - Start if (( previous_low 1.0 * Point ) gt; current_low || ( previous_high - 1.0 * Point ) lt; current_high ) {/Alerta(Par #, i 1, : , pairs#91;i# 93; , tem um máximo mais alto ou um mínimo mais baixo); }/Logic - End }/para comprimento }/if Bars

  3. #3

    {quote} Gostou desse certo? pares de strings[]; int comprimento = getAvailableCurrencyPairs(pares); if (Bars != ThisBarTrade ) { ThisBarTrade = Bars;/garante apenas uma oportunidade de negociação por barra/Percorre os símbolos for(int i=0; i lt; length; i ) {/Alert(Pair #, i 1, : , pairs);/Obtém o índice int current_bar_index = iHigh(pairs, PERIOD_M5, 0); int anterior_bar_index = iHigh(pares, PERIOD_M5, 1); int current_bar_index_low = iLow(pares, PERIOD_M5, 0); int anterior_bar_index_low = iLow(pares, PERIOD_M5, 1);/Print(pares: pares);...
    iHigh etc retorna o preço duplo real e não um índice int. A seção em/Obter preços, está usando os preços do gráfico: High[], Low[], etc são os preços do gráfico atual. Portanto, cada índice que você obtém acima está sendo usado apenas com preços A/U. Deve ser apenas 4 linhas no total não 8. current_high=iHigh(symbol,tf,index); etc

  4. #4
    {quote} Sim, você está certo, pensar demais eu acho que quando eu tive esses problemas
    Deixe-me tentar mudá-lo
    Como este certo? Pares de string de código inseridos#91;#93;; int comprimento = getAvailableCurrencyPairs(pares); if (Bars != ThisBarTrade ) { ThisBarTrade = Bars;/garante apenas uma oportunidade de negociação por barra/Percorre os símbolos for(int i=0; i lt; length; i ) {/Alert(Pair #, i 1, : , pairs#91;i#93; );/Obtém o índice int current_bar_index = iHigh(pairs#91;i#93;, PERIOD_M5, 0); int anterior_bar_index = iHigh(pairs#91;i#93;, PERIOD_M5, 1); int current_bar_index_low = iLow(pairs#91;i#93;, PERIOD_M5, 0); int anterior_bar_index_low = iLow(pairs#91;i#93;, PERIOD_M5, 1);/Print(pares: pares#91;i#93;/Obter preços double current_high = High#91;current_bar_index#93;; double previous_high = High#91;previous_bar_index#93;; double current_low = Low#91;current_bar_index_low#93;; double previous_low = Low#91;previous_bar_index_low#93;;/Logic - Start if (( previous_low 1.0 * Point ) gt; current_low || ( previous_high - 1.0 * Point ) lt; current_high ) {/Alerta(Par #, i 1, : , pairs#91;i# 93; , tem um máximo mais alto ou um mínimo mais baixo); }/Logic - End }/para comprimento }/if Bars

  5. #5
    Por que você está usando iHighest/iLowest para uma única barra? (...,1,0) Basta usar os arrays cohl diretamente. Eu não sei se é intencional ou não, mas você está pegando o mais alto/mais baixo de um par diferente e, em seguida, usa esse índice de barra apenas em matrizes aud/usd. Deve estar usando iHigh, iLow, etc, se você estiver verificando outros símbolos.
    Jeah você está certo, pensando demais eu acho que quando eu tive esses problemas
    Deixe-me tentar mudá-lo

  6. #6
    {quote} Clássico perdido por 1 - que está fora da matriz. Mais provavelmente, seu loop está contando demais e passou de 1. Verifique se realmente existem pares[i] - mais provavelmente, você contou muitos.
    Como pode ser contado muitos quando é feito automaticamente com a função getAvailableCurrencyPairs(pairs)? Ohh garoto, como isso pode acontecer
    , o erro desapareceu e não alterei nada no código. Mesmo corretor, mesmos pares, mesmo gráfico quando eu atribuo o indicador o tempo todo. Código inserido int ThisBarTrade = 0;/ ---------------------------------------------------------- ------------------- /| Função de inicialização do indicador personalizado |/ ---------------------------------------------------------- ------------------- int OnInit() {/--- mapeamento de buffers do indicador/Cada vez que o indi é recarregado (ou seja, alternar entre TFs, new apply , etc ...),/a barra atual não é verificada quanto a condições. ThisBarTrade = Time#91;0#93;;/--- return(INIT_SUCCEEDED); }/ ---------------------------------------------- -------------------- /| Função de desinicialização do indicador de cliente |/ ---------------------------------------------------------- ------------------- int deinit() { return(0); }/ ---------------------------------------------- -------------------- /| Função de iteração do indicador personalizado |/ ---------------------------------------------------------- ------------------- int OnCalculate(const int rate_total, const int prev_calculated, const datetime time#91;#93;, const double open#91;#93; , const double high#91;#93;, const double low#91;#93;, const double close#91;#93;, const long tick_volume#91;#93;, const long volume#91;#93; , const int spread#91;#93 {/--- pares de string#91;#93;; int comprimento = getAvailableCurrencyPairs(pares); if (Bars != ThisBarTrade ) { ThisBarTrade = Bars;/garante apenas uma oportunidade de negociação por barra/Percorre os símbolos for(int i=0; i lt; length; i ) {/Alert(Pair #, i 1, : , pairs#91;i#93; );/Obtém o índice int current_bar_index = iHighest(pairs#91;i#93;, PERIOD_M5, MODE_HIGH, 1, 0); int anterior_bar_index = iHighest(pairs#91;i#93;, PERIOD_M5, MODE_HIGH, 1, 1); int current_bar_index_low = iLowest(pairs#91;i#93;, PERIOD_M5, MODE_LOW, 1, 0); int anterior_bar_index_low = iLowest(pairs#91;i#93;, PERIOD_M5, MODE_LOW, 1, 1); Print(pares : pares#91;i#93;/Obter preços double current_high = High#91;current_bar_index#93;; double previous_high = High#91;previous_bar_index#93;; double current_low = Low#91;current_bar_index_low#93;; double previous_low = Low#91;previous_bar_index_low#93;;/Logic - Start if (( previous_low 1.0 * Point ) gt; current_low || ( previous_high - 1.0 * Point ) lt; current_high ) {/Alerta(Par #, i 1, : , pairs#91;i# 93; , tem um máximo mais alto ou um mínimo mais baixo); }/Lógica - Fim}/para comprimento }/if Bars/--- retorna o valor de prev_calculated para a próxima chamada return(rates_total); }/ ---------------------------------------------- -------------------- / -------------------------- ---------------------------------------- int getAvailableCurrencyPairs(string availableCurrencyPairs#91;# 93 {/--- bool selecionado = false; const int symbolCount = SymbolsTotal(selecionado); int currencypairsCount; ArrayResize(availableCurrencyPairs, symbolsCount); int idxCurrencyPair = 0; for(int idxSymbol = 0; idxSymbol lt; symbolCount; idxSymbol ) { string símbolo = SymbolName(idxSymbol, selected); string firstChar = StringSubstr(símbolo, 0, 1); if(firstChar != # StringLen(symbol) == 6) { availableCurrencyPairs#91;idxCurrencyPair #93; = símbolo; } } currencypairsCount = idxCurrencyPair; ArrayResize(availableCurrencyPairs, currencypairsCount); retornar moedaparesCount; }/ ---------------------------------------------- -------------------- class CFix { } ExtFix;/Força a avaliação de expressões durante a depuração

  7. #7
    Por que você está usando iHighest/iLowest para uma única barra? (...,1,0) Basta usar os arrays cohl diretamente. Eu não sei se é intencional ou não, mas você está pegando o mais alto/mais baixo de um par diferente e, em seguida, usa esse índice de barra apenas em matrizes aud/usd. Deve estar usando iHigh, iLow, etc, se você estiver verificando outros símbolos.

  8. #8
    Parece que é apenas o último que há -1
    {imagem}
    Clássico perdido por 1 - que está fora da matriz. Mais provavelmente, seu loop está contando demais e passou de 1. Verifique se realmente existem pares[i] - mais provavelmente, você contou muitos. Imprima o que é Pair[i] e certifique-se de que realmente há valor.

  9. #9
    1 Anexo(s) Parece que é só o último que tem -1


  10. #10
    Sim, como você diz que é -1 Como faço para corrigir isso? Como pode ser -1 quando há velas no gráfico?

Permissões de Publicação

  • Não pode publicar novos tópicos
  • Não pode publicar respostas
  • Não pode publicar anexos
  • Não pode editar as suas publicações
  •  
  • Código BB está Ativo
  • Smilies estão Ativos
  • Código [IMG] está Ativo
  • Código [VIDEO] está Ativo
  • Código HTML está Desligado
O site da tradingintuitivo utiliza cookies
O site da tradingintuitivo utiliza cookies, alguns já foram definidos. Pode ler sobre a nossa utilização de cookies aqui. Por favor, clique no botão à direita para aceitar os nossos cookies. Se continuar a usar o site da tradingintuitivo, vamos supor que aceita os nossos cookies.