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

 
novichok2018:

Sì, grazie, ho letto la pagina. Solo la mia conoscenza di MKL4 era sufficiente per notare che nel mio ciclo le posizioni vanno da zero all'ultimo, mentre nell'esempio viceversa, da ultimo a zero.Non so ancora dove inserirela pausa. Quando ho cambiato il ciclo per invertirlo, le posizioni smettono di chiudersi del tutto.

Quando si chiudono le posizioni, il ciclo deve essere invertito per evitare di saltare le posizioni. L'operatore break non è necessario in questo ciclo - è l'interruzione del ciclo e l'uscita dal suo corpo. Ciò di cui avete bisogno è continue - la transizione alla prossima iterazione del ciclo.

E solo voi sapete perché non si chiude e cosa avete fatto per questo.

 
Artyom Trishkin:

Quando si chiudono le posizioni, il ciclo deve essere invertito in modo che nessuna posizione venga saltata. Non avete bisogno dell'operatore break in questo ciclo - è un'interruzione e un'uscita dal corpo del ciclo. Ciò di cui avete bisogno è continue - la transizione alla prossima iterazione del ciclo.

Solo voi sapete perché non si può chiudere, e cosa avete fatto per questo.


Ho seguito esattamente le istruzioni. Ecco il codice corretto:

void ClosePoz()
  { int total=OrdersTotal();
  if(total>0)
   {
      for(int i=OrdersTotal()-1;i>=0;i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {double WPR0 = iWPR(NULL,PERIOD_M5,bars,0);
         if(OrderType()==OP_BUY && MathAbs(WPR0)>80)
           OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,clrNONE);                  
         }
         continue;
      }
    } 
  } 
  

Ora chiude entrambe le posizioni ma non ne chiude una ma aspetta la seconda. È una follia. Ho pensato che forse ho inserito la funzioneClosePoz() in un posto sbagliato.Il risultato è zero. Sto gridando aiuto. Non può essere che nessuno sia in grado di risolvere il problema.

 

come incassare il conto originale (100 dollari)?

 
novichok2018:

Ha fatto esattamente come da istruzioni. Ecco il codice corretto:

Ora chiude entrambe le posizioni, ma non ne chiude una, aspetta l'altra. Questa è una follia. Ho pensato che forse ho inserito la funzioneClosePoz() in un posto sbagliato.Il risultato è zero. Sto gridando aiuto. Non può essere che nessuno sia in grado di risolvere il problema.

Non lo so. L'ho disegnato sul mio ginocchio. Naturalmente non posso controllarlo - le tue condizioni non sono sufficienti, quindi dipende da te.

//+------------------------------------------------------------------+
void ClosePoz(const string symbol_name,const int magic_number,const double wpr_buy,const double wpr_sell)
  { 
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
        {
         ENUM_ORDER_TYPE type=OrderType();
         if(type>ORDER_TYPE_SELL)               continue;
         if(OrderMagicNumber()!=magic_number)   continue;
         if(OrderSymbol()!=symbol_name)         continue;
         int digits=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
         if(type==ORDER_TYPE_BUY)
           {
            double close_price=SymbolInfoDouble(OrderSymbol(),SYMBOL_BID);
            if(iWPR(NULL,PERIOD_M5,bars,0))>wpr_buy)
              {
               ResetLastError();
               if(!OrderClose(OrderTicket(),OrderLots(),close_price,slippage,clrNONE);
                  Print(__FUNCTION__" > Позиция Buy #",OrderTicket()," не закрыта. Ошибка: ",GetLastError());
              }
           }                
         else
           {
            double close_price=SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK);
            if(iWPR(NULL,PERIOD_M5,bars,0))<wpr_sell)
              {
               ResetLastError();
               if(!OrderClose(OrderTicket(),OrderLots(),close_price,slippage,clrNONE);
                  Print(__FUNCTION__" > Позиция Sell #",OrderTicket()," не закрыта. Ошибка: ",GetLastError());
              }
           }                
        }
     }
  } 
//+------------------------------------------------------------------+
E WPR all'interno della funzione per controllare - in qualche modo non è normale. WPR dovrebbe essere una delle condizioni di chiamata della funzione di chiusura
 
Non è possibile modificare il numero di lotti di un ordine in sospeso.
 
igrok333:
Ho capito che non è possibile modificare il numero di lotti in un ordine in sospeso.

Aprite solo uno in più, con il volume che vi serve.

 
Alekseu Fedotov:

Aprite solo un'altra con il volume che volete

Potrebbe essere più facile cancellare uno esistente e crearne uno nuovo. Dopo tutto, il volume richiesto non deve essere più grande di quello già collocato. Ed è più facile seguire un ordine.

 

Buon giorno ho una domanda, vi spiegherò come la capisco

Esiste un algoritmo scritto per gli Expert Advisors che comprano candele in basso e vendono candele in alto?

Come posso adattarlo in un EA?
 
iisvlg: Esiste un algoritmo scritto per gli EA che mette una candela di acquisto in basso e una candela di vendita in alto e come adattarlo in un EA?

Sarebbe fantastico!!!

 
iisvlg:

Buon giorno ho una domanda, vi spiegherò come la capisco

Esiste un algoritmo scritto per gli Expert Advisors che comprano candele in basso e vendono candele in alto?

E come si fa ad adattarlo in un EA?

Metti BUY LIMIT su Low e SELL LIMIT su High.

Circa gli algoritmi, scavare la base