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

 

Non riesco a capire cosa c'è di sbagliato negli array (la condizione è semplice - comprare/vendere dopo il prossimo picco del CCI lisciato):

La strategia si compila senza errori e non scrive nulla nel log all'avvio, ma non vengono piazzati ordini.

   double c1b[];
   ArrayResize(c1b,PeriodB);
   for(i=1;i<=PeriodB;i++)
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   double c1b_1=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i+2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i+3);
   
   double c1s[];
   ArrayResize(c1b,PeriodS);
   for(i=1;i<=PeriodS;i++)
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   double c1s_1=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i+2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i+3);


   if (c1s_1>c1s_2&&c1s_2<c1s_3)
     {                                          //
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (c1b_1<c1b_2&&c1b_2>c1b_3)
     {                                          //
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
 


doppio c1s[];
ArrayResize(c1b,PeriodS)

Dichiari una matrice e ne cambi un'altra.

 
Roger:


doppio c1s[];
ArrayResize(c1b,PeriodS)

Dichiari una matrice e ne cambi un'altra.


Grazie, cos'altro è sbagliato - non ha aiutato.
 

L'array inizia con un elemento zero, quindi l'espressione

for(i=1;i<=PeriodoS;i++)

salta lo zero e non scrive nulla all'ultimo.

più avanti, solo questa espressione sarà eseguita nel ciclo

c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);

il resto non ha senso, dopo il ciclo i è uguale al massimo e quindi tutti i valori saranno zero.

 
Craft:

cos'altro è sbagliato


confrontare i doppi senza normalizzazione non è corretto... Prova in questo modo:

   double c1b[];
   ArrayResize(c1b,PeriodB);
   for(i=1;i<=PeriodB;i++)
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   double c1b_1=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i+2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i+3);
   
   double c1s[];
   ArrayResize(c1b,PeriodS);
   for(i=1;i<=PeriodS;i++)
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   double c1s_1=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i+2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i+3);


   if (NormalizeDouble(c1s_1,4)>NormalizeDouble(c1s_2,4)&&NormalizeDouble(c1s_2,4)<NormalizeDouble(c1s_3,4))
     {                                          //
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (NormalizeDouble(c1b_1,4)<NormalizeDouble(c1b_2,4)&&NormalizeDouble(c1b_2,4)>NormalizeDouble(c1b_3,4))
     {                                          //
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

 
DDFedor:


confrontare i doppi senza normalizzazione non è corretto... Provate in questo modo:


Grazie per l'aiuto, fratelli, ancora non funziona.
 
Roger:

L'array inizia con un elemento zero, quindi l'espressione

for(i=1;i<=PeriodoS;i++)

salta lo zero e non scrive nulla all'ultimo.

più avanti, solo questa espressione sarà eseguita nel ciclo

c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);

il resto non ha senso, dopo il ciclo i è uguale al massimo e quindi tutti i valori saranno zero.


Cosa dovrei fare allora? Provato for(i=0;i<=PeriodS;i++) - non ha funzionato.
 
Craft:

Che cosa allora?

Mettete delle stampanti su ogni variabile ad ogni punto di codice e guardate nei log per vedere cosa succede ad ogni passo.
[Deleted]  

Ciao, posso chiederti una cosa da principiante? Quando scrivo symbol() nella funzione open sulla demo, ma quando lo cambio con un simbolo, per esempio EURUSD, ottengo l'errore 133.
{Alert("!");}else{Alert("?");} - Dà "!", cioè il trading è permesso... e contemporaneamente 133. Qual è il problema? Nessun EA apre un trade se indico un certo simbolo nella funzione di apertura... Ho provato di tutto.

Grazie in anticipo. Sono qui per non ingombrare il forum ))

[Deleted]  
artmedia70:
Chi dice che queste sono inversioni e non correzioni?

Scusa, non ho risposto subito, il mio notebook è morto completamente. Spero che il dente non faccia più male, è una cosa spaventosa. La mia confessione, do la colpa al Babon, funziona bene e la colpa è dell'indicatore NMAZZ, non ricordo dove l'ho scaricato, ma funziona ancora su un grafico, ma l'ho messo su tre grafici (5M, 30M, 4H) e questo è tutto, il computer si è bloccato completamente, o meglio il terminale. Ho iniziato a rimuovere gli indicatori dai grafici uno per uno e ho trovato questo bug. Non so cosa ci sia di sbagliato in questo indicatore, ma all'inizio funzionava bene. E per quanto riguarda l'inversione o la correzione, sì, hai ragione, è sempre inequivocabilmente un'inversione, ma se a 30M, 1H e 4H la bacchetta cambia colore, allora se non è un'inversione, allora la correzione è univoca e si può guadagnare qualche profitto.