Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 230

 
Aleksey Mavrin:

e cosa, c'è sempre più profitto dopo 10 secondi?).

Non sempre, naturalmente, ma spesso succede che il prezzo vola in un minuto e l'EA chiude bruscamente a un prezzo fisso.
 
Nargiz Ravanova:

Ho fatto come hai detto tu, ma per qualche motivo dopo la chiusura l'Expert Advisor apre i trade un paio di volte, nonostante il fatto che dopo la funzione CloseAll() ho uno slittamento per un'ora.

datetime sleep = TimeCurrent();
if(sleep > TimeCurrent())
     return;
//---
double op = CalculateProfit();

if(op >= Profit && LastTime == 0)
     LastTime = TimeCurrent();
if(LastTime > 0 && TimeCurrent() - LastTime >= Second)

    {
     CloseAll();
     LastTime = 0;

     SendNotification("Trade is end");
     sleep = TimeCurrent()+60*60;
    }

Ecco come stanno le cose. Naturalmente, era solo scritto sul mio ginocchio.

 
Konstantin Nikitin:

Qualcosa del genere. Naturalmente è stato scritto sul momento.

Grazie, ora l'EA chiude solo un trade tra tutti quelli sul mercato, e ho un EA a griglia.

Non ho avuto alcuno slittamento e l'EA sta aprendo di nuovo un nuovo trade e ignorando gli slittamenti. Se guardo l'EA, non credo sia possibile aprirne un altro, ma devo restituirlo come era prima. Non so cosa fare con questo EA e non sarò in grado di fare altro.

 
Nargiz Ravanova:

Grazie, ora l'EA chiude solo un trade tra tutti quelli sul mercato, e ho un EA a griglia.

Ho un sacco di problemi con questo, ma non sono sicuro di cosa fare con questo, quindi non sono sicuro di cosa fare con questo. Penso che non sia possibile implementarlo, lo riporterò semplicemente come era prima. Vorrei ringraziarli per il loro aiuto.

È necessario implementarlo nel suo insieme
le ragioni possono essere diverse

 
Nargiz Ravanova:

Grazie, ora l'EA chiude solo un trade tra tutti quelli sul mercato, e ho un EA a griglia.

Ho un sacco di problemi con questo, ma non sono sicuro di cosa fare con questo, quindi non sono sicuro di cosa fare con questo. Penso che non sia possibile implementarlo, lo riporterò semplicemente come era prima. L'ho già implementato e non è stato ancora implementato, quindi lo riporterò semplicemente com'era prima.

Questo dovrebbe avere più senso, giusto?

input double Profit   = 100.0;
input int    Second   = 10;
//+------------------------------------------------------------------+
void CloseAllSleep(void)
    {
     static datetime sleep_all = TimeCurrent();
     static datetime LastTime = 0;
     if(sleep_all > TimeCurrent())
          return;
//---
     if(LastTime == 0)
         {
          if(CalculateProfit() < Profit)
               return;
          LastTime = TimeCurrent();
         }
     if(TimeCurrent() - LastTime >= Second)
          return;
//---
     if(!CloseAll())
          return;
     LastTime = 0;

     SendNotification("Trade is end");
     sleep_all = TimeCurrent()+60*60;
    }

//--- Считаем профит открытых позиций
double CalculateProfit(void)
    {
     return 0.0;
    }
//--- Закрываем все позиции
bool CloseAll(void)
    {
     return true;
    }

Di nuovo, questo è puramente per chiarezza. E cosa e come devi implementare, pensaci da solo.

 
Nargiz Ravanova:
Certo, non sempre, ma succede spesso che il prezzo vola solo per un minuto e l'Expert Advisor chiude bruscamente a un prezzo fisso.

Tuttavia, penso che questo approccio sia sub-ottimale. Se il prezzo sta volando, ci dovrebbe essere uno slittamento positivo. Se aspettate il tempo - è un gioco di roulette - allora a cosa serve la strategia, il vostro profitto potrebbe già essere inferiore alle 2 sterline date.

È più ragionevole misurare la velocità del cambiamento di prezzo, e se è alto verso il profitto - aspettare, quando è andato giù - per coprire.

 
Konstantin Nikitin:

Penso che questo abbia più senso, no?

Di nuovo, questo è puramente per capire. Sta a voi capire cosa implementare e come farlo.

Non lo capisco per essere onesto, lascia perdere, penserò a qualcosa.

 
Aleksey Mavrin:

Tuttavia, penso che questo approccio sia sub-ottimale. Se il prezzo sta volando, ci dovrebbe essere uno slittamento positivo. Se aspettate il tempo - è un gioco di roulette - allora a cosa serve la strategia, il vostro profitto potrebbe già essere inferiore alle 2 sterline date.

È più ragionevole misurare la velocità del cambiamento di prezzo, e se è alto verso il profitto - aspettare, quando è andato giù - per coprire.

non riusciamo a sistemare una semplice scivolata qui e tu parli di speed))))
 
Nargiz Ravanova:
non riusciamo a sistemare una semplice scivolata qui e tu parli di speed))))

Se ti poni degli obiettivi elevati, l'Onnipotente ti aiuterà a raggiungerli! ;)

 
Nargiz Ravanova:
non riusciamo a sistemare una semplice scivolata qui e tu parli di speed))))

Beh, per essere più precisi, sembra che non si possa. E sul DORMIRE. Volete congelare l'intero Expert Advisor per qualche tempo? O solo una certa funzione, dopo che è stata elaborata. In ogni caso, anche per l'interruzione del lavoro di Expert Advisor, è meglio usare il flag per i ritardi lunghi, e quando si controlla, se non c'è il permesso, basta uscire a OnTick/OnTimer. Per i ritardi brevi, sì, potete usareSLEEP.
A proposito,SLEEP non funziona negli indicatori.

La funzione Sleep() non può essere chiamata dagli indicatori personalizzati, perché gli indicatori sono eseguiti nel thread dell'interfaccia e non devono rallentarlo.

Quindi, capite l'uso delle bandiere, ne avrete bisogno in futuro.