Ghm, nikomu eto nienteresno..?
я уже задавал подобный вопрос. Ответ был, что ничего изменено, не будет! проблема осталась и нормального решения ей пока найти не удалось.
ЗЫ: Господа разработчики! Может, есть смысл ввести понятие минусового бара? так как работа с будущим по Time некорректна...
ЗЫ: Господа разработчики! Может, есть смысл ввести понятие минусового бара? так как работа с будущим по Time некорректна...
Na klient-server pravda, nie4evo i ninado meniat', no na grafik(xot' dlia funkcii nize) nuzno risovat' dublikaty tak kak vremia vsio taki tikajet :-)
4toby takije funkciji kak Bars, iBarShift(), ArrayCopySeries() rabotali korektno, nuzno zapolniat' dublikaty cen 4toby indikatory i experty vsiegda smogli vziat' kakaja cena byla na kazdyj bar n barov nazad v istoriju i nebylo propuska barov...
Slawa, Renat, kakoje vashe mnenija nad etom?
4toby takije funkciji kak Bars, iBarShift(), ArrayCopySeries() rabotali korektno, nuzno zapolniat' dublikaty cen 4toby indikatory i experty vsiegda smogli vziat' kakaja cena byla na kazdyj bar n barov nazad v istoriju i nebylo propuska barov...
Slawa, Renat, kakoje vashe mnenija nad etom?
Xm, poxoze 4to zabyli otvetit', zdiom... :-)
P.S. v rezultate vsiegda nuzny cifry, a kak ze ix vyvesti po drugomu iz trendline na tekus4ij moment, kokda trendline zarisovanna v istoriji 4erez 2 to4ki, i tiepier' nuzna 1 iz to4ek nad etoj liniji..
P.S. v rezultate vsiegda nuzny cifry, a kak ze ix vyvesti po drugomu iz trendline na tekus4ij moment, kokda trendline zarisovanna v istoriji 4erez 2 to4ki, i tiepier' nuzna 1 iz to4ek nad etoj liniji..
Очень неудобно читать латиницу, но попробую помочь предложив следующее решение:
думаю лишних слов не надо
визуально на истории будет перемещаться, и может некорректно показывать прошлые значения, но для рассчитываемой точки все будет "путем"
2nsi2000
может попробовать использовать смещение SetIndexShift
думаю лишних слов не надо
визуально на истории будет перемещаться, и может некорректно показывать прошлые значения, но для рассчитываемой точки все будет "путем"
2nsi2000
ЗЫ: Господа разработчики! Может, есть смысл ввести понятие минусового бара? так как работа с будущим по Time некорректна...
может попробовать использовать смещение SetIndexShift
визуально на истории будет перемещаться, и может некорректно показывать прошлые значения, но для рассчитываемой точки все будет "путем"
A vot eti Cnew i ras4ityvajutsia ploxo iz za propus4ennyx barov, posmotri moj indokator, katorovo kod sdies' kinul.
A vot eti Cnew i ras4ityvajutsia ploxo iz za propus4ennyx barov, posmotri moj indokator, katorovo kod sdies' kinul.
почему же плохо, на мой взгляд элементарно
BC - известно, BC'=BC
AB'=AB(известно) + количество пропущенных баров (посчитать не сложно)
реальное отношение катетов = AB' / B'C'
AD'=AD + количество пропущенных баров (до новой точки)
D'C'new=B'C' * AD' / AB'
соответственно искомая DCnew = D'C'new
A vot eti Cnew i ras4ityvajutsia ploxo iz za propus4ennyx barov, posmotri moj indokator, katorovo kod sdies' kinul.
почему же плохо, на мой взгляд элементарно
BC - известно, BC'=BC
AB'=AB(известно) + количество пропущенных баров (посчитать не сложно)
реальное отношение катетов = AB' / B'C'
AD'=AD + количество пропущенных баров (до новой точки)
D'C'new=B'C' * AD' / AB'
соответственно искомая DCnew = D'C'new
Sam grafik OK, no pods4itat' eto - uze problema, tak kak cifra propus4ennyx barov izmeniajetsia posle to4ki AB. Prosto polu4ajetsia tak, 4to ot to4ki A do to4ki B - odno koli4estvo propus4ennyx barov, a posle to4ki B uze
drugoje koli4estvo, i my polu4ajem uklonenije na storonu.
no pods4itat' eto - uze problema, tak kak cifra propus4ennyx barov izmeniajetsia posle to4ki AB. Prosto polu4ajetsia tak, 4to ot to4ki A do to4ki B - odno koli4estvo propus4ennyx barov, a posle to4ki B uze
drugoje koli4estvo, i my polu4ajem uklonenije na storonu.
drugoje koli4estvo, i my polu4ajem uklonenije na storonu.
естесственно количество пропущенных баров может измениться(увеличиться), но их количество посчитать думаю не трудно:
нормализованное время точки A - нормализованное время точки B разделенное на значение т-ф и на 60 будет равно количеству баров (с учетом пропущенных)
тоже самое для второй точки
если хочешь исключить неторговое время, тогда нужно его определить и вычесть
no pods4itat' eto - uze problema, tak kak cifra propus4ennyx barov izmeniajetsia posle to4ki AB. Prosto polu4ajetsia tak, 4to ot to4ki A do to4ki B - odno koli4estvo propus4ennyx barov, a posle to4ki B uze
drugoje koli4estvo, i my polu4ajem uklonenije na storonu.
drugoje koli4estvo, i my polu4ajem uklonenije na storonu.
естесственно количество пропущенных баров может измениться(увеличиться), но их количество посчитать думаю не трудно:
нормализованное время точки A - нормализованное время точки B разделенное на значение т-ф и на 60 будет равно количеству баров (с учетом пропущенных)
тоже самое для второй точки
если хочешь исключить неторговое время, тогда нужно его определить и вычесть
Paprobuj modificirovat' etot moj indikator tak, 4toby na to4ke gde sxodit "Triangle End" i "Trend" vsegda ulozylsia i "TREND_LEVEL". Jiesli polu4itsia(v etom somnevajus'), eto mozet byt' kak "quickfix" dlia situaciji.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ja davno mu4ajus' s takoj problemoj i nikak nimogu reshyt:
Sdelal indikator, katoryj kladajet trendline mezdu dvux cen v istoriji i pods4itajet skol'ko pipsov cena
izmeniajetsia za 1 bar. Problema na4inajetsia, kokda ja probuju ras4itat' aktual'nuju tekus4aju cenu posle ras4itanija ugola,
4toby mog kladit' vtoruju liniju na liniju trenda. Eto sviazanno s propuskajemami barami s servera kokda cena nimeniajetsia.
Renat i drugije, mozete v etom pamo4'?
Formuly takije:
Ugol = (zadannaja cena - cena ot katoroj s4itajem) / skol'ko barov mezdu etix cen
Tekus4iaja to4ka ras4itajetsia tak:
Jesli ceny idut v verx, pribavliajem k na4al'noj ceny i umnozajem na ugol raznicu barov
To4ka = na4alnaja cena + (Ugol * raznica barov mezdu na4al'noj ceny i tekus4ej)
Jiesli ceny idut v niz, ortnimajem:
To4ka = na4alnaja cena - (Ugol * raznica barov mezdu na4al'noj ceny i tekus4ej)
Pri kalkuliaciji etoj to4ki ras4itajetsia cena nipravel'no iz za propus4ennyx barov, i nikak nipolu4ajetsia sdelat' 4toby xorosho pods4italo.
Vot moj indikator trenda, posle zapuska sami uvidite kak ras4itajetsia vsio. Paproibute naiti oshyvku v etom indikatore pri ras4itaniji cen, a jiesli tam oshybki net, mozet byt kak nibut' v samom metatrader4 eto mozno reshyt':
//+------------------------------------------------------------------+ //| TrendLevel.mq4 | //| Copyright © 2005, Arunas Pranckevicius (T-1000), Lithuania | //| irc://irc.omnitel.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, Arunas Pranckevicius (T-1000), Lithuania" #property link "irc://irc.omnitel.net" #property indicator_chart_window //---- input parameters extern int PricePeriod=200; extern int Shift=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators Print(Symbol()," ",TimeToStr(CurTime(),TIME_DATE),": ","Trend Level v1.0, Copyright © 2005, Arunas Pranckevicius (T-1000), Lithuania, loaded."); //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } void SetObject(string ObjName,int ObjType,datetime ObjTime1,double ObjPrice1,datetime ObjTime2=0,double ObjPrice2=0,color ObjColor=Red,int ObjSize=1,int ObjStyle=STYLE_SOLID,datetime ObjTime3=0,double ObjPrice3=0) { if (ObjectFind(ObjName) != -1) ObjectDelete(ObjName); ObjectCreate(ObjName, ObjType, 0,ObjTime1 , ObjPrice1, ObjTime2, ObjPrice2, ObjTime3, ObjPrice3); ObjectSet(ObjName,OBJPROP_COLOR,ObjColor); ObjectSet(ObjName,OBJPROP_STYLE,ObjStyle); ObjectSet(ObjName,OBJPROP_WIDTH,ObjSize); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { if (Bars < PricePeriod) return(0); int counter, Angle,TrendStartBar,TrendBar,MaxPriceBar,MinPriceBar,TrendCheckPoint; double MaxPrice,MinPrice,TrendStart,TrendLevel,TimeDiff,TrendAngle,TrendAngleTMP,TrendLine,NoisePts; bool Revert=false; Angle = 0; TrendBar = 0; TrendLine = 0; TrendAngle = 0; TrendCheckPoint = 0; MaxPriceBar = Highest (NULL,0,MODE_HIGH,PricePeriod+Shift,Shift); MinPriceBar = Lowest (NULL,0,MODE_LOW,PricePeriod+Shift,Shift); MaxPrice = High[MaxPriceBar]; MinPrice = Low[MinPriceBar]; NoisePts=(MaxPrice - MinPrice) * 0.118; if (MaxPriceBar < MinPriceBar) Angle = 1; if (MaxPriceBar > MinPriceBar) Angle = 2; if (Angle == 1) { // Set initial Trend Level bar TrendStartBar = MinPriceBar; TrendStart = Low[MinPriceBar]; TrendBar = MinPriceBar; TrendLine = Low[MinPriceBar]; } if (Angle == 2) { // Set initial Trend Level bar TrendStartBar = MaxPriceBar; TrendStart = High[MaxPriceBar]; TrendBar = MaxPriceBar; TrendLine = High[MaxPriceBar]; } //Print("TrendStartBar:",TrendStartBar," TrendStartBarTime:",TimeToStr(Time[TrendStartBar],TIME_DATE)); for (counter=PricePeriod+Shift;counter>=Shift;counter--) { if (!Revert && Angle == 1 && Open[counter] < Open[PricePeriod]) { // We have bad trend starting checkpoint, try to reallign it Angle = 2; MaxPriceBar = Highest (NULL,0,MODE_HIGH,PricePeriod+Shift,Shift); TrendStartBar = MaxPriceBar; TrendStart = High[MaxPriceBar]; counter = PricePeriod; TrendBar = MaxPriceBar; TrendLine = High[MaxPriceBar]; TrendAngle=0; Revert = true; } if (!Revert && Angle == 2 && Open[counter] > Open[PricePeriod]) { // We have bad trend starting checkpoint, try to reallign it Angle = 1; MinPriceBar = Lowest (NULL,0,MODE_LOW,PricePeriod+Shift,Shift); TrendStartBar = MinPriceBar; TrendStart = Low[MinPriceBar]; counter = PricePeriod; TrendBar = MinPriceBar; TrendLine = Low[MinPriceBar]; Revert = true; TrendAngle=0; } if (Angle == 1) { MaxPriceBar = Highest (NULL,0,MODE_HIGH,TrendBar-counter+1,counter); MinPriceBar = Lowest (NULL,0,MODE_LOW,TrendBar-counter+1,counter); MaxPrice = High[MaxPriceBar]; MinPrice = Low[MinPriceBar]; //Print(Symbol()," DEBUG: BAR=",counter," MaxPriceBar=",MaxPriceBar," MinPriceBar=",MinPriceBar); if (TrendCheckPoint == 0 && TrendLine < Low[counter] - NoisePts && TrendStartBar > counter && TrendBar > counter) { // Set initial Trend Level bar TrendBar = counter; TrendLine = High[counter]; //Print(Symbol()," DEBUG: BAR=",counter," MaxPriceTime:",TimeToStr(Time[MaxPriceBar],TIME_DATE)," MaxPriceBar=",MaxPriceBar," MinPriceBar=",MinPriceBar," TrendAngle=",TrendAngle," TrendBar=",TrendBar," Trend Time:",TimeToStr(Time[TrendBar])); } if (TrendCheckPoint == 0 && MaxPriceBar > MinPriceBar && counter < TrendBar && High[counter] < TrendLine - NoisePts) TrendCheckPoint = 1; if (TrendCheckPoint == 1 && Low[counter] < TrendLine - NoisePts && counter < TrendStartBar && TrendBar > counter ) { // Set new Trend Line checkpoint for calculating actual trend level TimeDiff = iBarShift(Symbol(),Period(),Time[TrendStartBar]) - iBarShift(Symbol(),Period(),Time[TrendBar]); if (TimeDiff == 0) TimeDiff = 1; TrendBar = counter; TrendLine = Low[counter]; TrendAngle = (Low[counter] - TrendStart) / TimeDiff; // Calculate trend triangle line angle / bar //if (TrendAngle > 0) //Print(Symbol()," DEBUG: BAR=",counter," TrendStartBar:",TrendStartBar," MaxPriceBar=",MaxPriceBar," MinPriceBar=",MinPriceBar," TrendAngle=",TrendAngle," TrendBar=",TrendBar," Trend Time:",TimeToStr(Time[TrendBar])); } } if (Angle == 2) { MaxPriceBar = Highest (NULL,0,MODE_HIGH,TrendBar-counter+1,counter); MinPriceBar = Lowest (NULL,0,MODE_LOW,TrendBar-counter+1,counter); MaxPrice = High[MaxPriceBar]; MinPrice = Low[MinPriceBar]; //Print(Symbol()," DEBUG: BAR=",counter," MaxPriceBar=",MaxPriceBar," MinPriceBar=",MinPriceBar); if (TrendCheckPoint == 0 && TrendLine > Low[counter] + NoisePts && TrendStartBar > counter && TrendBar > counter) { // Set initial Trend Level bar TrendBar = counter; TrendLine = Low[counter]; //Print(Symbol()," DEBUG: BAR=",counter," MaxPriceTime:",TimeToStr(Time[MaxPriceBar],TIME_DATE)," MaxPriceBar=",MaxPriceBar," MinPriceBar=",MinPriceBar," TrendAngle=",TrendAngle," TrendBar=",TrendBar," Trend Time:",TimeToStr(Time[TrendBar])); } if (TrendCheckPoint == 0 && MaxPriceBar < MinPriceBar && counter < TrendBar && Low[counter] > TrendLine + NoisePts) TrendCheckPoint = 1; if (TrendCheckPoint == 1 && High[counter] > TrendLine + NoisePts && counter < TrendStartBar && TrendBar > counter ) { // Set new Trend Line checkpoint for calculating actual trend level TimeDiff = iBarShift(Symbol(),Period(),Time[TrendStartBar]) - iBarShift(Symbol(),Period(),Time[TrendBar]); if (TimeDiff == 0) TimeDiff = 1; TrendBar = counter; TrendLine = High[counter]; TrendAngle = (TrendStart - High[counter]) / TimeDiff; // Calculate trend triangle line angle / bar //if (TrendAngle > 0) //Print(Symbol()," DEBUG: BAR=",counter," TrendStartBar:",TrendStartBar," MaxPriceBar=",MaxPriceBar," MinPriceBar=",MinPriceBar," TrendAngle=",TrendAngle," TrendBar=",TrendBar," Trend Time:",TimeToStr(Time[TrendBar])); } } } //---- MaxPriceBar = Highest (NULL,0,MODE_HIGH,PricePeriod+Shift,Shift); MinPriceBar = Lowest (NULL,0,MODE_LOW,PricePeriod+Shift,Shift); if (TrendAngle == 1) TrendAngle = 0; TimeDiff = iBarShift(Symbol(),Period(),Time[PricePeriod+Shift]) - iBarShift(Symbol(),Period(),Time[Shift]); if (TimeDiff == 0) TimeDiff = 1; if (TrendAngle > 0) { if (Angle == 1) TrendLevel = Low[TrendStartBar] + (TimeDiff * TrendAngle); if (Angle == 2) TrendLevel = High[TrendStartBar] - (TimeDiff * TrendAngle); SetObject("TREND_LEVEL",OBJ_HLINE,Time[PricePeriod+Shift+1],TrendLevel,Time[Shift],TrendLevel,Red,1,STYLE_DASHDOT); } else { if (ObjectFind("TREND_LEVEL") != -1) ObjectDelete("TREND_LEVEL"); } SetObject("Trend",OBJ_TREND,Time[TrendStartBar],TrendStart,Time[TrendBar],TrendLine,Red,1,STYLE_SOLID); ObjectSetText("Trend","Projected Trend", 8, "Arial", Green); SetObject("TriangleEnd",OBJ_TREND,Time[Shift],Open[MaxPriceBar],Time[Shift],Open[MinPriceBar],Yellow,1,STYLE_DASHDOT); if (Angle == 1) Comment("Trend Level (c) T-1000, Lithuania 2005\nTrend: UP","\nTrend Level: ",TrendLevel,"\nTrend Start: ",TimeToStr(Time[TrendStartBar],TIME_DATE|TIME_MINUTES),"\nTrend Start Price:",TrendStart,"\nTrend Checkpoint Start: ",TimeToStr(Time[TrendBar],TIME_DATE|TIME_MINUTES),"\nTrend Checkpoint Price: ",TrendLine,"\nNoisePts: ",NoisePts / Point); if (Angle == 2) Comment("Trend Level (c) T-1000, Lithuania 2005\nTrend: DOWN","\nTrend Level: ",TrendLevel,"\nTrend Start: ",TimeToStr(Time[TrendStartBar],TIME_DATE|TIME_MINUTES),"\nTrend Checkpoint Start: ",TimeToStr(Time[TrendBar],TIME_DATE|TIME_MINUTES),"\nTrend Checkpoint Price: ",TrendLine,"\nNoisePts: ",NoisePts / Point); //---- return(0); } //+------------------------------------------------------------------+Te, kto umejet programirovat', mozete pamo4' toze? Etot indikator obleg4ajet rabotu kokda nado trend ustanovit' i na grafike narisovat', s etim indikatorom eto uze avtomati4eski risujetsia... :-)