![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Come risolvere la mancanza di datastruttura di tipo misto
Ciao a tutti,
Ho molti messaggi privati che mi chiedono aiuto per alcuni pezzi di codice.
Qui potete postare le vostre domande relative a MQL4, e farò del mio meglio per rispondere.Salve,
vorrei approfittare del vostro invito per porre il seguente problema.
Quale sarebbe la soluzione migliore per memorizzare e ordinare una lista di simboli in base alle loro variazioni di prezzo dato che non si può usare una datastruttura di tipo misto come: EURUSD->1.29, USDGBP->0.22 ?
Non ci sono enum e non ci sono strutture dati di tipo misto che possono contenere una stringa e un valore doppio correlato in mql4. Le soluzioni che mi vengono in mente sono o usare un file, ma questo richiederebbe un'attività di lettura e scrittura del disco quasi costante. Oppure usare tre array; 1 per la lista dei simboli, uno per la memorizzazione e il tracciamento dei valori dell'indice e uno per i valori effettivi.
Sembra che si debba codificare intorno a un problema molto basilare (semplice). L'unica cosa che vorrei è confrontare tutte le coppie di euro tra loro per la forza relativa. Come risolvereste questo, quale datastruttura mi consigliereste?
Grazie per qualsiasi risposta o indicazione a questo principiante!
Bibberpool
Ricerca di indicatori di forza relativa e correlazione
Ciao,
Quale sarebbe la soluzione migliore per memorizzare e ordinare una lista di simboli in base alle loro variazioni di prezzo, dato che non si può usare una datastruttura di tipo misto come: EURUSD->1.29, USDGBP->0.22 ?
...
Sembra che si debba codificare intorno a un problema molto basilare (semplice). L'unica cosa che vorrei è confrontare tutte le coppie di euro tra loro per la forza relativa. Come risolveresti questo, quale datastruttura mi consiglieresti ?
Grazie per qualsiasi risposta o indicazione a questo principiante! BibberpoolCiao Bibberpool,
Cerca su questo sito Forex TSD gli indicatori di forza relativa e gli indicatori di correlazione...
Questo tipo di indicatori sono progettati per analizzare diverse coppie e prezzi e la loro forza relativa.
Potresti trovare buoni esempi per quello che vuoi fare.
Spero che questo aiuti,
Robert
Grazie per la vostra risposta
Ciao Bibberpool,
Cerca su questo sito Forex TSD gli indicatori di Forza Relativa e gli indicatori di Correlazione...
Questo tipo di indicatori sono progettati per analizzare diverse coppie e prezzi e la loro forza relativa.
Potresti trovare buoni esempi per quello che vuoi fare.
Spero che questo aiuti,
RobertCiao grazie per la tua risposta e sicuramente cercherò nei thread suggeriti. Tuttavia c'è così tanto codice in giro.
Nel frattempo ho fatto un breve prototipo in C. Ho solo preso un ordinamento di inserimento di base dato che i dati consistono solo di piccoli insiemi e ho aggiornato quella routine per aggiornare un array di stringhe di conseguenza.
Lo porterò (copia/incolla) al mio primo programma mql4 più tardi questa settimana. Ecco il codice, forse è utile ad altri o qualcuno vuole commentarlo per creare qualcosa di meglio.
#include
int main(void) {
int max = 5;
int array[5] = { 3, 5, 2, 1, 4 };
char *symbl[5] = { "EURUSD", "EURGBP", "EURJPY", "EURCHF", "EURCAD" };
int idx = 0;
int swp = 0;
int tmp = 0;
char *tmpsymb = NULL;
printf("--- before\n");
for(idx = 0; idx <= max - 1; idx++) {
printf("%d - %s\n", array, symbl);
}
for(idx = 1 ; idx <= max - 1; idx++) {
swp = idx;
while(swp > 0 && array[swp] < array[swp - 1]) {
tmp = array[swp];
tmpsymb = symbl[swp];
array[swp] = array[swp - 1];
symbl[swp] = symbl[swp - 1];
array[swp - 1] = tmp;
symbl[swp - 1] = tmpsymb;
swp--;
}
}
printf("--- after\n");
for(idx = 0; idx <= max - 1; idx++) {
printf("%d - %s\n", array, symbl);
}
return 0;
}
Il programma dovrebbe stampare:
--- prima
3 - EURUSD
5 - EURGBP
2 - EURJPY
1 - EURCHF
4 - EURCAD
--- dopo
1 - EURCHF
2 - EURJPY
3 - EURUSD
4 - EURCAD
5 - EURGBP
Alla ricerca di indies dall'autore Kravchuk
Ciao Comunità,
Sto cercando indies dall'autore Kravchuk, che progetta indies da vendere. Ero disposto a buyu ma non possiamo recomcile su forma di pagamento (non importo!?). Qualcuno ha i suoi indies ft.dejavu, ft.rainbow, barstatline, diver, linerenko? Apprezzerei il vostro aiuto. Grazie a voi
Ciao Comunità, sto cercando indies da autore Kravchuk, che progetta indies per vendere. Ero disposto a buyu ma non possiamo recomcile su forma di pagamento (non importo!?). Qualcuno ha i suoi indies ft.dejavu, ft.rainbow, barstatline, diver, linerenko? Apprezzerei il vostro aiuto. Grazie a voi
Ciao bershk,
Se la tua richiesta non è ancora obsoleta possiamo aiutarti qui - abbiamo lavorato con alcuni di questi indicatori.
Per favore nota che dovresti comprare la licenza dall'autore e noi non forniamo roba decompilata o ottenuta illegalmente.
Se sei interessato a comprare - ecco i prezzi attuali dall'autore:
Dejavu - $20; Rainbow - $15; Barstatline - $10; Diver - $20; LineRenko - $15.
Se hai bisogno di aiuto per acquistarli scrivici a info@raitsoft.com, ti aiuteremo a comprare la licenza senza alcuna commissione.
ciao amici ...................
Ho iniziato ad imparare a programmare in mql4, e per iniziare sto analizzando gli indicatori e gli ea.
Ho l'indicatore "daily_close _line" e ho guardato il codice e ho trovato queste due linee di codice che non ho idea di cosa stiano facendo
e come funzionino.
può lo stesso uno prego dare un'occhiata al codice e dirmi che cosa sta andando su.
grazie un sacco in anticipo.
eran
//* my_DailyOpen_indicator
//*
//* Revision 1.1 2005/11/13 Midnite
//* Initial DailyOpen indicator
//* based pm
//*
#property copyright "Midnite"
#property link "me@home.net"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
#property indicator_style1 2
#property indicator_width1 1
double TodayOpenBuffer[];
extern int TimeZoneOfData= 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,TodayOpenBuffer);
SetIndexLabel(0,"Open");
SetIndexEmptyValue(0,0.0);
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int lastbar;
int counted_bars= IndicatorCounted();
if (counted_bars>0) counted_bars--;
lastbar = Bars-counted_bars;
DailyOpen(0,lastbar);
return (0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int DailyOpen(int offset, int lastbar)
{
int shift;
int tzdiffsec= TimeZoneOfData * 3600;
double barsper30= 1.0*PERIOD_M30/Period();
bool ShowDailyOpenLevel= True;//<<<<---------- thise line-------------------------------
// lastbar+= barsperday+2; // make sure we catch the daily open
lastbar= MathMin(Bars-20*barsper30-1, lastbar);//<<<<-------------------thise line-----------------------
for(shift=lastbar;shift>=offset;shift--){
TodayOpenBuffer[shift]= 0;
if (ShowDailyOpenLevel){
if(TimeDay(Time[shift]-tzdiffsec) != TimeDay(Time[shift+1]-tzdiffsec)){ // day change
TodayOpenBuffer[shift]= Open[shift];
TodayOpenBuffer[shift+1]= 0; // avoid stairs in the line
}
else{
TodayOpenBuffer[shift]= TodayOpenBuffer[shift+1];
}
}
}
return(0);
}ERAN123
Sta facendo quanto segue: trova il prezzo di apertura giornaliero (tenendo conto di TimeZoneOfData come spostamento di fuso orario) e disegna quella linea attraverso quel giorno. Ecco un'immagine in cui è facile vedere come disegna lo stesso prezzo di apertura giornaliero per tutto il giorno:
ho iniziato ad imparare a programmare in mql4, e per iniziare sto analizzando gli idicatori e gli ea.
Ho l'indicatore "daily_close _line" e ho guardato il codice e ho trovato queste due linee di codice che non ho idea di cosa stiano facendo
e come funzionino.
può lo stesso uno prego dare un'occhiata al codice e dirmi che cosa sta andando su.
grazie un sacco in anticipo.
eran
//* my_DailyOpen_indicator
//*
//* Revision 1.1 2005/11/13 Midnite
//* Initial DailyOpen indicator
//* based pm
//*
#property copyright "Midnite"
#property link "me@home.net"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
#property indicator_style1 2
#property indicator_width1 1
double TodayOpenBuffer[];
extern int TimeZoneOfData= 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,TodayOpenBuffer);
SetIndexLabel(0,"Open");
SetIndexEmptyValue(0,0.0);
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int lastbar;
int counted_bars= IndicatorCounted();
if (counted_bars>0) counted_bars--;
lastbar = Bars-counted_bars;
DailyOpen(0,lastbar);
return (0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int DailyOpen(int offset, int lastbar)
{
int shift;
int tzdiffsec= TimeZoneOfData * 3600;
double barsper30= 1.0*PERIOD_M30/Period();
bool ShowDailyOpenLevel= True;//<<<<---------- thise line-------------------------------
// lastbar+= barsperday+2; // make sure we catch the daily open
lastbar= MathMin(Bars-20*barsper30-1, lastbar);//<<<<-------------------thise line-----------------------
for(shift=lastbar;shift>=offset;shift--){
TodayOpenBuffer[shift]= 0;
if (ShowDailyOpenLevel){
if(TimeDay(Time[shift]-tzdiffsec) != TimeDay(Time[shift+1]-tzdiffsec)){ // day change
TodayOpenBuffer[shift]= Open[shift];
TodayOpenBuffer[shift+1]= 0; // avoid stairs in the line
}
else{
TodayOpenBuffer[shift]= TodayOpenBuffer[shift+1];
}
}
}
return(0);
}ERAN123
Fa quanto segue: trova il prezzo di apertura giornaliero (tenendo conto di TimeZoneOfData come spostamento di fuso orario) e disegna quella linea attraverso quel giorno. Ecco un'immagine in cui è facile vedere come disegna lo stesso prezzo aperto giornaliero per tutto il giorno:
scusa se ho disegnato questa linea:
double barsper30= 1.0*PERIOD_M30/Period();
e anche questa
lastbar= MathMin(Bars-20*barsper30-1, lastbar);
per che cosa il "20" e "-1" e come le 2 linee lavorano insieme?
Grazie mille.
Originariamente ho scritto qualcos'altro.
Dimenticate quelle linee: sono, per qualche ragione, cercando di limitare l'inizio in cui i valori iniziano ad essere calcolati (e dovrebbero essere alcune ore dalla barra più vecchia del grafico). Cosa voleva ottenere il programmatore con questo forse lo sa solo lui
sory i mente questa linea :
doppio barper30= 1.0*PERIODO_M30/Periodo();
e anche questo
lastbar= MathMin(Bars-20*barsper30-1, lastbar);
per quello che il "20" e "-1" e come le 2 linee lavorano insieme?
grazie mille.grazie un sacco il mio amico .....you mi ha aiutato![](https://c.mql5.com/forextsd/smiles/party.png)