| Подскажите: как определить начало коррекции на больших ТФ (Д и W) |
Исследую пробойную систему: формируется утренний диапазон с 0 до 9 по Мт4 и на Хай- лоу ставлю стоп-ордера. На импульсных волнах эта ТС хорошо работает. Но вот на коррекции получается после пробоя утреннего диапазона цена уходит внутрь этого диапазона.
Пробовал разные стандартные индикаторы для определения начала коррекции, чтобы переключится с пробоя на отбой. Но пока не получается найти переход от «импульсного» роста к коррекции.
Подскажите, пожалуйста, кто чем определяет наличие коррекции на рынке.
Интересуют большие ТФ — Д и W.
-
+4
- Просмотров: 2009
- 11 июля 2022, 05:17
- Boris54
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!
Комментарии (16)
24 igrun Сообщений: 1807 - igrun
20 Boris54 Автор Сообщений: 827 - ПенSионер
<code>/* Introduction: Draw ranges for "Simple Combined Breakout System for EUR/USD and GBP/USD" thread (see http://www.strategybuilderfx.com/forums/showthread.php?t=15439) LocalTimeZone: TimeZone for which MT4 shows your local time, e.g. 1 or 2 for Europe (GMT+1 or GMT+2 (daylight savings time). Use zero for no adjustment. The MetaQuotes demo server uses GMT +2. Enjoy :-) Markus */ #property indicator_chart_window #property indicator_buffers 5 #property indicator_color1 Red #property indicator_color2 Red #property indicator_color3 LightGray #property indicator_color4 LightGray #property indicator_color5 Blue //---- extern int LocalTimeZone = 2; extern int DestTimeZone = 6; extern int PipsForEntry = 80; //---- double Zone1Upper[]; double Zone2Upper[]; double Zone1Lower[]; double Zone2Lower[]; double SignalsBuffer[]; //+------------------------------------------------------------------+ int init() { SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,Zone1Upper); SetIndexEmptyValue(0, 0.0); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,Zone1Lower); SetIndexEmptyValue(1, 0.0); SetIndexStyle(2,DRAW_NONE); SetIndexBuffer(2,Zone2Upper); SetIndexEmptyValue(2, 0.0); SetIndexStyle(3,DRAW_NONE); SetIndexBuffer(3,Zone2Lower); SetIndexEmptyValue(3, 0.0); SetIndexStyle(4,DRAW_ARROW); SetIndexBuffer(4,SignalsBuffer); SetIndexArrow (4, 156); return(0); } //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ int start() { int counted_bars= IndicatorCounted(),lastbar; //---- if (Bars<=100) return(0); if (counted_bars>0) counted_bars--; //---- lastbar= Bars - counted_bars; //---- BreakoutRanges(0, lastbar, LocalTimeZone, DestTimeZone); return(0); } //+------------------------------------------------------------------+ //| Compute index of first/last bar of yesterday and today | //+------------------------------------------------------------------+ int BreakoutRanges(int offset, int lastbar, int tzlocal, int tzdest) { int i, j, k, tzdiff= tzlocal - tzdest, tzdiffsec= tzdiff*3600, tidxstart[2]= { 0, 0}, tidxend[2]= { 0, 0 }; double thigh[2]= { 0.0, 0.0 }, tlow[2]= { 99999.9, 99999.9 }; string tfrom[3]= { "04:00", "08:00" , /*rest of day: */ "12:00"}, tto[3]= { "08:00", "12:00", /*rest of day: */ "24:00" }, tday; bool inperiod= -1; datetime timet; // search back for the beginning of the day tday= TimeToStr(Time[lastbar]-tzdiffsec, TIME_DATE); for( ;lastbar<Bars; lastbar++) { if (TimeToStr(Time[lastbar] - tzdiffsec, TIME_DATE)!=tday) { lastbar--; break; } } // find the high/low for the two periods and carry them forward through the day tday= "XXX"; for(i= lastbar; i>=offset; i--) { timet= Time[i] - tzdiffsec; // time of this bar //---- string timestr= TimeToStr(timet, TIME_MINUTES), // current time HH:MM thisday= TimeToStr(timet, TIME_DATE); // current date // for all three periods (first period, second period, rest of day) for(j= 0; j<3; j++) { if (tfrom[j]<=timestr && timestr<tto[j]) { // Bar[i] in this period if (inperiod!=j) { // entered new period, so last one is completed if (j>0) { // now draw high/low back over the recently completed period for(k= tidxstart[j-1]; k>=tidxend[j-1]; k--) { if (j-1==0) { Zone1Upper[k]= thigh[j-1]; Zone1Lower[k]= tlow[j-1]; } if (j-1==1) { Zone2Upper[k]= thigh[j-1]; Zone2Lower[k]= tlow[j-1]; } } } inperiod= j; // remember current period } if (inperiod==2) // inperiod==2 (end of day) is just to check completion of zone 2 break; // for the current period find idxstart, idxend and compute high/low if (tidxstart[j]==0) { tidxstart[j]= i; tday= thisday; } tidxend[j]= i; //---- thigh[j]= MathMax(thigh[j], High[i]); tlow[j]= MathMin(tlow[j], Low[i]); } } // carry forward the periods for which we have definite high/lows if (inperiod>=1 && tday==thisday) { // first time period completed Zone1Upper[i]= thigh[0] + PipsForEntry*Point; Zone1Lower[i]= tlow[0] - PipsForEntry*Point; //---- if (inperiod>=2) { // second period completed Zone2Upper[i]= thigh[1] + PipsForEntry*Point; Zone2Lower[i]= tlow[1] - PipsForEntry*Point; } } else { // none yet to carry forward (zero to clear old values, e.g. from switching timeframe) Zone1Upper[i]= 0; Zone1Lower[i]= 0; Zone2Upper[i]= 0; Zone2Lower[i]= 0; } // at the beginning of a new day reset everything if (tday!="XXX" && tday!=thisday) { Print("#", i, "new day ", thisday, "/", tday); //---- tday= "XXX"; //---- inperiod= -1; //---- for(j= 0; j<2; j++) { tidxstart[j]= 0; tidxend[j]= 0; thigh[j]= 0; tlow[j]= 99999; } } } return(0); } //+------------------------------------------------------------------+ </code>8 kvashnin007 Сообщений: 757 - Андрей
Импульсы обычно пробивают границы вчерашнего дня. Но это другая тема.
Коррекции по полосам прогнозировать — не благодарное дело. Думаю сосредоточиться надо над тем, что делать?, если случилось. Фибоначи, поиграться с разными стопами. Есть признаки коррекции. Например, большое отклонение цены от средней (МА), свеча закрылась в обратную сторону или ниже-выше открытия предыдущей свечи, разные каналы.
У Шамана в его открытом советнике с полосами поддержки-сопротивления (не помню, как кликали) есть несколько вариантов на тему «что делать, если...».
8 kvashnin007 Сообщений: 757 - Андрей
20 Boris54 Автор Сообщений: 827 - ПенSионер
Просто, когда пытаешься объяснить свою мысль другому, она как бы лучше формализуется. Становится стройнее, что ли. Редактирован: 12 июля 2022, 08:51
8 kvashnin007 Сообщений: 757 - Андрей
20 Boris54 Автор Сообщений: 827 - ПенSионер
20 Boris54 Автор Сообщений: 827 - ПенSионер
Посмотрел код. Не понял. Как-то через задний проход.
Настройки 2-6-0.
Как 9-ти часовую полосу организовать? САМ ногу сломает. А с буферами никаких проблем. А вот понимания не хватает.
Нашёл того индюка, которого не мог раньше.
Исправил ошибку с нулевым баром. Раньше не учитывался.
Сделал буфера, как у соседки. Тфу ты… отрастила.
Теперь есть буферы верхней и нижней цены полосы.
Прибавляйте отнимайте дельту и вперёд.
Да… и 9 часов, помоему, перебор.2-3 приемлемо. Подумайте.
<code>// [MT4 BREAKOUT BOX] #property indicator_chart_window extern string periodBegin = "00:00"; // Начало для расчета полосы extern string periodEnd = "03:55"; // Окончание расчета полосы extern string BoxEnd = "23:00"; // Время обрезания полосы extern color BoxHLColor = clrPowderBlue; extern color BoxPeriodColor = clrPaleGreen; extern int NumberOfDays = 50; //--- double PriceHigh[]; double PriceLow[]; //========================================================================================================== int init() { SetIndexBuffer(0,PriceHigh); SetIndexBuffer(1,PriceLow); return(0); } //========================================================================================================== int deinit() { string TradeDate; for(int i=ObjectsTotal(); i>=0;i--) { TradeDate=ObjectName(i); if(StringFind(TradeDate,"Box",0)==0) ObjectDelete(TradeDate); } return(0); } //========================================================================================================== int start() { datetime TradeDate=TimeCurrent(); if(Period()<=60) { for (int i=0; i<NumberOfDays; i++) { DrawObjects(TradeDate,"BoxHighLow " +TimeToStr(TradeDate,TIME_DATE),periodBegin,periodEnd,BoxEnd,BoxHLColor,0,1); DrawObjects(TradeDate,"Box Period "+TimeToStr(TradeDate,TIME_DATE),periodBegin,periodEnd,periodEnd,BoxPeriodColor,0,2); TradeDate=decrementTradeDate(TradeDate); while (TimeDayOfWeek(TradeDate)>5) TradeDate=decrementTradeDate(TradeDate); } } return(0); } //========================================================================================================== void DrawObjects(datetime dtTradeDate,string sObjName,string sTimeBegin,string sTimeEnd,string sTimeObjEnd,color cObjColor,int iOffSet,int iForm) { datetime dtTimeBegin,dtTimeEnd,dtTimeObjEnd; double dPriceHigh,dPriceLow; int iBarBegin,iBarEnd; dtTimeBegin = StrToTime(TimeToStr(dtTradeDate,TIME_DATE)+" "+sTimeBegin); dtTimeEnd = StrToTime(TimeToStr(dtTradeDate,TIME_DATE)+" "+sTimeEnd); dtTimeObjEnd = StrToTime(TimeToStr(dtTradeDate,TIME_DATE)+" "+sTimeObjEnd); iBarBegin=iBarShift(NULL,0,dtTimeBegin); iBarEnd=iBarShift(NULL,0,dtTimeEnd); dPriceHigh =High[Highest(NULL,0,MODE_HIGH,iBarBegin-iBarEnd+1,iBarEnd)]; PriceHigh[iBarEnd]=dPriceHigh; dPriceLow = Low [Lowest (NULL,0,MODE_LOW, iBarBegin-iBarEnd+1,iBarEnd)]; PriceLow[iBarEnd]=dPriceLow; //========================================================================================================== ObjectCreate(sObjName,OBJ_RECTANGLE,0,0,0,0,0); ObjectSet(sObjName,OBJPROP_TIME1,dtTimeBegin); ObjectSet(sObjName,OBJPROP_TIME2,dtTimeObjEnd); if(iForm==1) // Бокс до конца { ObjectSet(sObjName,OBJPROP_PRICE1,dPriceHigh); ObjectSet(sObjName,OBJPROP_PRICE2,dPriceLow); ObjectSet(sObjName,OBJPROP_STYLE,STYLE_SOLID); ObjectSet(sObjName,OBJPROP_COLOR,cObjColor); ObjectSet(sObjName,OBJPROP_BACK,True); } if(iForm==2) // Бокс на участке { ObjectSet(sObjName,OBJPROP_PRICE1,dPriceHigh+iOffSet*Point); ObjectSet(sObjName,OBJPROP_PRICE2,dPriceLow-iOffSet*Point); ObjectSet(sObjName,OBJPROP_STYLE,STYLE_SOLID); ObjectSet(sObjName,OBJPROP_COLOR,cObjColor); ObjectSet(sObjName,OBJPROP_WIDTH,1); ObjectSet(sObjName,OBJPROP_BACK,true); } } //========================================================================================================== datetime decrementTradeDate (datetime Time_Date) { int iTimeYear = TimeYear(Time_Date); int iTimeMonth = TimeMonth(Time_Date); int iTimeDay = TimeDay(Time_Date); int iTimeHour = TimeHour(Time_Date); int iTimeMinute = TimeMinute(Time_Date); iTimeDay--; if(iTimeDay==0) { iTimeMonth--; if(iTimeMonth==0) { iTimeYear--; iTimeMonth=12; } // Thirty days hath September... if(iTimeMonth==4||iTimeMonth==6||iTimeMonth==9||iTimeMonth==11) iTimeDay=30; // ...all the rest have thirty-one... if(iTimeMonth==1||iTimeMonth==3||iTimeMonth==5||iTimeMonth==7||iTimeMonth==8||iTimeMonth==10||iTimeMonth==12) iTimeDay=31; // ...except... if(iTimeMonth==2) if(MathMod(iTimeYear,4)==0) iTimeDay=29; else iTimeDay=28; } return(StrToTime(iTimeYear + "." + iTimeMonth + "." + iTimeDay + " " + iTimeHour + ":" + iTimeMinute)); } //==========================================================================================================</code>Редактирован: 12 июля 2022, 22:51
8 kvashnin007 Сообщений: 757 - Андрей
Я вечером внимательно гляну и напишу Вам подробнее.
Помню, что там какие-то напряги с буферами были. Давно это было.
У меня где-то был другой индюк с более внятной политикой, но сразу на глаза не попался. Вечером гдяну. Редактирован: 12 июля 2022, 08:43
8 kvashnin007 Сообщений: 757 - Андрей
Теперь буферы равны верхней-нижней цене только после формирования временнОй полосы и до окончания (голубая полоса). Остальное время = EMPTY_VALUE.
<code>// [MT4 BREAKOUT BOX] #property indicator_chart_window extern string periodBegin = "00:00"; // Начало для расчета полосы extern string periodEnd = "03:55"; // Окончание расчета полосы extern string BoxEnd = "23:00"; // Время обрезания полосы extern color BoxHLColor = clrPowderBlue; extern color BoxPeriodColor = clrPaleGreen; extern int NumberOfDays = 50; //--- double PriceHigh[]; double PriceLow[]; //========================================================================================================== int init() { SetIndexBuffer(0,PriceHigh); SetIndexBuffer(1,PriceLow); return(INIT_SUCCEEDED); } //========================================================================================================== int deinit() { string TradeDate; for(int i=ObjectsTotal(); i>=0;i--) { TradeDate=ObjectName(i); if(StringFind(TradeDate,"Box",0)==0) ObjectDelete(TradeDate); } return(0); } //========================================================================================================== int start() { datetime TradeDate=TimeCurrent(); if(Period()<=60) { for (int i=0; i<NumberOfDays; i++) { DrawObjects(TradeDate,"BoxHighLow " +TimeToStr(TradeDate,TIME_DATE),periodBegin,periodEnd,BoxEnd,BoxHLColor,0,1); DrawObjects(TradeDate,"Box Period "+TimeToStr(TradeDate,TIME_DATE),periodBegin,periodEnd,periodEnd,BoxPeriodColor,0,2); TradeDate=decrementTradeDate(TradeDate); while (TimeDayOfWeek(TradeDate)>5) TradeDate=decrementTradeDate(TradeDate); } } return(0); } //========================================================================================================== void DrawObjects(datetime dtTradeDate,string sObjName,string sTimeBegin,string sTimeEnd,string sTimeObjEnd,color cObjColor,int iOffSet,int iForm) { datetime dtTimeBegin,dtTimeEnd,dtTimeObjEnd; double dPriceHigh,dPriceLow; int iBarBegin,iBarEnd; PriceHigh[iBarEnd]=EMPTY_VALUE; PriceLow[iBarEnd]=EMPTY_VALUE; dtTimeBegin = StrToTime(TimeToStr(dtTradeDate,TIME_DATE)+" "+sTimeBegin); dtTimeEnd = StrToTime(TimeToStr(dtTradeDate,TIME_DATE)+" "+sTimeEnd); dtTimeObjEnd = StrToTime(TimeToStr(dtTradeDate,TIME_DATE)+" "+sTimeObjEnd); iBarBegin=iBarShift(NULL,0,dtTimeBegin); iBarEnd=iBarShift(NULL,0,dtTimeEnd); dPriceHigh =High[Highest(NULL,0,MODE_HIGH,iBarBegin-iBarEnd+1,iBarEnd)]; if(iTime(NULL, 0, 0)>dtTimeEnd) PriceHigh[iBarEnd]=dPriceHigh; dPriceLow = Low [Lowest (NULL,0,MODE_LOW, iBarBegin-iBarEnd+1,iBarEnd)]; if(iTime(NULL, 0, 0)>dtTimeEnd) PriceLow[iBarEnd]=dPriceLow; //========================================================================================================== ObjectCreate(sObjName,OBJ_RECTANGLE,0,0,0,0,0); ObjectSet(sObjName,OBJPROP_TIME1,dtTimeBegin); ObjectSet(sObjName,OBJPROP_TIME2,dtTimeObjEnd); if(iForm==1) // Бокс до конца { ObjectSet(sObjName,OBJPROP_PRICE1,dPriceHigh); ObjectSet(sObjName,OBJPROP_PRICE2,dPriceLow); ObjectSet(sObjName,OBJPROP_STYLE,STYLE_SOLID); ObjectSet(sObjName,OBJPROP_COLOR,cObjColor); ObjectSet(sObjName,OBJPROP_BACK,True); } if(iForm==2) // Бокс на участке { ObjectSet(sObjName,OBJPROP_PRICE1,dPriceHigh+iOffSet*Point); ObjectSet(sObjName,OBJPROP_PRICE2,dPriceLow-iOffSet*Point); ObjectSet(sObjName,OBJPROP_STYLE,STYLE_SOLID); ObjectSet(sObjName,OBJPROP_COLOR,cObjColor); ObjectSet(sObjName,OBJPROP_WIDTH,1); ObjectSet(sObjName,OBJPROP_BACK,true); } } //========================================================================================================== datetime decrementTradeDate (datetime Time_Date) { int iTimeYear = TimeYear(Time_Date); int iTimeMonth = TimeMonth(Time_Date); int iTimeDay = TimeDay(Time_Date); int iTimeHour = TimeHour(Time_Date); int iTimeMinute = TimeMinute(Time_Date); iTimeDay--; if(iTimeDay==0) { iTimeMonth--; if(iTimeMonth==0) { iTimeYear--; iTimeMonth=12; } // Thirty days hath September... if(iTimeMonth==4||iTimeMonth==6||iTimeMonth==9||iTimeMonth==11) iTimeDay=30; // ...all the rest have thirty-one... if(iTimeMonth==1||iTimeMonth==3||iTimeMonth==5||iTimeMonth==7||iTimeMonth==8||iTimeMonth==10||iTimeMonth==12) iTimeDay=31; // ...except... if(iTimeMonth==2) if(MathMod(iTimeYear,4)==0) iTimeDay=29; else iTimeDay=28; } return(StrToTime(iTimeYear + "." + iTimeMonth + "." + iTimeDay + " " + iTimeHour + ":" + iTimeMinute)); } //==========================================================================================================</code>Редактирован: 13 июля 2022, 00:568 kvashnin007 Сообщений: 757 - Андрей
8 kvashnin007 Сообщений: 757 - Андрей
20 Boris54 Автор Сообщений: 827 - ПенSионер
Утренний флэт Можно использовать как простой ориентир. Пробой, например, равный 30 пипсов (3 пункта) выше-ниже канала на 5-ти знаке, при отходе цены от канала >= половине ширине канала закрываем половину лота, а вторую тралим от канала.
Отбой (при возврате в канал?) аналогично до середины канала, БУ и до ТР или трал стопа от канала. Каналы, как правило, превышают два спреда. Да и тралить можно не от середины канала, а от минимально разрешенного брокером стопа.
Очень специфически цена во время пиндоской сессии реагирует на шалости европейских скаутов.
Если упереться в короткие флеты до 4-х часов (даже меньше), вырисуется хорошая стратегия на выход из накопления.
Помнить, что утренний гэп закрывается с вероятность более 94%. Правда и спрэд в это время расширяется раз в 5-10 (а некоторые брокеры и не такие стеснительные).
Пахать и пахать. Борис, удачи Вам. Редактирован: 13 июля 2022, 07:56
8 kvashnin007 Сообщений: 757 - Андрей
20 Boris54 Автор Сообщений: 827 - ПенSионер
Потом бы, после отработки по-отдельности, объединял.
Уверен, что Вы тоже так планировали, но всё же ляпну. На всякий случай.
Удачи. Редактирован: 13 июля 2022, 08:06
8 kvashnin007 Сообщений: 757 - Андрей
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий