Ciao e grazie per la tua risposta. Sono riuscito a creare uno script che soddisfa le mie aspettative, ma purtroppo ci sono ancora due errori che non riesco a capire o a correggere. Sapresti chi contattare per un piccolo aiuto? Sono solo due righe di codice che registrano errori dopo la compilazione...
Ciao a tutti e buon anno! Mi sapreste dire: come posso fare in modo che il mio script utilizzi un indicatore dal mercato?
Più precisamente: c'è un indicatore "Automatic Trendline" nel mercato. Voglio creare un robot basato su di esso, che apra o chiuda una posizione nel momento in cui il prezzo attraversa queste linee sull'indicatore (bene, e sotto condizioni aggiuntive specificate).
Ciao a tutti e buon anno! Mi potete dire: come posso fare in modo che il mio script utilizzi un indicatore dal mercato?
Più precisamente: c'è un indicatore "Automatic Trendline" nel mercato. Voglio creare un robot basato su di esso, che apra o chiuda una posizione nel momento in cui il prezzo attraversa queste linee sull'indicatore (bene, e sotto condizioni aggiuntive specificate).
Nessun problema per me. Per il mercato o CodeBase non è possibile utilizzare i mestieri di qualcun altro dal mercato ...
Ecco un esempio di aggiunta di un indicatore scaricato dal mercato a un Expert Advisor
// Глобальная переменная для хендла индикатораint tlHandle;
intOnInit() {
// Создаем хендл индикатора
tlHandle = iCustom(Symbol(), PERIOD_CURRENT, "Market\\Automatic Trendlines", false, 5, 15, clrRed, clrBlue, 2, "My Support", "My Resistance");
// Можем добавить индикатор на график, если хотим. // Для использования в расчетах это необязательноChartIndicatorAdd(ChartID(), 0, tlHandle);
// Вызовем один раз OnTick(), чтобы на выходных у нас что-то в логе отобразилосьOnTick();
return(INIT_SUCCEEDED);
}
voidOnDeinit(constint reason) {}
voidOnTick() {
// Объявляем массивы для буферов индикатораdouble tlBuffer0[], tlBuffer1[]; // ,tlBuffer1, ...int res;
// Копируем нужное количество значений из индикаторных буферов в массивы
res = CopyBuffer(tlHandle, 0, 0, 100, tlBuffer0);
res = CopyBuffer(tlHandle, 1, 0, 100, tlBuffer1);
// У разных индикаторов различное количество индикаторных буферов, // числа из которых используются для построения линий, значков, цветовых меток на графике// Сколько их у данного индикатора и как используются их числа исследуйте самостоятельно// res = CopyBuffer(tlHandle, 2, 0, 100, tlBuffer2);// Пользуемся полученными значениямиArrayPrint(tlBuffer0);
ArrayPrint(tlBuffer1);
}
Se non hai intenzione di forzare l'assegnazione di valori numerici agli elementi dell'enumerazione (a giudicare dall'esempio, non lo farai), puoi farlo in questo modo:
// Объявляем перечислениеenum ENUM_NAME {
ENAME_1,
ENAME_JSDF,
ENAME_ERT,
ENAME_QWERTY,
ENAME_FEF
};
// Обявляем константу, хранящую количество элементов перечисления#define ENUM_NAME_SIZE 5// Массив для хранения элементов перечисления
ENUM_NAME E_NAME[ENUM_NAME_SIZE];
intOnInit() {
// Заполняем массив значениями, преобразуя к типу ENUM_NAMEfor(int i = 0; i < ENUM_NAME_SIZE; i++) {
E_NAME[i] = (ENUM_NAME) i;
}
// Пользуемся массивомArrayPrint(E_NAME);
for(int i = 0; i < ENUM_NAME_SIZE; i++) {
Print(EnumToString(E_NAME[i]));
}
return(INIT_SUCCEEDED);
}
voidOnDeinit(constint reason) {}
In questo caso, sarà necessario modificare anche la costante che memorizza il numero di elementi quando si aggiungono elementi all'enumerazione.
Inoltre, è meglio usare il prefisso ENUM_ solo per il nome dell'enumerazione stessa e usare un altro prefisso per i suoi elementi. Questa convenzione è utilizzata in tutte le enumerazioni standard di MQL.
Se non vuoi forzare l'assegnazione di valori numerici agli elementi dell'enumerazione (a giudicare dall'esempio - non lo farai), puoi farlo in questo modo:
In questo caso, dovrai modificare la costante che memorizza il numero di elementi quando aggiungi elementi all'enumerazione.
Inoltre, è meglio usare il prefisso ENUM_ solo per il nome dell'enumerazione stessa e usare un altro prefisso per i suoi elementi. Questa convenzione è utilizzata in tutte le enumerazioni standard di MQL.
Grazie per il vostro aiuto. Uso ENUM da così tanti anni che non mi è venuto in mente di leggere la guida.
Per sicurezza, è più facile scriverli in una riga, come ho mostrato, piuttosto che in un array di righe separate.
Salve,
Provi a cercare sul mercato soluzioni già pronte - https://www.mql5.com/fr/search#!keyword=money%20management&module=mql5_module_market
Può anche ordinare una soluzione personalizzata da Freelance - https://www.mql5.com/fr/job
Ciao a tutti e buon anno! Mi sapreste dire: come posso fare in modo che il mio script utilizzi un indicatore dal mercato?
Più precisamente:
c'è un indicatore "Automatic Trendline" nel mercato. Voglio creare un robot basato su di esso, che apra o chiuda una posizione nel momento in cui il prezzo attraversa queste linee sull'indicatore (bene, e sotto condizioni aggiuntive specificate).
Ciao a tutti e buon anno! Mi potete dire: come posso fare in modo che il mio script utilizzi un indicatore dal mercato?
Più precisamente:
c'è un indicatore "Automatic Trendline" nel mercato. Voglio creare un robot basato su di esso, che apra o chiuda una posizione nel momento in cui il prezzo attraversa queste linee sull'indicatore (bene, e sotto condizioni aggiuntive specificate).
Nessun problema per me. Per il mercato o CodeBase non è possibile utilizzare i mestieri di qualcun altro dal mercato ...
Per te stesso, nessun problema. Non è possibile utilizzare l'artigianato di qualcun altro dal marketplace o da CodeBase...
Per te stesso. Non so come fare. Non riesco a trovare il codice nell'open source. O come inserire nel mio codice la posizione delle linee.
Ciao, @Rad89
Sono necessarie le funzioni iCustom() e CopyBuffer().
Ecco un esempio di aggiunta di un indicatore scaricato dal mercato a un Expert Advisor
enum ENUM_NAME { ENUM_1, ENUM_jsdf .... ENUM_FEF; };Come allocare la memoria per l'array E_NAME[] in modo che ci sia abbastanza memoria per tutti i possibili valori di ENUM_NAME (senza ripetizioni)?E inizializzare E_NAME[] con tutti i valori possibili?
Ciao, @pivomoe
Se non hai intenzione di forzare l'assegnazione di valori numerici agli elementi dell'enumerazione (a giudicare dall'esempio, non lo farai), puoi farlo in questo modo:
In questo caso, sarà necessario modificare anche la costante che memorizza il numero di elementi quando si aggiungono elementi all'enumerazione.
Inoltre, è meglio usare il prefisso ENUM_ solo per il nome dell'enumerazione stessa e usare un altro prefisso per i suoi elementi. Questa convenzione è utilizzata in tutte le enumerazioni standard di MQL.
Ciao, @pivomoe
Se non vuoi forzare l'assegnazione di valori numerici agli elementi dell'enumerazione (a giudicare dall'esempio - non lo farai), puoi farlo in questo modo:
In questo caso, dovrai modificare la costante che memorizza il numero di elementi quando aggiungi elementi all'enumerazione.
Inoltre, è meglio usare il prefisso ENUM_ solo per il nome dell'enumerazione stessa e usare un altro prefisso per i suoi elementi. Questa convenzione è utilizzata in tutte le enumerazioni standard di MQL.
Grazie per il vostro aiuto. Uso ENUM da così tanti anni che non mi è venuto in mente di leggere la guida.