[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 662

 
drknn:


Corretto, perché il primo parametro restituisce un numero e il secondo parametro è un valore intero entro limiti accettabili. L'intera questione è cosa esattamente andrà nella variabile. Provate a stamparlo così com'è e provate questa costruzione:

È interessante... Fatto così:

int Trend_BBOsMA (string sy, int tf)
{
   if (sy=="" || sy=="0") sy=Symbol();
double
   BB    =iCustom(sy,tf,"BB_MA",13,13,0,1),
   OsMA  =iOsMA  (sy,tf,9,21,5,PRICE_CLOSE,1),
   AC1   =NormalizeDouble(iAC(sy,tf,1),8),
   AC2   =NormalizeDouble(iAC(sy,tf,2),8),
   AC3   =NormalizeDouble(iAC(sy,tf,3),8);
   
   Comment("\n","AC1 = ",AC1," AC2=",AC2);
   string str1=AC1;
   Print("str1 = ",str1);
   string str2=AC2;
   Print("str2 = ",str2);
   
   if (BB>0 && OsMA>0 && AC1>AC2) return(1);
   if (BB<0 && OsMA<0 && AC1<AC2) return(-1);
   else return(0);
}
Il commento visualizza

AS1 = 0,001 AS2 = 0,001,

Nella finestra dei dati, AC1 = 0,001008, AC2 = 0,001020,

e nel registro dice (gli ultimi due valori):

0.00100029
0.00100771

 
IgorM:

Non riesco a capire come trovare gli estremi di una funzione

Ho un array di dati che memorizza valori:

Come trovare le fratture - estremi utilizzando un array di dati di 250 elementi e memorizzare solo i numeri degli elementi in cui si trovano questi estremi


Ragazzi, è un po' complicato :)
Si potrebbe abbozzare un metodo semplice:

//+------------------------------------------------------------------+
void searchExtremums(double base[], double &find[]){
   int step = 1;
   for(int loop = 0; loop < ArraySize(base)-2; loop++){
      if((base[loop] > base[loop+1] && base[loop+1] < base[loop+2]) || (base[loop] < base[loop+1] && base[loop+1] > base[loop+2])){
         ArrayResize(find, step);
         find[step - 1] = base[loop+1];
         step++;
      }
   }   
}
//+------------------------------------------------------------------+

Si passa l'array in cui si vogliono trovare gli estremi (base) e l'array in cui scriverli (find), una chiamata di esempio per l'array Vladimir:

double res[];
searchExtremum(my_array, res);

E vi mostriamo il risultato:

for(int s = 0; s < ArraySize(res); s++)Alert(res[s])
Sembra più facile così :)
 
ToLik_SRGV:


Sembra essere più semplice :)


OK, proverò a controllare oggi, potrebbe essere più semplice, ma non riesco a trovare la combinazione giusta nella mia testa

void searchExtremums(double base[], double & find[]){

Ora ho bisogno di controllare funzioni come queste

 
IgorM:

OK, proverò a controllare oggi, potrebbe essere più semplice, ma non riesco a trovare la combinazione giusta nella mia testa

void searchExtremums(double base[], double & find[]){

ora ho bisogno di controllare tali funzioni

Igor, ho già scritto su questo in questo thread :)))

Quando si passa una variabile a una funzione, attraverso il suo parametro, la variabile viene passata per valore, questo significa che cambiare la variabile nella funzione stessa non causerà la sua sovrascrittura.
Prova a passarlo per riferimento, inserisci una "&" davanti al nome del parametro

void simple(string &s){
//                 ^
//       спец сим. & перед именем переменной задает передачу по ссылке, а не по значению
//
}
 
Mathemat:

Il post di Volfram è stato cancellato per essersi propagato in diversi thread.

Volfram, hai creato il tuo thread appositamente per questo scopo. Ti hanno già risposto; non è abbastanza?

P.S. Lascia che ti dica un segreto, Volfram: l'assenza di interesse evidente per la tua idea suggerisce implicitamente che l'idea non merita alcuna attenzione. Di conseguenza, nessuno era disposto ad implementarlo "a pagamento".

Hai cancellato l'opzione di notifica via e-mail...

Come si fa a sapere se qualcuno ha risposto o no senza? Quando lo riavrai?

 
artmedia70:

È interessante... Fatto così:

Il commento viene visualizzato allo stesso tempo

AS1 = 0,001 AS2 = 0,001,

Nella finestra di dati AC1 = 0,001008, AC2 = 0,001020,

e nel registro dice (gli ultimi due valori):

0.00100029
0.00100771


Questo probabilmente dipende dagli sviluppatori ;)
 
artmedia70:

È interessante... Ho fatto questo:

Il commento viene visualizzato allo stesso tempo

AS1 = 0,001 AS2 = 0,001,

Nella finestra di dati AC1 = 0,001008, AC2 = 0,001020,

e nel registro dice (gli ultimi due valori):

0.00100029
0.00100771

Ho provato anche io, tutto sembra a posto, nel commento:
AC = -0,0004, nella rivista -0,00035586
AC2 = -0,0007, riviste -0,00068589
 
ToLik_SRGV:
Ho provato anche io, tutto sembra a posto, nel commento:
AC = -0.0004, nel giornale -0.00035586
AC2 = -0.0007, nel giuranle -0.00068589

Comment() sembra arrotondare i valori internamente... E quanto è comodo a volte vederli proprio lì sullo schermo durante i test visivi... Tuttavia, non esattamente... :)

Sì, e, tra l'altro, qui su un forum sulla normalizzazione leggere così da un paio d'ore alle 7.30 del mattino ...
La normalizzazione dovrebbe essere fatta il più vicino possibile all'operazione di confronto... Pertanto, penso che dovrei cambiare alcune cose in alcune funzioni e codici... E poi il test mostrerà la differenza...

 
artmedia70:

Comment() sembra arrotondare i valori internamente... E quanto è comodo a volte vederli proprio lì sullo schermo durante i test visivi... Tuttavia, non esattamente... :)

Quando stavo scrivendo una funzione di gestione del lotto, ho dovuto fare una libreria dll in Delphi, perché il compito di cui avevo bisogno usando MQL4 era impossibile da risolvere...
 

Ciao, puoi per favore spiegare a me, che sono un super dummie in MQL4, qual è la cosa giusta da fare. Sto scrivendo il mio primo EA. Piazzo un ordine SellStop e dopo che questo è scattato, viene piazzato l'ordine BuyStop. Credo di dover usare OrdeCloseTime. Ho provato molte varianti ma l'EA vede l'ordine solo quando OrdeCloseTime==0. Dopo la chiusura di SellStop, SellStop viene riaperto. Vi sto fornendo il codice. In questa variante, SellStop e BuyStop sono aperti simultaneamente. Per favore, aiutatemi. Grazie in anticipo.

int I = 0;

int start()

{

se (I < 1)

{

ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,OP_SS,Slippage,SL,CP_SS);

se (biglietto>0)

{ Alert("OrderSend"," ",ticket); } else { Alert("!OrderSend","",GetLastError()); }

//--------------------------------------------------------------------------

se (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{ Alert("OrderSelect", ",ticket); } else { Alert("!OrderSelect"," ",GetLastError()); }

//--------------------------------------------------------------------------

OrderSend(Symbol(),OP_BUYSTOP,Lot,OP_BS,Slippage,SL,CP_BS);

}

I=1;

}

ritorno (0);

//--------------------------------------------------------------------------

Motivazione: