Куда - то текст делся. Поэтому еще раз.
Написал свой первый Индикатор относительной силы 4 валют EUR, USD, JPY, GBP. Помогите сгладить кривые, желательно через коэффициент. В программировании слабоват, изучал по учебнику. Сам пробовал через iMAOnArray() но не получилось, видимо что-то не так сделал и индикатор перестал рисоваться вообще. Заранее спасибо.
PS если кому интересен этот индикатор в данном виде, то черн - USD; зелен. - EUR; красн. - GBP; синий - JPY. Работает на всех таймфреймах.
Вот описание функции
double iMAOnArray( | double array[], int total, int period, int ma_shift, int ma_method, int shift) |
Расчет скользящего среднего на данных, хранящихся в массиве. В отличие от iMA(...) функция iMAOnArray не выбирает данные на основе названия инструмента, таймфрейма и используемой цены - ценовые данные должны быть подготовлены заранее. Расчет производится слева направо. Для организации доступа к элементам массива, как к таймсерии (то есть справа налево),
теперь вам нужен ещё один цикл и 4-е буфера для линий и всё будет работать
Вот пример
//+------------------------------------------------------------------+ //| Cronex DeMarker.mq4 | //| Copyright © 2007, Cronex. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, Cronex" #property link "http://www.metaquotes.net/" //---- indicator settings #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Silver #property indicator_color2 Blue #property indicator_color3 Red //#property indicator_width1 2 //---- indicator parameters extern int DeMarker=25; extern int FastMA=14; extern int SlowMA=25; //---- indicator buffers double DeMarkerBuffer[]; double FastMABuffer[]; double SlowMABuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- drawing settings SetIndexStyle(0,DRAW_LINE); SetIndexStyle(1,DRAW_LINE); SetIndexStyle(2,DRAW_LINE); SetIndexDrawBegin(1,SlowMA); // IndicatorDigits(Digits+1); //---- indicator buffers mapping SetIndexBuffer(0,DeMarkerBuffer); SetIndexBuffer(1,FastMABuffer); SetIndexBuffer(2,SlowMABuffer); //---- name for DataWindow and indicator subwindow label IndicatorShortName("Cronex DeMarker"); SetIndexLabel(0,"DeMarker"); SetIndexLabel(1,"Fast MA"); SetIndexLabel(2,"Slow MA"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Cronex DeMarker | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars=IndicatorCounted(); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- DeMarker counted in the 1-st buffer for(int i=0; i<limit; i++) DeMarkerBuffer[i]=iDeMarker(NULL,0,DeMarker,i); //---- signal line counted in the 2-nd buffer for(i=0; i<limit; i++) { FastMABuffer[i]=iMAOnArray(DeMarkerBuffer,Bars,FastMA,0,MODE_LWMA,i); SlowMABuffer[i]=iMAOnArray(DeMarkerBuffer,Bars,SlowMA,0,MODE_LWMA,i); } //---- done return(0); } //+------------------------------------------------------------------+
сейчас попробую... спасибо
результат выложу
Потому, что я считаю что надо учитывать еще и стоимость самой валюты, ранее 100п. например по ене (когда курс был 120) давали меньшую прибыль чем сейчас когда курс 95. И это я думаю надо учитывать, т.е. стоимость валюты в данный момент времени. Тож самое например и с парой еврофунт, сейчас фунт уже не тот что был по 2 бакса.
Все равно не получается, как и раньше ни чего не рисует :(
Что не так? подскажите плиз...
//+------------------------------------------------------------------+ //| RGB-system.mq4 | //| Strukov Roman | //| srb-78@mail.ru | //+------------------------------------------------------------------+ #property copyright "Strukov Roman" #property link "srb-78@mail.ru" #property indicator_separate_window #property indicator_buffers 4 #property indicator_color1 Red #property indicator_color2 Green #property indicator_color3 Blue #property indicator_color4 Black extern int Period_MA = 900; extern int History = 5000; double GBP[],EUR[],JPY[],USD[],GBP1[],EUR1[],JPY1[],USD1[]; int init() { SetIndexBuffer(0, GBP); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2); SetIndexBuffer(1, EUR); SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2); SetIndexBuffer(2, JPY); SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,2); SetIndexBuffer(3, USD); SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,2); IndicatorShortName("RGB system"); return; } int start() { int i, Counted_bars; Counted_bars = IndicatorCounted(); i = Bars-Counted_bars-1; if (i>History-1) i=History-1; while(i>=0) { USD1[i] = -(iClose("EURUSD",NULL,i)-iMA("EURUSD",NULL,Period_MA,0,1,0,i))- (iClose("GBPUSD",NULL,i)-iMA("GBPUSD",NULL,Period_MA,0,1,0,i))+ (iClose("USDJPY",NULL,i)-iMA("USDJPY",NULL,Period_MA,0,1,0,i))/iClose("USDJPY",NULL,i); EUR1[i] = (iClose("EURUSD",NULL,i)-iMA("EURUSD",NULL,Period_MA,0,1,0,i))+ (iClose("EURUSD",NULL,i)*iClose("USDJPY",NULL,i)-iMA("EURUSD",NULL,Period_MA,0,1,0,i)*iMA("USDJPY",NULL,Period_MA,0,1,0,i))/iClose("USDJPY",NULL,i)+ (iClose("EURUSD",NULL,i)/iClose("GBPUSD",NULL,i)-iMA("EURUSD",NULL,Period_MA,0,1,0,i)/iMA("GBPUSD",NULL,Period_MA,0,1,0,i))*iClose("GBPUSD",NULL,i); GBP1[i] = (iClose("GBPUSD",NULL,i)-iMA("GBPUSD",NULL,Period_MA,0,1,0,i))+ (iClose("GBPUSD",NULL,i)*iClose("USDJPY",NULL,i)-iMA("GBPUSD",NULL,Period_MA,0,1,0,i)*iMA("USDJPY",NULL,Period_MA,0,1,0,i))/iClose("USDJPY",NULL,i)- (iClose("EURUSD",NULL,i)/iClose("GBPUSD",NULL,i)-iMA("EURUSD",NULL,Period_MA,0,1,0,i)/iMA("GBPUSD",NULL,Period_MA,0,1,0,i))*iClose("GBPUSD",NULL,i); JPY1[i] = -(iClose("USDJPY",NULL,i)-iMA("USDJPY",NULL,Period_MA,0,1,0,i))/iClose("USDJPY",NULL,i)- (iClose("EURUSD",NULL,i)*iClose("USDJPY",NULL,i)-iMA("EURUSD",NULL,Period_MA,0,1,0,i)*iMA("USDJPY",NULL,Period_MA,0,1,0,i))/iClose("USDJPY",NULL,i)- (iClose("GBPUSD",NULL,i)*iClose("USDJPY",NULL,i)-iMA("GBPUSD",NULL,Period_MA,0,1,0,i)*iMA("USDJPY",NULL,Period_MA,0,1,0,i))/iClose("USDJPY",NULL,i); i--; } Counted_bars=IndicatorCounted(); if (Counted_bars>0) Counted_bars--; int limit=Bars-Counted_bars; for(i=0; i<limit; i++) { USD[i]=iMAOnArray(USD1,Bars,144,0,MODE_LWMA,i); EUR[i]=iMAOnArray(EUR1,Bars,144,0,MODE_LWMA,i); GBP[i]=iMAOnArray(GBP1,Bars,144,0,MODE_LWMA,i); JPY[i]=iMAOnArray(JPY1,Bars,144,0,MODE_LWMA,i); } return; }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования