Percent_Change[i]=(((High[i] + Low[i]) / 2-(High[i+1] + Low[i+1]) / 2)/((High[i+1] + Low[i+1]) / 2)*1000;
Наверное, можно и так:
// ... double med_0; double med_1; // ... med_0 = (High[i] + Low[i]) / 2; med_1 = (High[i+1] + Low[i+1]) / 2; Percent_Change[i] = 1000 * (med_0 - med_1) / med_1; // ...
что то всё равно туплю (((
мне вот это написать надо: ((Price - Price[1]) / Price[1])*1000 где Price это (High+Low)/2
мне вот это написать надо: ((Price - Price[1]) / Price[1])*1000 где Price это (High+Low)/2
Цены - индексированные массивы, причем если i - текущий бар, то i + 1 - предыдущий, т.е. нумерация идет в обратную сторону, как и следует из формулы в твоем первом посте. Таким образом, бар с i = 0 соответствует бару, формирующемуся в данное время на рабочем ТФ, а бар с i = 1 - только что сформировавшемуся. К этому надо просто привыкнуть:
medianprice_previous = (High[i+1] + Low[i+1]) / 2; medianprice_current = (High[i] + Low[i]) / 2; Percent_Change[i] = 1000 * (medianprice_previous - medianprice_current) / medianprice_previous;
Вот так правильно будет?
//+------------------------------------------------------------------+
//| _Dynamic II %Change.mq4 |
//| Dark Monk |
//| http://ru |
//+------------------------------------------------------------------+
#property copyright "Dark Monk"
#property link "ru"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DarkGray
//---- input parameters
//---- buffers
double PercentChange[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- % Change indicator mapping
SetIndexBuffer(0,PercentChange);
//---- drawing settings
SetIndexStyle(0,DRAW_LINE);
return(0);
}
//+------------------------------------------------------------------+
//| _Dynamic II % Change indicator |
//+------------------------------------------------------------------+
int start()
{
//----
int limit;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//----
for(int i=0; i<limit; i++)
{
//----
PercentChange[i]=((((High[i]+Low[i])/2)-((High[i+1]+Low[i+1])/2))/((High[i+1]+Low[i+1])/2))*1000;
}
//---- done
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| _Dynamic II %Change.mq4 |
//| Dark Monk |
//| http://ru |
//+------------------------------------------------------------------+
#property copyright "Dark Monk"
#property link "ru"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DarkGray
//---- input parameters
//---- buffers
double PercentChange[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- % Change indicator mapping
SetIndexBuffer(0,PercentChange);
//---- drawing settings
SetIndexStyle(0,DRAW_LINE);
return(0);
}
//+------------------------------------------------------------------+
//| _Dynamic II % Change indicator |
//+------------------------------------------------------------------+
int start()
{
//----
int limit;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//----
for(int i=0; i<limit; i++)
{
//----
PercentChange[i]=((((High[i]+Low[i])/2)-((High[i+1]+Low[i+1])/2))/((High[i+1]+Low[i+1])/2))*1000;
}
//---- done
return(0);
}
//+------------------------------------------------------------------+
В принципе, для данного случая не имеет значения, но лучше привыкать рассчитывать индикаторы с начала истории, а не с самого свежего бара:
//---- for(int i=limit; i>0; i--) { //---- PercentChange[i]=((((High[i]+Low[i])/2)-((High[i+1]+Low[i+1])/2))/((High[i+1]+Low[i+1])/2))*1000;
Спасибо всем, работает вроде бы... я вообще в Омеге пишу, на MQL первый опыт...
Есть код системы для Омеги, кто бы перенёс, а то похоже мои предродовые схватки затянутся до следующих президентских выборов (((
Есть код системы для Омеги, кто бы перенёс, а то похоже мои предродовые схватки затянутся до следующих президентских выборов (((
Вкратце суть системы - на чем основана? Средние, какие-либо уровни, сессии , сетапы, ну и так далее. Хочется понять - есть ли смысл.
я на Пауке писал уже http://forex.kbpauk.ru/showflat.php/Cat/0/Number/95409/an/0/page/0/gonew/1#UNREAD
но тишина там похоже.
но тишина там похоже.
Функция _Kauff_AMA:
Inputs: Period(numeric); Vars: Signal(0), Noise(0), Diff(0), ER(0), Smooth(1), Fastest(.6667), Slowest(.0645), _AMA(0); Diff = AbsValue(MedianPrice - MedianPrice[1]); IF CurrentBar <= Period Then _AMA = MedianPrice; IF CurrentBar > Period Then Begin Signal = AbsValue(MedianPrice - MedianPrice[Period]); Noise = Summation(Diff, Period); If Noise > 0 then ER = Signal / Noise; Smooth = Power(ER * (Fastest - Slowest) + Slowest, 2); _AMA = _AMA[1] + Smooth * (MedianPrice - _AMA[1]); End; _Kauff_AMA = _AMA;
Summation - что это такое, простое суммирование за период?
Fastest и Slowest - вроде константы, а запись в таком виде. От каких периодов они взяты, насколько понимаю от 2 [2/(1+n)] до 30 ? Насколько я помню АМА Кауфмана, она вроде по другому считалась (в "Современном трейдинге" от 2002 года кажется).
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Percent_Change[i]=((Close[i]-Close[i+1])/Close[i+1])*1000;
вставить вместо "Close" - (High + Low) / 2 ???