Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 130

 
skyjet:

Спасибо! А разве не имеет значения с какой стороны начинать подсчет, то есть с 3-го бара?

Для вашего примера разницы вообще-то нет, но в любом случае надо указать начало и конец массива.

for (int x=3; x>1; x--)
{
 if(Open[x]==Open[x-1]) continue;
 if(Open[x]<Open[x-1])
   {
   //--- action
   }
}
Начало перебора имеет значение если массив большой. Например, если условие срабатывает как правило в конце массива, то лучше начать с конца. Такой пример характерен для поиска ордера/позиции. Конечно, если в этом случае поиск сделать сначала, то программа и так дойдёт до этого момента, но будет затрачено больше ресурсов.
 
Danila_mactep:
Всем привет! подскажиите пожалуйста такое дело... вот к индикатору МА можно в вкладке уровни приписать уровень ну скажем 20 это означает что скользящая средняя сдвинется по оси у на 20 пунктов, но в окне данных цена этого уровня не показывается и кпримеру если сдвинуть хочу на 798, это геморойно щитать для многих пар, вот как написать индикатор чтоб или выводил на шрафик цену сдвинутой скользящей или чтобы в окне данных цену видно было и не надо было вручную подсчитывать?
Сделать индикатор, во входных данных которого будет задано смещение МАшки. И индикатор будет подсчитывать ценовой уровень и сразу выводить его объектами на график.
 
chief2000:
Такая задачка - есть одномерный массив, размер которого может изменяться.
Как в цикле перебрать все возможные комбинации элементов массива друг с другом?
Порядок элементов роли не играет, т.е. 123==213==321..

Вот пример для массива с 4-мя элементами:


Хорошая задачка для мозгов. Можно вот так попробовать:
int start(){
 double array[4];
 int k,N[];
 k=ArraySize(array);
 ArrayResize(N,k);
 for (int i=0;i<k;i++)N[i]=-i-1;// Заполнили массив элементов массива отрицательными
//
 int j=0;
 while(N[k-1]<k){
  if(N[j]<k-1){
   N[j]++;
   bool NewComb=false;
   for(i=0;i<k-1;i++){
    if(N[i]>N[i+1]){NewComb=true;}else{NewComb=false;break;}
   }
//
   if(NewComb){
// Получили новую комбинацию в массиве N размерностью k    
    string temp="";
    for(i=0;i<k;i++){// Перебираем массив N. Если N[i] то элемент array[N[i]] не участвует в выборке.
                     // Например, для размерности 4 если N[0]=3,N[1]=1,N[2}<0,N[3]<0 то это выборка array[3] и array[1]
                     //                             если N[0]=3,N[1]=2,N[2]=1,N[3]=0 то это выборка array[3] и array[2] array[1] и array[0]
     if(N[i]<0)temp=StringConcatenate(temp,"X");else temp=StringConcatenate(temp,N[i]);
    }
   Print("NEWCOMB ",temp);// это для проверки какие комбинации выбираются
   }
//
  }
  else{
   N[j]=0;i=1;
   while(i<k){
    if(N[i]<k-1) {if(N[i]>=0)N[i]++;else N[i]=0;j=0;break;}
    else {N[i]=0;i++;}
   }
  }
  if(N[k-1]>=k-1) break;
 }
 return;
}

Результат тестирования для размерности 4. Если Х элемент array не выбирается, иначе использовать array[цифра] и фрагмент для размерности 6:

 
artmedia70:
Сделать индикатор, во входных данных которого будет задано смещение МАшки. И индикатор будет подсчитывать ценовой уровень и сразу выводить его объектами на график.


а как это сделать то я не знаю и чесно говоря даже не представляю как- открываю код МА, там столько всего что я не вижу где там параметр уровень чтобы до туда скопировать и приписать уровни. какую часть кода ма копировать и куда там уровни вписать?
 
Danila_mactep:

а как это сделать то я не знаю и чесно говоря даже не представляю как- открываю код МА, там столько всего что я не вижу где там параметр уровень чтобы до туда скопировать и приписать уровни. какую часть кода ма копировать и куда там уровни вписать?
Нет, нужно свой индикатор начать писать, а там уж и подскажут чё к чему делать нужно.
 
artmedia70:
Нет, нужно свой индикатор начать писать, а там уж и подскажут чё к чему делать нужно.

создал новый индикатор, пока всё выглядит вот так:

#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//--- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
#include "Moving Averages.mq4"
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
//----

//----
return(0);
}
//+------------------------------------------------------------------+

 
В индикаторе МА есть уровни. Вопрос такой - как можно получить данные от этих уровней, скажем, цена достигла уровня 100 или -100 (открываем сделку на покупку/продажу).
 
alexey1979621:
В индикаторе МА есть уровни. Вопрос такой - как можно получить данные от этих уровней, скажем, цена достигла уровня 100 или -100 (открываем сделку на покупку/продажу).

Сама МА на нулевом (текущем) баре - это:

double priceMA0=iMA(Symbol(), Period(), MA_Period, MA_Shift, MA_ Method, PRICE_OPEN, 0);

Для расчёта МАшки берём цену Open, чтобы избавиться от "дребезжания" на текущем баре.

Тогда цена уровня +100 будет:

double priceP100=priceMA0+100*Point;

Цена уровня -100 будет:

double priceM100=priceMA0-100*Point;
 
artmedia70:

Сама МА на нулевом (текущем) баре - это:

Для расчёта МАшки берём цену Open, чтобы избавиться от "дребезжания" на текущем баре.

Тогда цена уровня +100 будет:

Цена уровня -100 будет:


Спасибо, который раз выручаете. Скоро точно разберусь в программировании.....
Причина обращения: