Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1577

 
Vitaly Muzichenko #:

в мт5?

после любого условия вот это пропиши,в тестере все объекты удалятся.

  ObjectsDeleteAll(0,"",0,-1);//---------------------------------------->🔄
  ChartRedraw(); 
 
Aleksei Gureev #:
Подскажите как в коде выглядит условие : если на счете открыта позиция селл с магиком "0" (открыта руками) ? mt5
   int Total=PositionsTotal();
   for(int i=Total-1; i>=0; i--){
      if(m_position.SelectByIndex(i)){
         if(m_position.Symbol()==m_symbol.Name()){
            if(m_position.PositionType()==POSITION_TYPE_SELL && m_position.Magic()==m_Magic) Любой нужный
 if(m_position.PositionType()==POSITION_TYPE_SELL && m_position.Magic()==0)  Руками
 if(m_position.PositionType()==POSITION_TYPE_SELL && m_position.Magic()!=0)   Все кроме руками
 if(m_position.PositionType()==POSITION_TYPE_SELL && m_position.Magic()==-1) Все
 if(m_position.PositionType()==POSITION_TYPE_SELL ) Тоже Все
 

lynxntech #:

Как собрать "Контрольную сумму" параметров из например такой серии параметров?

это нужно для сверки одинаковых условий в разных терминалах и проходах в тестере

причем верхний true имеет "вес" больше чем нижний и последующий например

Сформируйте из параметров строку:

string params = "b1=" + (string) b1 + "a1=" + (string) a1 + ...;

и посчитайте от неё хеш, например, такой функцией:

#define FOREACH(A, D)   { for(int i=0, im=ArraySize(A);i<im;i++) {D;} }

//+------------------------------------------------------------------+
//| Хеш-значение параметров эксперта                                 |
//+------------------------------------------------------------------+
string CVirtualAdvisor::HashParams(string p_params) {
   uchar hash[], key[], data[];

// Вычисляем хеш от строки инициализации
   StringToCharArray(p_params, data);
   CryptEncode(CRYPT_HASH_MD5, data, key, hash);

// Переводим его из массива чисел в строку с шестнадцатеричной записью
   string res = "";
   FOREACH(hash, res += StringFormat("%X", hash[i]); if(i % 4 == 3 && i < 15) res += "-");

   return res;
}
 
Yuriy Bykov #:

Сформируйте из параметров строку:

и посчитайте от неё хеш, например, такой функцией:

это много кода, если была возможность как в FastReport, задать свойства в функции, и она прошла по всем переменным и вернула результат, это единственно верное решение было (там нужно только свойства, перечислять не нужно переменные)

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

для автоматизации, не вижу пока тут нормального решения проверить все input переменные, и надо ли такое роботу?
 
Papa Hoth #:

Благодарю!

 
Papa Hoth #:
  ObjectsDeleteAll(0,"",0,-1);//---------------------------------------->🔄   ChartRedraw();

Спасибо, именно в таком виде конструкция сработала.

 
Vitaly Muzichenko #:

Спасибо, именно в таком виде конструкция сработала.

А почему не удалять по префиксу "autotrade" ?

 
Artyom Trishkin #:

А почему не удалять по префиксу "autotrade" ?

Пробовал, но не удаляло

ObjectsDeleteAll(0,"autotrade");

Нужно было добавить 0

ObjectsDeleteAll(0,"autotrade",0);
 

Вопрос: как красиво заполнить массив до 100 элементов?

 double R=0.01;
 double Mas[100]={0};
  for(int i = 0; i < 100; i++) {
    if(i<10) Mas[i]=R;
    else if(i<18) Mas[i]+=R;
    else if(i<27) Mas[i]+=R*2;
    else if(i<35) Mas[i]+=R*3;
    else if(i<42) Mas[i]+=R*4;
    else if(i<48) Mas[i]+=R*5;
    else if(i<55) Mas[i]+=R*6;
    else if(i<60) Mas[i]+=R*7;
    else if(i<64) Mas[i]+=R*8;
    else if(i<67) Mas[i]+=R*9;
    else if(i<69) Mas[i]+=R*10;
    else if(i<71) Mas[i]+=R*11;
    else if(i<100) Mas[i]+=R*12;
  }
  Print(Mas[60]); // 0.08
 
Vitaly Muzichenko #:

Вопрос: как красиво заполнить массив до 100 элементов?

Явно в строке присвоить значения элементам массива. Потом умножать в цикле если нужно менять лот. Самое дешёвое, но длинное. Если это один раз делать, то без разницы наверное.)