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

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

não é absolutamente diferente da revista anterior.

sem erros, ou qualquer outra coisa.

Não deve haver erros, mostre o registro
 
for(int i = 0; i <= OrdersTotal(); i++)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            return(false);

Você não precisa de parênteses para o laço? Parece que somente quando não há mais de uma linha você não precisa delas.

UPD:
Ah, entendi, há uma linha.

 
MakarFX #:
Não deve haver erros, mostre o registro

aqui estão as últimas páginas do Diário de Bordo da MT4.

este tronco é necessário?

Arquivos anexados:
0w11cw.txt  30 kb
 
Oh, desculpe. Confundiu a comparação e a atribuição. Está tudo bem agora. Estou ficando louco desde que me sentei para escrever. Eu escrevo mal e fico estressado com isso, e minha cabeça não funciona, embora eu soubesse disso, é claro.
 
законопослушный гражданин #:

aqui estão as últimas páginas do Diário de Bordo da MT4.

este tronco é necessário?

Aqui está a resposta em seu diário de bordo)

A função bCheckOrders() após a abertura de uma ordem, indica que não há ordens, então eles continuam abrindo

 
pribludilsa #:
E minha cabeça não funciona em nada, embora eu soubesse disso, é claro.

Você tem uma maneira engraçada de dizer))))

 
MakarFX #:

Você tem uma maneira engraçada de dizer))))

Sabia escrever tarefas e comparações, mas de qualquer forma ficou confuso. Confuso.
 
pribludilsa #:
Sabia escrever tarefas e comparações, mas ainda assim ficou confuso. Uma bagunça.

Não é isso que eu quero dizer...

pribludilsa #:
e minha cabeça não funciona em absoluto, embora eu soubesse disso, é claro.

 
MakarFX #:

Aqui está a resposta em seu diário de bordo)

A função bCheckOrders() após a abertura de uma ordem dá a entender que não há ordens, portanto ela continua abrindo

Oh meu Deus, onde diz isso?

talvez eu não tenha lido o registro corretamente?

A funçãobCheckOrders()após abrir uma ordem imprime que não há ordem, portanto, a abertura continua - por meio de OnTick() nulo - entendo que isto não é verdade.

até que a ordem seja fechada bCheckOrders() - não pode dar a entender que não há ordem.

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

Oh, merda. Onde diz isso?

talvez eu não tenha lido o registro corretamente?

A funçãobCheckOrders()após a abertura de uma ordem dá a entender que não há ordem, portanto a abertura continua - por meio de OnTick() nulo - entendo que isto não é verdade.

até que o pedido seja fechado bCheckOrders()- não pode mostrar ausência de um pedido.

bCheckOrders() não funciona corretamente!

Eu já lhe escrevi uma função para a contagem de pedidos.

Basta fazer assim e deve funcionar.

Ao invés de bCheckOrders(), coloque esta função

//+------------------------------------------------------------------+
//| Подсчет открытых ордеров                                         |
//+------------------------------------------------------------------+
int CountOrders() 
  {
   int cnt=0;
   int i=OrdersTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderMagicNumber()==Magic) cnt++;
           }
        }
     }
   return(cnt);
  }

e em OnTick(), em vez de bCheckOrders(), escreva isto

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

// Если нет открытых ордеров, то входим в условие
   if(CountOrders()==0)
     {
// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     }
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfit

  if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
     {
// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка
      CloseOrder();
     }
DrawLABEL("lab_Take",1,5,0,Color(GetProfitFromStart()>0,Lime,Red),StringConcatenate("Profit: ",DoubleToStr(GetProfitFromStart(),2),AC));
  }
Razão: