Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1466

 
WindUP:
Gracias, pero ¿podríamos tener al menos un ejemplo objetivo? Una vista desde arriba, por así decirlo. Soy un completo novato y llevo dos días con el tema :-)

aquí hay probablemente algo similar

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits      = 1;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots        = 0.01; // Lots
//---
sinput int    Inpcopiedrates = 2;    // какой бар
sinput double Inplow         = 100;  // отступить от low
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,10,rates);
   double sl=rates[Inpcopiedrates].low-Inplow/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
 
SanAlex:

Yo también estoy tratando de aprender, creo que estoy avanzando.

Hola. Lo siento, veo en la captura de pantalla que lo has conseguido, pero no he visto dónde se encuentra en este código la función de copiar los datos de la vela anterior [1] ?




¿Podríais decirme cursos de programación MQL5 para dummies, de lo más sencillo a lo más complejo, por dónde y con qué es mejor empezar, para obtener más resultados y menos tiempo que perder? Se lo agradecería :-)

 
WindUP:

Hola. Lo siento, veo en la captura de pantalla que usted tuvo éxito, pero aquí no vi donde en este código es la función de copiar los datos de la vela anterior [1] ?




¿Cómo puedo decirte cursos de programación MQL5 para dummies, de lo simple a lo complejo, dónde y con qué es mejor empezar, para obtener más resultados y menos tiempo que perder? Se lo agradecería :-)

Imagina que un amigo se acerca a ti y te pide que "te enseñe a trabajar en Internet". ¿Es difícil imaginar qué enseñar? Es igual de difícil enseñar a programar. Hay una tarea - hay una solución. Pero así... puedes aprender cualquier idioma, los fundamentos son los mismos para todos ellos. Programar no es tanto escribir código como plantear un problema, escribir un algoritmo para su solución y sólo entonces escribir código. Y la etapa final, depurar y comprobar el resultado.

En el código de SanAlrx, no entiendo por qué tenemos que hacer tal stock de datos copiados si tenemos una tarea específica para obtener OHLC para la primera vela solamente.

int copied=CopyRates(Symbol(),0,0,10,rates);

y por qué copiar los valores de la vela actual, recién abierta. Pero... esta es su decisión y sus cucarachas.

 
WindUP:

Hola. Lo siento, veo en la captura de pantalla que usted tuvo éxito, pero aquí no vi donde en este código es la función de copiar los datos de la vela anterior [1] ?




¿Podrían decirme los cursos de programación MQL5 para dummies, de lo simple a lo complejo, por dónde y cómo empezar, para obtener más resultados y perder menos tiempo? Se lo agradecería :-)

Yo mismo soy un estudiante - por ejemplo, miro la documentaciónhttps://www.mql5.com/ru/docs/series/copyrates , hay un ejemplo de un script, lo guardo en mi PC y empiezo a leerlo y a trabajar en los detalles por intuición.

y esta función - por intuición - es lo que encontré.

//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,10,rates);
   double sl=rates[Inpcopiedrates].low-Inplow/100;

Es para BUY "SL".

Para VENDER Debe ser así

   double sl=rates[Inpcopiedrates].high+Inphigh/100;

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Sólo he puesto una cifra: sería posible comprar hasta 10 barras. Pero no lo necesitas: necesitas 1 (uno).

   int copied=CopyRates(Symbol(),0,0,10,rates);
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
CopyRates - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
WindUP:

Hola. Lo siento, veo en la captura de pantalla que lo has hecho, pero no he visto en qué parte de este código se encuentra la función de copiar los datos de la vela anterior [1] ?




¿Cómo puedo decirte cursos de programación MQL5 para dummies, de lo simple a lo complejo, dónde y con qué es mejor empezar, para obtener más resultados y menos tiempo que perder? Se lo agradecería :-)

aquí hay un buen ejemplo - acaba de ir a la página y aquí hay una mejor secuencia de comandos para decirle cómo funciona.https://www.mql5.com/ru/docs/constants/objectconstants/enum_anchorpoint

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Способы привязки объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Способы привязки объектов
  • www.mql5.com
Способы привязки объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
SanAlex:

Yo mismo estoy aprendiendo - por ejemplo, fui a la documentaciónhttps://www.mql5.com/ru/docs/series/copyrates , hay un script de ejemplo, lo guardo en mi ordenador y empiezo a leerlo y explorarlo buscando detalles.

y esta función - por intuición - es lo que encontré.

Es para BUY "SL".

Para VENDER Debe ser así

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Sólo he puesto una cifra: sería posible comprar hasta 10 barras. Pero no lo necesitas - necesitas 1 (uno).

Esto abre y fija el SL para la COMPRA y la VENTA

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits      = 1;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots        = 0.01; // Lots
//---
sinput double Inplowhigh     = 100;  // отступить low high
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   OnStartBuy();
   OnStartSell();
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStartBuy()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,2,rates);
   if(copied<=0)
     {
      Print("Не удалось получить исторические данные. Error = ",GetLastError());
      return;
     }
   double sl=rates[1].low-Inplowhigh/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStartSell()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_BID);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,2,rates);
   if(copied<=0)
     {
      Print("Не удалось получить исторические данные. Error = ",GetLastError());
      return;
     }
   double sl=rates[1].high+Inplowhigh/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening SELL position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+

Foto de

 

Hola.

Podrías darme una pista, estoy en un aprieto.

Prescribo indicador a través de iCustom y se enfrentó a un problema - indicador tiene un menú de texto con una opción, se abre y hay varios elementos prescritos, bueno, creo que está claro)

¿Cómo puedo añadirlo en el menú?

extern int HIT = 0; no funciona, deja de mostrar, no deja de mostrar ningún parámetro.

Tal vez a través de ENUM , allí qué elegir, o tal vez algo más?

Gracias de antemano.

Archivos adjuntos:
 
Сергей:

Hola.

Podrías darme una pista, estoy en la cabeza.

Prescribo indicador a través de iCustom y se enfrentó a un problema - indicador tiene un menú de texto con una opción, se abre y hay varios elementos prescritos, bueno, creo que es claro)

¿Cómo puedo añadirlo en el menú?

extern int HIT = 0; no funciona, deja de mostrar, no deja de mostrar ningún parámetro.

Tal vez a través de ENUM , allí qué elegir, o tal vez algo más?

Gracias de antemano.

Poner una cadena vacía "" o un espacio " "

 

Así que quería prescribirlo de alguna manera para poder cambiar la configuración.

¿Tengo un artículo diferente para cada par y cómo lo selecciono?

Y sin ese menú no es relevante, y la captura de pantalla es sólo un ejemplo de uno similar.

 
Сергей:

Así que quería prescribirlo de alguna manera para poder cambiar la configuración.

¿Tengo un artículo diferente para cada par y cómo lo selecciono?

Y sin ese menú no es relevante, y la captura de pantalla es sólo un ejemplo de uno similar.

Perdón por la falta de atención. Hay una enumeración en el indicador. Y en el Asesor Experto, tiene que especificar el nombre de esta enumeración como el tipo de variable en los parámetros de entrada.

Aunque no lo he probado... y quizás haya que repetir esta enumeración en el EA, o simplemente establecer el tipo de variable ENUM_BASE_CORNER

Razón de la queja: