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

 
Ok, se non lo fanno, aiutami a risolvere la questione stasera.
 
Per favore, ditemi se è possibile usare il valore del doppio, che è il risultato del calcolo, come un valore int sostitutivo per ulteriori calcoli.
Esempio:
   ATR_Din=iATR(NULL,PERIOD_M5,14,1);
   Din_Per210= MathRound(6000*ATR_Din+210);
   Din_Per5  = MathRound(6000*ATR_Din+5);
   
   MA210_DIN  =iMA(NULL,PERIOD_M5,Din_Per210,0,MODE_SMA,PRICE_CLOSE,1);
   MA5_DIN    =iMA(NULL,PERIOD_H1,Din_Per5,0,MODE_SMA,PRICE_CLOSE,1);
   
Qui le mie variabili selezionate sono di tipo double, ma in iMA il loro valore è usato dove è necessario un valore int (come periodo di MA).
La domanda è: questo uso è corretto o è necessario convertire i valori in tipo int?
 
Ciao a tutti, potreste per favore consigliarmi se sapete se esiste uno script che esegue un test esperto su ciascuno dei risultati dell'ottimizzazione e salva ogni risultato del test in un file separato (rapporto htm)?
 
Craft:
Non mi dispiace, c'è un esempio funzionante o un link?
Datemi il codice o datemi un compito e lo correggeremo.
 
artmedia70:
Per favore, ditemi se è possibile usare il valore del doppio, che è il risultato del calcolo, come un valore int sostitutivo per ulteriori calcoli.
Esempio:
Qui le mie variabili selezionate sono di tipo double, ma in iMA il loro valore è usato dove è necessario il valore int (come periodo di MA).
Quindi la mia domanda è: tale uso è corretto o è necessaria qualche conversione dei valori al tipo int?
La conversione viene fatta automaticamente, tagliando solo la parte frazionaria. L'unica limitazione che ho incontrato per questo uso è che il doppio non può essere messo nell'indice dell'array
 
alsu:
La conversione viene fatta automaticamente, tagliando solo la parte frazionaria. L'unica limitazione a questo uso che ho visto è che il doppio non può essere messo nell'indice dell'array
Grazie, questo è rassicurante... :)
Un'altra domanda:
   MA200_DIN =iMA(NULL,PERIOD_M5,Din_Per200,0,MODE_SMA,PRICE_CLOSE,1);
   MA200_UP  =MA200_DIN+20*pt;
   MA200_DN  =MA200_DIN-20*pt;
   
   MA5_DIN  =iMA(NULL,PERIOD_H1,Din_Per5,0,MODE_SMA,PRICE_CLOSE,1);
   MA5_UP   =MA5_DIN+20*pt;
   MA5_DN   =MA5_DIN-20*pt;
Costruzioni
MA200_UP=MA200_DIN+20*pt; 
MA200_DN=MA200_DIN-20*pt; и 
MA5_UP=MA5_DIN+20*pt; 
MA5_DN=MA5_DIN-20*pt;
non funzionano. Quando si visualizzano i loro valori nel grafico hanno tutti lo stesso valore, per esempio
1.4118 per MA200_DIN, MA200_UP, MA200_DN e
1,4106 per MA5_DIN, MA5_UP, MA5_DN.
Si scopre che le formule per il calcolo dei livelli +20 e -20 punti non funzionano.
Cosa sto facendo di sbagliato?
 
A cosa equivale pt? Provate a produrre con NormalizeDouble()
 
OK, grazie, ho capito... Ho impostato pt=Point; già dopo il calcolo dei valori...
Come disse Matroskin: Sei un pazzo... :)
 
alsu:
Dateci un codice o impostate un compito e noi lo correggeremo

In WelsLab, l'analogo del problema si presenta così:

MyATR = SMA.Series((((High-Low)/Low), PerB)[i-1] ;

se (BuyAtStop(i, (Open[i] + Open[i]*MyATR), "") ;

cioè quando una barra viene aperta, una posizione di Stop viene piazzata dove il prezzo Open [i] della barra corrente + trigger (lo stesso prezzo Open moltiplicato per MyATR calcolato per il periodo PerB sulle barre chiuse [i-1]) viene aperto una volta se il livello specificato viene raggiunto

Questo mostra quello che voglio ottenere su mql4 usando WellLab come esempio.

Ho studiato i materiali del sito e ho cercato di fare un'analogia.

        MyATR = ((High[0] - Low[0])/Low[0]);
	 BT = Open[0] + Open[0]*iMAOnArray(MyATR ,0,PerB,0,MODE_SMA,1);
        ST = Open[0] - Open[0]*iMAOnArray((MyATR ,0,PerS,0,MODE_SMA,1);

   if (Ask >=  BT)                       // Если разница между
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (Bid <= ST)                       // Если разница между
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

Risultato: gli ordini si stanno accumulando. Si prega di consigliare quale condizione dovrebbe essere aggiunta (o cambiata) per far sì che gli ordini siano eseguiti ad un livello specificato una volta.

 

Nota: il primo parametro della funzione iMAOnArray dovrebbe essere un array - e voi avete MyATR scalare. Per farlo bene, si dovrebbe:

1. dichiarare doppio MyATR[];

2. impostare la dimensione dell'array su ArrayResize(MyATR,PerB);

3. riempite l'array for(i=1;i<=PerB;i++) MyATR[i-1]=(High[i]-Low[i])/Low[i]; l'indice i inizia con 1 poiché abbiamo bisogno solo di barre chiuse

4. dopo questo potete leggere iMAOnArray(MyATR,0,PerB,0,0,MODE_SMA,0); qui l'ultimo parametro è 0 poiché lo shift ha1 è già stato preso in considerazione nel passo 3.


Controlla come funziona, forse l'errore è solo in questo

Motivazione: