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

 
Alexander Antoshkin:

Cosa puoi...?

Calcolare quanti hobbit ci vogliono per cambiare una lampadina?

Mandarlo ai freelance? Scrivere "leggere lì"?

Come faccio a trovare la coordinata di chiusura della serie di ordini nella storia come nell'esempio (ho intenzione di disegnare una linea a questo punto)

Ho già posto questa domanda su 151 pagine di questo thread, ma non è stata trovata nessuna soluzione plausibile. https://www.mql5.com/ru/forum/160683/page151



Dovresti cercare una serie di ordini con la stessa barra di chiusura nella storia. Il tempo di questo bar sarà quello che state cercando.
 
Alexander Antoshkin:

Cosa puoi...?

Calcolare quanti hobbit ci vogliono per cambiare una lampadina?

Mandarlo ai freelance? Scrivere "leggere lì"?

Possiamo fare un sacco di cose:)

Il problema degli hobbit non ha una soluzione unica...

Nel caso non avessi capito, la mia risposta era tratta dallo stesso video cheVitalie Postolache ha citato.

Ma seriamente:

Come trovo la coordinata di un affare che chiude una serie di ordini nella storia come nell'esempio (ho intenzione di tracciare una linea a questo punto)

Ho già posto questa domanda su 151 pagine di questo thread, ma non è stata trovata alcuna soluzione. https://www.mql5.com/ru/forum/160683/page151

Non ho letto il ramo dal link. Ma sarebbe così:

Determinare il fatto della chiusura di diversi ordini (uno o diversi tipi) entro X punti (l'intervallo di X punti è necessario perché in realtà tutte le operazioni possono non chiudersi allo stesso prezzo), determinare il prezzo medio di chiusura e tracciare una linea da esso.

 
Artyom Trishkin:
Cerca nella cronologia una serie di ordini con la stessa barra di chiusura. Il tempo di questo bar sarà quello che state cercando.
Questo è lo stesso problema del mio metodo di soluzione: a seconda del ping e del numero di ordini, tutti i trade su una candela possono non chiudersi...
 
Alexey Kozitsyn:
Questo è lo stesso problema del mio metodo di soluzione: a seconda del ping e del numero di ordini, tutti i trade sulla stessa candela possono non chiudersi...
Per M1 sono d'accordo. Per altri è improbabile. A meno che un ordine di chiusura arrivi prima dell'apertura della candela. Ci saranno due serie di ordini. Prendi l'ultimo di due adiacenti.
 
Artyom Trishkin:
Per M1 sono d'accordo. Per altri è improbabile. Se solo prima dell'apertura di una candela è stato ricevuto un ordine di chiusura. Ci saranno due serie di ordini. Prendi l'ultimo di due adiacenti.

Qui sono stati dati pochi dati per decidere: diversi pacchetti possono essere chiusi sulla stessa candela (se si controlla su, diciamo, candele orarie o giornaliere).

 
Vitalie Postolache:


Voglio delle linee rosse parallele, ma voglio che si intersechino, e voglio che tre di esse siano verdi e il resto viola )))

Oh, sì, e quell'unica linea dritta a forma di gattino!

Il problema vi sembra sbagliato?

 
Alexey Kozitsyn:

Non ci sono abbastanza dati per decidere: diversi pacchetti possono essere chiusi sulla stessa candela (se si controlla, per esempio, su candele orarie o giornaliere).

In ogni caso più accurato è meglio è...

gli ordini vengono chiusi secondo la condizione di trailing stop senza perdita

cioè

if(b+s>0)
{
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
tip = OrderType();
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OTP = NormalizeDouble(OrderTakeProfit(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
SL=OSL;
if(tip==OP_BUY)
{
SL=NormalizeDouble(Bid-TrailingStop*Point,Digits);
se(SL>OSL && SL>NLb)
{
se(!OrderModify(OrderTicket(),OOP,SL,0,0,White)) Print("Error Order Modify ",GetLastError());
}
}
if(tip==OP_SELL )
{
SL=NormalizeDouble(Ask+TrailingStop*Point,Digits);
se((SL<OSL || OSL==0) && SL<NLs)
{
if(!OrderModify(OrderTicket(),OOP,SL,0,0,White)) Print("Error Order Modify ",GetLastError());
}

 
Alexey Kozitsyn:
Scrivete il vostro indicatore MA, che includerebbe un buffer aggiuntivo in cui i valori vengono inseriti quando si forma una nuova barra.

Vorrei discutere un algoritmo per risolvere il problema, anche per diversi metodi di mediamobile.

 
Alexey Kozitsyn:

Possiamo fare molte cose:)

Determinare il fatto di chiudere diversi ordini (dello stesso tipo o di tipo diverso) entro X punti (l'intervallo di X punti è necessario perché in realtà tutte le operazioni possono non chiudersi allo stesso prezzo), determinare il prezzo medio di chiusura e tracciare una linea da esso.

int TotalPos=-1;

void start()
{
  if(OrdersTotal()!=TotalPos) { // не мучаем каждый тик
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      History();
     }
  }}} TotalPos=OrdersTotal(); // запомним количество
//--
} 
 
 void History() {
  string Ticket=(string)OrderTicket();
  color col=Red;
  if(OrderType()==0)col=Blue;
  datetime a=OrderOpenTime();
  double b=OrderOpenPrice();
  datetime c=OrderCloseTime();
  double d=OrderClosePrice();
  double prSep=OrderProfit()+OrderCommission()+OrderSwap();
  double prAll=0;
  int    cn=0;
  string hTicket;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      datetime ct=OrderCloseTime();
      // 60 секунд разницы между закрытием первой и последней в сетке
      if(c<=ct+60 && c>=ct-60) {
        prAll+=OrderProfit()+OrderCommission()+OrderSwap();
        hTicket=(string)OrderTicket();
        cn++;
      }
   }}}
   ObjectCreate(Ticket+'Open',OBJ_ARROW,0,a,b);
   ObjectSet(Ticket+'Open',OBJPROP_COLOR,col);
   ObjectSet(Ticket+'Open',OBJPROP_ARROWCODE,1);
      
   ObjectCreate(Ticket+'Line',OBJ_TREND,0,a,b,c,d);
   ObjectSet(Ticket+'Line',OBJPROP_COLOR,col);
   ObjectSet(Ticket+'Line',OBJPROP_WIDTH,1);
   ObjectSet(Ticket+'Line',OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(Ticket+'Line',OBJPROP_RAY,0);
      
   ObjectCreate(Ticket+'Close',OBJ_ARROW,0,c,d);
   ObjectSet(Ticket+'Close',OBJPROP_COLOR,Green);
   ObjectSet(Ticket+'Close',OBJPROP_ARROWCODE,3);
  
   Ticket=cn>1?hTicket:Ticket;
   ObjectCreate(Ticket+'Profit',OBJ_TEXT,0,c,d);
   ObjectSet(Ticket+'Profit',OBJPROP_ANCHOR,0);
   ObjectSetText(Ticket+'Profit',DoubleToString(prAll,2),10,'Arial',White);
   ObjectSet(Ticket+'Profit',OBJPROP_PRICE1,d);
   ObjectSet(Ticket+'Profit',OBJPROP_TIME1,c+Period()*60*2);

questo dovrebbe essere aggiunto allo script ...

Tenendo conto del fatto che se una serie di ordini di vendita vengono chiusi

ObjectCreate(Ticket+'Debt B',OBJ_HLINE,0,0,d);
ObjectSet(Ticket+'Debt B',OBJPROP_COLOR,LimeGreen);
ObjectSet(Ticket+'Debt B',OBJPROP_WIDTH,1);

se una serie di ordini di acquisto sono chiusi

ObjectCreate(Ticket+'Debt M',OBJ_HLINE,0,0,d);
ObjectSet(Ticket+'Debt M',OBJPROP_COLOR,Red);
ObjectSet(Ticket+'Debt M',OBJPROP_WIDTH,1);

Puoi aiutare?
 
-Aleks-:

Vorrei discutere un algoritmo per affrontare il problema, anche per diversi metodi di mediamobile.

Dai un'occhiata al file MovingAverages.mqh nella cartella Include del terminale.