[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 222

 
smartemiy:

Prezados Profissionais!

Estou pedindo sua ajuda!

Tenho um robô comercial que faz negócios de 20-80 cada um. Não consigo entender isso depende da empresa de corretagem?

Em vez de um - coloca 100 pcs.

Por favor, ajudem!!!

A função de início é executada a cada tick e se a condição de abertura do pedido for cumprida, um novo pedido será aberto em cada tick.

Colocar limites ao número máximo de pedidos em aberto ou um pedido por barra, etc.

 
splxgf:

A função de início é executada a cada tick, e se a condição para abrir uma ordem for atendida, uma nova ordem será aberta a cada tick.

Colocar limites ao número máximo de pedidos em aberto ou um pedido por barra, etc.

Muito obrigado pela resposta!

Splxgf , eu também estava pensando nisso:

int init()
{  RefreshRates();
   if (NumberOfOrders()>15) return(0); // если число открытых ордеров превышает число 15, тогда советние не торгует
   if (OpenStop()>30) return(0);       // если число отложеных ордеров превышает число 15, тогда советние не торгует
}

O NumberOfOrders é um f-f-f que conta o número de pedidos em aberto. OpenStop - f-op conta o número de pedidos em aberto.

A condição para abrir o pedido é cumprida e a EA coloca qualquer número de pedidos em uma fila.

>splxgf: Esta é uma variante do código que interrompe o Expert Advisor quando o número de negócios é excedido. Como posso escrever para que um pedido seja feito quando a condição é acionada?

 

init só é executado uma vez https://docs.mql4.com/ru/basis/functions/special

int MaxOpenOrders=15;

int start()
  { 
    //bla-bla
    if (((OrderOpenPrice()-pAsk) >= -60 || OrdersTotal()<MaxOpenOrders) //открываем новые если количество открытых и отложенных ордеров не превышает 15
    OrderSend...
  

Na verdade, há um tutorial em https://book.mql4.com/ru/

Se você quiser que a condição seja acionada apenas uma vez, é mais complicado

 
Cavalheiros! Assim como alguém pode responder minha pergunta sobre netbook e modem 3G (na página 221). Obrigado de antemão.
 
splxgf:

init só é executado uma vez https://docs.mql4.com/ru/basis/functions/special

Na verdade, há um tutorial em https://book.mql4.com/ru/

Se você quiser que a condição seja acionada apenas uma vez, é mais complicado.

Obrigado!

Vou investigar isso!

 

Procurei no banco de dados e não consegui encontrá-lo, mas talvez eu não estivesse procurando o suficiente.

Digam-me, queridos, vocês têm algo semelhante:

O algoritmo é simples: um análogo de uma grade na qual uma ordem é aberta a cada n pips (compra ou venda, dependendo da direção do preço). As encomendas são abertas até que haja lucro de m pips. Quando este valor é atingido, todos os pedidos são fechados e tudo começa de novo.

Obrigado antecipadamente por sua atenção.

 
Zhunko:
A tarefa era salvar o histórico baixado para os arquivos de histórico. Durante o processo de download, todo o histórico é mantido em memória. Após fechar a janela do MT4, inicia-se a gravação dos arquivos usando as ferramentas do MT4. Este não é um processo rápido.

Vadim, eu resolvi o problema de economia desta maneira:

if(Bars<7000)
  {
    int handle, bar, wParam;
    handle=WindowHandle(Symbol(),Period());
    switch(Period())
            {
                  case PERIOD_M1:  wParam = 33137; break;
                  case PERIOD_H1:  wParam = 33135; break;
                  case PERIOD_D1:  wParam = 33134; break;
            }
    for(bar=1;bar<7000;bar=+100)
      {
        Comment(Bars);
        PostMessageA(handle,WM_KEYDOWN,VK_HOME,0); Comment(Bars); Sleep(10000); 
        PostMessageA(handle,WM_COMMAND,33135,0);  Comment(Bars); Sleep(10000); 
        PostMessageA(handle,WM_KEYDOWN,VK_HOME,0); Comment(Bars); Sleep(10000); 
        PostMessageA(handle,WM_COMMAND,33134,0);  Comment(Bars); Sleep(10000); 
        PostMessageA(handle,WM_KEYDOWN,VK_HOME,0); Comment(Bars); Sleep(10000); 
        PostMessageA(handle,WM_COMMAND,33137,0);  Comment(Bars); Sleep(10000); 
        bar=Bars;
        RefreshRates();
        if(Bars>=7000) {PostMessageA(handle,WM_KEYDOWN,VK_END,0); StartProfit();} //обязательный выход, иначе просто остается и подкачивает данные
        
      }
   }

Graças ao salto entre os períodos de tempo, o histórico é salvo simultaneamente em vários períodos (neste caso é 1 minuto, 1 hora e 1 dia). Assim, não é necessário desligar o terminal, mas o carregamento não é muito rápido, a velocidade é de cerca de 1 minuto (nestas condições) para um par de moedas, ou seja, se o iniciarmos para muitas moedas, o terminal será desligado por meia hora. O Expert Advisor começa a utilizar dados históricos sem recarregar o terminal.

 
forexnew:

Vadim, eu resolvi o problema de preservação desta maneira:

Graças ao salto entre os períodos de tempo, a história é simultaneamente salva por vários períodos (neste caso é 1 minuto, 1 hora e 1 dia). Assim, não há necessidade de desligar o terminal, mas o carregamento não é tão rápido, a velocidade é de cerca de 1 minuto (nestas condições) para um par de moedas, ou seja, se o iniciarmos para muitas moedas, o terminal será desligado por meia hora. O Expert Advisor começa a utilizar dados históricos sem recarregar o terminal.

Eu tenho a mesma coisa apenas muitas vezes mais confiável. Ao trocar o TF, o histórico não é salvo em arquivos. Somente quando se descarrega o terminal.

Às vezes o terminal às vezes salva a própria história, mas não tem nada a ver com o TFswitching.

 
Zhunko:

Eu tenho a mesma coisa apenas muitas vezes mais confiável. Ao trocar o TF, o histórico não é salvo em arquivos. Somente quando o terminal é descarregado.

Às vezes o terminal começa a salvar o histórico por si só, mas não está relacionado à comutação TF.

Como posso configurar para baixar apenas alguns prazos (não todos): minutos, 1 hora e dias?

Assim: string sTimeFrame = {"M1", "H1", "D1"}; // A string que lista a TF escaneada.

Não fará o download de mais de 2000 barras em um minuto, mas meu consultor especializado precisa de mais de 7000. Após o download com este roteiro, meu consultor especializado terminará o trabalho.

É projetado desta maneira, que nem todas as barras são baixadas?

 

Olá querida comunidade.

Eu tenho um problema desses. Estou usando o indicador "Bollinger Bands" em meu modelo (iBands - https://docs.mql4.com/ru/indicators/iBands) e um de seus parâmetros - desvio (desvio padrão) é definido ali como int. É possível mudá-lo para o dobro? No MT4, na seção "Indicadores personalizados", há outras Bandas de Bollinger (marcadas como "Bandas") onde o desvio é definido como duplo . Mas como inseri-lo na MQL4? Não está incluído no conjunto padrão de indicadores integrados, pois não? Não tenho idéia de como utilizá-lo na MQL4.