Очень просто, но полезно. Логично было бы объеденить поддержку и сопротивление в один индикатор.
Ugar:
Очень просто, но полезно. Логично было бы объеденить поддержку и сопротивление в один индикатор.
Очень просто, но полезно. Логично было бы объеденить поддержку и сопротивление в один индикатор.
Изначально они были объединены, только почему-то после нескольких секунд роботы зависал терминал, и проц работал на все 100%.
А когда разделил проблемы ушли. И все стало нормально.
Хотелось бы иметь мультитаймфреймовые индикаторы такого рода. Допустим, работашь на М15, а линии видишь Н1.
вот вобщем на основе твоей идеи сделал наброски индюка который показывает сразу поддержку-сопротивление с 4х ТФ H1,H4,D1,W1
//+------------------------------------------------------------------+ //| Support.mq4 | //| Copyright © 2007, DKeN | //| http://dken.biz | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, DKeN" #property link "http://dken.biz" #property indicator_chart_window extern int g_Max = 100; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators ObjectCreate("Support_60", OBJ_TREND, 0,0,0,0,0); ObjectCreate("Support_240", OBJ_TREND, 0,0,0,0,0); ObjectCreate("Support_1440", OBJ_TREND, 0,0,0,0,0); ObjectCreate("Support_10080", OBJ_TREND, 0,0,0,0,0); ObjectCreate("Resist_60", OBJ_TREND, 0,0,0,0,0); ObjectCreate("Resist_240", OBJ_TREND, 0,0,0,0,0); ObjectCreate("Resist_1440", OBJ_TREND, 0,0,0,0,0); ObjectCreate("Resist_10080", OBJ_TREND, 0,0,0,0,0); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- ObjectDelete("Support_60"); ObjectDelete("Support_240"); ObjectDelete("Support_1440"); ObjectDelete("Support_10080"); ObjectDelete("Resist_60"); ObjectDelete("Resist_240"); ObjectDelete("Resist_1440"); ObjectDelete("Resist_10080"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { //---- draw_support(PERIOD_H1,Red); draw_support(PERIOD_H4,Green); draw_support(PERIOD_D1,Blue); draw_support(PERIOD_W1,Orange); draw_resist(PERIOD_H1,Red); draw_resist(PERIOD_H4,Green); draw_resist(PERIOD_D1,Blue); draw_resist(PERIOD_W1,Orange); //---- return(0); } //+------------------------------------------------------------------+ void draw_support(int iPeriod,color icolor){ double F1=0, F3=0, F13; // номера фракталов int B1, B3, SR=0; // номера баров string name="Support_"+iPeriod; while(F3==0) //поиск фракталов { F13=iFractals(NULL,iPeriod,MODE_UPPER,SR); if (F13!=0) { if (F1==0){B1=SR; F1=F13;} else if (F3==0){B3=SR; F3=F13;} } SR++; if(SR>g_Max) break; } ObjectSet(name,OBJPROP_TIME1,iTime(NULL,iPeriod,B3)); ObjectSet(name,OBJPROP_TIME2,iTime(NULL,iPeriod,B1)); ObjectSet(name,OBJPROP_PRICE1,iHigh(NULL,iPeriod,B3)); ObjectSet(name,OBJPROP_PRICE2,iHigh(NULL,iPeriod,B1)); ObjectSet(name,OBJPROP_RAY,True); ObjectSet(name,OBJPROP_COLOR,icolor); } void draw_resist(int iPeriod,color icolor){ double F1=0, F3=0, F13; // номера фракталов int B1, B3, SR=0; // номера баров string name="Resist_"+iPeriod; while(F3==0) //поиск фракталов { F13=iFractals(NULL,iPeriod,MODE_LOWER,SR); if (F13!=0) { if (F1==0){B1=SR; F1=F13;} else if (F3==0){B3=SR; F3=F13;} } SR++; if(SR>g_Max) break; } ObjectSet(name,OBJPROP_TIME1,iTime(NULL,iPeriod,B3)); ObjectSet(name,OBJPROP_TIME2,iTime(NULL,iPeriod,B1)); ObjectSet(name,OBJPROP_PRICE1,iLow(NULL,iPeriod,B3)); ObjectSet(name,OBJPROP_PRICE2,iLow(NULL,iPeriod,B1)); ObjectSet(name,OBJPROP_RAY,True); ObjectSet(name,OBJPROP_COLOR,icolor); } //к названиям функций прошу не придераться....знаю что наоборот должно быть)))
DKeN:
вот немного доработанный вариантвот вобщем на основе твоей идеи сделал наброски индюка который показывает сразу поддержку-сопротивление с 4х ТФ H1,H4,D1,W1...
//+------------------------------------------------------------------+ //| Support2.mq4 | //| Copyright © 2007, DKeN | //| http://dken.biz | //| modify by pva 2012 | //+------------------------------------------------------------------+ /*изменена ширина у линий*/ /*исправлены названия функций на нормальные*/ //основная задача была в исправлении OBJPROP_TIME1 и OBJPROP_TIME2, чтобы использовался текущий TF /*испрапвлено для H1, на остальных TF как раньше, доделаете сами если надо*/ /* H4 максимум(минимум)должен быть нарисован с 3(4) часового бара, а не с первого, как в оргинале | | | | | | | | | | | | | | */ #property copyright "Copyright © 2007, DKeN" #property link "http://dken.biz" #property indicator_chart_window extern int g_Max = 100; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators ObjectCreate("Поддержка_60", OBJ_TREND, 0,0,0,0,0); ObjectCreate("Поддержка_240", OBJ_TREND, 0,0,0,0,0); ObjectCreate("Поддержка_1440", OBJ_TREND, 0,0,0,0,0); ObjectCreate("Поддержка_10080", OBJ_TREND, 0,0,0,0,0); ObjectCreate("Сопротивление_60", OBJ_TREND, 0,0,0,0,0); ObjectCreate("Сопротивление_240", OBJ_TREND, 0,0,0,0,0); ObjectCreate("Сопротивление_1440", OBJ_TREND, 0,0,0,0,0); ObjectCreate("Сопротивление_10080", OBJ_TREND, 0,0,0,0,0); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- ObjectDelete("Поддержка_60"); ObjectDelete("Поддержка_240"); ObjectDelete("Поддержка_1440"); ObjectDelete("Поддержка_10080"); ObjectDelete("Сопротивление_60"); ObjectDelete("Сопротивление_240"); ObjectDelete("Сопротивление_1440"); ObjectDelete("Сопротивление_10080"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { //---- draw_support(PERIOD_H1,Red); draw_support(PERIOD_H4,Green); draw_support(PERIOD_D1,Blue); draw_support(PERIOD_W1,Orange); draw_resist(PERIOD_H1,Red); draw_resist(PERIOD_H4,Green); draw_resist(PERIOD_D1,Blue); draw_resist(PERIOD_W1,Orange); //---- return(0); } //+------------------------------------------------------------------+ void draw_support(int iPeriod,color icolor){ double F1=0, F3=0, F13; // номера фракталов int B1, B3, SR=0; // номера баров string name="Поддержка_"+iPeriod; while(F3==0) //поиск фракталов { F13=iFractals(NULL,iPeriod,MODE_LOWER,SR); if (F13!=0) { if (F1==0){B1=SR; F1=F13;} else if (F3==0){B3=SR; F3=F13;} } SR++; if(SR>g_Max) break; } ///////////////================= if (Period()==PERIOD_H1 && iPeriod != PERIOD_H1) { int BarsInH1 = 0; switch(iPeriod) { //case PERIOD_H1: BarsInH1=1; break; case PERIOD_H4: BarsInH1=4; break; case PERIOD_D1: BarsInH1=24; break; case PERIOD_W1: BarsInH1=120; break; } datetime time1 = iTime(NULL,iPeriod,B3); //время левой цены периода iPeriod datetime time2 = iTime(NULL,iPeriod,B1); //время правой цены периода iPeriod int lBar = iBarShift(NULL,Period(),time1)-BarsInH1; //точка отсчета для iLowest int rBar = iBarShift(NULL,Period(),time2)-BarsInH1; //точка отсчета для iLowest int shift1 = iLowest(NULL,Period(),MODE_LOW,BarsInH1,lBar); int shift2 = iLowest(NULL,Period(),MODE_LOW,BarsInH1,rBar); ObjectSet(name,OBJPROP_TIME1,iTime(NULL,Period(),shift1)); ObjectSet(name,OBJPROP_TIME2,iTime(NULL,Period(),shift2)); } else { //////////////////=================== ObjectSet(name,OBJPROP_TIME1,iTime(NULL,iPeriod,B3)); ObjectSet(name,OBJPROP_TIME2,iTime(NULL,iPeriod,B1)); } //!!! ObjectSet(name,OBJPROP_PRICE1,iLow(NULL,iPeriod,B3)); ObjectSet(name,OBJPROP_PRICE2,iLow(NULL,iPeriod,B1)); ObjectSet(name,OBJPROP_RAY,True); ObjectSet(name,OBJPROP_COLOR,icolor); switch(iPeriod) { case PERIOD_H1: ObjectSet(name,OBJPROP_WIDTH,1); break; case PERIOD_H4: ObjectSet(name,OBJPROP_WIDTH,2); break; case PERIOD_D1: ObjectSet(name,OBJPROP_WIDTH,3); break; case PERIOD_W1: ObjectSet(name,OBJPROP_WIDTH,4); break; } } void draw_resist(int iPeriod,color icolor){ double F1=0, F3=0, F13; // номера фракталов int B1, B3, SR=0; // номера баров string name="Сопротивление_"+iPeriod; while(F3==0) //поиск фракталов { F13=iFractals(NULL,iPeriod,MODE_UPPER,SR); if (F13!=0) { if (F1==0){B1=SR; F1=F13;} else if (F3==0){B3=SR; F3=F13;} } SR++; if(SR>g_Max) break; } ///////////////================= if (Period()==PERIOD_H1 && iPeriod != PERIOD_H1) { int BarsInH1 = 0; switch(iPeriod) { //case PERIOD_H1: BarsInH1=1; break; case PERIOD_H4: BarsInH1=4; break; case PERIOD_D1: BarsInH1=24; break; case PERIOD_W1: BarsInH1=120; break; } datetime time1 = iTime(NULL,iPeriod,B3); //время левой цены периода iPeriod datetime time2 = iTime(NULL,iPeriod,B1); //время правой цены периода iPeriod int lBar = iBarShift(NULL,Period(),time1)-BarsInH1; //точка отсчета для iHighest int rBar = iBarShift(NULL,Period(),time2)-BarsInH1; //точка отсчета для iHighest int shift1 = iHighest(NULL,Period(),MODE_HIGH,BarsInH1,lBar); int shift2 = iHighest(NULL,Period(),MODE_HIGH,BarsInH1,rBar); ObjectSet(name,OBJPROP_TIME1,iTime(NULL,Period(),shift1)); ObjectSet(name,OBJPROP_TIME2,iTime(NULL,Period(),shift2)); } else { //////////////////=================== ObjectSet(name,OBJPROP_TIME1,iTime(NULL,iPeriod,B3)); ObjectSet(name,OBJPROP_TIME2,iTime(NULL,iPeriod,B1)); } //!!! ObjectSet(name,OBJPROP_PRICE1,iHigh(NULL,iPeriod,B3)); ObjectSet(name,OBJPROP_PRICE2,iHigh(NULL,iPeriod,B1)); ObjectSet(name,OBJPROP_RAY,True); ObjectSet(name,OBJPROP_COLOR,icolor); switch(iPeriod) { case PERIOD_H1: ObjectSet(name,OBJPROP_WIDTH,1); break; case PERIOD_H4: ObjectSet(name,OBJPROP_WIDTH,2); break; case PERIOD_D1: ObjectSet(name,OBJPROP_WIDTH,3); break; case PERIOD_W1: ObjectSet(name,OBJPROP_WIDTH,4); break; } }
результат (тонкими линиями старая версия)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Индикатор линии сопротивления:
Author: IURII TOKMAN