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

 

Esta falha parece ocorrer se houver outras ordens no mercado, mas de um tamanho diferente.

Suponha que temos 4 vendas de 1 lote e 4 compras de 1 lote. E 1 compra 0,5 lotes.

Como evitar isto? Penso que esta função precisa de um laço.

 
EgorKim:

Esta falha parece ocorrer se houver outras ordens no mercado, mas de um tamanho diferente.

Suponha que temos 4 vendas de 1 lote e 4 compras de 1 lote. E 1 compra 0,5 lotes.

Como evitar isto? Talvez devesse haver um laço nesta função.

Não sei onde está a "drubashka". É a sua especialidade trabalhar através da biblioteca padrão. Não sei o que está a escolher.

      if(m_position.SelectByIndex(i))

E seria demasiado preguiçoso para resolver o problema.

Eu teria abordado a solução de forma um pouco diferente. Eu criaria duas matrizes com bilhetes de posição de Compra e Venda separadamente e fecharia as posições no segundo laço em pares.

Ou podemos criar uma matriz bidimensional. Mas é preciso estar muito atento na distribuição dos índices. Para que não haja lacunas...

 
Alexey Viktorov:

Em algum lugar, o baterista desapareceu. É a sua coisa trabalhar através da biblioteca padrão. Não sei o que ele está a escolher.

Sim, e eu sou demasiado preguiçoso para resolver o problema.

Eu teria abordado a solução de forma um pouco diferente. Eu criaria duas matrizes com bilhetes de posição de Compra e Venda separadamente e fechá-las-ia no segundo laço em pares.

Ou podemos utilizar uma matriz bidimensional. Mas tenho de estar muito atento na distribuição dos índices. Para que não haja lacunas...

Eu próprio já pensei nisso. Pode partilhar o código com duas arrays? Eu próprio não o posso fazer.

Como solução temporária, criei um loop limitado. Não sei se este código está correcto ou não, mas pode ser alguma coisa. É verdade, fecha estranhamente com a divisão de lotes.

Aparentemente, até os volumes do balcão devem ser comparados para evitar a divisão. Eu desisto.

void CloseBy()
  {
   int s=10;
   do // цикл
     {
      s--;
      ulong ticket_buy=ULONG_MAX;
      ulong ticket_sell=ULONG_MAX;
      for(int i=0;i<PositionsTotal();i++) // ATTENTION! Here, specially began a detour with "0"
         if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY && ticket_buy==ULONG_MAX)
               ticket_buy=m_position.Ticket();

            if(m_position.PositionType()==POSITION_TYPE_SELL && ticket_sell==ULONG_MAX)
               ticket_sell=m_position.Ticket();
           }
      if(ticket_buy!=ULONG_MAX && ticket_sell!=ULONG_MAX)
         m_trade.PositionCloseBy(ticket_buy,ticket_sell);
     }
   while(s>1);// цикл
   return;
  }
 
EgorKim:

Eu próprio já pensei nisso. Pode partilhar o código com duas arrays?

Não, por várias razões.

1. Eu próprio não utilizo o contra-fechamento.

2. Não existe um código pronto, e não há vontade de o escrever especialmente.

3. Ontem tive essa ideia. Ontem tive essa ideia. Hoje tenho outro, e amanhã, Deus me livre, terei outro. Consequentemente, só escrevo o que me vem à cabeça neste momento.

E a razão principal - penso que ajudar e fazer o trabalho de outra pessoa, são duas grandes diferenças.

Só posso ajudar. Mas não o posso ajudar, quase não utilizo a biblioteca padrão e para compreender o seu código, preciso de compreender SB.

 

Olá a todos

Pode dar-me um exemplo de um indicador ou função que lhe permita criar um indicador que só mostrará o resultado no gráfico num determinado intervalo ou área no gráfico!

Por exemplo, da 1:00 às 2:35 hora terminal, E esta escolha deve ser feita com o rato directamente no gráfico.


Preciso especificamente de contar o número de barras ou vender velas na gama seleccionada.

 
Milhail Novgorodcev:

Olá a todos

Pode dar-me um exemplo de um indicador ou função que lhe permita criar um indicador que só mostrará o resultado no gráfico num determinado intervalo ou área no gráfico!

Por exemplo, da 1:00 às 2:35 hora terminal, E esta escolha deve ser feita com o rato directamente no gráfico.


Preciso especificamente de contar o número de castiçais de Compra ou Venda na gama seleccionada.

A primeira coisa que me veio à mente:

  • um guião, dois parâmetros de entrada - tempo de - e tempo até -
  • um rectângulo é desenhado manualmente e o guião deve ser lançado com o nome do rectângulo nos parâmetros de entrada
  • Expert Advisor ou indicador que traça a criação de um rectângulo com um nome próprio ...

 
Milhail Novgorodcev:

Olá a todos

Pode dar-me um exemplo de um indicador ou função que lhe permita criar um indicador que só mostrará o resultado no gráfico num determinado intervalo ou área no gráfico!

Por exemplo, da 1:00 às 2:35 hora terminal, E esta escolha deve ser feita com o rato directamente no gráfico.


Preciso especificamente de contar o número de castiçais de Compra ou Venda na gama seleccionada.

Qual é o problema?

No OnChartEvent () a duas variáveis, por sua vez, a hora do clique do rato em dois pontos é atribuída (não a hora actual, mas a hora da barra em que clicou) e, desde que ambas as variáveis não sejam zero, este intervalo é calculado. Após a saída destas variáveis, elas são repostas a zero e aguardam pelo próximo clique do rato.

O único problema que vejo é se o primeiro clique for feito por engano, como desfazê-lo. Mas, penso que é possível encontrar algo cuidadosamente após a leitura da documentação. Por exemplo, premir uma tecla ou rodar a roda do rato...

 

Por favor, ajudem!

Cansado de fixar o guião para fazer screenshots sobre a história. O guião deve rolar até às 8 da manhã de cada dia e tirar uma fotografia do ecrã.

O guião não está a funcionar como deveria.

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ChartSetInteger(0,CHART_SHIFT,false);
   ChartSetInteger(0,CHART_AUTOSCROLL,false);
   int _bars=Bars(Symbol(),0);
 
   for(int i=0; i<_bars; i++)
     {
      MqlDateTime time_now;
      //datetime candle_time=iTime(NULL,_period,0);
      TimeToStruct(iTime(NULL,_Period,i),time_now);  // change time to struct

      if(time_now.hour==8 && time_now.min==0)
        {
         //--- прокрутим на 10 баров вправо от начала истории 
         ChartNavigate(0,CHART_BEGIN,i);
         Sleep(5000);
         //--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
         long first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
         Print(first_bar);
         string name=_Sumbol_N(string(Symbol()))+"_"+Symbol()+"_"+TFMigrate(Period())+" "+string(time_now.year)+"."+string(time_now.mon)+"."+string(time_now.day)+" "+string(time_now.hour)+"."+string(time_now.min);

         ChartScreenShot(0,name+" 2560_1600.PNG",2560,1600,ALIGN_LEFT);
         //i=5;
        };
     };

//Print(iTime(NULL,_Period,0));

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string _Sumbol_N(string ft)
  {
   if(ft ==  "EURUSD" ) return("01");
   if(ft ==  "GBPUSD" ) return("02");

   return "";
  }
//+------------------------------------------------------------------+
string TFMigrate(int tf)
  {
   switch(tf)
     {
      case 0: return("CURRENT");
      case 1: return("M1");
      case 5: return("M5");
      case 15: return("M15");
      case 30: return("M30");
      case 60: return("H1");
      case 240: return("H4");
      case 1440: return("D1");
      case 10080: return("W1");
      case 43200: return("MN1");

     }
  }
//+------------------------------------------------------------------+
 
oleg360:

Por favor, ajudem!

Cansado de fixar o guião para fazer screenshots sobre a história. O guião deve rolar até às 8 da manhã de cada dia e tirar uma fotografia do ecrã.

O guião não está a funcionar como deveria.

Até agora, a função de rolagem está a funcionar de forma errática (ou melhor, a funcionar de forma imprevisível). O administrador está a ordená-lo.

 
Vladimir Karputov:

Até agora, a função de rolagem está a funcionar mal (ou melhor, a funcionar de forma imprevisível). O administrador está a ordená-lo.

Obrigado!