Сделать эти переменные массивами-таймсериями (при инициализации вызвать ArraySetAsSeries). На каждом новом баре изменять размер массива, добавляя к значению нового элемента массива значение предыдущего элемента массива.
int ProfitBuy[],ProfitSell[]; double PriceBuy,PriceSell; void start() { int nTotal = iBars(NULL, PERIOD_CURRENT); if (ArraySize(ProfitBuy) != nTotal || ArraySize(ProfitSell) != nTotal) if (ArrayResize(ProfitBuy, nTotal, ARRAY_RESERVE_SIZE) != nTotal || ArrayResize(ProfitSell, nTotal, ARRAY_RESERVE_SIZE) != nTotal) { Print("Fail"); return; } for(i=limit-1; i>=0; i--) { double ArrowBuy=iCustom(Symbol(),0,"Indicator", 0,i); double ArrowSell=iCustom(Symbol(),0,"Indicator", 1,i); if(ArrowBuy!=0.0 && PriceBuy==0.0) PriceBuy=Open[i]; if(ArrowSell!=0.0 && PriceSell==0.0) PriceSell=Open[i]; if(PriceBuy!=0.0 && PriceSell!=0.0) { if(PriceSell>PriceBuy) ProfitBuy[i] = ProfitBuy[i + 1] + 1; if(PriceBuy>PriceSell) ProfitSell[i] = ProfitSell[i + 1] + 1; PriceBuy=0.0; PriceSell=0.0; } }//limit END }//start END
Не проверял. Вполне возможно, что будут выходы за пределы массива, т. е. нужно добавить соответствующие проверки. Также при регистрации нового бара переместить значения элементов массивов вверх.
Вполне возможно, что будут выходы за пределы массива
С этим не сложно разобраться
Не проверял.
Тоже пока не проверял, но как я буду получать весь перечень полученных значений за циклом, вот в чём вопрос?
if(PriceSell>PriceBuy) ProfitBuy[i] = ProfitBuy[i + 1] + 1; if(PriceBuy>PriceSell) ProfitSell[i] = ProfitSell[i + 1] + 1; }//limit END Далее здесь требуется получать все данные по истории для ProfitBuy[i] и ProfitSell[i]
На каждом новом баре изменять размер массива, добавляя к значению нового элемента массива значение предыдущего элемента массива.
Сделал по другому, теперь за циклом "limit" в журнале я вижу все полученные значения
И появилась новая проблема, получаю не окончательное значение а все подряд до итога, т.е. (1,2,3,4,5,6...итог 250)
Как забирать только максимальное полученное значение (250, 332, 180, 460....)?
Эти максимальные значения получаются после подмены параметров индикатора на каждом тике (типа тестер сигналов)
//ИНДИКАТОР СИГНАЛ СТРЕЛКИ #property indicator_chart_window #property indicator_buffers 2 int n,b,s; double ProfitBuy[],ProfitSell[]; double PriceBuy,PriceSell; void init() { SetIndexBuffer(0,ProfitBuy); SetIndexStyle(0,DRAW_NONE); SetIndexBuffer(1,ProfitSell); SetIndexStyle(1,DRAW_NONE); }//init END void start() { for(i=limit-1; i>=0; i--) { double ArrowBuy=iCustom(Symbol(),0,"Indicator", 0,i); double ArrowSell=iCustom(Symbol(),0,"Indicator", 1,i); if(ArrowBuy!=0.0 && PriceBuy==0.0) PriceBuy=Open[i]; if(ArrowSell!=0.0 && PriceSell==0.0) PriceSell=Open[i]; if(PriceBuy!=0.0 && PriceSell!=0.0) { n++; if(PriceSell>PriceBuy) {b++; ProfitBuy[n]=b;} if(PriceBuy>PriceSell) {s++; ProfitSell[n]=s;} PriceBuy=0.0; PriceSell=0.0; } }//limit END int ProfitB=0,ProfitS=0; for(int j=0; j<n; j++) { if(ProfitBuy[j]!=EMPTY_VALUE) ProfitB=int(ProfitBuy[j]); if(ProfitSell[j]!=EMPTY_VALUE) ProfitS=int(ProfitSell[j]); Print("Профитных BUY = " +ProfitB+ " / Профитных SELL = "+ProfitS); } }//start END
Как забирать только максимальное полученное значение (250, 332, 180, 460....)?
Отсортировать полученный массив. Даже функция есть - ArraySort().
Вы смотрели в документации, что возвращает ArraySort?
Зачем смотреть доку, когда можно спросить на форуме!
Зачем смотреть доку, когда можно спросить на форуме!
На форуме понятней где копать чем в документации))
Вы смотрели в документации, что возвращает ArraySort?
Мне это ни о чём не говорит))
На форуме понятней где копать чем в документации))
Сортирует многомерный числовой массив по возрастанию значений в первом измерении.Мне это ни о чём не говорит))
Ну как же Вы тогда тользуетесь функцией, если ее описание ни о чем не говорит? ))
Подсказка: смотреть нужно сигнатуру функции и описание возвращаемого значения, там все ответы, а не в общем описании.
Подсказка: смотреть нужно сигнатуру функции и описание возвращаемого значения, там все ответы, а не в общем описании.
А примером можно помочь?))
Если не понятна суть функции, то и описание не прояснит ситуацию.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Индикатор
Есть полученные значения в цикле для ProfitBuy и ProfitSell
Если смотреть Print() внутри этого цикла, то видно в журнале все эти полученные значения перебором за весь период
А если Print() за пределами этого цикла, то видно только последнее полученное значение
Подскажите, как сделать перебор всех полученных значений за пределами этого цикла?
Требуется вытащить все полученные значения ProfitBuy и ProfitSell