начал пробовать условие пока только на одном ТФ, что удалось сделать за некоторое время:
1) получилось прописать условие и как результат отображение нужных инструментов "Pair"
2) получилось удалять данные при обновлении которые не подошли условию.
Остается все тот же вопрос:
Как удалить "не прошедшие условия" данные и заполнить таблицу только с данными по условию???
void DATA_RSI_TIMEFRAME(ENUM_TIMEFRAMES TF,int X_AXIS) { int i; int Instruments=ArraySize(TradePairs); for(i=0;i<Instruments;i++) { //--- Arrays Handle Indicators RSI_handle =iRSI(TradePairs[i],TF,MaPeriod,PRICE_CLOSE); if(RSI_handle<0) {Print("RSI_handle_TIME_FRAME NOT CREATET: = ",INVALID_HANDLE); Print("execution error = ",GetLastError());return;} //--- BarsHistory=Bars(TradePairs[i],TF); if(BarsHistory<CountsBars)BarsHistory=BarsHistory; else BarsHistory=CountsBars; if(BarsHistory==0)BarsHistory=0; //--- Копируем значения хендла индикатора в буффер индикатора if(CopyBuffer(RSI_handle,0,0,BarsHistory,RSI)<=0) {Print("RSI_handle_TIME_FRAME Failed to copy indicator. Error = ",GetLastError());return;} ArraySetAsSeries(RSI,true); //---находим стандартное отклонение между средней и ценой закрытия на 1 баре //=============================================== if(RSI[1]>50)RSIColor=clrGreen;else RSIColor=clrRed; //--- if(RSI_handle!=INVALID_HANDLE)IndicatorRelease(RSI_handle); //--- if(RSI[1]>60||RSI[1]<40) { RectLabelCreate(0,"rTable", 0,3,y+88,1600,(i*17),clrGray,BORDER_FLAT,CORNER_LEFT_UPPER,clrBlack,STYLE_SOLID,0,true,false,false,0); RectLabelCreate(0,"rTableDN", 0,3,y+90+(i*16),1600,60,clrGray,BORDER_FLAT,CORNER_LEFT_UPPER,clrBlack,STYLE_SOLID,0,true,false,true,0); //==== RectLabelCreate(0,"rRange%MN1" +IntegerToString(i),0,7,y+90+(i*16),35,16,clrBlack,BORDER_FLAT,CORNER_LEFT_UPPER,clrBlack,STYLE_SOLID,0,true,false,false,0); RectLabelCreate(0,"rRangePpMN1" +IntegerToString(i),0,41,y+90+(i*16),35,16,clrBlack,BORDER_FLAT,CORNER_LEFT_UPPER,clrBlack,STYLE_SOLID,0,true,false,false,0); RectLabelCreate(0,"rRange%W1" +IntegerToString(i),0,76,y+90+(i*16),35,16,clrBlack,BORDER_FLAT,CORNER_LEFT_UPPER,clrBlack,STYLE_SOLID,0,true,false,false,0); RectLabelCreate(0,"rRangePpW1" +IntegerToString(i),0,110,y+90+(i*16),35,16,clrBlack,BORDER_FLAT,CORNER_LEFT_UPPER,clrBlack,STYLE_SOLID,0,true,false,false,0); RectLabelCreate(0,"rRange%D1" +IntegerToString(i),0,145,y+90+(i*16),35,16,clrBlack,BORDER_FLAT,CORNER_LEFT_UPPER,clrBlack,STYLE_SOLID,0,true,false,false,0); RectLabelCreate(0,"rRangePpD1" +IntegerToString(i),0,179,y+90+(i*16),35,16,clrBlack,BORDER_FLAT,CORNER_LEFT_UPPER,clrBlack,STYLE_SOLID,0,true,false,false,0); //=== RectLabelCreate(0,"rLastBid" +IntegerToString(i),0,215,y+90+(i*16),60,16,clrBlack,BORDER_FLAT,CORNER_LEFT_UPPER,clrBlack,STYLE_SOLID,0,true,false,false,0); //=== RectLabelCreate(0,"rColors" +IntegerToString(i),0,275,y+90+(i*16),8,16,clrBlack,BORDER_FLAT,CORNER_LEFT_UPPER,clrBlack,STYLE_SOLID,0,true,false,false,0); ButtonCreate(0,"Pair" +IntegerToString(i),0,283,y+90+(i*16),55,17,CORNER_LEFT_UPPER,StringSubstr(TradePairs[i],0,6),"Arial",8,clrBlack,clrWhiteSmoke,clrNONE,false,false,true,0); //=== RectLabelCreate(0,"rTools" +IntegerToString(i),0,1602,y+90+(i*16),53,16,clrBlack,BORDER_FLAT,CORNER_LEFT_UPPER,clrBlack,STYLE_SOLID,0,true,false,false,0); LabelCreate(0,"rTools_" +IntegerToString(i),0,1607,y+90+(i*16),CORNER_LEFT_UPPER,StringSubstr(TradePairs[i],0,6),"Arial",8,clrWhite,0,ANCHOR_LEFT_UPPER,false,false,true,0); if(!LabelCreate(0,"rLaCrRSI_" +IntegerToString(i),0,X_AXIS+5,y+90+(i*16),CORNER_LEFT_UPPER,DoubleToString(RSI[1],1),"Arial",8,RSIColor,0,ANCHOR_LEFT_UPPER,false,false,true,0))return; if(!RectLabelCreate(0,"rReLaCrRSI_" +IntegerToString(i),0,X_AXIS,y+90+(i*16),60,16,clrBlack,BORDER_FLAT,CORNER_LEFT_UPPER,clrBlack,STYLE_SOLID,0,true,false,false,0))return; } if(RSI[1]<60 && RSI[1]>40) { ObjectDelete(0,"rRange%MN1" +IntegerToString(i)); ObjectDelete(0,"rRangePpMN1"+IntegerToString(i)); ObjectDelete(0,"rRange%W1" +IntegerToString(i)); ObjectDelete(0,"rRangePpW1" +IntegerToString(i)); ObjectDelete(0,"rRange%D1" +IntegerToString(i)); ObjectDelete(0,"rRangePpD1" +IntegerToString(i)); ObjectDelete(0,"rLastBid" +IntegerToString(i)); ObjectDelete(0,"rColors" +IntegerToString(i)); ObjectDelete(0,"Pair" +IntegerToString(i)); ObjectDelete(0,"rTools" +IntegerToString(i)); ObjectDelete(0,"rTools_" +IntegerToString(i)); ObjectDelete(0,"rLaCrRSI_" +IntegerToString(i)); ObjectDelete(0,"rReLaCrRSI_"+IntegerToString(i)); } } }
Файлы:
Search_for_FORUM_1.1.mq5
92 kb

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый день, уважаемые трейдеры, программисты, любители и профи!
В программировании не долго, но пробую писать новое постоянно. Читаю форумы и статьи для самообучения.
Решил написать таблицу для Forex чтобы торговать было удобнее. Пишу без ООП, по причине "читаемости" для себя кода, и конечно же НЕ специалист в этом.
Столкнулся с некоторым вопросами, который не смог самостоятельно решить:
1) можно ли сделать сортировку списка "Pair" чтобы отображался не весь список, а только те, что подходят условию (например if(RSI[1]>80) и if(RSI[1]<20) ) и с обновлением данных, значение списка менялось на те, что подходят условию?
как я понимаю надо что то сделать с массивом TradePairs.
надо убрать из списка те инструменты, у которых значения не подходят по условию.
2) можно ли как то обойти то, что компилятор или терминал воспринимает таймфрейм-периоды как одинаковые (это PERIOD_M1 и PERIOD_M12, так же PERIOD_H1 и PERIOD_H12)?
в таблице он почему то не отображает часть данных при обновлении (нового бара данного периода). Такое только с этими таймфреймами.
3) помогите с кодом по времени до конца бара (начиная от H1 и выше не получается нормально отобразить)
Прикладываю код таблицы, может кому и будет интересно (на здоровье!)во вкладке "Вложенное".
Сюда прикрепляю место проблемной зоны №1:
Заранее благодарю всех , кто сможет как то помочь, направить.)))