Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1674

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

fatto. assolutamente non diverso dalla rivista precedente.

nessun errore o altro.

Non dovrebbero esserci errori, mostra il log
 
for(int i = 0; i <= OrdersTotal(); i++)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            return(false);

Non hai bisogno di staffe per il loop? Sembra che solo quando non c'è più di una linea non sia necessario.

UPD:
Ah, ho capito, c'è una linea.

 
MakarFX #:
Non dovrebbero esserci errori, mostra il log

Ecco le ultime pagine del diario di bordo di MT4.

è necessario questo registro?

File:
0w11cw.txt  30 kb
 
Oh, scusate. Ho confuso il confronto con l'incarico. Ora è tutto a posto. Sto impazzendo da quando mi sono seduto a scrivere. Scrivo male e mi stresso per questo, e la mia testa non funziona affatto, anche se lo sapevo, ovviamente.
 
законопослушный гражданин #:

Ecco le ultime pagine del diario di bordo di MT4.

è necessario questo registro?

Ecco la risposta nel tuo registro)

La funzione bCheckOrders() dopo aver aperto un ordine dà come risultato che non ci sono ordini, quindi continuano ad aprire

 
pribludilsa #:
E la mia testa non funziona affatto, anche se lo sapevo, ovviamente.

Hai un modo divertente di metterla)))

 
MakarFX #:

Hai un modo divertente di metterla)))

Cioè, sapeva come scrivere incarico e confronto, ma si è confuso comunque. Confuso.
 
pribludilsa #:
Cioè, sapeva come scrivere incarico e confronto, ma si confondeva ancora. Incasinato.

Non è quello che voglio dire...

pribludilsa #:
e la mia testa non funziona affatto, anche se lo sapevo ovviamente.

 
MakarFX #:

Ecco la risposta nel tuo registro)

La funzione bCheckOrders() dopo aver aperto un ordine dà come risultato che non ci sono ordini, quindi continua ad aprire

Oh mio Dio, dove lo dice?

forse non ho letto bene il registro?

La funzionebCheckOrders()dopo aver aperto un ordine stampa che non c'è nessun ordine, quindi l'apertura continua - da void OnTick() - capisco che questo non è vero.

finché l'ordine non è chiuso bCheckOrders() - non può dare fuori che non c'è un ordine.

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

Oh, merda, dove lo dice?

forse non ho letto bene il registro?

La funzionebCheckOrders()dopo l'apertura di un ordine dà fuori che non c'è nessun ordine, quindi l'apertura continua - da void OnTick() - capisco che questo non è vero.

finché l'ordine non è chiuso bCheckOrders()- non può mostrare l'assenza di un ordine.

bCheckOrders() non funziona correttamente!

Ti ho già scritto una funzione per contare gli ordini.

Fate così e dovrebbe funzionare.

Invece di bCheckOrders(), mettete questa funzione

//+------------------------------------------------------------------+
//| Подсчет открытых ордеров                                         |
//+------------------------------------------------------------------+
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 in OnTick(), invece di bCheckOrders(), scrivere questo

//+------------------------------------------------------------------+
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));
  }