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

 
Vladimir Pastushak:

Grazie. Ho problemi a chiamare un metodo di una classe madre.

Per quanto mi ricordo è fatto tramite il metodo parent ::

Il metodo stesso ha un corpo nel genitore?

 
Artyom Trishkin:

Il metodo stesso nel genitore ha un corpo?

Sì, è così.

Ecco il codice, cosa sto sbagliando?

//+------------------------------------------------------------------+

class A

  {

public:

   virtual int Test_A()

     {

      return 100;

     }

  };

//+------------------------------------------------------------------+

class B :public A

  {

public:

   virtual int Test_A()

     {

      return 200;

     }

  };


B b;

//+------------------------------------------------------------------+

void OnStart()

  {

   Comment (A::b.Test_A());

  }

//+------------------------------------------------------------------+


 
C'è un indicatore zigzag che mostra il valore del prezzo di un estremo, ho bisogno di disegnareuna linea di tendenza dall'estremo al futuro (il giorno successivo), come posso farlo senza conoscere le coordinate del secondo punto e il valore temporale del primo punto?
 
Vladimir Pastushak:

Ecco il codice, cosa sto sbagliando?

no, non funzionerà in questo modo

scrivendo il corpo di Test() nella classe B, avete chiuso la vecchia funzione Test() e ora quando dichiarate un'istanza della classe e chiamate il metodo Test(), verrà sempre eseguito B::Test(), ma se non aveste scritto B::Test(), verrebbe sempre eseguito A::Test()

Ecco un esempio. sperimentatelo

//+------------------------------------------------------------------+
class A
  {
public:
   virtual int Test_A()  { Print(__FUNCSIG__); return 100;  }
  };

//+------------------------------------------------------------------+
class B :public A
  {
public:
   virtual int Test_A()  { Print(__FUNCSIG__," = ", A::Test_A()); return 200;   }
  };

B b;

//+------------------------------------------------------------------+

void OnStart()

  {
   Print (__FUNCSIG__," = ",b.Test_A());
  }
//+-------------------------------------------------------------
 
Ciao. Come si fa un calcolo ordinale? In modo che al posto di SELL prima ci sia 1, poi 2 e così via... ...finché non si aggiorna quando non ci sono ordini. Alcuni suggerimenti!
        if((fMarketOrderss(OP_SELL)>=1)) { 
       if( ((Bid-Opens)/ma+Times/1440) > SELL ) {
if(OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0,NULL,321,0,1)>0){} }}
 
Hmm, strano, nessuno risponde.
 
Rustam Bikbulatov:
Hmm, strano, nessuno risponde.

Credo che nessuno capisca il tuo post :)


 

Ciao, come fare in modo che l'EA apra una posizione con un volume specificato di ordini singoli di entrambe le posizioni, ad es.

Il volume di un singolo ordine è di 1,35 lotti, il volume totale delle posizioni aperte è di 500 lotti. L'EA apre un ordine di acquisto di 1,35 lotti, e poi apre un ordine di vendita di 1,35 lotti,

e poi ripete fino a quando 500 lotti di acquisto e 500 lotti di vendita sono aperti, e poiché il numero di lotti non è un multiplo di 1,35, l'ultimo ordine deve essere inferiore a 1,35

 

Saluti.

Ho fatto una funzione che quando un ordine raggiunge i punti di profitto "bezubitok", modifica l'ordine spostandolo al livello di apertura dell'ordine. Sembra funzionare correttamente, ma durante i test (e su tutti i tick) ogni 10-20° volta invia l'errore 1 al log.

Nessun errore, ma il risultato è sconosciuto

void Bezubitok(){
   for (int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == magic){
            if(OrderType()==OP_BUY){
               if (OrderStopLoss()!=OrderOpenPrice() && Ask-OrderOpenPrice()>bezubitok*Point){
                  double sl1 = OrderOpenPrice();
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), sl1, OrderTakeProfit(), 0, Indigo)) {}
                  }
               }
            if(OrderType()==OP_SELL){
               if (OrderStopLoss()!=OrderOpenPrice() && OrderOpenPrice()-Bid>bezubitok*Point){
                  double sl1 = OrderOpenPrice();
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), sl1, OrderTakeProfit(), 0, DeepPink)) {}
                  }
               }
            }   
         }
      }
   }

Qual è la ragione di questo e come posso sconfiggerlo?

 
Andrey Sokolov:

Saluti.

Ho fatto una funzione che quando un ordine raggiunge i punti di profitto "bezubitok", modifica l'ordine spostandolo al livello di apertura dell'ordine. Sembra funzionare correttamente, ma durante i test (e su tutti i tick) ogni 10-20° tempo l'errore 1 viene scritto nel log.

Qual è la ragione di questo e come lo risolvo?

L'errore 1 non è un errore, ma il risultato è sconosciuto. Il punto è che stai cercando di modificare lo stop allo stesso prezzo a cui si trova già. Prima di modificarlo, confronta il prezzo dello stop con il prezzo al quale vuoi impostarlo. Se è già a quel prezzo, non c'è niente da modificare.

Motivazione: