Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 752

 
Desculpe a pergunta muito simples, como fechar uma posição aberta? mql4 tinha a função OrderClose(), mas como?
 
RogozaIV:
Desculpe a pergunta muito simples, como fechar uma posição aberta? mql4 tem a função OrderClose(), mas como o faço aqui?

Em mql5, é necessário abrir uma posição oposta, que pode ser vista claramente na aba do Histórico do terminal. A forma mais fácil é utilizar a classe CTrade da biblioteca padrão.
 
 
Pode dizer-me onde trocar moedas criptográficas através do MT5? Corretores, trocas? Encontrei o MT4, mas o MT5 parece não estar disponível.
 

Cavalheiros, por favor digam-me onde está o erro.

Estou a preparar um indicador para ser chamado na EA.

Quero enviar um buffer do indicador.

O resultado é o valor int vinculado à barra.

A tarefa é passar uma matriz bidimensional do indicador para um consultor especializado, não consigo perceber como o fazer.

#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;
            }
           }
        }
 }

Por isso, chamo-lhe no 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:

Cavalheiros, por favor digam-me onde está o erro.

Estou a preparar um indicador para ser chamado na EA.

Quero enviar um buffer do indicador.

O resultado é o valor int vinculado à barra.

A tarefa é passar uma matriz bidimensional do indicador para um consultor especializado, não consigo perceber como o fazer.

Eu chamo-lhe no EA



1. Lembre-se que no INDICADOR o tampão indicador padrão com índice "0" corresponde à barra mais à esquerda no gráfico.

2. O Expert Advisor não tem comando "SetIndexBuffer".

3. iCustom está a criar um indicador personalizado, não um pedido de buffer (por conseguinte, tudo deve ser escrito explicitamente, e não ",0,1"). No seu caso, pode utilizar este formulário

//--- 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. O CopyBuffer parece estar escrito correctamente.

5. A matriz bidimensional não pode ser passada - fazer dois amortecedores de arrays indicadores.

 
Vladimir Karputov:


1. Lembre-se de que no INDICADOR, por defeito, o tampão indicador com índice "0" corresponde à barra mais à esquerda no gráfico.

2. Não há nenhum comando "SetIndexBuffer" no EA.

3. iCustom está a criar um indicador personalizado, não um pedido de buffer (por conseguinte, tudo deve ser escrito explicitamente, e não ",0,1"). No seu caso, pode utilizar este formulário

4. O CopyBuffer parece estar escrito correctamente.

5. Não se pode passar uma matriz bidimensional - fazer dois amortecedores de arrays indicadores.


Agradeço a correcção, mas não compreendo, se eu fixar explicitamente a transferência de matrizes, como é formalizada? Onde especifico que preciso de extrair duas matrizes?

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

Já procurei noIndicatorCreate(), poderia por favor dizer-me como, caso contrário demorarei semanas a perceber, e já tenho tão pouco para terminar o bloco de pensamento. Tenho de ir brevemente à taiga para passar o Verão com abelhas à procura de alimentos, por isso quero verificar a ideia antes da partida, para não ter ilusões.
 

O que uso no indicadorINDICADOR_CALCULATIONS é correcto?

   SetIndexBuffer(0,per,INDICATOR_CALCULATIONS);
 

O erro 4002 está resolvido.

só que não é claro onde escrever a matriz a ser extraída?

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

O erro 4002 está resolvido.

só que não é claro onde escrever a matriz a ser extraída?


O arrayper é declarado no EA, no procedimento em que se faz a cópia. Deve ser uma matriz dinâmica (declarada como [] - sem especificar a dimensionalidade).