ddXC=dXB-MathAbs(dXA-dXB)*VP_Kbc_x; if (ddXC>=0) ObjectCreateTrend1("VP_TF1"+TimeToStr(Time[dXA],TIME_DATE)+TimeToStr(Time[dXA],TIME_MINUTES), OBJ_TRIANGLE,0,Time[dXA],dA,Time[dXB],dB,Time[ddXC],dB-MathAbs(dA-dB)*VP_Kbc_y,Red); else ObjectCreateTrend1("VP_TF1"+TimeToStr(Time[dXA],TIME_DATE)+TimeToStr(Time[dXA],TIME_MINUTES), OBJ_TRIANGLE,0,Time[dXA],dA,Time[dXB],dB,Time[dXB]+NormalizeDouble(MathAbs(dXA-dXB)*VP_Kbc_x*Period()*60,0),dB-MathAbs(dA-dB)*VP_Kbc_y,Red);выходные тоже как-то обходил сейчас уже не припомню где код, но там вроде просто прибавлял потерянное время выходных
Я уже писал, что форма
- не работает корректно! Может быть, в виде Time[dXB]+NormalizeDouble(MathAbs(dXA-dXB)*VP_Kbc_x*Period()*60,0 и получается все красиво, но в виде
Time[i]+1*Period()*60,0 мне не удалось достичь такой красоты....
time2 = Time[i]+Period()*60
работает правильно если i=0
если значение i>0 и Time[i-1] попадает на выходные то лучше к значению Time[i]+Period()*60 прибавить время между последним баром пятницы и первым баром понедельника, по моему по другому не решить.
У меня решена проблема "дырки" между пятницей и понедельником.
Я повторю: проблема в том, что на месячном чарте, для месяцев, которые содержат 31 день, Время2 определяется как 31-е число текущего месяца (вместо того, что бы определятся как 01 число следующего месяца) - для месяцев которые содержат 30/29/28 дней подобной проблемы не существует (Время2 определяется 01 числом следующего месяца).
код time2 = Time[i]+Preiod()*60 подобной проблемы не решает. Если хотите убедиться в этом - не побрезгуйте повесить код на месячный чарт.......
#property indicator_chart_window int init() { return(0); } //+------------------------------------------------------------------+ int deinit() { ObjectsDeleteAll(0,OBJ_TREND); return(0); } //+------------------------------------------------------------------+ int start() { int BarsWind=WindowFirstVisibleBar(); string name; if (true) del(Symbol()); for(int i=BarsWind; i>=0; i--) { { if (i==0) name=Symbol(); else name=StringConcatenate(Symbol()," ",Time[i],TIME_DATE|TIME_MINUTES); } //-------------------------------------------------------------------------- { //----------------------------------------------------- блок решающий проблему "дыр" // int per=Period()*60; // datetime _time=Time[i]+per; // while(iBarShift(0,0,_time,true)==-1 && _time<Time[0]) // _time+=per; //--------------------------------------------------------------------------------- // ObjectCreate(nameCandle, OBJ_TREND, 0,Time[i],Close[i],_time,Close[i]); ObjectCreate(nameCandle, OBJ_TREND, 0,Time[i],Close[i],Time[i]+Period()*60,Close[i]); ObjectSet (nameCandle, OBJPROP_COLOR, Red); ObjectSet (nameCandle, OBJPROP_STYLE, STYLE_SOLID); ObjectSet (nameCandle, OBJPROP_BACK, false); ObjectSet (nameCandle, OBJPROP_RAY, false); ObjectSet (nameCandle, OBJPROP_WIDTH, 2); } } return(0); } int del(string tekst) { for(int n=ObjectsTotal()-1; n>=0; n--) { string Obj_Name=ObjectName(n); if (StringFind(Obj_Name,tekst,0) != -1) { ObjectDelete(Obj_Name); } } return; } //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
При создании объекта (скажем, отрисовки цены закрытия)
когда Time [i-1] должен представлять собой следующий (т.е. еще не нарисованный бар), для определения этого самого "следующего" бара часто рекомендуется использовать:
К сожалению, использование такого определения "следующего" бара вызывает проблемы, вызванными "дырами" в дате. Для избежания таких проблем, я применяю (авторство не мое) такую функцию:
В этом случае, все выходные дни, все нерыночные часы пропускаются, трендовая линия замечательно доводится до следующего видимого бара.
Но...., обнаружена проблема: на МЕСЯЧНЫХ чартах, в месяцах, в которых 31 день не все объекты визуально видны. При этом, в свойствах нарисованных объектов, все эти объекты указываются......, но не все прорисовываются. В свойствах не прорисованных объектов указано,
напр., для июльского бара:
время (1) - 2010.07.01 00:00 время (2) - 2010.07.31 00:00 ......., в то время, как должно быть:
время (1) - 2010.07.01 00:00 время (2) - 2010.08.01 00:00 ..............
(в то же время, для месяцев имеющих 30 дней параметры отрисованных объектов такие: (напр., для апрельского бара:
время (1) - 2010.04.01 00:00 время (2) - 2010.05.01 00:00 .............. - поэтому отрисовывается все очень красиво....)
Т.о. получается, что все объекты как-бы рисуются, но рисуются неправильно (т.е. не дотягиваются до следующего бара, и поэтому, их не видно....)...
Отсюда вопрос: как заставить, для месячных баров имеющих 31 дней, указывать в качестве time2 01 число следующего месяца, ибо только в этом случае, объекты становятся визуально видны......