[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 147
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Спасибо,уважаемые,за советы.Всё работает,но при установке индикатора он странно рисуется(см.график).Отступ (в барах) от левого края окна графика до вертикальной жёлтой линии всегда ПОСТОЯНЕН при ЛЮБОМ количестве видимых баров в окне и равен восьми барам.Как только эти восемь баров уйдут за левую границу окна,ВСЕ линии графика сразу же появляются и дальше всё идёт нормально.Можно ли это исправить и как?
#property indicator_separate_window #property indicator_buffers 4 #property indicator_color1 Lime #property indicator_color2 Red #property indicator_color3 Aqua #property indicator_color4 DarkOrange #property indicator_width1 2 #property indicator_width3 2 //--- buffers double Macd1Buffer[]; double Signal1Buffer[]; double Macd2Buffer[]; double Signal2Buffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,Macd1Buffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,Signal1Buffer); SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2,Macd2Buffer); SetIndexStyle(3,DRAW_LINE); SetIndexBuffer(3,Signal2Buffer); IndicatorDigits(Digits); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- Comment(""); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { double max1=-0.01,min1=0.01, max2=-0.01,min2=0.01, max_M1=-0.01,min_M1=0.01, max_M2=-0.01,min_M2=0.01, max_S1=-0.01,min_S1=0.01, max_S2=-0.01,min_S2=0.01; int bars_counted=WindowBarsPerChart()-1, limit; limit=bars_counted; //---- macd counted in the 1-st buffer for(int i=0; i<limit; i++) { Macd1Buffer[i]=iMA(NULL,0,6,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i); Macd2Buffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i); max_M1=MathMax(Macd1Buffer[i],max_M1); min_M1=MathMin(Macd1Buffer[i],min_M1); max_M2=MathMax(Macd2Buffer[i],max_M2); min_M2=MathMin(Macd2Buffer[i],min_M2); } for( i=0; i<limit; i++) { Signal1Buffer[i]=iMAOnArray(Macd1Buffer,Bars,5,0,MODE_SMA,i); Signal2Buffer[i]=iMAOnArray(Macd2Buffer,Bars,9,0,MODE_SMA,i); max_S1=MathMax(Signal1Buffer[i],max_S1); min_S1=MathMin(Signal1Buffer[i],min_S1); max_S2=MathMax(Signal2Buffer[i],max_S2); min_S2=MathMin(Signal2Buffer[i],min_S2); } max1=MathMax(max_M1,max_S1); min1=MathMin(min_M1,min_S1); //---- done Comment( "\n"," Баров = ",WindowBarsPerChart()-1, "\n"," max_M1 = ",max_M1, "\n"," min_M1 = ",min_M1, "\n"," max_S1 = ",max_S1, "\n"," min_S1 = ",min_S1, "\n"," max_M2 = ",max_M2, "\n"," min_M2 = ",min_M2, "\n"," max_S2 = ",max_S2, "\n"," min_S2 = ",min_S2, "\n"," max1 = ",max1, "\n"," min1 = ",min1, "\n"," max2 = ",max2, "\n"," min2 = ",min2); //---- return(0); } //+------------------------------------------------------------------+Спасибо,уважаемые,за советы.Всё работает,но при установке индикатора он странно рисуется(см.график).Отступ (в барах) от левого края окна графика до вертикальной жёлтой линии всегда ПОСТОЯНЕН при ЛЮБОМ количестве видимых баров в окне и равен восьми барам.Как только эти восемь баров уйдут за левую границу окна,ВСЕ линии графика сразу же появляются и дальше всё идёт нормально.Можно ли это исправить и как?
попробуйте вот так
// обработка видимых баров. int bars_count=WindowBarsPerChart(); int bar=WindowFirstVisibleBar(); for(int i=0; i<bars_count; i++,bar--) { // номера баров уменьшаются, так как нумерация идет в обратном порядке. // ... }Эта конструкция кода позволяет при каждом новом тике пересчитывать индикатор только на нулевом и первом (для проверки) барах,а не пересчитывать уже посчитанный индикатор заново.А мне надо построить индикатор по ВСЕМ ВИДИМЫМ в окне барам,а потом найти его max и min именно на этом участке!Помогите решить проблему,указанную в предыдущем моём посте.Есть пример.Но мне не всё в нём понятно.Кто-нибудь может построчно растолковать эти три строчки?
Не совсем понятно что вам надо, если вам нужно найти MAX и MIN видимых баров индикатора,сначала рисуем индикатор, а потом ищем.
Может лучше WindowPriceMax(), WindowPriceMin() использовать .
Stepan2
Работает
всё-таки еть глюк у массивов, но с while
c for работает без проблем
))
Добрый день.
Люди, подскажите чем тестировать советники. Потому что встроенный в МТ дает в среднем 50% качества моделирования, а на скринах люди выкладывают больше 90%.
Добрый день.
Люди, подскажите чем тестировать советники. Потому что встроенный в МТ дает в среднем 50% качества моделирования, а на скринах люди выкладывают больше 90%.
если у вас есть вся минутная история, то будет 90%. 99% достигается при самостоятельном создании тиковой истории fxt. Обычно это делают с помощью котировок дукаскопи. Поищите в гугле скрипты по теме 99% качество тестирования
Добрый день как в коде советника реализовать условие чтобы однотипные ордера выставлялись через 50 пунктов от последного ордера