Что нужно добавить для дополнительной поддержки универсальных математических расчетов в MQL5 и MQL5 Cloud Network? - страница 9

 

Да, игры дают пинок именно производительности и технологиям. Так как вытягивают железку на качественный уровень. (Хотя один знакомый профессор в универе считал почему-то игры вселенским злом :)

что касается универсальности функций, то вот вам направления дальнейшего поэтапного внедрения

- прогноз погоды
- обработка научных данных (космос, ядерная физика)
- фармацевтика
- 3D рендеринг (как практическое применение за деньги)

ну а там глядишь и до прогноза на бирже доберемся...

PS.
А с UCI, как и сказал, мог бы сделать приложение для МТ :)

 
sergeev:

я не про облако. с возможностями облака все понятно. Им можно пользоваться и вне МТ.

а я про МТ.

Я не вижу ничего предосудительного, если на базе МТ будут проводиться соревнования ботов-шахматистов. Причем, эти самые боты будут использовать вычислительные ресурсы облака.

 

Может на самом деле забросить игры в форекс и поиграть в шахматы? Раньше неплохо получалось. 

Но мне больше нравятся нарды. Может кто запрограммирует нарды на МТ5, буду бесконечно благодарен. 

 
Покер! Будем ЕПТ разрывать!)))
 
pronych:
Покер! Будем ЕПТ разрывать!)))
там такие мощности нафиг не надо.
 
Проект по нейродвижку обязательно реализуем, пока заняты сигналами. У нас большие планы по нейросетям в МТ5.

Если мы беремся, то доводим до конца. Например, AlgLib реализовали полностью самостоятельно, хотя была мысль привлечь сообщество.

Пока есть ощущение, что мало кто реально хочет участвовать в оперсорсных проектах и тратить свое время.
 
Renat:

Пока есть ощущение, что мало кто реально хочет участвовать в оперсорсных проектах и тратить свое время.

опыта нет. вы вроде как тогда обещали кого-то из своей команды куратором для проекта сделать.

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

 
sergeev:

опыта нет. вы вроде как тогда обещали кого-то из своей команды куратором для проекта сделать.

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

Опыта в болтологии более чем. Давайте так слепим, давайте так рассядемся и т.д. и т.п. в соответствии с басней дедушки Крылова под названием Квартет. Никто нифига не делает, все с умными рожами только мнения свои высказывают.

Не нужен никакой куратор, чтобы всех палкой подгонял. Руководитель проекта должен создать первые строчки кода - интерфейсы будущих классов, от которых уже будет более или менее понятно куда дальше нужно плясать, а где тупик. А далее, какой нибудь участник проекта, обосновывает, что конкретно он собирается выполнить и в случае, если его потенциальная деятельность не противоречит общему направлению, то ему поручается реализация его идеи. Потом еще какой нибудь участник подключается. И т.д. и т.п.

Вот, например, было время свободное, я тут накидал кой какие наброски классов для шахматной программы:

//+------------------------------------------------------------------+
//|                                                    CChessman.mqh |
//|                                 Copyright 2012, Yury V. Reshetov |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Yury V. Reshetov"
#property link      "http://www.mql5.com"

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CChessman // Класс: шахматная фигура
  {
private:
   int               type; // Тип фигуры: 
                           // 0 - пешка,
   // 1 - ладья
   // 2 - конь
   // 3 - слон
   // 4 - ферзь
   // 5 - король
   int               c; // Цвет фигуры: 0 - белый, 1 - черный 
   int               h; // Положение фигуры по горизонтали
   int               v; // Положение фигуры по вертикали
   bool              state; // Состояние фигуры: true - на доске, false - взята противником

public:
   void              CChessman(int t,int horisontal,int vertical,int group); // Конструктор
   void             ~CChessman(); // Деструктор
                                  // Изменение местонахождения фигуры на доске
   // Возвращает результат, если изменение корректно и было выполнено
   bool              setPosition(int horisontal,int vertical); // Изменение позиции фигуры на доске
   void              erase(); // Вызывается, если фигура взята противником
   int               getType(); // Возвращает тип фигуры
   int               getHPosition(); // Возвращает положение фигуры на доске по вертикали
   int               getVPosition(); // Возвращает положение фигуры на доске по горизонтали
   int               getColor(); // Возвращает цвет фигуры
   bool              getState(); // Возвращает текущий статус фигуры
  };
//+------------------------------------------------------------------+
//|    Конструктор                                                   |
//+------------------------------------------------------------------+
void CChessman::CChessman(int t,int horisontal,int vertical,int group) 
  {
   state= true;
   type = t;
   h = horisontal;
   v = vertical;
   c = group;
  }
//+------------------------------------------------------------------+
//|      Изменение позиции фигуры на доске                           |
//+------------------------------------------------------------------+
bool CChessman::setPosition(int horisontal,int vertical) 
  {
   if(!state) 
     {
      return(false);
     }
   if(horisontal<0) 
     {
      return(false);
     }
   if(horisontal>7) 
     {
      return(false);
     }
   if(vertical<0) 
     {
      return(false);
     }
   if(vertical>7) 
     {
      return(false);
     }
   h = horisontal;
   v = vertical;
   return(true);
  }
//+------------------------------------------------------------------+
//|       Удаление фигуры с доски                                    |
//+------------------------------------------------------------------+
void CChessman::erase(void) 
  {
   state=false;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CChessman::getType(void) 
  {
   return(type);
  }
//+------------------------------------------------------------------+
//|         Возвращает горизонтальное положение фигуры на доске      |
//+------------------------------------------------------------------+
int CChessman::getHPosition(void) 
  {
   return(h);
  }
//+------------------------------------------------------------------+
//|         Возвращает вертикальное положение фигуры на доске        |
//+------------------------------------------------------------------+
int CChessman::getVPosition(void) 
  {
   return(v);
  }
//+------------------------------------------------------------------+
//|        Возвращает цвет фигуры                                    |
//+------------------------------------------------------------------+
int CChessman::getColor(void) 
  {
   return(c);
  }
//+------------------------------------------------------------------+
//|         Возвращает статус фигуры                                 |
//+------------------------------------------------------------------+
bool CChessman::getState(void) 
  {
   return(state);
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|                                              CChessmansArray.mqh |
//|                                 Copyright 2012, Yury V. Reshetov |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Yury V. Reshetov"
#property link      "http://www.mql5.com"
#include <Chess/CChessman.mqh>
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CChessmansArray // Класс: Шахматная доска
  {
private:
   CChessman        *table[]; // Массив шахматных фигур

public:
   void              CChessmansArray(); // Конструктор
   void             ~CChessmansArray(); // Деструктор
   CChessman        *getChessman(int i);
   void              goWhite(); // Ход белых
   void              goBlack(); // Ход черных
  };
//+------------------------------------------------------------------+
//|          Конструктор                                             |
//+------------------------------------------------------------------+
void CChessmansArray::CChessmansArray(void) 
  {
   ArrayResize(table,32);

   table[0] = new CChessman(1, 0, 0, 1); // Левая белая ладья
   table[1] = new CChessman(2, 1, 0, 1); // Левый белый конь
   table[2] = new CChessman(3, 2, 0, 1); // Левый белый слон
   table[3] = new CChessman(4, 3, 0, 1); // Белый ферзь
   table[4] = new CChessman(5, 4, 0, 1); // Белый король
   table[5] = new CChessman(3, 5, 0, 1); // Правый белый слон
   table[6] = new CChessman(2, 6, 0, 1); // Правый белый конь
   table[7] = new CChessman(1, 7, 0, 1); // Правая белая ладья

   table[0] = new CChessman(0, 0, 1, 1); // Белая пешка
   table[1] = new CChessman(0, 1, 1, 1); // Белая пешка
   table[2] = new CChessman(0, 2, 1, 1); // Белая пешка
   table[3] = new CChessman(0, 3, 1, 1); // Белая пешка
   table[4] = new CChessman(0, 4, 1, 1); // Белая пешка
   table[5] = new CChessman(0, 5, 1, 1); // Белая пешка
   table[6] = new CChessman(0, 6, 1, 1); // Белая пешка
   table[7] = new CChessman(0, 7, 1, 1); // Белая пешка

   table[0] = new CChessman(1, 0, 7, -1); // Левая черная ладья
   table[1] = new CChessman(2, 1, 7, -1); // Левый черный конь
   table[2] = new CChessman(3, 2, 7, -1); // Левый черный слон
   table[3] = new CChessman(4, 3, 7, -1); // Черный ферзь
   table[4] = new CChessman(5, 4, 7, -1); // Черный король
   table[5] = new CChessman(3, 5, 7, -1); // Правый черный слон
   table[6] = new CChessman(2, 6, 7, -1); // Правый черный конь
   table[7] = new CChessman(1, 7, 7, -1); // Правая Черная ладья

   table[0] = new CChessman(0, 0, 6, -1); // Черная пешка
   table[1] = new CChessman(0, 1, 6, -1); // Черная пешка
   table[2] = new CChessman(0, 2, 6, -1); // Черная пешка
   table[3] = new CChessman(0, 3, 6, -1); // Черная пешка
   table[4] = new CChessman(0, 4, 6, -1); // Черная пешка
   table[5] = new CChessman(0, 5, 6, -1); // Черная пешка
   table[6] = new CChessman(0, 6, 6, -1); // Черная пешка
   table[7] = new CChessman(0, 7, 6, -1); // Черная пешка

  }
//+------------------------------------------------------------------+
//|       Возвращает объект фигуры по индексу в массиве              |
//+------------------------------------------------------------------+
CChessman *CChessmansArray::getChessman(int i) 
  {
   return(table[i]);
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|                                                    CChessBot.mqh |
//|                                 Copyright 2012, Yury V. Reshetov |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Yury V. Reshetov"
#property link      "http://www.mql5.com"
#include <Chess/CChessman.mqh>
#include <Chess/CChessmansArray.mqh>
//+------------------------------------------------------------------+
//|      Класс: бот-шахматист                                        |
//+------------------------------------------------------------------+
class CChessBot // Класс: бот-шахматист
  {
private:
   CChessman        *chessmans[]; // Шахматные фигуры
   int               table[]; // Шахматная доска
   int               c; // Цвет фигур: 0 - белый, 1 - черный

public:
   void              CChessBot(int group); // Конструктор
   void             ~CChessBot(); // Деструктор
   void              setTable(CChessmansArray *t); // Расставляет фигуры
   int               go(); // Ход. Возвращает индекс своей фигуры, которой был сделан ход. 
   int               analitic(); // Анализ ходов 
  };
//+------------------------------------------------------------------+
//|                  Конструктор                                     |
//+------------------------------------------------------------------+
void CChessBot::CChessBot(int group) 
  {
   c=group;
  }
//+------------------------------------------------------------------+
//|                  Расстановка фигур на шахматной доске            |
//+------------------------------------------------------------------+
void CChessBot::setTable(CChessmansArray *mans) 
  {
   ArrayResize(chessmans,32);
   ArrayResize(table,64);
   for(int i=0; i<32; i++) 
     {
      chessmans[i]=mans.getChessman(i);
      table[chessmans[i].getHPosition() * 8 + chessmans[i].getVPosition()] = chessmans[i].getType() * 2 + chessmans[i].getColor();
     }
  }
//+------------------------------------------------------------------+
//|             Полуход                                              |
//+------------------------------------------------------------------+
int CChessBot::go(void) 
  {
   return(0);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|                                                   CChessGame.mqh |
//|                                 Copyright 2012, Yury V. Reshetov |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Yury V. Reshetov"
#property link      "http://www.mql5.com"
#include <Chess/CChessBot.mqh>
#include <Chess/CChessmansArray.mqh>
#include <Chess/CChessman.mqh>
//+------------------------------------------------------------------+
//|    Класс: Шахматная доска                                        |
//+------------------------------------------------------------------+
class CChessGame  
  {
private:
   CChessmansArray  *chessmans; // Шахматная массив шахматных фигур
   CChessBot        *whitebot; // Бот, играющий белыми
   CChessBot        *blackbot; // Бот, играющий черными

public:
   void              CChessGame(CChessBot *w,CChessBot *b); // Конструктор
   void             ~CChessGame(); // Деструктор
   void              game();  // Игра
   int               goWhite(); // Ход белых
   int               goBlack(); // Ход черных
  };
//+------------------------------------------------------------------+
//|                 Конструктор                                      |
//+------------------------------------------------------------------+
void CChessGame::CChessGame(CChessBot *w,CChessBot *b)
  {
   chessmans=new CChessmansArray();
   whitebot=w;
   whitebot.setTable(chessmans);
   blackbot=b;
   blackbot.setTable(chessmans);
  }
//+------------------------------------------------------------------+
//|           Полуход белых                                          |
//+------------------------------------------------------------------+
int CChessGame::goWhite(void)
  {
   return(whitebot.go());
  }
//+------------------------------------------------------------------+
//|         Полуход черных                                           |
//+------------------------------------------------------------------+
int CChessGame::goBlack(void)
  {
   return(blackbot.go());
  }
//+------------------------------------------------------------------+
//|            Игра                                                  |
//+------------------------------------------------------------------+
void CChessGame::game(void)
  {
   bool stopflag=false;
   while(!stopflag)
     {
      if(goWhite()>=0)
        {
         if(goBlack()>=0)
           {
            // ...
           } else {
                  stopflag=false;
           }
        } else {
               stopflag=false;
        }
     }
  }
//+------------------------------------------------------------------+


Теперь можно создать проект в хранилище и подключать к нему дополнительных разработчиков. Но не всех желающих из числа высказать какое-то там мнение, а из числа тех, кто собирается что-то конкретное делать.

 

Юрий, с шахматными движками довольно ясно - тема проработана другими людьми очень хорошо.

Если браться за дело, то надо использовать накопленный опыт и 10000 процентный набор изначальных и экстремально зубодробительных оптимизаций (биткарт, пресетов и тд).

Начинать с нуля с азбучных граблей и ошибок нельзя. Никаких "преждевременная оптимизация - зло". Тут сразу нужен экстремальный опыт реализации именно шахматных числодробил.

Благо статей, исходников и детальных объяснений много в публичном доступе. Как начнете читать по теме, сразу поймете экстремальный уровень достигнутых решений.

 
Renat:

Юрий, с шахматными движками довольно ясно - тема проработана другими людьми очень хорошо.

Если браться за дело, то надо использовать накопленный опыт и 10000 процентный набор изначальных и экстремально зубодробительных оптимизаций (биткарт, пресетов и тд).

Начинать с нуля с азбучных граблей и ошибок нельзя. Никаких "преждевременная оптимизация - зло". Тут сразу нужен экстремальный опыт реализации именно шахматных числодробил.

Благо статей, исходников и детальных объяснений много в публичном доступе. Как начнете читать по теме, сразу поймете экстремальный уровень достигнутых решений.

Дык есть у меня и литература, причем, Ботвинник еще в бумажном варианте. И наработки есть кой какие, только конечно же не на MQL5, а на muLisp.

Просто хотел показать наглядно, некоторым местным прожектерам, что для проектов не нужны надсмотрщики. А нужна команда конкретных разработчиков, которые пусть не доки во всех технологиях, а могут быть даже и узкоприкладные спецы, но тем не менее компетентные в своей области. И нужен руководитель проекта, который все это должен первоначально продумать и подготовить для остальной команды, чтобы проект не начинался на пустом месте, а к нему можно было сразу же, после некоторого вводного экскурса приступать. Ведь иначе дело не сдвинется с мертвой точки.

Причина обращения: