[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.
 

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 ))

 
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.