помогите в написании скрипта ( возможна небольшая оплата)

 
Привет всем !! подскажите - возможно ли написать скрипт который бы брал котировки по определенным валютным парам и подсчитывал что-то наподобие "среднеарифмитического" по этим показателям ?
т.е. ,пример курс валютной пары А - 50 пп, В - 50, С - 150 (50+50+150/3= 83,33)
 
stans1970:
Привет всем !! подскажите - возможно ли написать скрипт который бы брал котировки по определенным валютным парам и подсчитывал что-то наподобие "среднеарифмитического" по этим показателям ?
т.е. ,пример курс валютной пары А - 50 пп, В - 50, С - 150 (50+50+150/3= 83,33)

"курс валютной пары" - это, наверно, размер свечи??? А Вы знаете, что свечи бывают "бычьи" и "медвежьи"? И по этой логике размер свечи может быть, как положительным (бычья свеча), так и отрицательным (медвежья свеча).

P.S. Чего народ по-напридумывает в погоне за "лёгким хлебом"! :)))

 
Плохо себе представляю зачем это нужно, но если очень хочется, то можно.

Я набросал скрипт, если какие ошибки, пишите сюда, подпилим.

Инструкция:

  • В pairs прописываем пары через пробел, максимум 10
  • Если ничего не введено, то будут использованы пары, выбранные при прошлом запуске (реализовано через запись в файл)
  • Точность цены в Alert'ах задается через #define DIGITS

·         

#property show_inputs

#define DIGITS 5        // Количество знаков у цены в алертах
extern string pairs;


int start()
{
   string name[10] = {""};
   
   pairs = StringTrimRight(pairs);
   pairs = StringConcatenate(pairs, " ");
   bool input = false;
   int cur_pos = 0;
   int edge = StringFind(pairs, " ", cur_pos);
   if(cur_pos != edge)
   {
      input = true;
      for(int index = 0;  edge != -1;  index++)
      {
         name[index] = StringSubstr(pairs, cur_pos, edge - cur_pos);
         cur_pos = edge;
         cur_pos ++;
         edge = StringFind(pairs, " ", cur_pos);
      }
   }

   int handle;
   if( ! input )
   {
      handle = FileOpen("last_pairs.csv", FILE_CSV | FILE_READ);
      if(handle == -1)
      {
         Alert("Не удалось открыть файл: last_pairs.csv");
         return(0);
      }
      for(int i = 0;  i < 10;  i++)
         name[i] = FileReadString(handle);
   }
   else
   {
      handle = FileOpen("last_pairs.csv", FILE_CSV | FILE_WRITE);
      if(handle == -1)
      {
         Alert("Не удалось открыть файл: last_pairs.csv");
         return(0);
      }
      for(int i_2 = 0;  i_2 < 10;  i_2++)
      {
         if( FileWrite(handle, name[i_2]) < 0 )
         {
            Alert("Ошибка при записи");
            return(0);
         } 
      }
   }
   FileClose(handle);
   
   double value = 0;
   int count = 0;
   string output;
   for(int i_3 = 0;  i_3 < 10;  i_3++)
   {
      if(StringLen(name[i_3]) != 0) 
      {
         if(MarketInfo(name[i_3] ,MODE_BID) == 0)
         {
            Alert("Имя инструмента не найдено");
            return(0);
         }
         value += MarketInfo(name[i_3] ,MODE_BID);
         count++;  
         output = StringConcatenate(output, name[i_3], " ");
      }
   }
   output = StringConcatenate( output, ": ", DoubleToStr(value / count ,DIGITS) );
   Alert(output);
   return(0);
}

P.S:

Создайте скрипт и целиком запихните это туда;

Имя файла last_pairs.csv, вдруг конфликт имен (пары, выранные при прошлом запуске);

Если нужно, то лимит количество пар можно сделать настраиваемым (отпишитесь если надо);

Подсчитывается средни Bid, в принципе можно сделать настройкой (bid или ask).


	          
 

Или речь шла о создании среднего графика? Если так, то можно взять скрипт отсюда https://www.mql5.com/ru/code/10746 и создавать avg историю. Сначала соединить два графика, потом график-результат и третий график и т.д.

 
220Volt:

Или речь шла о создании среднего графика? Если так, то можно взять скрипт отсюда https://www.mql5.com/ru/code/10746 и создавать avg историю. Сначала соединить два графика, потом график-результат и третий график и т.д.


видимо все я не правильно обьяснил, наверное нужен индикатор который считает , к примеру GBPUSD = 1.5266,USDJPY=98.08,EURUSD=1.3016

1.5266+98.08+1.3016 / 3 (пары или больше до 10)=32,98 и это значение должно в онлайне висеть на графике любом , куда я его добавлю

вот как то так ...

 

Переделывать как-то желания нет. Но это не сложно, у Вас есть от чего оттолкнуться. Для большей разборчивости добавил комментарии для основных блоков.

#property show_inputs

#define DIGITS 5        // Количество знаков у цены в алертах
extern string pairs;


int start()
{
   string name[10] = {""};
   
   //begin// парсим введенную строку pairs, сохраняем символы в массив name[]
      pairs = StringTrimRight(pairs);
      pairs = StringConcatenate(pairs, " ");
      bool input = false;
      int cur_pos = 0;
      int edge = StringFind(pairs, " ", cur_pos);
      if(cur_pos != edge)
      {
         input = true;
         for(int index = 0;  edge != -1;  index++)
         {
            name[index] = StringSubstr(pairs, cur_pos, edge - cur_pos);
            cur_pos = edge;
            cur_pos ++;
            edge = StringFind(pairs, " ", cur_pos);
         }
      }
   //end//
   
   int handle;
   if( ! input )
   {
      //begin// Ввода не было, формируем name[] из файла
         handle = FileOpen("last_pairs.csv", FILE_CSV | FILE_READ);
         if(handle == -1)
         {
            Alert("Не удалось открыть файл: last_pairs.csv");
            return(0);
         }
         for(int i = 0;  i < 10;  i++)
            name[i] = FileReadString(handle);
      //end//
   }
   else
   {
      //begin// Мы что-то ввели, переписываем файл, источник - name[]
         handle = FileOpen("last_pairs.csv", FILE_CSV | FILE_WRITE);
         if(handle == -1)
         {
            Alert("Не удалось открыть файл: last_pairs.csv");
            return(0);
         }
         for(int i_2 = 0;  i_2 < 10;  i_2++)
         {
            if( FileWrite(handle, name[i_2]) < 0 )
            {
               Alert("Ошибка при записи");
               return(0);
            } 
         }
      //end//
   }
   FileClose(handle);
   
   //begin// Рассчитываем среднее значение (value), формируем пояснительную строку (output)
      double value = 0;
      int count = 0;
      string output;
      for(int i_3 = 0;  i_3 < 10;  i_3++)
      {
         if(StringLen(name[i_3]) != 0) 
         {
            if(MarketInfo(name[i_3] ,MODE_BID) == 0)
            {
               Alert("Имя инструмента не найдено");
               return(0);
            }
            value += MarketInfo(name[i_3] ,MODE_BID);
            count++;  
            output = StringConcatenate(output, name[i_3], " ");
         }
      }
      output = StringConcatenate( output, ": ", DoubleToStr(value / count ,DIGITS) );
   //end//
   
   Alert(output);
   return(0);
}
 
Аватарка понравлась. 
 

Здравствуйте!

Ищу программиста с Волгограда или области!!! Если кто есть ответьте, спасибо!
 
kos17788:

Здравствуйте!

Ищу программиста с Волгограда или области!!! Если кто есть ответьте, спасибо!

тут
 
stans1970:
Привет всем !! подскажите - возможно ли написать скрипт который бы брал котировки по определенным валютным парам и подсчитывал что-то наподобие "среднеарифмитического" по этим показателям ?
т.е. ,пример курс валютной пары А - 50 пп, В - 50, С - 150 (50+50+150/3= 83,33)
здравствуйте. какие валютные пары вы желаете использовать в формуле усреднения? кстати по этой фомуле при достаточном количестве евросодержащих и долларосодержащих пар можно разложить котровку EUR/USD на индексы евро и доллара так что при делении индекса евро на индекс доллара можно снова получить ситетическу котировку EUR/USD которая будет мало отличатся ( 3 - 4 пипса ) от оригинала. я как то проделывал такое....
 
sergeev:

тут
еще есть где  на этом форуме можно заказать программы, так как непонятно  c установкой  MetaQuotes ID. зачем его вообще вписывать, мне он не нужен если! без него можно  как нибудь?