Hai bisogno di aiuto con ???array fuori portata???

 

Publi

Hai bisogno di aiuto con ???array fuori portata???

 

Publi

Pagina 1 di 2 12 UltimaUltima
Risultati da 1 a 10 di 13

Discussione: Hai bisogno di aiuto con ???array fuori portata???

  1. #1
    Hey ragazzi,

    I miei occhi sanguinano


    Qualcuno può vedere cosa non va nel mio codice, ci sto provando da ore.

    Errore quando allegato al grafico: array fuori intervallo - in questa riga: double current_high = High[current_bar_index];

    Codice inserito int ThisBarTrade = 0;/ ------------------------------------------------ ------------------- /| Funzione di inizializzazione dell'indicatore personalizzato |/ ------------------------------------------------ ------------------- int OnInit() {/--- mappatura dei buffer degli indicatori/Ogni volta che l'indi viene ricaricato (es. passa da un TF all'altro, nuovo applica , ecc ...),/la barra corrente non viene verificata per le condizioni. ThisBarTrade = Tempo#91;0#93;;/--- return(INIT_SUCCEEDED); }/ ---------------------------------------------- -------------------- /| Funzione di deinizializzazione indicatore cliente |/ ------------------------------------------------ ------------------- int deinit() { return(0); }/ ---------------------------------------------- -------------------- /| Funzione di iterazione dell'indicatore personalizzato |/ ------------------------------------------------ ------------------- 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;) {/--- coppie di stringhe#91;#93;; lunghezza int = getAvailableCurrencyPairs(coppie); if (Barre != ThisBarTrade ) { ThisBarTrade = Barre;/assicura una sola opportunità di scambio per barra/Scorri i simboli for(int i=0; i lt; length; i ) {/Alert(Pair #, i 1, : , pairs#91;i#93; );/Ottieni index int current_bar_index = iHighest(coppie#91;i#93;, PERIOD_M5, MODE_HIGH, 1, 0); int previous_bar_index = iHighest(coppie#91;i#93;, PERIOD_M5, MODE_HIGH, 1, 1); int current_bar_index_low = iLowest(coppie#91;i#93;, PERIOD_M5, MODE_LOW, 1, 0); int previous_bar_index_low = iLowest(coppie#91;i#93;, PERIOD_M5, MODE_LOW, 1, 1);/Ottieni prezzi doppi current_high = High#91;current_bar_index#93;; double previous_high = High#91;previous_bar_index#93;; double current_low = Basso#91;current_bar_index_low#93;; double precedente_basso = basso#91;precedente_bar_index_basso#93;;/Logica - Inizia se (( precedente_basso 1.0 * Punto ) gt; corrente_basso || ( precedente_alto - 1.0 * Punto ) lt; corrente_alto ) { Alert(Pair #, i 1, : , pairs#91;i#93; , ha un massimo più alto o un minimo più basso); }/Logica - Fine }/per la lunghezza }/if Bars/--- restituisce il valore di prev_calculated per la chiamata successiva return(rates_total); }/ ---------------------------------------------- ------ // ------------------------------------------------ ------------------- int getAvailableCurrencyPairs(string availableCurrencyPairs#91;#93;) {/--- bool selezionato = false; const int symbolsCount = SymbolsTotal(selezionato); int currencypairsCount; ArrayResize(disponibileCurrencyPairs, symbolsCount); int idxCoppiaValuta = 0; for(int idxSymbol = 0; idxSymbol lt; symbolsCount; idxSymbol ) { string symbol = SymbolName(idxSymbol, selezionato); stringa firstChar = StringSubstr(simbolo, 0, 1); if(firstChar != # StringLen(symbol) == 6) { availableCurrencyPairs#91;idxCurrencyPair #93; = simbolo; } } currencypairsCount = idxCurrencyPair; ArrayResize(disponibileCurrencyPairs, currencypairsCount); restituire le coppie di valuteCount; }/ ---------------------------------------------- -------------------- classe CFix { } ExtFix;/Forza la valutazione delle espressioni durante il debug

  2. #2

    Citazione Originariamente Scritto da ;
    {quote} iHigh etc restituisce il prezzo doppio effettivo non un indice int. La sezione in/Ottieni prezzi utilizza i prezzi del grafico: Alto[], Basso[], ecc. sono i prezzi per il grafico corrente. Quindi ogni indice che ottieni sopra viene utilizzato solo con i prezzi A/U. Dovrebbero essere solo 4 righe in totale non 8. current_high=iHigh(symbol,tf,index); eccetera
    Grazie Beerun!! Quindi ora scansiona anche altre coppie, giusto? Inserito coppie di stringhe di codice#91;#93;; lunghezza int = getAvailableCurrencyPairs(coppie); if (Barre != ThisBarTrade ) { ThisBarTrade = Barre;/assicura una sola opportunità di scambio per barra/Scorri i simboli for(int i=0; i lt; length; i ) {/Ottieni i prezzi double current_high = iHigh(pairs#91;i#93;, PERIOD_M5, 0 ); double precedente_alto = iHigh(coppie#91;i#93;, PERIOD_M5, 1); double current_low = iLow(coppie#91;i#93;, PERIOD_M5, 0); double precedente_basso = iLow(coppie#91;i#93;, PERIOD_M5, 1);/Logica - Inizia se (( precedente_basso 1.0 * Punto ) gt; corrente_basso || ( precedente_alto - 1.0 * Punto ) lt; corrente_alto ) {/Alert(Pair #, i 1, : , pairs#91;i# 93; , ha un massimo più alto o un minimo più basso); }/Logica - Fine }/per la lunghezza }/se Bars

  3. #3

    Citazione Originariamente Scritto da ;
    {quote} Ti piace vero? coppie di stringhe[]; lunghezza int = getAvailableCurrencyPairs(coppie); if (Barre != ThisBarTrade ) { ThisBarTrade = Barre;/assicura una sola opportunità di scambio per barra/Scorri i simboli for(int i=0; i lt; length; i ) {/Alert(Pair #, i 1, : , pairs);/Ottieni index int current_bar_index = iHigh(coppie, PERIOD_M5, 0); int index_bar_precedente = iHigh(coppie, PERIOD_M5, 1); int current_bar_index_low = iLow(coppie, PERIOD_M5, 0); int previous_bar_index_low = iLow(coppie, PERIOD_M5, 1);/Stampa(coppie: coppie);...
    iHigh etc restituisce il prezzo doppio effettivo non un indice int. La sezione in/Ottieni prezzi utilizza i prezzi del grafico: Alto[], Basso[], ecc. sono i prezzi per il grafico corrente. Quindi ogni indice che ottieni sopra viene utilizzato solo con i prezzi A/U. Dovrebbero essere solo 4 righe in totale non 8. current_high=iHigh(symbol,tf,index); eccetera

  4. #4
    Citazione Originariamente Scritto da ;
    {quote} Sì, hai ragione, credo che ci abbia pensato troppo quando ho avuto questi problemi
    Fammi provare a cambiarlo
    Ti piace vero? Inserito coppie di stringhe di codice#91;#93;; lunghezza int = getAvailableCurrencyPairs(coppie); if (Barre != ThisBarTrade ) { ThisBarTrade = Barre;/assicura una sola opportunità di scambio per barra/Scorri i simboli for(int i=0; i lt; length; i ) {/Alert(Pair #, i 1, : , pairs#91;i#93; );/Ottieni index int current_bar_index = iHigh(coppie#91;i#93;, PERIOD_M5, 0); int precedente_bar_index = iHigh(coppie#91;i#93;, PERIOD_M5, 1); int current_bar_index_low = iLow(coppie#91;i#93;, PERIOD_M5, 0); int previous_bar_index_low = iLow(coppie#91;i#93;, PERIOD_M5, 1);/Stampa(coppie: coppie#91;i#93;/Ottieni prezzi doppi current_high = High#91;current_bar_index#93;; double previous_high = High#91;previous_bar_index#93;; double current_low = Basso#91;current_bar_index_low#93;; double precedente_basso = basso#91;precedente_bar_index_basso#93;;/Logica - Inizia se (( precedente_basso 1.0 * Punto ) gt; corrente_basso || ( precedente_alto - 1.0 * Punto ) lt; corrente_alto ) {/Alert(Pair #, i 1, : , pairs#91;i# 93; , ha un massimo più alto o un minimo più basso); }/Logica - Fine }/per la lunghezza }/se Bars

  5. #5
    Citazione Originariamente Scritto da ;
    Perché stai usando iHighest/iLowest per una singola barra? (...,1,0) Basta usare direttamente gli array di cohl. Non so se è previsto o meno, ma stai prendendo il più alto/il più basso di una coppia diversa e quindi usi quell'indice della barra solo su array aud/usd. Dovrebbe usare iHigh, iLow, ecc, se stai controllando altri simboli.
    Jeah hai ragione, penso troppo troppo quando ho avuto questi problemi
    Fammi provare a cambiarlo

  6. #6
    Citazione Originariamente Scritto da ;
    {quote} Classico mancato di 1 - che è fuori dall'array. Più probabilmente, il tuo ciclo sta contando troppi ed è andato oltre di 1. Controlla se ci sono effettivamente coppie[i] - più probabilmente, ne hai contate troppe.
    Come possono essere contati troppi quando viene eseguito automaticamente con la funzione getAvailableCurrencyPairs(pairs)? Ohh ragazzo, come può succedere
    , l'errore è scomparso e non ho cambiato a nel codice. Stesso broker, stesse coppie, stesso grafico quando allego sempre l'indi. Codice inserito int ThisBarTrade = 0;/ ------------------------------------------------ ------------------- /| Funzione di inizializzazione dell'indicatore personalizzato |/ ------------------------------------------------ ------------------- int OnInit() {/--- mappatura dei buffer degli indicatori/Ogni volta che l'indi viene ricaricato (es. passa da un TF all'altro, nuovo applica , ecc ...),/la barra corrente non viene verificata per le condizioni. ThisBarTrade = Tempo#91;0#93;;/--- return(INIT_SUCCEEDED); }/ ---------------------------------------------- -------------------- /| Funzione di deinizializzazione indicatore cliente |/ ------------------------------------------------ ------------------- int deinit() { return(0); }/ ---------------------------------------------- -------------------- /| Funzione di iterazione dell'indicatore personalizzato |/ ------------------------------------------------ ------------------- 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 {/--- coppie di stringhe#91;#93;; lunghezza int = getAvailableCurrencyPairs(coppie); if (Barre != ThisBarTrade ) { ThisBarTrade = Barre;/assicura una sola opportunità di scambio per barra/Scorri i simboli for(int i=0; i lt; length; i ) {/Alert(Pair #, i 1, : , pairs#91;i#93; );/Ottieni index int current_bar_index = iHighest(coppie#91;i#93;, PERIOD_M5, MODE_HIGH, 1, 0); int previous_bar_index = iHighest(coppie#91;i#93;, PERIOD_M5, MODE_HIGH, 1, 1); int current_bar_index_low = iLowest(coppie#91;i#93;, PERIOD_M5, MODE_LOW, 1, 0); int previous_bar_index_low = iLowest(coppie#91;i#93;, PERIOD_M5, MODE_LOW, 1, 1); Stampa(coppie: coppie#91;i#93;/Ottieni prezzi doppi current_high = High#91;current_bar_index#93;; double previous_high = High#91;previous_bar_index#93;; double current_low = Basso#91;current_bar_index_low#93;; double precedente_basso = basso#91;precedente_bar_index_basso#93;;/Logica - Inizia se (( precedente_basso 1.0 * Punto ) gt; corrente_basso || ( precedente_alto - 1.0 * Punto ) lt; corrente_alto ) {/Alert(Pair #, i 1, : , pairs#91;i# 93; , ha un massimo più alto o un minimo più basso); }/Logica - Fine}/per la lunghezza }/if Bars/--- restituisce il valore di prev_calculated per la chiamata successiva return(rates_total); }/ ---------------------------------------------- -------------------- / ------------- ---------------------------------------- int getAvailableCurrencyPairs(string availableCurrencyPairs#91;# 93 {/--- bool selezionato = falso; const int symbolsCount = SymbolsTotal(selezionato); int currencypairsCount; ArrayResize(disponibileCurrencyPairs, symbolsCount); int idxCoppiaValuta = 0; for(int idxSymbol = 0; idxSymbol lt; symbolsCount; idxSymbol ) { string symbol = SymbolName(idxSymbol, selezionato); stringa firstChar = StringSubstr(simbolo, 0, 1); if(firstChar != # StringLen(symbol) == 6) { availableCurrencyPairs#91;idxCurrencyPair #93; = simbolo; } } currencypairsCount = idxCurrencyPair; ArrayResize(disponibileCurrencyPairs, currencypairsCount); restituire le coppie di valuteCount; }/ ---------------------------------------------- -------------------- classe CFix { } ExtFix;/Forza la valutazione delle espressioni durante il debug

  7. #7
    Perché stai usando iHighest/iLowest per una singola barra? (...,1,0) Basta usare direttamente gli array di cohl. Non so se è previsto o meno, ma stai prendendo il più alto/più basso di una coppia diversa e quindi usi quell'indice della barra solo su array aud/usd. Dovrebbe usare iHigh, iLow, ecc, se stai controllando altri simboli.

  8. #8
    Citazione Originariamente Scritto da ;
    Sembra che sia solo l'ultimo che c'è -1
    {Immagine}
    Classico mancato di 1 - che è fuori campo. Più probabilmente, il tuo ciclo sta contando troppi ed è andato oltre di 1. Controlla se ci sono effettivamente coppie[i] - più probabilmente, ne hai contate troppe. Stampa cos'è Pair[i] e assicurati che ci sia effettivamente un valore.

  9. #9

  10. #10
    Sì come dici che è -1 Come lo correggo? Come può essere -1 quando ci sono candele sul grafico?

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
Il sito di forexmad utilizza cookie
Il sito di forexmad utilizza cookie, alcuni dei quali già installati. Per avere maggiori informazioni sui nostri cookie ti preghiamo di cliccare qui. Ti preghiamo di cliccare sul bottone a destra per accettare i nostri cookie. Se continui a navigare sul sito di forexmad assumeremo che sei d'accordo ad utilizzarli.