Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1431

 
MrBrooklin #:

Buenos días! Si se ha descargado un Asesor Experto gratuito y hay información de que ya se ha comprado, puede utilizarlo. La cuestión es otra: ¿hasta qué punto es fiable? Para ello, antes de utilizarlo en una cuenta real, ¡lo mejor es probar el Asesor Experto!

Saludos, Vladimir.

Gracias Vladimir. Entiendo que las pruebas y la optimización son necesarias. Es decir, todos los Asesores Expertos colocados en la sección "gratis" pueden ser descargados e instalados para trabajar en una cuenta real sin restricciones. ¿Lo he entendido bien?

 
Buenas tardes, estoy buscando ayuda, al escribir un Expert Advisor de MT5, uso la clase CTrade para modificar TP y SL. El problema es que la posición se establece inicialmente TP y SL después de TP se cambia pero SL debe permanecer en su lugar, al implementar resultó así :
 for(int i = 0; i <= PositionsTotal(); i++)
      if(a_position.SelectByIndex(i))
         if(a_position.Magic() == MagicNumber && a_position.Symbol() == a_symbol.Name())
            if(PositionGetString(POSITION_COMMENT) == Comment_2)
              {
                  if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && PositionGetDouble(POSITION_TP) != TP_Buy)
                  a_trade.PositionModify(PositionGetInteger(POSITION_TICKET),PositionGetDouble(POSITION_SL),TP_Buy);

                  if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && PositionGetDouble(POSITION_TP) != TP_Sell)
                  a_trade.PositionModify(PositionGetInteger(POSITION_TICKET),PositionGetDouble(POSITION_SL),TP_Sell);
              }

TP_Buy y TP_Sell se cuentan correctamente. En el tester da error 4756. CTrade::OrderSend: modify position #4 GBPUSD (sl: 1.35950, tp: 1.34860) [invalid stops] failed modify #4 sell 0.05 GBPUSD sl: 1.35950, tp: 1.34860 -> sl: 1.35950, tp: 1.34860 [Invalid stops]. Según tengo entendido es un error de configuración del SL, lo más probable es que el error se deba a que el SL está en el mismo sitio. Pero esto es lo que necesito. En el manual CTrade está escrito que "si el cambio no es necesario, el valor anterior". ¿Cómo superar el error, por favor dígame.

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

Gracias, Vladimir. Entiendo que las pruebas y la optimización son necesarias. Es decir, todos los Asesores Expertos colocados en la sección "gratis" pueden ser descargados e instalados para trabajar en una cuenta real sin restricciones. ¿Entiendo correctamente?

Creo que ya he respondido a su pregunta anteriormente. Sí, ha entendido correctamente.

Saludos, Vladimir.

 
rexMetaL escribir un Expert Advisor de MT5, uso la clase CTrade para modificar TP y SL. El problema es que la posición se establece inicialmente TP y SL después de TP se modifica pero SL debe permanecer en su lugar, al implementar resultó que :

TP_Buy y TP_Sell se cuentan correctamente. En el tester da error 4756. CTrade::OrderSend: modify position #4 GBPUSD (sl: 1.35950, tp: 1.34860) [invalid stops] failed modify #4 sell 0.05 GBPUSD sl: 1.35950, tp: 1.34860 -> sl: 1.35950, tp: 1.34860 [Invalid stops]. Según tengo entendido es un error de configuración del SL, lo más probable es que el error se deba a que el SL está en el mismo sitio. Pero esto es lo que necesito. En el manual CTrade está escrito que "si el cambio no es necesario, el valor anterior". ¿Cómo superar el error, por favor dígame.

¡Hola!

En primer lugar, quita el signo igual en el bucle para que quede así:

for(int i = 0; i < PositionsTotal(); i++)

No he mirado más tu código.

Saludos, Vladimir.

 
MrBrooklin #:

¡Hola!

En primer lugar, elimine el signo igual en el bucle:

No he mirado más tu código.

Saludos, Vladimir.

Nada ha cambiado, el problema está específicamente en SL/TP
 for(int i = 0; i < PositionsTotal(); i++)
      if(a_position.SelectByIndex(i))
         if(a_position.Magic() == MagicNumber && a_position.Symbol() == a_symbol.Name())
            if(PositionGetString(POSITION_COMMENT) == Comment_2)
              {
                  if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && PositionGetDouble(POSITION_TP) != TP_Buy)
                  a_trade.PositionModify(PositionGetInteger(POSITION_TICKET),PositionGetDouble(POSITION_SL),TP_Buy);

                  if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && PositionGetDouble(POSITION_TP) != TP_Sell)
                  a_trade.PositionModify(PositionGetInteger(POSITION_TICKET),PositionGetDouble(POSITION_SL),TP_Sell);
              }
 
MrBrooklin #:

¡Hola!

En primer lugar, quita el signo igual en el bucle, para que quede así:

No he mirado más tu código.

Saludos, Vladimir.

Gracias por tu tiempo, el problema se solucionó con un simple redondeo de SL/TP por instrumento. El error se debía a que SL/TP se tomaban del indicador.

Gracias.

 
mikhail2929 Kravchenko #:

Gracias Vladimir. Entiendo que las pruebas y la optimización son necesarias. Es decir, todos los Asesores Expertos colocados en la sección "gratis" pueden ser descargados e instalados para trabajar en una cuenta real sin restricciones. ¿Lo he entendido bien?

Es mejor no hacerlo :)

 

Hola a todos,

Soy nuevo así que espero estar escribiendo en el lugar correcto: Estoy tratando de código de un EA que me podría ayudar con mi gestión del dinero, como :

"cerrar todas las operaciones cuando las pérdidas pasadas+reducción actual estén por debajo del x%" + "cerrar todas las operaciones inmediatamente hasta el final de la sesión/día".

Si alguien sabe como hacer esto o me puede ayudar seria genial que se pusiera en contacto.

Gracias, buen trading ;)

 
jeremy10p100 # :

Hola a todos,

Soy nuevo así que espero estar escribiendo en el lugar correcto: Estoy buscando para codificar un EA que me podría ayudar con mi gestión del dinero, como :

"cerrar todas las operaciones cuando las pérdidas pasadas + drawdown actual están por debajo de x%" + "cerrar todas las operaciones inmediatamente hasta el final de la sesión / día".

Si alguien sabe como hacer esto o me puede ayudar seria genial que se pusiera en contacto.

Gracias, buen trading ;)

Hola,

Intenta buscar en el mercado soluciones ya preparadas - https://www.mql5.com/fr/search#!keyword=money%20management&module=mql5_module_market

También puedes encargar una solución personalizada a Freelance - https://www.mql5.com/fr/job

 
Hola a todos!!! Por favor decirme como puedo copiar valores de un array a la base de datos? Aquí está el código del ejemplo de trabajo con la base de datos y cuando intento insertar datos del array en la base de datos en el campo SALARIO, me da error al ejecutar el script. Y otra pregunta, y si por ejemplo tengo un array con los datos de pedidos y hay bastantes, como puedo pasar todo este array a una tabla de la base de datos?
 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              // комбинация флагов
   );
  }
//+------------------------------------------------------------------+


Razón de la queja: