[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 470

 
tol64:

Como você otimiza os parâmetros de múltiplas moedas? No testador MT4 não há possibilidade de testar vários símbolos ao mesmo tempo. Estou pensando no de moedas múltiplas e até agora cheguei à idéia de otimizar os parâmetros para cada símbolo separadamente, e então transfiro todos esses parâmetros para meu Consultor Especialista no modo de moedas múltiplas.

Estou indo na direção certa ou é mais fácil, de fato?)

Em mql5 tudo isso pode ser implementado em uma EA para testes e comércio, mas por enquanto decidi estudar mql4.

Eu pensei que se você não pode testar alguns símbolos de uma vez, por que se preocupar com uma EA se você pode simplesmente definir sua própria cópia de cada gráfico de símbolos e ela será a mesma. Eu gostaria de ouvir as opiniões dos membros da comunidade))))

Eu não tenho uma moeda múltipla, eu apenas penduro a mesma EA em cada instrumento.
 
Roman.:

resposta
Desculpe, não entendi a resposta.
 
demlin:
Desculpe, eu não entendo a resposta.

Procure no google por "como otimizar um site:mql4.com": O seguinte livro também está disponível aqui: "como otimizar um site Expert Advisor:mql4.com", também aqui.

Recomendo um bom livro sobre este assunto: "Development, Testing and Optimization of Trading Systems for the Stock Trader" de Ralph Vince - tudo em detalhes.

 

Problema: A figura mostra uma curva (por exemplo, MA). Os pontos A,C,E são os máximos locais, e os pontos B,D são os mínimos locais. Pergunta: como calculá-los se a distância entre o máximo e o mínimo mais próximo for maior que N pontos? Eu tentei fazer isso, mas parece ser muito pesado. Talvez exista um algoritmo pronto para resolver tal problema? Favor avisar, se alguém tiver experiência disso.

 
Elenn:

Problema: A figura mostra uma curva (por exemplo, MA). Os pontos A,C,E são os máximos locais, e os pontos B,D são os mínimos locais. Pergunta: como calculá-los se a distância entre o máximo e o mínimo mais próximo for maior que N pontos? Eu tentei fazer isso, mas parece ser muito pesado. Talvez exista um algoritmo pronto para resolver tal problema? Favor informar, se alguém tiver experiência disso.


Determinando a direção do deslizamento.

Se estiver acima e as Variáveis B,C,D e E estiverem vazias, então inserimos o valor atual do ângulo de movimentação na Variável A.

Se a variável A não estiver vazia, e a direção de deslizamento estiver para baixo, e as variáveis C,D,E estiverem vazias, então o valor atual do indicador de deslizamento é inserido na variável B. Se as variáveis A e B não estiverem vazias, e a média móvel estiver apontando para cima, e as variáveis D e E estiverem vazias, então a variável C deverá ser preenchida com o valor atual da média móvel.

E assim por diante, nós preenchemos os valores das variáveis com valores.

Agora, se as variáveis A e C não estiverem vazias, e se o módulo de diferença entre A e C for maior ou igual a um número de pontos pré-definido, então a ação que você tem em mente será executada.

De modo geral, o código é bem possível. Só precisamos determinar o ponto no algoritmo, no qual vamos redefinir as variáveis, para que a EA perceba que chegou a um novo ponto de partida. O código pode ser escrito através de um loop e arrays, e pode ser menos complexo, mas é melhor escrever o algoritmo através de variáveis, a fim de evitar confusão com índices de array e números de candlestick no loop.

 

Rapazes, recentemente se depararam com esta questão. Quem está no loop - comente sobre isso. Eu mesmo encontrei o erro - graças a Deus - rapidamente... Ao escrever código - tudo se compila sem erros, mas o arrasto não funciona... Ou seja, não vamos mais longe no ciclo de pedidos. Aqui estão os fragmentos de código... O bug estava no seguinte - demos ordens mágicas em variáveis externas, mas em busca de ordens no loop - com uma letra pequena, a busca via CTRL + F - solicitando "mágica" foi seguida por "mágica"... O compilador não deu nenhum erro, mas no loop, o programa não foi alterado para uma rede de arrasto... o loop interromperia na "magia"... Isto é suposto ser assim? Sempre pensei que "magia" e "magia" fossem variáveis diferentes. e, portanto, o compilador deveria ter indicado este erro que a variável "mágica" é indefinida. No código, como agora é executado antes de selecionar a rede de arrasto e Printa () não vem mais - a saída do laço por esta condição - por causa da magia - ou seja, esta condição - nunca será cumprida, por causa de nomes diferentes - "magia" e "magia".

if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != magic))
      {
         continue;
      }

// глоб переменные
...
...
extern int  Magic = 10;     // MagicNumber

//----------------------------------------------------------------------------
int start()                            // Спец. функция start
  {
  
   
   int orderCount = 0; 
  
   //---------------------------ТРАЛ ОРДЕРОВ---------------------------------------------------------------------------------------
   int orderType;
    for (orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
    {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))
      {
         continue;
      }

      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != magic))
      {
         continue;
      }

      orderType = OrderType();
      if ((orderType != OP_BUY) && (orderType != OP_SELL))
      {
         continue;
      }
                ticket = OrderTicket( );                         // Номер ордера
       double   orderLots = OrderLots();                         // Lots   
       double   orderProfit = OrderProfit() + OrderSwap();       // Profit
       double   Price = OrderOpenPrice();                        // Цена открытия рыночного ордера
       double   SL =  OrderStopLoss();                           // Значение StopLoss ордера
       double   TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
             if (ticket>0)                                               // Если позиция открылась
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  double OpenPrice=OrderOpenPrice();
                    }
                 
         
      orderCount++;                     // считаем ордера (не больше 10)
     
            
       while (!IsTradeAllowed() || !IsConnected()) Sleep(5000); RefreshRates();
       
      //----------------------------Тралим последовательно все наши ордера по виду трала------------------
      if (UseTrailing && orderCount > 0 && type ==0)   // простой трал по аналогии учебнику - в зависимости от параметра trlinloss (тралить ли в зоне лоссов)
          {     
           if (orderType == OP_BUY)  SampleTrailing_texbook (0);          // если бай
           if (orderType == OP_SELL) SampleTrailing_texbook (1);          // если селл
          }      
      ...
      ...
      ...   
     Print( "Эксперт база: Всего наших ордеров = " ,orderCount);
     }   
//--------------------------------------------------------------------------------------------------------------------------------------     
   
   
  
//----------------------------------------------------------------  
   return;                             // Выход из start()
  }

P.S. Quem não sabe - esteja ciente disso, senão não está claro o quanto você pode fazer com o código...

 
Roman.:

Rapazes, recentemente se depararam com esta questão. Quem está no loop - comente sobre isso. Eu mesmo encontrei o erro - graças a Deus - rapidamente... Ao escrever código - tudo se compila sem erros, mas o arrasto não funciona... Ou seja, não vamos mais longe no ciclo de pedidos. Aqui estão os fragmentos de código... O bug estava no seguinte - demos ordens mágicas em variáveis externas, mas em busca de ordens no loop - com uma letra pequena, a busca via CTRL + F - solicitando "mágica" foi seguida de transição para "mágica"... O compilador não deu nenhum erro, mas a execução do programa não mudou para o modo de arrasto no loop... o loop interromperia na "magia"... Isto é suposto ser assim? Sempre pensei que "magia" e "magia" fossem variáveis diferentes. e, portanto, o compilador deveria ter indicado este erro que a variável "mágica" é indefinida. No código, como agora está executando antes de selecionar a rede de arrasto e Printa () não aparece mais - a saída do laço nesta condição - por causa damagia - ou seja, esta condição - nunca será executada, devido a nomes diferentes - "magia" e "magia".

P.S. Quem não sabe disso - esteja ciente, senão você não saberá o quanto terá a ver com o código...


Se a magia for declarada e a magia for usada, o compilador diz que a variável mágica não é declarada.

MetaEditor 4 401.

 
Roman.:

Rapazes, recentemente se depararam com esta questão. Quem está no loop - comente sobre isso. Eu mesmo encontrei o erro - graças a Deus - rapidamente... Ao escrever código - tudo se compila sem erros, mas o arrasto não funciona... Ou seja, não vamos mais longe no ciclo de pedidos. Aqui estão os fragmentos de código... O bug estava no seguinte - demos ordens mágicas em variáveis externas, mas em busca de ordens no loop - com uma letra pequena, a busca via CTRL + F - solicitando "mágica" foi seguida por "mágica"... O compilador não deu nenhum erro, mas no loop, o programa não foi alterado para uma rede de arrasto... o loop interromperia na "magia"... Isto é suposto ser assim? Sempre pensei que "magia" e "magia" fossem variáveis diferentes. e, portanto, o compilador deveria ter indicado este erro que a variável "mágica" é indefinida. No código, como agora está executando antes de selecionar a rede de arrasto e Printa () não aparece mais - a saída do laço nesta condição - por causa damagia - ou seja, esta condição - nunca será executada, devido a nomes diferentes - "magia" e "magia".

P.S. Quem não sabe disso - esteja atento, senão você não entenderá o quanto terá que lidar com o código...

Comparar com minha simples rede de arrasto. Em particular, é um ciclo de procura de pedidos:

   // В глоб. переменных
   string sy=Symbol();
   // ...................................................................
   color  cl;
   double sl, StopLevel;
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)           continue;
         if (OrderMagicNumber()!=Magic)   continue;
         if (OrderType()>1)               continue;
         sl=OrderStopLoss();
         if (OrderType()==OP_BUY) {
            cl=clModifyBuy;
            StopLevel=NormalizeDouble(strG-DeltaStop*PointX, dg);
            if (sl<StopLevel) ModifyOrder(-1, StopLevel, -1, -1, cl);
            }
         if (OrderType()==OP_SELL) {
            cl=clModifySell;
            StopLevel=NormalizeDouble(strR+DeltaStop*PointX, dg);
            if (sl>StopLevel) ModifyOrder(-1, StopLevel, -1, -1, cl);
            }
         }
      }

Penso que o princípio será claro para você.

E a magia e as variáveis mágicas são realmente diferentes. Ao procurá-los com Ctrl+F, verifique "sensível a maiúsculas e minúsculas".

Em algum lugar no código você os declarou ambos

 
artmedia70:

E a magia e as variáveis mágicas são realmente diferentes. Ao procurá-los com Ctrl+F, marque a caixa de seleção "sensível a maiúsculas e minúsculas".

Em algum lugar do código você declarou os dois, afinal de contas

Exatamente. Acabei de encontrá-lo graças a você... :-))) No fundo das Variáveis além da variável externa int Magic = 10; declarei uma variável -
int magic = 12345;

:-)))

Descobri que estava levando em conta Magic na abertura do pedido e Magic no laço, então o laço do pedido para sua rede de arrasto não funcionou...:-)))

Obrigado do fundo do meu coração - eu resolvi o problema. Checado "Registro de Uso " - colocá-lo lá e tudo está funcionando corretamente.

P.S. Como isso acontece!! (Quando a sorte vai no código - pronto e não apenas alguns majiks para declarar...:-))))

 
artmedia70:

Compare isto com minha mais simples rede de arrasto. Particularmente o ciclo de busca de pedidos:

Penso que o princípio será claro.

Obrigado pela opção de arrasto. O princípio é claro.
Razão: