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

 
Craft:

Cosa fare allora? Ho provato for(i=0;i<=PeriodS;i++) - non ha aiutato.


Come vi è già stato detto

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

iMAOnArray viene eseguito fuori dal ciclo (come dovrebbe essere). Corrispondentemente, i+2 = PeriodoB + 2. Per ArrayResize(c1b,PeriodB);

E infatti... sostituite il vostro "i+" con 0,2,3.

 
SergNF:


Come già scritto a voi

iMAOnArray viene eseguito fuori dal ciclo (come dovrebbe essere). Corrispondentemente, i+2 = PeriodoB + 2. Per ArrayResize(c1b,PeriodB);

E infatti... Sostituite il vostro "i+" con 0,2,3.


Grazie, ho fatto tutto come hai detto, ma ora perché gli ordini non vengono effettuati?

Ho provato sia con che senza normalizzazione.

   double c1b[];
   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,1);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,3);
   
   double c1s[];
   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,1);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,3);

 //if (NormalizeDouble(c1s_1,4)>NormalizeDouble(c1s_2,4)&&NormalizeDouble(c1s_2,4)<NormalizeDouble(c1s_3,4))
 if (c1s_1>c1s_2&&c1s_2<c1s_3)
     {                                          // 
      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))
if (c1b_1<c1b_2&&c1b_2>c1b_3)
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
 
gordeef:

Scusa, non ho risposto subito, il mio notebook è morto completamente. Spero che il dente non mi faccia più male, è una cosa spaventosa. Confesso, stavo dando la colpa a Babon, funziona bene, ma l'indicatore di colpa NMAZZ, non ricordo dove l'ho scaricato, ma su un grafico funziona ancora, ma l'ho messo su tre grafici (5M, 30M, 4H) e tutti, 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 un'inversione, ma se al 30M, 1H e 4H la bacchetta cambia colore, se non è un'inversione, allora la correzione è certa e possiamo fare qualche profitto.
Sì... Il dente cariato fa miracoli... Ovunque tu vada con esso... :) Se ti piace un indicatore e vuoi lavorare con esso - o iCustom, o nel codice di Expert Advisor, credo. Ma riguardo al TP di tendenza - fai attenzione, potresti comprarlo alla fine del movimento, cioè prima dell'inversione. Allora l'alce resterà appeso in aria (come me ieri con un dente cariato... :))). Sto lavorando alla definizione dell'esaurimento del trend in questo momento, spero di poter condividere i miei risultati.
 
Craft:


Grazie, ho fatto tutto come hai detto, ma ora perché gli ordini non vengono effettuati?

Provato sia con che senza normalizzazione.


Bene, allora solo un "unpriming" dopo entrambi gli if per vedere se l'errore è in questo blocco o no (inclusi Opn_B e Cls_S) Una linea e saprete tutto.

Non so, forse li riassegni (Opn_B e Cls_S) dopo o usi variabili completamente diverse all'apertura.

 
artmedia70:
Sì... Un dente cariato può fare miracoli... Ovunque tu vada con esso... :)

Non hai provato il trattamento. Dicono che funziona.
 
Vinin:

Ha provato il trattamento? Dicono che aiuta.
Oh, sì! Si vive e si impara... ;) Solo di notte non riusciamo a trovare nessun dentista a Zakolyuchinsk... Ho dovuto usare rimedi popolari...
 

Ragazzi, capisco che i miracoli non accadono, ma non posso vincere... Sto già guardando sotto il tavolo per vedere se Hottabych è seduto lì... :)

Ho provato a visualizzare alcuni dati EA nella finestra dell'indicatore e ho deciso di visualizzare le tendenze nella stessa finestra. Calcolo le tendenze con la mia funzione, che restituisce i valori int -1, 0 e +1. Di conseguenza, la tendenza al ribasso = 1, piatta = 0, tendenza al rialzo = 1. Ho notato che le frecce appaiono come vogliono, ma non nella direzione delle tendenze su diversi TF. Così, ho commentato a lungo le frecce e le ho sostituite con l'output del valore restituito dalla funzione trend. In due punti del codice, ho messo l'output dello stato restituito da questa funzione. Restituisce correttamente il suo stato; nell'angolo superiore sinistro del grafico i valori della funzione sono visualizzati direttamente dopo la chiamata di questa funzione. In basso, nella finestra dell'indicatore vengono visualizzati anche i valori della funzione. Numericamente è corretto, ma il quarto valore della funzione, che per definizione restituisce solo tre numeri, è preso da qualche parte... Così a questo quarto valore, la finestra dell'indicatore mostra il messaggio "Fuck you"... Beh, l'ho già scritto io stesso per rabbia... :)

Mi aiuti a capire qual è il problema? Non voglio credere in Hassan Obdurahman ibn Hottab... :):)

   ObjectCreate("trM15",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trM15",OBJPROP_XDISTANCE,x*10);
   ObjectSet("trM15",OBJPROP_YDISTANCE,y*10);
   
   ObjectCreate("ArrowM15",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ArrowM15",OBJPROP_XDISTANCE,x*17);
   ObjectSet("ArrowM15",OBJPROP_YDISTANCE,y*10);
   
   if (trM15==1)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",Lime);
//         ObjectSetText("ArrowM15",CharToStr(241),10,"Wingdings",Lime);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",Lime);
      }
   if (trM15==-1)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",OrangeRed);
//         ObjectSetText("ArrowM15",CharToStr(242),10,"Wingdings",OrangeRed);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",OrangeRed);
      }
   if (trM15==0)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",OrangeRed);
//         ObjectSetText("ArrowM15",CharToStr(240),10,"Wingdings",OrangeRed);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",OrangeRed);
      }
   else
      {
         ObjectSetText("trM15","Хрен вам",9,"Tahoma",LightGray);
//         ObjectSetText("ArrowM15",CharToStr(240),10,"Wingdings",LightGray);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",LightGray);
      }

Qui ho già provato a controllare tutti e quattro gli stati, non solo -1, 1 e else...

E questo è quello che mi sembra - altro

trM15 è una variabile a cui viene assegnato un valore restituito dalla funzione di tendenza

Nell'immagine potete vedere che i valori vengono restituiti correttamente, ma viene stampata la "scritta divertente", che è solo se else

La mia testa è già in fibrillazione...

 
artmedia70:

Ragazzi, capisco che i miracoli non accadono, ma non posso vincere... Sto già guardando sotto il tavolo per vedere se Hottabych è seduto lì... :)

Ho provato a visualizzare alcuni dati EA nella finestra dell'indicatore e ho deciso di visualizzare le tendenze nella stessa finestra. Calcolo le tendenze con la mia funzione, che restituisce i valori int -1, 0 e +1. Di conseguenza, la tendenza al ribasso = 1, piatta = 0, tendenza al rialzo = 1. Ho notato che le frecce appaiono come vogliono, ma non nella direzione delle tendenze su diversi TF. Così, ho commentato le frecce per un lungo periodo e le ho sostituite con l'output del valore restituito dalla funzione trend. In due punti del codice, ho messo l'output dello stato restituito da questa funzione. Restituisce correttamente il suo stato; nell'angolo superiore sinistro del grafico i valori della funzione sono visualizzati direttamente dopo la chiamata di questa funzione. In basso, nella finestra dell'indicatore vengono visualizzati anche i valori della funzione. Numericamente è corretto, ma il quarto valore della funzione, che per definizione restituisce solo tre numeri, è preso da qualche parte... Così a questo quarto valore, la finestra dell'indicatore mostra il messaggio "Fuck you"... Beh, l'ho già scritto io stesso per rabbia... :)

Mi aiuti a capire qual è il problema? Non voglio credere in Hasan Obdurahman ibn Hottab... :):)

Qui ho già provato a controllare tutti e quattro gli stati, non solo -1, 1 e else...

E questo è quello che mi sembra - altro

trM15 è una variabile a cui viene assegnato un valore restituito dalla funzione di tendenza

Nell'immagine si può vedere che i valori vengono restituiti correttamente, mentre la "scritta divertente" viene visualizzata che solo se else

La mia testa è già in fibrillazione...



Proprio così.

ObjectCreate("trM15",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trM15",OBJPROP_XDISTANCE,x*10);
   ObjectSet("trM15",OBJPROP_YDISTANCE,y*10);
   
   ObjectCreate("ArrowM15",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ArrowM15",OBJPROP_XDISTANCE,x*17);
   ObjectSet("ArrowM15",OBJPROP_YDISTANCE,y*10);
   
   if (trM15==1)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",Lime);
//         ObjectSetText("ArrowM15",CharToStr(241),10,"Wingdings",Lime);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",Lime);
      }
   else if (trM15==-1)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",OrangeRed);
//         ObjectSetText("ArrowM15",CharToStr(242),10,"Wingdings",OrangeRed);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",OrangeRed);
      }
   else if (trM15==0)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",OrangeRed);
//         ObjectSetText("ArrowM15",CharToStr(240),10,"Wingdings",OrangeRed);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",OrangeRed);
      }
   else
      {
         ObjectSetText("trM15","Хрен вам",9,"Tahoma",LightGray);
//         ObjectSetText("ArrowM15",CharToStr(240),10,"Wingdings",LightGray);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",LightGray);
      }

Puoi provare questa variante

 
Vinin:


Proprio così.

Potresti provare questo

OK. Grazie, Victor. Finora funziona correttamente. Finora, perché non l'ho seguito per molto tempo, ma non ho mai avuto un output Trend Up prima. Lo è ora:


Sapevo che c'era sempre un mago-stregone più potente per un aspirante stregone... :)

Naturalmente, è tutto uno scherzo, ma... Victor, non voglio solo copiare la soluzione giusta, ma scoprire e capire dove sta il problema, qual è la ragione del comportamento del codice così incomprensibile?

 
artmedia70:
Sì... Un dente cariato può fare miracoli... Ovunque tu vada con esso... :) Se ti piace un indicatore e vuoi lavorare con esso - o iCustom o codice EA, credo. Ma riguardo al TP di tendenza - fai attenzione, potresti comprarlo alla fine del movimento, cioè prima dell'inversione. Allora l'alce resterà appeso in aria (come me ieri con un dente cariato... :))). Sto lavorando alla definizione dell'esaurimento del trend in questo momento, spero di poter condividere i miei risultati.

Sì, sto cercando di essere cauto con le inversioni e le correzioni. Ma per quanto riguarda l'esaurimento del trend sono anche interessato, ho girovagato per il forum e ho guardato il CodeBase ma non ho incontrato nessun indice su questo tema. Sarà interessante leggere i vostri risultati. Voglio chiedere un'altra cosa, mi hanno mandato un EA che controlla le mie perdite e i miei profitti, come nella foto dovrebbe funzionare, ma la domanda è, ha un profitto di 15 punti e vedo che il prezzo può andare oltre.