double v1[1000]; double v2[1000]; double v3[1000];<------ leave out the '1000' initialization for indicator buffers, as they don't require
Bene, l'ho fatto all'inizio ma poi non ho potuto stampare i valori del buffer che volevo fare
Beh, aspetta, lascia che lo ripeta:
Se non dichiaro il numero di elementi nel buffer, allora l'indicatore funzionerà come con v1[i]=High[i]
Ma Print (v1[i]); non uscirà perché da quello che posso dire non c'è modo di stampare valori di array non dichiarati se il numero di elementi non è stato dichiarato, quindi stamperà sempre 0
Quindi se non lo dichiaro globalmente, allora l'indicatore funziona, tuttavia il if(faster>slower) fa ancora scomparire l'indicatore, E non posso nemmeno stampare i valori.
Se lo dichiaro e reinizializzo nuovamente con v1[i]=High[i] allora posso stampare, tuttavia qualsiasi aggiunta come && faster > slower rimuove nuovamente l'indicatore.
Non capisco completamente perché.
Grazie
Ho preso il tuo codice, ho tolto i valori dalle dichiarazioni del buffer e funziona bene.
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[4]= 1.5913 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[8]= 1.5962 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[11]= 1.5948 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[15]= 1.5992 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[18]= 1.5996 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[20]= 1.5919 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[27]= 1.5954 if
Ho preso il tuo codice, ho tolto i valori dalle dichiarazioni del buffer e funziona bene.
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[4]= 1.5913 if <----High
------> in questo momento Fractals inconsistente High è inferiore al prev Low <---------
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[11]= 1.5948 if<----High
------> in questo momento Frattali incoerente High è inferiore al prev Low <---------
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[15]= 1.5992 if<----Low
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[18]= 1.5996 if<----High
------> in questo momento si alternano frattali coerenti <---------
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[20]= 1.5919 if <----Low
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[27]= 1.5954 if <----High
Interessante, grazie per il risultato Agent86V2. I frattali sono davvero uno di quei modi intriganti ma redditizi di fare trading.
Ho preso il tuo codice, ho tolto i valori dalle dichiarazioni del buffer e funziona bene.
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[4]= 1.5913 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[8]= 1.5962 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[11]= 1.5948 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[15]= 1.5992 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[18]= 1.5996 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[20]= 1.5919 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[27]= 1.5954 if
Mi dispiace, ma non riesco a capire. Pensavo di averlo fatto, ma sembra che mi manchi ancora qualcosa.
int start() { double test[]; test[39] = 45.6; Print("test[39]= ",test[39] ); return(0); }Mi avete istruito a dichiarare come sopra:
E hai citato questo argomento:
"Quando si dichiara un array, il tipo di dati, il nome dell'array e il numero di elementi di ogni dimensione devono essere specificati:"
Quindi da un lato non posso stampare l'array come in questo script senza dichiarare prima double test[40]; come mi hai detto, ma ora mi sembra di poter stampare anche senza dichiarazione.Quindi sembra che io possa stampare i valori nel buffer indipendentemente dalla dichiarazione.
Tuttavia, non posso aggiungere condizioni aggiuntive che normalmente produrrebbero il risultato desiderato come if(faster > slower) o && faster > slower
Può essere EMA qualsiasi cosa voglio solo capire perché non funziona.
Fa scomparire i massimi dell'indicatore e l'output di stampa v1 smette di stampare. Mi aspettavo che cadesse in linea con la condizione e stampasse l'output.
Ho provato ad aggiungere ulteriori blocchi di codice per questo anche con gli stessi risultati.
Grazie
Ho anche scritto questo . . .
I buffer dell'indicatore sono Array speciali . . . non confondere Array e Buffer, sono simili ma diversi.
Nel codice originale v1[] e v2[] sono buffer, nel tuo ultimo codice sono Array, quando dichiari un Array devi dargli una dimensione, per esempio, v1[50] ha 50 elementi da v1[0] a v1[49]. Il Buffer si ridimensiona automaticamente quando ci sono più elementi necessari e i valori si spostano automaticamente nel Buffer. Considerate la barra attualmente in formazione, la barra 0, quando questa barra si completa un valore dell'indicatore associato a quella barra deve spostarsi all'indice 1 . . . questo viene fatto automaticamente con i Buffer . . se volete fare qualcosa di simile con gli Array potete farlo, ma dovete codificarlo voi stessi.
Tuttavia, non posso aggiungere condizioni aggiuntive che normalmente produrrebbero il risultato desiderato come if(faster > slower) o && faster > slower
Può essere EMA qualsiasi cosa voglio solo capire perché non funziona.
Fa scomparire i massimi dell'indicatore e l'output di stampa v1 smette di stampare. Mi aspettavo che cadesse in linea con la condizione e stampasse l'output.
Ho provato ad aggiungere ulteriori blocchi di codice per questo anche con gli stessi risultati.
Grazie
Ho anche scritto questo . . .
I buffer dell'indicatore sono Array speciali . . . non confondere Array e Buffer, sono simili ma diversi.
Nel codice originale v1[] e v2[] sono buffer, nel tuo ultimo codice sono Array, quando dichiari un Array devi dargli una dimensione, per esempio, v1[50] ha 50 elementi da v1[0] a v1[49]. Il Buffer si ridimensiona automaticamente quando ci sono più elementi necessari e i valori si spostano automaticamente nel Buffer. Considerate la barra che si sta formando, la barra 0, quando questa barra si completa un valore dell'indicatore associato a quella barra deve spostarsi all'indice 1 . . . questo viene fatto automaticamente con i Buffer . . se volete fare qualcosa di simile con gli Array potete, ma dovete codificarlo voi stessi.
Ho solo creato un ciclo secondario perché non ero in grado di stampare all'interno del primo ciclo indicatore, ma ora sta stampando
In ogni caso non voglio rimaneggiare questo, penso di averlo capito.
Quindi il codice che non funzionerà sono alcuni esempi mostrati qui:
//+------------------------------------------------------------------+ //| //+------------------------------------------------------------------+ #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 Red #property indicator_color2 Blue #property indicator_color3 White //---- buffers double v1[]; double v2[]; double v3[]; double val1; double val2; double val3; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { //---- IndicatorBuffers(3); SetIndexArrow(0, 111); SetIndexStyle(0,DRAW_ARROW,STYLE_DOT,1,Blue); SetIndexBuffer(0, v1); SetIndexLabel(0,"Resistance"); SetIndexArrow(1, 111); SetIndexStyle(1,DRAW_ARROW,STYLE_DOT,1,Red); SetIndexBuffer(1, v2); SetIndexLabel(1,"Support"); SetIndexArrow(2, 111); SetIndexStyle(2,DRAW_ARROW,STYLE_DOT,1,White); SetIndexBuffer(2, v3); SetIndexLabel(2,"High A"); //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1), //MODE_MAIN slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); //MODE_SIGNAL int i=Bars; //---- for(i=Bars; i>=0; i--) { val1=iFractals(NULL, 0, MODE_UPPER,i); if (val1 > 0 && faster > slower) // I think I need to add some more comparisons for the Low[i] also // the comparison works but shows indicator when faster < slower too. // adding additional code blocks instead of above and including the part below and inserting this instead // if(faster>slower) // { // v1[i]=High[i]; // } // causes indicator to disappear { v1[i]=High[i]; Print ("v1[", i, "]= ", v1[i], " if"); } else { //v1[i]=v1[i+1]; //Print ("v1[", i, "]= ", v1[i], " else"); } val2=iFractals(NULL, 0, MODE_LOWER,i); if (val2 > 0) { v2[i]=Low[i]; Print ("v2[", i, "]= ", v2[i], " if"); } else { //v2[i]=v2[i+1]; //Print ("v2[", i, "]= ", v2[i], " else"); } } //---- return(0); } //+------------------------------------------------------------------+
Grazie
Quindi il codice che non funzionerà sono alcuni esempi mostrati qui:
Grazie
Ok, posso dirti qual è il tuo problema o posso darti degli indizi. . . . indizi prima, se vuoi che te lo dica basta dirlo e te lo dirò. .
All'interno del Loop, for(i=Bars; i>=0; i--) . . quali sono i valori per faster e slower?
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Ciao a tutti,
Stavo imparando alcuni argomenti generali sugli array da un indicatore di base del codice che ha iFractals con un grande aiuto dai guru nei forum.
Quindi, in ogni caso
Non sono riuscito ad aggiungere operatori condizionali o operazioni logiche per aggiungere la funzione di addizione all'indicatore
Ho provato a inserire if(faster > slower) in varie aree del codice solo per giocare con l'idea. Normalmente queste idee funzionerebbero in un EA ma non in un indicatore
IE if(v1 > 0 && faster > slower)
ma questo fa scomparire l'indicatore.
Molte altre combinazioni che ho pensato dovrebbero produrre l'indicatore desiderato if(altre condizioni) ecc e così via.
Tutte non producono alcun output di dichiarazione di stampa.
Quale punto mi manca qui.
Si prega di consigliare
Grazie