[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 131
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
win_idx ha capito bene?
win_ind risulta essere corretto.
ObjectCreate("max",OBJ_HLINE,win_idx,0,top); disegna nella finestra corretta,
ObjectSet("max",OBJPROP_COLOR,Yellow); disegna nel colore corretto,
ObjectSet("max",OBJPROP_WIDTH,0); disegna la linea corretta,
ma non definisce il parametro superiore in
double top=WindowPriceMax(win_idx);
e topBuffer[] è vuoto.
Il codice
#proprietà indicator_separate_window
#proprietà indicator_buffers 3
#proprietà indicator_color1 Lime
#property indicator_color2 Red
//--- buffer
doppio ExtMapBuffer1[];
doppio ExtMapBuffer2[];
doppio topBuffer[];
bool initFinished=false; // aggiungere una variabile che ricordi lo stato di inizializzazione.
// false - l'inizializzazione non è ancora avvenuta.
// true - è stato inizializzato
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int init()
{
//---- indicatori
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(2,DRAW_NONE);
SetIndexBuffer(2,topBuffer);
IndicatoreCifre(5);
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di iterazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),
limite;
se(barre contate>0)
barre contate..;
limit=Bars-counted_bars;
//----
for(int i=0;i<limit;i++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
se(initFinished==false)
{
IndicatoreNomeCorto("MACD_max-min");
int win_idx=WindowFind("MACD_max-min");
// trova il numero della nostra sottofinestra dell'indicatore
se(win_idx<0)
{
// se il numero di sottofinestra è -1, c'è un errore
Stampa("Finestra non trovata");
ritorno(0);
}
double top=WindowPriceMax(win_idx);
/trova il valore massimo della scala verticale della sottofinestra specificata del grafico corrente
ObjectCreate("max",OBJ_HLINE,win_idx,0,top);
// disegna una linea orizzontale in una sottofinestra del nostro indicatore
ObjectSet("max",OBJPROP_COLOR,Yellow);
ObjectSet("max",OBJPROP_WIDTH,0);
WindowRedraw();
// ridisegna la finestra per vedere la linea
initFinished=true;
// il disegno è finito
}
topBuffer[i]=top;
}
//----
ritorno(0);
}
//+------------------------------------------------------------------+
win_ind risulta essere corretto.
ObjectCreate("max",OBJ_HLINE,win_idx,0,top); disegna nella finestra corretta,
ObjectSet("max",OBJPROP_COLOR,Yellow); disegna nel colore corretto,
ObjectSet("max",OBJPROP_WIDTH,0); disegna la linea corretta,
ma non definisce il parametro superiore in
double top=WindowPriceMax(win_idx);
e topBuffer[] è vuoto.
Codice
#proprietà indicator_separate_window
#proprietà indicator_buffers 3
#proprietà indicator_color1 Lime
#property indicator_color2 Red
//--- buffer
doppio ExtMapBuffer1[];
doppio ExtMapBuffer2[];
doppio topBuffer[];
bool initFinished=false; // aggiungere una variabile che ricordi lo stato di inizializzazione.
// false - l'inizializzazione non è ancora avvenuta.
// true - è stato inizializzato
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'indicatore personalizzato
//+------------------------------------------------------------------+
int init()
{
//---- indicatori
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(2,DRAW_NONE);
SetIndexBuffer(2,topBuffer);
IndicatoreCifre(5);
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di iterazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),
limite;
se(barre contate>0)
barre contate..;
limit=Bars-counted_bars;
//----
for(int i=0;i<limit;i++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
se(initFinished==false)
{
IndicatoreNomeCorto("MACD_max-min");
int win_idx=WindowFind("MACD_max-min");
// trova il numero della nostra sottofinestra dell'indicatore
se(win_idx<0)
{
// se il numero di sottofinestra è -1, c'è un errore
Stampa("Finestra non trovata");
ritorno(0);
}
double top=WindowPriceMax(win_idx);
/trova il valore massimo della scala verticale della sottofinestra specificata del grafico corrente
ObjectCreate("max",OBJ_HLINE,win_idx,0,top);
// disegna una linea orizzontale in una sottofinestra del nostro indicatore
ObjectSet("max",OBJPROP_COLOR,Yellow);
ObjectSet("max",OBJPROP_WIDTH,0);
WindowRedraw();
// ridisegna la finestra per vedere la linea
initFinished=true;
// il disegno è finito
}
topBuffer[i]=top;
}
//----
ritorno(0);
}
//+------------------------------------------------------------------+
Scusate l'intromissione.
topBuffer[i] dietro il ciclo e il disegno, provate questo:
Ciao!
Per favore, indicatemi la direzione giusta:
Mi vengono date N variabili esterne dello stesso tipo. Come scegliere il valore massimo tra loro senza sovraccaricare il codice - MathMax restituisce il massimo di due valori, ma se è, diciamo, 20?
Oppure, come creare un array da questi dati, che poi applicano ArrayMaximum?
extern int A = 10;
extern int .......;
extern int N = 1253;
Grazie in anticipo!
https://docs.mql4.com/ru/array/ArrayMaximum
int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)Cerca l'elemento con il valore massimo. La funzione restituisce la posizione dell'elemento massimo nella matrice.
Parametri:
array[] - array numerico, che viene cercato.
count - Numero di elementi da cercare.
Start - L'indice di partenza per la ricerca.
double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};
int maxValueIdx=ArrayMaximum(num_array);
Print("Valore massimo = ", num_array[maxValueIdx]);
Ma, sotto forma di
int Max [N] = {A,.....,N};
l'array non viene creato.
Dove: A,......N sono le variabili date dello stesso tipo. Numero di variabili = N
Esempio di creazione di un array di stringhe da variabili esterne (script):
Esempio di creazione di un array di stringhe da variabili esterne (script):
Grazie!
Ha funzionato, ma con una correzione: invece di
int init(){sym[1]=sym1;............
fare quanto segue
int init(){sym[0]=sym1;.......
e poi si contano tutti gli elementi.
Scusate l'intrusione.
topBuffer[i] dietro il ciclo e il disegno, provate in questo modo: