Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 876
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Размер массива-то нулевой. Не забывайте об ArrayResize(), или сразу задавайте нужный размер массиву
Здравствуйте,
На картинку показал:
Первое окно индикатор Volume,сверху поставил Money Flow Index(10).
Сделал отделный индикатор,где опят беру Volume,пересчитаваю мувинг с Volume и попробовал сделат как в первое окно - 25%,50%,75%.
Но так,как сделал не очен хорошо.
Если кто-то сталкивался с такой проблем,пожалуста споделите.
Спосибо
#property indicator_separate_window #property indicator_buffers 2 #property indicator_minimum 0 #property indicator_width1 2 #property indicator_width2 2 #property indicator_color1 DodgerBlue #property indicator_color2 Yellow extern int MAPeriod = 30; double volum[],ma[]; //+------------------------------------------------------------------+ int init(){ int bars_count=WindowBarsPerChart(),volh; int bar=WindowFirstVisibleBar(); volh = Volume[iHighest(Symbol(),0,MODE_VOLUME,bar,0)]; SetIndexBuffer(0,volum); SetIndexBuffer(1,ma); SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexStyle(1,DRAW_LINE); SetLevelValue (0, volh*1.05); SetLevelValue (1, ((volh*1.05)/100)*75.0); SetLevelValue (2, ((volh*1.05)/100)*50.0); SetLevelValue (3, ((volh*1.05)/100)*25.0); return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ /*int start(){ int limit; limit = Bars-IndicatorCounted()-1; for(int i=limit;i>=0;i--){ volum[i] = NormalizeDouble(Volume[i],0); ma[i] = NormalizeDouble(iMAOnArray(volum,0,MAPeriod,0,MODE_SMA,i),0); } return(0); }*/ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int i=rates_total-prev_calculated-1; if(i<0) i=0; while(i>=0){ if(i<rates_total-1) volum[i] = NormalizeDouble(Volume[i],0); ma[i] = NormalizeDouble(iMAOnArray(volum,0,MAPeriod,0,MODE_SMA,i),0); i--; } return(rates_total); }
Он о минус втором баре гутарил. И о среднем значении ограничений. Поиздеваться желает, имхенько. Я бы его послал, а ты - как знаешь :)
А evillive и artmedia70 благодарность огромная. За терпение и потраченное время. Я уверен, что это не только мое мнение о Вас. Все, кто обращается в эту ветку, обращаются за помощью, и получают ее преимущественно от Вас. Спасибо\
здравствуйте дорогие профи давненько к вам не обращался
суть в том что есть советник с пересечением 2х мувок с открытием ордера там заморачиваться не стали
void Trade()
{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);
if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt)))
{
if(sumSO>0 && !ClosePos(OP_SELL)) return;
if(MO(OP_BUY,GetLot(),GetComment())==-1) return;
if(!ModifyByTicket(T)) return;
NumbUp=0; NumbDn=0;
}
else
и так далее..
то есть если есть пересечение дистанция открываем ордер
мне надобно код который бы находил время последнего так сказать пересечечения..
далее от текущего момента до установленного времени в истории бы поискал ордера попадающие под период.. и открывал бы ордер если не обнаружил таковой
для этих целей раздербанил код индикаторов трасировщиков там кажется все понятно
но вот как засечь время первого бара после пересечения кривых да еще чтоб оно было крайним правым не ясно
чуствую что нуужен оператор фор но сформулировать не могу
Так не делается. Вызывается iCustom для всех 3-х буферов, записывается каждое значение в свою переменную и потом делайте с этими значениями что надо.
Для полос Боллингера, на второй бар, соответственно примеру в справке, отсебятины не надо:
Спасибо.
Но, в виду своей неграмотности, мне приходится постоянно рыться в учебнике, и вот что откопал: пользовательский индикатор - программа..., написанная в соответствии с авторским алгоритмом. А в справочнике говорится, что iCustom возвращает значение указанного пользовательского индикатора.
Но я не использую никаких пользовательских (т.е. как я понимаю - разработанных мной) индикаторов.
Мне нужно извлечь значения стандартных, если можно их так назвать, индикаторов: Скользящей Средней, Полос Боллингера и Стохастик Осциллятора с заданными мной параметрами. Конечно, я делаю это "методом тыка" - что первым нашел, то и применяю. Но предложенный Вами вариант, мне кажется тоже не подходит.
Неужели нет решения без использования всяких буферов, массивов, циклов? Я в них как булыжник в море - сразу тону.
здравствуйте дорогие профи давненько к вам не обращался
суть в том что есть советник с пересечением 2х мувок с открытием ордера там заморачиваться не стали
void Trade()
{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);
if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt)))
{
if(sumSO>0 && !ClosePos(OP_SELL)) return;
if(MO(OP_BUY,GetLot(),GetComment())==-1) return;
if(!ModifyByTicket(T)) return;
NumbUp=0; NumbDn=0;
}
else
и так далее..
то есть если есть пересечение дистанция открываем ордер
мне надобно код который бы находил время последнего так сказать пересечечения..
далее от текущего момента до установленного времени в истории бы поискал ордера попадающие под период.. и открывал бы ордер если не обнаружил таковой
для этих целей раздербанил код индикаторов трасировщиков там кажется все понятно
но вот как засечь время первого бара после пересечения кривых да еще чтоб оно было крайним правым не ясно
чуствую что нуужен оператор фор но сформулировать не могу
Этот советник не по пересечению работает. Тут критерий такой: если быстрая МА выше медленной на Х пипс и нет открытой позиции - открыть по рынку.
Для поиска пересечения всегда по паре значений надо брать - "быстрая/медленная МА" ДО пересечения и "быстрая/медленная МА" ПОСЛЕ пересечения, чтобы засечь, когда они местами меняются, так сказать. То есть
if(FastMA_2<SlowMA_2 && FastMA_1>SlowMA_1) - быстрая МА пересекла медленную снизу вверх между 1-м и 2-м барами.
В бесконечном цикле искать от нулевого бара и до обнаружения пересечения, это будет Х+1 бар, а вам нужно время бара Х, то есть самый свежий бар после пересечения.
Спасибо.
Но, в виду своей неграмотности, мне приходится постоянно рыться в учебнике, и вот что откопал: пользовательский индикатор - программа..., написанная в соответствии с авторским алгоритмом. А в справочнике говорится, что iCustom возвращает значение указанного пользовательского индикатора.
Но я не использую никаких пользовательских (т.е. как я понимаю - разработанных мной) индикаторов.
Мне нужно извлечь значения стандартных, если можно их так назвать, индикаторов: Скользящей Средней, Полос Боллингера и Стохастик Осциллятора с заданными мной параметрами. Конечно, я делаю это "методом тыка" - что первым нашел, то и применяю. Но предложенный Вами вариант, мне кажется тоже не подходит.
Неужели нет решения без использования всяких буферов, массивов, циклов? Я в них как булыжник в море - сразу тону.
здравствуйте дорогие профи давненько к вам не обращался
суть в том что есть советник с пересечением 2х мувок с открытием ордера там заморачиваться не стали
void Trade()
{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);
if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt)))
{
if(sumSO>0 && !ClosePos(OP_SELL)) return;
if(MO(OP_BUY,GetLot(),GetComment())==-1) return;
if(!ModifyByTicket(T)) return;
NumbUp=0; NumbDn=0;
}
else
и так далее..
то есть если есть пересечение дистанция открываем ордер
мне надобно код который бы находил время последнего так сказать пересечечения..
далее от текущего момента до установленного времени в истории бы поискал ордера попадающие под период.. и открывал бы ордер если не обнаружил таковой
для этих целей раздербанил код индикаторов трасировщиков там кажется все понятно
но вот как засечь время первого бара после пересечения кривых да еще чтоб оно было крайним правым не ясно
чуствую что нуужен оператор фор но сформулировать не могу