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

 
MrBrooklin #:

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

Для начала уберите знак равенства в цикле, чтобы было так:

Дальше Ваш код не смотрел.

С уважением, Владимир.

Благодарю за уделенное время проблема решилась простым округление SL/TP по инструменту. Ошибка была так как SL/TP ,брались с индикатора.

Спасибо.

 
mikhail2929 Кравченко #:

Спасибо Владимир. Я понимаю, что тестирование и оптимизация необходимы. Т.е. все советники помещенные в раздел "бесплатные" могут без ограничений скачиваться и устанавливаться для работы на реальном счете. Я правильно понял?

Лучше не делайте это :)

 

Привет всем,

Я новичок, поэтому надеюсь, что пишу в правильном месте: я пытаюсь написать советник, который мог бы помочь мне с управлением капиталом, например:

"закрывать все сделки, когда прошлые убытки+текущая просадка ниже x%" + "закрывать все сделки сразу до конца сессии/дня".

Если кто-то знает, как это сделать или может мне помочь, было бы здорово связаться со мной.

Спасибо, торгуйте на здоровье ;)

 
jeremy10p100 # :

Всем привет,

Я новичок, поэтому надеюсь, что пишу в правильном месте: я ищу код советника, который мог бы помочь мне в управлении деньгами, например:

"закрывать все сделки, когда прошлые убытки+текущая просадка ниже x%" + "закрывать все сделки сразу до конца сессии/дня".

Если кто-то знает, как это сделать, или может мне помочь, было бы здорово связаться со мной.

Спасибо, торгуйте на здоровье ;)

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

Попробуйте поискать готовые решения на рынке - https://www.mql5.com/fr/search#!keyword=money%20management&module=mql5_module_market

Вы также можете заказать индивидуальное решение у Freelance - https://www.mql5.com/fr/job.

 
Всем привет!!!    Подскажите пожалуйста как мне допустим из массива копирнуть значения в базу данных?   вот код из примера работы с БД и при попытке вставить данные из массива в БД в поле SALARY  получается ошибка при запуске скрипта.     И ещё вопрос, а если например у меня есть массив с данными ордеров и их достаточно много, как мне например весь этот массив переместить в таблицу в БД?
 VALUES (1,'Paul',a,'California',29000.00)  -->  VALUES (1,'Paul',a,'California',Mass[0])

void OnStart()
  {
  double Mass[4]={1,2,5,6};
  int a =222;
  Alert(Mass[3]);
   string filename="company.sqlite";
//--- создадим или откроем базу данных в общей папке терминалов
   int db=DatabaseOpen(filename, DATABASE_OPEN_READWRITE | DATABASE_OPEN_CREATE |DATABASE_OPEN_COMMON);
   if(db==INVALID_HANDLE)
     {
      Print("DB: ", filename, " open failed with code ", GetLastError());
      return;
     }
//--- если таблица COMPANY существует, то удалим её
   if(DatabaseTableExists(db, "COMPANY_2"))
     {
      //--- удаляем таблицу
      if(!DatabaseExecute(db, "DROP TABLE COMPANY_2"))
        {
         Print("Failed to drop table COMPANY with code ", GetLastError());
         DatabaseClose(db);
         return;
        }
     }
//--- создаем таблицу COMPANY
   if(!DatabaseExecute(db, "CREATE TABLE COMPANY_2("
                       "ID INT PRIMARY KEY     NOT NULL,"
                       "NAME           TEXT    NOT NULL,"
                       "AGE            INT     NOT NULL,"
                       "ADDRESS        CHAR(50),"
                       "SALARY         REAL );"))
     {
      Print("DB: ", filename, " create table failed with code ", GetLastError());
      DatabaseClose(db);
      return;
     }

//--- вставляем данные в таблицу
   if(!DatabaseExecute(db, "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1,'Paul',a,'California',Mass[0]); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2,'Allen',25,'Texas',Mass[1]); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3,'Teddy',a,'Norway',Mass[2]);"
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4,'Mark',25,'Rich-Mond',65000.00);"))
     {
      Print("DB: ", filename, " insert failed with code ", GetLastError());
      DatabaseClose(db);
      return;
     }

//--- создадим запрос и получим хендл на него
   int request=DatabasePrepare(db, "SELECT * FROM COMPANY_2");
   if(request==INVALID_HANDLE)
     {
      Print("DB: ", filename, " request failed with code ", GetLastError());
      DatabaseClose(db);
      return;
     }

   DatabasePrint(
      db,          // хендл базы данных, полученный в DatabaseOpen
      "COMPANY_2",      // таблица или SQL-запрос
      0              // комбинация флагов
   );
  }
//+------------------------------------------------------------------+


 

Попробуйте сделать, например, так.

Вместо 

if(!DatabaseExecute(db, "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1,'Paul',a,'California',Mass[0]); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2,'Allen',25,'Texas',Mass[1]); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3,'Teddy',a,'Norway',Mass[2]);"
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4,'Mark',25,'Rich-Mond',65000.00);"))

написать

if(!DatabaseExecute(db, "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1,'Paul',a,'California'," + DoubleToString(Mass[0]) + "); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2,'Allen',25,'Texas'," + DoubleToString(Mass[1]) + "); "
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3,'Teddy',a,'Norway'," + DoubleToString(Mass[2]) + ");"
                       "INSERT INTO COMPANY_2 (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4,'Mark',25,'Rich-Mond',65000.00);"))

Это не единственный способ.

 
Yuriy Bykov #:

Попробуйте сделать, например, так.

Вместо 

написать

Это не единственный способ.

Спасибо!  работает.  А где можно прочитать про это? И другие способы?

 
lego9955 #:

 Добрый день! Прошу помочь переделать скрипт, который просто создает кастомный символ.

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

К примеру три AB AC AD, в будущем любое количество по этому принципу.  

Зациклить с подстановкой каждый раз следующего имени символа из списка.

Что-то типа:

string sNames = "AB,AC,AD";
string aNames[];

void OnStart()

  {
   int i;
   bool ch=true;

   if(StringSplit(sNames,StringGetCharacter(",",0),aNames) <= 0)return;

   ResetLastError();
   for(i=0; i<ArraySize(aNames); i++)
      {
       ch=ch && CustomSymbolCreate(aNames[i]);
       if(!ch)
         {
          PrintFormat("Symbol '%s' : error %d",aNames[i],GetLastError());
          break; // При первой ошибке выходим
         }
      }
   if(!ch)return;
   ...
  } 
 

Перед этим сделал так, посчитал что справился и удалил свой пост. 

void OnStart()
{
string arr[]= { "AB", "AC", "AD" };

  for(int i=0; i<ArraySize(arr); i++)

  {
   bool ch =CustomSymbolCreate(arr[i]);
   SymbolSelect(arr[i],true); 
  }  
}

Когда обновил страницу увидел что ответили. Да, с обработкой ошибок правильнее. Спасибо!

 
lego9955 #:

Перед этим сделал так, посчитал что справился и удалил свой пост. 

Когда обновил страницу увидел что ответили. Да, с обработкой ошибок правильнее. Спасибо!

ArraySize(arr)

правильней будет в ushort за пределами цикла определить