Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 710

 
Artyom Trishkin:
Recentemente publiquei aqui um modelo de indicador de plataforma cruzada. Confira.
IndicatorBuffers()

você precisa fazer um blog e postar respostas para as mesmas perguntas lá.... Eu gostaria de ter esse tipo de paciência!

aqui estáhttps://www.mql5.com/ru/forum/160683/page670#comment_9054670

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
  • 2018.10.18
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
Igor Makanu:

você deve blogar e postar respostas às mesmas perguntas lá.... Eu gostaria de ter esse tipo de paciência!

Talvez você devesse. Não tenho tempo para isso. As perguntas serão sempre as mesmas +/-

 
O problema é resolvido pela atribuição das variáveis auxiliares aos últimos números de ordem do buffer, mas sem prescrever as configurações de exibição. Antes disso, os amortecedores desnecessários estavam no meio da lista.
 

Ajuda.

Quero colocar ordens pendentes em posições que foram fechadas para o dia.

A função coloca o pedido ao preço da última posição fechada.

O que devo fazer para colocar ordens pendentes sobre o preço de todas as posições fechadas durante o dia?

oid PriceTimePos(string sy="",int op=-1,int mn=-1) 
  {
   datetime t;
   bool daa;
   int d,k_=OrdersTotal(),typ_;
   double   r=0;
   int      i,k=OrdersHistoryTotal();

   if(sy=="0") sy=Symbol();
   for(i=0; i<k; i++) 
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) 
        {
         if(OrderSymbol()==Symbol()) 
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) 
              {
               if(op<0 ||OrderType()==op) 
                 {
                  if(mn<0 || OrderMagicNumber()==mn) 
                    {
                     if(OrderCloseTime()>=TimeCurrent()-1440*60)
                       {
                        t=OrderCloseTime();
                        r=OrderOpenPrice();
                        sl=OrderStopLoss();
                        tp=OrderTakeProfit();
                        lot=OrderLots();
                        typ_=OrderType();
                        //Print("OpenPrice",r);
                       }
                    }
                 }
              }
           }
        }
     }
// ЕСТЬ ОРДЕР ПО ЦЕНЕ ЗАКРЫТОЙ ПОЗИЦИИ?
   daa=false;
   for(i=0; i<k; i++) 
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
        {
         if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) 
           {
            if(OrderType()>1 && OrderType()<6) 
              {
               d=MarketInfo(OrderSymbol(), MODE_DIGITS);
               r=NormalizeDouble(r, d);
               if(r==NormalizeDouble(OrderOpenPrice(),d)) {daa=true;}
              }
           }
        }
     }
   if(daa==false)//ЕСЛИ НЕТ ОРДЕРА ПО ЦЕНЕ, СТАВЛЮ
     {
      double opprord=0;
      for(i=0; i<k_; i++) 
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
           {
            if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) 
              {
               if(OrderType()>1 && OrderType()<6) 
                 {
                  d=MarketInfo(OrderSymbol(),MODE_DIGITS);
                  opprord=OrderOpenPrice();
                  // r=NormalizeDouble(r, d);
                  if(r!=NormalizeDouble(opprord,d))
                    {
                     if(r>Ask)
                       {
                        if(typ_==OP_BUY)
                          {
                           Print("OP_BUYSTOP",r);
                           SetOrder(Symbol(),OP_BUYSTOP,lot,r,sl,tp,_MagicNumber,0,"bs");
                          }
                        if(typ_==OP_SELL)
                          {
                           Print("OP_SELLLIMIT",r);
                           SetOrder(Symbol(),OP_SELLLIMIT,lot,r,sl,tp,_MagicNumber,0,"sl");
                          }
                       }

                     //
                     if(Bid>r)
                       {
                        if(typ_==OP_BUY)
                          {
                           Print("OP_BUYLIMIT",r);
                           SetOrder(Symbol(),OP_BUYLIMIT,lot,r,sl,tp,_MagicNumber,0,"bl");
                          }
                        if(typ_==OP_SELL)
                          {
                           Print("OP_SELLSTOP",r);
                           SetOrder(Symbol(),OP_SELLSTOP,lot,r,sl,tp,_MagicNumber,0,"bs");
                          }
                       }
                    }
                 }
              }
           }
        }
     }
//return(r);
  }
 
PolarSeaman:

Ajuda.

Quero colocar ordens pendentes em posições que foram fechadas para o dia.

A função coloca o pedido ao preço da última posição fechada.

O que devo fazer para colocar ordens pendentes sobre os preços de todas as posições fechadas em um dia?

  1. Percorra a lista de posições fechadas no loop, selecionando aquelas cujo horário de fechamento é mais do que o horário de início do dia exigido (e menos do que o horário de início do dia seguinte, se foi anteontem, por exemplo).
  2. Adicione todos os preços fechados (preços abertos - não sabe exatamente a que você quer defini-los) de todas as posições encontradas a uma simples matriz ou a uma variedade de estruturas.
  3. Percorrer a matriz criada no loop e fazer pedidos pendentes a preços de matriz (verificando se existe um pedido a este preço - não é necessário fazer vários pedidos ao mesmo preço)
  4. Você também pode apagar os preços dos pedidos já feitos da matriz nesse meio tempo, mas é um pouco complicado...
 

Comecei a estudar a MQL4 pelo livro de S. Kovalev. Kovalev, há algumas inconsistências no código, pois o livro foi escrito para construções antigas do MT4.


Favor aconselhar como processar este código para evitar erros.

#property strict

int Count=0;
int init()      
{
   Alert ("Сработала ф-ия init() при запуске");   // Сообщение
   return;                                                                     // Выход из init()
   }   
//--------------------------------------------------------------------
int start()                                                                           // Спец. ф-ия start()
   {
   double Price = Bid;                                                      // Локальная перемен.
   Count++;                                                                      // Счётчик тиков
   Alert("Новый тик ",Count," Цена = ",Price);       // Сообщение
   return;                                                                        // Выход из start()
   }
int deinit()                                                                              // Спец. ф-ия deinit()
   {
   Alert ("Сработала ф-ия deinit() при выгрузке");         // Сообщение
   return;                                                                                 // Выход из deinit()
   }

erro

devolução" - a função deve retornar um valor

1. É correto fazer isso?

#property strict

int Count=0;
int init()      
{
   Alert ("Сработала ф-ия init() при запуске");   // Сообщение
   return(0);                                                                     // Выход из init()
   }   
//--------------------------------------------------------------------
int start()                                                                           // Спец. ф-ия start()
   {
   double Price = Bid;                                                      // Локальная перемен.
   Count++;                                                                      // Счётчик тиков
   Alert("Новый тик ",Count," Цена = ",Price);       // Сообщение
   return(0);                                                                        // Выход из start()
   }
int deinit()                                                                              // Спец. ф-ия deinit()
   {
   Alert ("Сработала ф-ия deinit() при выгрузке");         // Сообщение
   return(0);                                                                                 // Выход из deinit()
   }


2. Pergunta, quão problemático é escrever código para novas construções usando o conhecimento dado no tutorial (quero dizer o fator idade da informação)?



Arquivos anexados:
 
Sergey Branin:

Comecei a estudar a MQL4 pelo livro de S. Kovalev. Kovalev, há algumas inconsistências no código, pois o livro foi escrito para construções antigas do MT4.


Favor aconselhar como processar este código para evitar erros.

erro

devolução" - a função deve retornar um valor

1. É correto fazer isso?


2. Pergunta, qual é o problema de escrever código para novas construções usando o conhecimento dado no tutorial (quero dizer o fator de envelhecimento da informação)?



Use OnInit(), OnDeinit(), OnTick(), e outros da lista:

Документация по MQL5: Обработка событий
Документация по MQL5: Обработка событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
Sergey Branin:

Comecei a estudar a MQL4 pelo livro de S. Kovalev. Kovalev, há algumas inconsistências no código, pois o livro foi escrito para construções antigas do MT4.


Favor aconselhar como processar este código para evitar erros.

erro

devolução" - a função deve retornar um valor

1. É correto fazer isso?


2. Pergunta, qual é o problema de escrever código para novas construções usando o conhecimento do tutorial (quero dizer o fator idade da informação)?



  1. Você tem razão em devolver valores de funções não vazias, mas é melhor mudar para novas construções - não há nada de complicado lá.
  2. Escreva, não se esqueça de inserir #propriedade diretriz estrita no início do código - onde todas as diretrizes são escritas, leia códigos de erro - suas descrições estão na documentação, e tudo estará bem e não será complicado.
 
Artyom Trishkin:
  1. Percorra a lista de posições fechadas, selecionando aquelas com um horário de fechamento maior do que o horário de início do dia que você deseja

Obrigado, encontro preços abertos de posições fechadas no tempo necessário no primeiro ciclo. Todos eles aparecem na impressora e eu preciso fazer pedidos neles.

Para mim, a matriz é um pouco de quebra-cabeça, por favor, me aconselhe como inserir os ciclos para verificar e ajustá-los ao preço de abertura no primeiro ciclo de busca desses preços.

Então, coloque o preço do mais velho que eu preciso, como eu vou para o próximo preço encontrado?
void PriceTimePos(string sy="",int op=-1,int mn=-1)
  {
   datetime t;
   bool daa;
   int d,k_=OrdersTotal(),typ_;
   double   r=0;
   int      i,k=OrdersHistoryTotal();

   if(sy=="0") sy=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(op<0 || OrderType()==op)
                 {
                  if(mn<0 || OrderMagicNumber()==mn)
                    {
                     if(OrderCloseTime()>=TimeCurrent()-1440*60)
                       {
                        t=OrderCloseTime();
                        r=OrderOpenPrice();
                        sl=OrderStopLoss();
                        tp=OrderTakeProfit();
                        lot=OrderLots();
                        typ_=OrderType();
                        //Print("OpenPrice",r);

                        // ЕСТЬ ОРДЕР ПО ЦЕНЕ ЗАКРЫТОЙ ПОЗИЦИИ?
                        daa=false;
                        for(i=0; i<k; i++)
                          {
                           if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                             {
                              if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
                                {
                                 if(OrderType()>1 && OrderType()<6)
                                   {
                                    d=MarketInfo(OrderSymbol(), MODE_DIGITS);
                                    r=NormalizeDouble(r, d);
                                    if(r==NormalizeDouble(OrderOpenPrice(),d)) daa=true; //else continue;
                                   }
                                }
                             }
                          }
                        if(daa==false)//ЕСЛИ НЕТ ОРДЕРА ПО ЦЕНЕ, СТАВЛЮ
                          {

                           if(r>Ask)
                             {
                              if(typ_==OP_BUY)
                                {
                                 Print("OP_BUYSTOP",r);
                                 SetOrder(Symbol(),OP_BUYSTOP,lot,r,sl,tp,_MagicNumber,0,"bs");
                                }
                              if(typ_==OP_SELL)
                                {
                                 Print("OP_SELLLIMIT",r);
                                 SetOrder(Symbol(),OP_SELLLIMIT,lot,r,sl,tp,_MagicNumber,0,"sl");
                                }
                             }

                           //
                           if(Bid>r)
                             {
                              if(typ_==OP_BUY)
                                {
                                 Print("OP_BUYLIMIT",r);
                                 SetOrder(Symbol(),OP_BUYLIMIT,lot,r,sl,tp,_MagicNumber,0,"bl");
                                }
                              if(typ_==OP_SELL)
                                {
                                 Print("OP_SELLSTOP",r);
                                 SetOrder(Symbol(),OP_SELLSTOP,lot,r,sl,tp,_MagicNumber,0,"bs");
                                }
                             }

                          }
                        //return(r);
                       }
                    }
                 }
              }
           }
        }
     }
//
  }
 
PolarSeaman:

Obrigado, encontro os preços de abertura das posições fechadas no momento certo no primeiro ciclo. Todos eles aparecem na impressora e eu preciso fazer pedidos neles.

A matriz é um labirinto para mim, me diga como colocar os ciclos para verificar e definir o preço de abertura na primeira etapa para encontrar esses preços.

É mais rápido entender e entender o que são matrizes, do que corrigir o que você fez.

Especialmente porque as arrays não são simples, mas muito simples.

A revista AK contém 30 cartuchos - é um conjunto de tamanhos 30. E os cartuchos são os dados armazenados na matriz.

É certo que este não é um bom exemplo - você não pode conseguir o terceiro a menos que consiga 0, 1 e 2.

Bem, imagine uma planilha:

Índice 0
Índice 1
Índice 2
Índice 3
Índice 4
Índice5.Índice6.Índice 7
Índice 8
Índice 9
Valor 1
Valor do índice 2
Valor 3
Valor 4
Valor 5
Valor 6
Valor 7
Valor 8
Valor 9
Valor 10

Aqui está uma simples matriz unidimensional de tamanho 10.

O valor 1 é armazenado na célula com índice 0, o valor 2 é armazenado na célula com índice 1, o valor 3 é armazenado na célula com índice 2, ...
...
Valor 8 é armazenado na célula de índice 7, valor 9 é armazenado na célula de índice 8, valor 10 é armazenado na célula de índice 9

É tão simples quanto isso. Para obter o valor 3, você precisa acessar a matriz - sua célula 2: Valor3=Array[2];