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

 
законопослушный гражданин #:

Tanto quanto eu posso ver, a diferença é esta:

Você pode percorrer a história desde o início ou desde o final. Não há diferença. De qualquer forma, a função procura o pedido com a última hora de fechamento. E se você quiser apagar ou fechar pedidos, devemos pesquisar a partir do final da lista. Caso contrário, o laço saltará os pedidos.

 
законопослушный гражданин #:

até onde eu posso ver, a diferença é a seguinte:

Neste caso, não há diferença. O ciclo de OrersTotal a 0 é obrigatório somente no caso de fechamento de posições ou remoção de ordens. Em outros casos, é de acordo com o gosto do cliente.

 
Mihail Matkovskij #:

Você pode percorrer a história desde o início ou desde o final. Não há diferença. De qualquer forma, a função procura o pedido com o último horário de fechamento. E se você quiser apagar ou fechar pedidos, então você precisa pesquisar a partir do final da lista. Caso contrário, o laço saltará os pedidos.

Se a função busca a ordem com o último tempo de fechamento, então a busca será obviamente mais rápida a partir do final, em vez do início da história - do tempo atual para o passado.

 
Artyom Trishkin #:

Se a função estiver procurando uma ordem com o último fechamento, a busca será obviamente mais rápida, não do início da história, mas do fim - do tempo atual ao tempo passado.

Na direção oposta, a função encontrará a ordem com o último fechamento mais rápido, não a alterará até o final do ciclo e retornará o resultado. Na direção da frente, ele procurará em todas as ordens e retornará uma das últimas ordens. A diferença é que as variáveis serão sobrescritas em cada passagem do loop. Sim, há uma diferença. Mas eu acho que não é muito significativo. Embora eu preferisse o laço na direção inversa à dianteira. Apesar do fato de que a função funcionará de uma forma ou de outra.

 
Olá a todos, há alguma forma de alternar entre as janelas de gráficos programática, ou seja, tornar qualquer gráfico ativo de dentro do programa?
 
Maksim Mihajlov #:
Olá a todos, há alguma forma de alternar entre as janelas de gráficos programática, ou seja, tornar qualquer gráfico ativo a partir de um programa?

Confira

TABELA_BRING_TO_TOP

Exibir gráfico no topo de todos os outros gráficos

bool

 
Alexey Viktorov #:

Confira

TABELA_BRING_TO_TOP

Exibir gráfico no topo de todos os outros gráficos

bool

Obrigado!

 
Mihail Matkovskij #:

Você pode percorrer a história desde o início ou desde o final. Não há diferença. De qualquer forma, a função procura o pedido com o último horário de fechamento. E se você quiser apagar ou fechar pedidos, então você precisa pesquisar a partir do final da lista. Caso contrário, o laço saltará os pedidos.

De qualquer forma, eu fiz dois EAs completamente idênticos, exceto pela contagem do lote de pedidos!!! e aqui está o resultado:

NÃO TRABALHA (ou seja, não abre BAY em vez de SELL)

void OnTick()
{
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
 {
//Если появился сигнал на покупку, то откроем ордер на покупку
  if(bSignalBuy())
  {
   if(GetLotSize()>LotControl) vOrderOpenSell();
   else vOrderOpenBuy();
  }
// Если появился сигнал на продажу, то откроем ордер на продажу
  if(bSignalSell())
  {
   if(GetLotSize()>LotControl) vOrderOpenBuy();
   else vOrderOpenSell();
  }
 }
}
,,,
double GetLotSize()
  {
   double Ls=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) {Ls=OrderLots();}
           }
        }
     }
   return Ls;
  }

TRABALHO ( (isto é, abre BAY em vez de SELL)


void OnTick()
{
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
 {
//Если появился сигнал на покупку, то откроем ордер на покупку
  if(bSignalBuy())
  {
   if(GetLotSize()>LotControl) vOrderOpenSell();
   else vOrderOpenBuy();
  }
// Если появился сигнал на продажу, то откроем ордер на продажу
  if(bSignalSell())
  {
   if(GetLotSize()>LotControl) vOrderOpenBuy();
   else vOrderOpenSell();
  }
 }
}
...
double GetLotSize()
  {
   double Ls=0;
   datetime t=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderCloseTime(); Ls=OrderLots();}
              }
           }
        }
     }
   return Ls;
  }
 
законопослушный гражданин #:

De qualquer forma, eu fiz dois EAs completamente idênticos, exceto pela contagem do lote de pedidos!!! e aqui está o resultado:

NÃO TRABALHA (ou seja, não abre BAY em vez de SELL)

TRABALHO (ou seja, abre BAY em vez de SELL)


Mais uma vez, enfatizo a diferença

1 variante

double GetLotSize()
  {
   double Ls=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))

2 variantes

double GetLotSize()
  {
   double Ls=0;
   datetime t=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
 
законопослушный гражданин #:

De qualquer forma, eu fiz dois EAs completamente idênticos, exceto pela contagem do lote de pedidos!!! e aqui está o resultado:

NÃO TRABALHA (ou seja, não abre BAY em vez de SELL)

TRABALHO ( (isto é, abre BAY em vez de SELL)


Tente entender o que você está codificando, em vez de copiar cegamenteOrdensTotal,OrdensHistóriaTotal,

OrderSelect

pool=MODE_TRADES

[em] Fonte dos dados a selecionar. Usado quando o parâmetro selecionado é SELECT_BY_POS. Pode ser um dos seguintes valores:

MODE_TRADES (default) - a ordem é selecionada entre ordens abertas e pendentes,
MODE_HISTORY - a ordem é selecionada entre ordens fechadas e apagadas.

    OrdersTotal - Торговые функции - Справочник MQL4
    OrdersTotal - Торговые функции - Справочник MQL4
    • docs.mql4.com
    OrdersTotal - Торговые функции - Справочник MQL4
    Razão: