В чем именно заключается вопрос?
Этот вызов вылетает за пределы массива. Проверка в комменте выявила что если rExtSymbolsTotal >1000 происходит вылет.
//+------------------------------------------------------------------+ //| Счёт валютных пар | //+------------------------------------------------------------------+ int rSymbolsIndex(string SymbolName){ int i=0; i=rExtSymbolsTotal; rExtSymbolsTotal++; rExtSymbols[i]=SymbolName; rStrComOrd[i]=OrderComment(); rExtSymbolsSummaries[i][rTICKET]=0.0; rExtSymbolsSummaries[i][rLOTS]=0.0; rExtSymbolsSummaries[i][rSWOP]=0.0; rExtSymbolsSummaries[i][rTIME]=0.0; rExtSymbolsSummaries[i][rTYPE]=0.0; rExtSymbolsSummaries[i][rPROFIT]=0.0; rExtSymbolsSummaries[i][rPIPS]=0.0; return(i);}
Этот вызов вылетает за пределы массива. Проверка в комменте выявила что если rExtSymbolsTotal >1000 происходит вылет.
Да, вы правы. Никто не знал что такое бывает, спасибо что сообщили.
Да, вы правы. Никто не знал что такое бывает, спасибо что сообщили.
Сарказм просто блеск, я аж ослеп от остроумия!! Сказал бы куда идти!! Но здесь нельзя((
Сарказм просто блеск, я аж ослеп от остроумия!! Сказал бы куда идти!! Но здесь нельзя((
Код нужно показывать не огрызком!
Что это и где инициализация?
rExtSymbolsSummaries
По текущему коду видно, что вам проще использовать массив структуры
Код нужно показывать не огрызком!
Что это и где инициализация?
По текущему коду видно, что вам проще использовать массив структуры
Весь код неразумно сливать, много души и средств вложено
Обращается только сюда
//+------------------------------------------------------------------+ //| Сбор данных по валютным парам | //+------------------------------------------------------------------+ int rAnalyze() { int i,index,type,total=OrdersTotal(); //---- for(i=0; i<total; i++){ if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; type=OrderType(); if(type!=OP_BUY && type!=OP_SELL) continue; index=rSymbolsIndex(OrderSymbol()); if(index<0||index>=SYMBOLS_MAX) continue; //---- rExtSymbolsSummaries[index][rORDERS]++; rStrComOrd[index]=OrderComment(); rExtSymbolsSummaries[index][rTYPE]=OrderType(); rExtSymbolsSummaries[index][rTIME]=int(OrderOpenTime()); rExtSymbolsSummaries[index][rSWOP]=OrderSwap(); rExtSymbolsSummaries[index][rPROFIT]=OrderProfit()+OrderSwap()+OrderCommission(); rExtSymbolsSummaries[index][rTICKET]=OrderTicket(); rExtSymbolsSummaries[index][rLOTS]=OrderLots(); if(type==OP_BUY) rExtSymbolsSummaries[index][rPIPS]=(MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT); if(type==OP_SELL) rExtSymbolsSummaries[index][rPIPS]=(OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK))/MarketInfo(OrderSymbol(),MODE_POINT); } total=0; for(i=0; i<rExtSymbolsTotal; i++){ if(rExtSymbolsSummaries[i][rORDERS]>0) total++;} return(total);}
Этот вызов вылетает за пределы массива. Проверка в комменте выявила что если rExtSymbolsTotal >1000 происходит вылет.
Пока все логично: массив имеет размерность 1000 элементов. Обращение к элементу с индексом 1000 или более должно приводить к подобной ошибке.
Попытайтесь все же сформулировать вопрос, если он есть, конечно.
Попытайтесь все же сформулировать вопрос, если он есть, конечно.
Вопрос единственный, как предотвратить этот вылет за пределы массива.
Цикл по всем ордерам не помогает, в итоге не вся информация объектов отображается.
Вопрос единственный, как предотвратить этот вылет за пределы массива.
Цикл по всем ордерам не помогает, в итоге не вся информация объектов отображается.
размер массива где задаете?
Только в переменных за стартом
double rExtSymbolsSummaries[SYMBOLS_MAX][8];
В init, то не принимает
int OnInit(){ SetIndexBuffer(0,rExtSymbolsSummaries); SetIndexStyle(0,DRAW_NONE); return(INIT_SUCCEEDED);}
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В коде есть условие и
если в таком виде rSymbolsTotal накрутил > 1000, то вылетает ошибка по Symbols[i] - "выход за пределы массива"
i=rSymbolsTotal; rSymbolsTotal++; Symbols[i]=SymbolName;
а если я верну значение к нулю, то работает корректно, но удаляет объекты и снова их восстанавливает, т.е. всё пропадает на графике и заново восстанавливается