Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 684

 
ModRed:
C'è l'indicatore MA. E c'è un indicatore HMA simile ad esso. Come può essere inserito in un EA? Copiare completamente il codice? O c'è una variante più corta?

studio iCustom
 
Mitruha:

L'idea è molto buona, ma avete visto qui dei programmi che trasferiscono o copiano le operazioni su altri terminali, sarebbe possibile farlo bene senza i servizi di un broker?

Un tale programma?
 
ModRed:
C'è l'indicatore MA. E c'è un indicatore HMA simile ad esso. Come può essere inserito in un EA? Copiare completamente il codice? O c'è una variante più corta?
Come fare.
 

Ciao a tutti, ho un problema, ho "perso" questo indicatore, è una sorta di CCI lisciato, che poteva cambiare due parametri, periodo e un moltiplicatore, nella versione originale di questi parametri erano rispettivamente 20 e 2. E, se ricordo bene, il nome di questo indicatore aveva due parole e la seconda parola iniziava con la lettera inglese "C", forse qualcuno sa, aiutatemi!

 
alsu:

Ma in generale, ovviamente, potete sovraccaricare il costruttore e usarlo al posto di Init(), dopo tutto, è la stessa funzione. Su quale variante ripiegare è una questione personale di ognuno, nelle questioni di gusto, come sappiamo, non ci sono consiglieri)


E se l'inizializzazione fallisce, in caso di utilizzo del metodo, per esempio, Init(), può essere descritto come la restituzione di un valore del tipo corrispondente e la restituzione di un valore appropriato in caso di errore. Il codice chiamante saprà così che l'inizializzazione è fallita, e che quindi l'oggetto non può essere utilizzato. Come fa il codice chiamante a sapere dell'inizializzazione fallita quando viene usato il costruttore?

 

Aiuto ragazzi, come fare in modo che il gufo non apra un ordine sulla stessa barra in cui la posizione è stata aperta da un segnale, e aspettare una nuova barra e controllare di nuovo il segnale, l'ho fatto - barra per barra

ha aggiunto questo

datetime   BARflag  = 0; 
и -
int start()
{
 datetime now = Time[0];
  if(BARflag >= now) return(0);
   BARflag = now;
 
bergkamp.:

Aiuto ragazzi, come fare in modo che il gufo non apra un ordine sulla stessa barra in cui la posizione è stata aperta da un segnale, e aspettare una nuova barra e controllare di nuovo il segnale, l'ho fatto - barra per barra

ha aggiunto questo

и -

Qualcosa del genere:

   //---
   if(iBarShift(OrderSymbol(),Period(),OrderOpenTime())==0) {
      // выбранный ордер открыт на нулевом (текущем) баре, значит ещё рано открывать следующий
      }
   else {
      // выбранный ордер открыт не на нулевом (текущем) баре, значит можно открывать следующий
      }
 
artmedia70:

Qualcosa del genere:

Grazie, sarebbe facile decifrare le linee prescritte per l'esempio ?--// l'ordine selezionato è aperto alla barra zero (attuale), quindi è troppo presto per aprire la prossima

//l' ordine selezionato non è aperto sulla barra zero (corrente), il che significa che va bene aprire la prossima ......???

 
bergkamp.:

Grazie, sarebbe possibile decifrare le linee prescritte per l'esempio ?--// l'ordine selezionato è aperto sulla barra zero (attuale), quindi è troppo presto per aprire la prossima

//l'ordine selezionato non è aperto sulla barra zero (corrente), il che significa che è giusto aprire la prossima ......???

Questa è la funzione che restituisce la barra di apertura dell'ultima posizione aperta:

//+------------------------------------------------------------------+
   int BarOpenLastPos(string sy, int timeframe, int op, int mn) {
      datetime t=0;
      int      i, j=-1, k=OrdersTotal()-1;
      for (i=k; i>=0; i--) {
         if (OrderSelect(i, SELECT_BY_POS)) {
            if (OrderSymbol()!=sy)        continue;
            if (OrderType()!=op)          continue;
            if (OrderMagicNumber()!=mn)   continue;
            if (t<OrderOpenTime()) {
               t=OrderOpenTime();
               j=i;
               }
            }
         }
      if (OrderSelect(j, SELECT_BY_POS)) return(iBarShift(sy,timeframe,OrderOpenTime()));
      return(-1);
   }
//+------------------------------------------------------------------+

Se la funzione restituisce -1, allora non c'è nessuna posizione aperta i cui dati sono stati passati alla funzione.

Esempio di utilizzo:

if(BarOpenLastPos(Symbol(), Period(), OP_BUY, magic)>0) {
   // бар открытия последней открытой позиции Buy на текущем символе, текущем таймфрейме, 
   // с магиком magic больше нулевого --> можно открывать следующую позицию
   }

o

if(BarOpenLastPos(USDCAD, PERIOD_M15, OP_SELL, magic0)<0) {
   // нет позиций Sell на USDCAD с магиком magic0 --> можно открывать позицию на USDCAD
   }
 

Gli intenditori chiedono il vostro aiuto...

algoritmo test01

//+------------------------------------------------------------------+
//test                                                                    
//+------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1  clrGold
#property indicator_color2  clrBlue

#property indicator_level1    0

//--- indicator buffers
double Buf0[];
double Buf1[];

double t1[];
double t2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(4);
   SetIndexBuffer(0,Buf0); SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(1,Buf1); SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(2,t1); 
   SetIndexBuffer(3,t2); 
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
   
   {
   int i,counted_bars;
   counted_bars=IndicatorCounted();
   i=Bars-counted_bars-1;
   
int sr=24,n;
double sum,sum2;
double m1,m2;

  
   while(i>=0)
   {
   sum=0;
   sum2=0;
   
   for(n=i; n<=i+sr-1; n++) 
   {
   if(Open[i]>Open[i+1]) m1=sum=sum+Close[i]-Close[n];
   if(Open[i]<Open[i+1]) m2=sum=sum+Close[i]-Close[n];
   
   if(Open[i]>Open[i+1]) t1[i]=sum2=sum2+Close[i]-Close[n];
   if(Open[i]<Open[i+1]) t2[i]=sum2=sum2+Close[i]-Close[n];
   }
     
   Buf0[i]=(m1+m2)/sr;
   Buf1[i]=(t1[i]+t2[i])/sr;
   
   i--;
   }
return(0);
  }
//+------------------------------------------------------------------+

Perché in Buf1 ci sono valori diversi da Buf0? logicamente dovrebbero essere gli stessi?

perché è possibile usare una variabile per un valore, ma un buffer (array di dati)--> (un array è richiesto per ulteriori calcoli) per un altro valore? come posso usare un array e le variabili m1 e m2?

File:
test01.mq4  2 kb