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

 
Perdón por la pregunta tan simple, ¿cómo cierro una posición abierta? mql4 tenía la función OrderClose(), pero ¿cómo?
 
RogozaIV:
Perdón por la pregunta tan simple, ¿cómo cierro una posición abierta? mql4 tiene la función OrderClose(), pero ¿cómo lo hago aquí?

En mql5, hay que abrir una posición contraria. Se puede ver claramente en la pestaña del historial del terminal. La forma más sencilla es utilizar la clase CTrade de la biblioteca estándar.
 
¡GraciasAlexey Volchanskiy!
 
¿Pueden decirme dónde operar con criptodivisas a través de MT5? ¿Corredores, bolsas? Encontré MT4, pero MT5 no parece estar disponible.
 

Señores, por favor, díganme dónde está el error.

Estoy preparando un indicador para ser llamado en el EA.

Quiero enviar un buffer desde el indicador.

El resultado es el valor int que se adjunta a la barra.

La tarea consiste en pasar un array bidimensional del indicador a un Asesor Experto, no consigo averiguar cómo hacerlo.

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2

int per[];

int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,per,INDICATOR_CALCULATIONS); //также пробовал INDICATOR_DATA и INDICATOR_COLOR_INDEX
...

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
{
      for(int b=1; b<Bmax; b++) //отбор по x
        {
         for(int p=1; p<Pmax; p++) // отбор по y
           {
            if(arrayZ[6][p][b]>0||arrayZ[6][p][b]<0)
            {
             per[b]=p;
            }
           }
        }
 }

Así que lo llamo en el EA

int OnInit()
  {
//--- create timer
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA); 
   ResetLastError(); 
   MA_handle=iCustom(NULL,0,"Topqw",0,1); 

   Print("MA_handle = ",MA_handle,"  error = ",GetLastError()); 
...

void OnTick()
//void OnTimer()
  {
//--- 
int copy=CopyBuffer(MA_handle,0,0,1000,Label1Buffer); 
   Print("copy =",copy," ",Label1Buffer[999]);//

 
Top2n:

Señores, por favor, díganme dónde está el error.

Estoy preparando un indicador para ser llamado en el EA.

Quiero enviar un buffer desde el indicador.

El resultado es el valor int ligado a la barra.

La tarea consiste en pasar un array bidimensional del indicador a un Asesor Experto, no consigo averiguar cómo hacerlo.

Lo llamo en el EA



1. Recuerde que en el INDICADOR la memoria intermedia del indicador por defecto con índice "0" corresponde a la barra más a la izquierda del gráfico.

2. El Asesor Experto no tiene el comando "SetIndexBuffer".

3. iCustom está creando un indicador personalizado, no una solicitud de buffer (por lo tanto, todo debe ser escrito explícitamente, no ",0,1"). En su caso, puede utilizar este formulario

//--- create handle of the indicator Topqw
   ResetLastError();
   handle_Topqw=iCustom(Symbol(),Period(),"Topqw",PRICE_CLOSE);
//--- if the handle is not created 
   if(handle_Topqw==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle of the Topqw indicator for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }

4. CopyBuffer parece estar escrito correctamente.

5. No se puede pasar un array bidimensional - haz dos buffers de indicadores de array.

 
Vladimir Karputov:


1. Recuerde que en el INDICADOR, por defecto, el buffer del indicador con índice "0" corresponde a la barra más a la izquierda del gráfico.

2. No hay ningún comando "SetIndexBuffer" en el EA.

3. iCustom está creando un indicador personalizado, no una solicitud de buffer (por lo tanto todo debe ser escrito explícitamente, no ",0,1"). En su caso, puede utilizar este formulario

4. CopyBuffer parece estar escrito correctamente.

5. No puedes pasar un array bidimensional - haz dos buffers indicadores de array.


Gracias por la corrección, pero no entiendo, si pongo explícitamente transferir arrays, ¿cómo se formaliza? ¿Dónde especifico que tengo que extraer dos arrays?

MA_handle=iCustom(Symbol(),Period(),"TopFidCounselor",per,bar); per,bar - же массивы, а данные должны быть imput,
в индикаторе записываю в массивы
   SetIndexBuffer(0,per,INDICATOR_CALCULATIONS);
   SetIndexBuffer(1,bar,INDICATOR_CALCULATIONS);

если я сделаю такую запись
int OnCalculate(
...
  {
//--------------------------------------------------------------
  for ( int i = 0; i < rates_total; i ++ ) per[i] = price[i];  -
//--------------------------------------------------------------
ТО СОВЕТНИК РАБОТАЕТ БЕЗ ОШИБКИ
а если такую
//----------------------------------------------------------------
      for(int b=1; b<200; b++) //отбор по х			-
        {							-
         for(int p=1; p<200; p++) // отбор по у			-
           {							-
            if(arrayZ[6][p][b]>0||arrayZ[6][p][b]<0)		-
            {							-
             per[b]=p;						-
             bar[b]=b;						-
            }							-
           }							-
        }							-
//----------------------------------------------------------------
ТО ОШИБКА код 4002

He mirado a través deIndicatorCreate(), podrías por favor decirme cómo, si no tardaré semanas en averiguarlo, y me queda tan poco para terminar el bloque de ideas. Tengo que ir pronto a la taiga para pasar el verano con las abejas forrajeando, así que quiero comprobar la idea antes de partir, para no hacerme ilusiones.
 

¿Es correcto lo que utilizo en el indicadorINDICATOR_CALCULATIONS?

   SetIndexBuffer(0,per,INDICATOR_CALCULATIONS);
 

El error 4002 está resuelto.

sólo que no está claro dónde escribir el array a extraer?

   int copy=CopyBuffer(MA_handle,0,0,bars,per); //per?
 
Top2n:

El error 4002 está resuelto.

sólo que no está claro dónde escribir el array a extraer?


El arrayper se declara en el EA, en el procedimiento en el que se realiza la copia. Debe ser un array dinámico (declarado como [] - sin especificar la dimensionalidad).