Любые вопросы от ПРОФИ к СУПЕРПРОФИ - 1. - страница 21

 
Показал, как. Пост исправил.
 
ясно, спасибо.
получается про полноценную работу с MySQL в MQL (без своих dll) можно забыть. жаль...
 

Чем не нравиться через библиотеку?

В случае возврата указателя надо, чтобы он был статическим и в том же процессе.

 
Zhunko:

Чем не нравиться через библиотеку?

если делать своей dll, то вообще нет смысла разрывать часть кода в MQL, а часть в либе. вся MySQL уйдет вовнутрь этой dll.

 
Всем привет. Подскажите кто знает. VPS Windows Web Server 2008 32 бит -не R2 (оперативки 256) - потянет для МТ4 ?
 
sergeev:

если делать своей dll, то вообще нет смысла разрывать часть кода в MQL, а часть в либе. вся MySQL уйдет вовнутрь этой dll.

Ну конечно! Совсем не надо на MQL писать, если есть такая возможность. Почти всё перенёс в DLL. Начинаю всё переносить в своё приложение. Терминалом буду управлять удалённо.
 

Алгоритм перебора долей

I). Требуется найти алгоритм перебора долей, так что бы:

A + B + C + n + ... = 100%

При этом, каждый элемент из множества {A, B, C, n} должен обладать стандартными критериями: ограничениями с максимальной и минимальной стороны и шагом приращения типа: start, stop, steep;

Пример задачи:

Пусть дано множество

Y{A,B,C,n};

Каждый элемент которого может изменяться в пределах от -100% до +100%, с шагом 10%. При этом сумма всех элементов по модулю должна быть равна 100%: A+B+C+n=100%.

Найти матрицу D(x,кол_во_элементов_множ_Y), описывающую распределение всех возможных долей между A, B, C, n, например:

A B C

100 0 0

90 10 0

90 0 10

80 10 10

80 0 20

...

Примеры неправильного нахождения:

A B C

-50 30 120 - элемент C больше ограничения 100%

35 30 35 - шаг не соответствует 10%

70 30 10 - сумма не равна 100%

-50 60 90 - сумма всех элементов по модулю не равна 100% (50+60+90=200)

II*). Найти решение перебора долей для множества N с помощью оптимизатора MT5/MT4, Таким образом, что бы ограничения каждого из элементов множества могли задаваться стандартными ограничениями Старт, Шаг, Стоп.

 


Для затравки, вот алгоритм реализующий частный случай задачи:

//+------------------------------------------------------------------+
//|                                                  Optimizator.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int A, B, C;
   int handle = FileOpen("test.csv",FILE_WRITE,'\t');
   for(A=0; A<=100;A+=10)
   {
      for(B=0;B<=100-A;B+=10){
         C=100-(A+B);
         FileWrite(handle,A,B,C);      
      }
   }
   FileClose(handle);
  }
//+------------------------------------------------------------------+

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

 
C-4:


Для затравки, вот алгоритм реализующий частный случай задачи:

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


делайте всего один цикл while по одному из A или B или C.

внутри него анализируйте if на достижение промежутков

 
sergeev:

делайте всего один цикл while по одному из A или B или C.

внутри него анализируйте if на достижение промежутков


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