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
Sto cercando di capire se questo è sbagliato;
for (int i=qqea_alert_x_candles_ago; i>0; i--) {
// int i = 1;
qqea_up = iCustom(NULL,0, "QQE Alert v3",0,i);
qqea_down = iCustom(NULL,0, "QQE Alert v3",1,i);
se (qqea_up < qqea_down) {
se (i == 1) qqeacross = True;
qqea_long = True;
qqea_short = Falso;
} else if (qqea_up > qqea_down) {
se (i == 1) qqeacross = True;
qqea_long = False;
qqea_short = True;
}
}
}
dovrebbe controllare il segnale valido fino alle barre "qqea_alert_x_candles_ago" indietro, ma poi ha (i == 1) che i==1 accade solo una volta?
Sto cercando di capire se questo è sbagliato;
for (int i=qqea_alert_x_candles_ago; i>0; i--) {
// int i = 1;
qqea_up = iCustom(NULL,0, "QQE Alert v3",0,i);
qqea_down = iCustom(NULL,0, "QQE Alert v3",1,i);
Stampa("qqea_up: ", qqea_up, "qqea_down: ", qqea_down);
se (qqea_up < qqea_down) {
se (i == 1) qqeacross = True;
qqea_long = True;
qqea_short = Falso;
} else if (qqea_up > qqea_down) {
se (i == 1) qqeacross = True;
qqea_long = Falso;
qqea_short = True;
}
}
}
dovrebbe controllare il segnale valido fino alle barre "qqea_alert_x_candles_ago" indietro, ma poi ha (i == 1) che i==1 accade solo una volta?Al valore nominale il tuo codice sembra a posto, cioè assumendo che "qqea_alert_x_candles_ago" > 0.
Il tuo problema, se questo non funziona, è più che probabile in relazione a iCustom.
Affinché questa funzione funzioni correttamente, dovete passare un elemento di input per ogni elemento di input nell'indicatore attuale. Se non lo fate, o passate i tipi di dati sbagliati, allora iCustom non restituirà nulla.
Ho aggiunto un'istruzione di stampa nel codice sopra. Usatela per determinare se i valori restituiti da iCustom contengono effettivamente qualcosa.
Grazie,
Hiachiever
Aiuto necessario con il codice per contare le barre
Il mio EA ha una serie di opzioni per calcolare lo stoploss di una posizione aperta. Una di queste opzioni è quella di utilizzare il minimo dell'ultimo numero "x" di barre di prezzo.
La linea di codice attualmente usata nell'EA per calcolare lo stoploss (SL) di questa opzione per una posizione lunga è:
SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0));
StopLossBars è una variabile inserita esternamente.
Il problema che ho è che voglio che il valore di StopLossBars aumenti ad ogni barra contata da quando la posizione è stata aperta fino a quando una delle mie altre condizioni per lo stoploss supera questa condizione. Credo che una linea di codice come
StopLossBars = StopLossBars + BarsCountedSincePositionOpened
farebbe il trucco. Sfortunatamente la mia codifica è piuttosto limitata al cut'n'paste e non so come calcolare o codificare BarsCountedSincePositionOpened.
Qualcuno potrebbe dirmi come fare, per favore?
Al valore nominale il tuo codice sembra a posto, cioè assumendo che "qqea_alert_x_candles_ago" > 0.
Il vostro problema se questo non funziona è più che probabile in relazione a iCustom.
Affinché questa funzione funzioni correttamente, dovete passare un elemento di input per ogni elemento di input nell'indicatore attuale. Se non lo fate, o passate i tipi di dati sbagliati, allora iCustom non restituirà nulla.
Ho aggiunto un'istruzione di stampa nel codice sopra. Usatela per determinare se i valori restituiti da iCustom contengono effettivamente qualcosa.
Grazie,
HiachieverIl codice è di un altro EA ma stavo pensando che quando il ciclo va a "qqea_alert_x_candles_ago" > 1 allora questa istruzione "if (i == 1) qqeacross = True;" sarebbe Falso ora, giusto? Quando dovrebbe rimanere True fino a i>qqea_alert_x_candles_ago.
Aiutare
Cari tutti,
Ho ricevuto questa codifica da un collega. Mi ha detto che dovrebbe essere un ottimo indicatore che segnala le entrate SMA in alto o in basso. Qualcuno può aiutarmi a creare un indicatore con questo codice qui sotto.
/*[[
Nome := SMA Su e Giù
Finestra separata := no
Primo Colore := Blu
Primo tipo di disegno:= Linea
Usa i secondi dati := Sì
Secondo colore := Rosso
Secondo tipo di disegno := Linea
]]*/
Ingressi : MAPeriod(10), Bandwide_UP(20),Bandwide_DOWN(20);
Variabili : shift(0), cnt(0), sum(0), loopbegin1(0), loopbegin2(0), first(True), prevbars(0);
Variabili : MA(0);
SetLoopCount(0);
// controlli iniziali
Se MAPeriod < 1 allora Exit;
// controlla il caricamento di barre aggiuntive o la ricarica totale
Se Bars 1 Allora first = True;
prevbars = Bars;
// loopbegin1 e loopbegin2 impediscono il conteggio delle barre contate escludendo la corrente
Se primo Allora inizia
loopbegin1 = Bars-MAPeriod-1;
Se loopbegin1 < 0 allora Exit; // non ci sono abbastanza barre per il conteggio
loopbegin2 = Bars-MAPeriod-1;
If loopbegin2 < 0 Then Exit; // non ci sono abbastanza barre per il conteggio
first = False; // questo blocco deve essere valutato solo una volta
Fine;
// convergenza-divergenza
loopbegin1 = loopbegin1+1; // anche la barra corrente deve essere ricontata
Per shift = loopbegin1 giù fino a 0 iniziare
MA = iMA(MAPeriod,MODE_SMA,shift);
SetIndexValue(shift,(MA+Bandwide_UP*point));
SetIndexValue2(shift,(MA-Bandwide_DOWN*point));
loopbegin1 = loopbegin1-1; // previene il riconteggio delle barre precedenti
Fine;
Cordiali saluti,
Rogerio
aiuto necessario con il codice
Ho bisogno di aiuto con il seguente codice al momento apre un ordine solo se AC è sopra o sotto lo zero e voglio che si apra se il rosso cambia in verde e viceversa
doppio AC1 = iAC(NULL, 0, Current + 0);
doppio AC2 = iAC(NULL, 0, Current + 1);
se ((AC1 < AC2)) Ordine = SIGNAL_CLOSEBUY;
Il codice è di un altro EA ma stavo pensando che quando il ciclo va a "qqea_alert_x_candles_ago" > 1 allora questa dichiarazione "if (i == 1) qqeacross = True;" sarebbe Falso ora, giusto? Quando dovrebbe rimanere True fino a i>qqea_alert_x_candles_ago.
No, non è corretto.
Nel ciclo for si parte da 6 e si decrementa fino a 1. Questo significa che nel ciclo finale l'esecuzione del ciclo for effettua il controllo"if (i == 1) qqeacross = True;". Il risultato finale è che l'output sarà vero se qqeacross si è verificato.
L'unico problema che questo può presentare è se qqeacross è stato impostato a true in un looop precedente. Per superare questo problema dovreste avere qqeacross = false; prima del ciclo for. In questo modo puoi assicurarti che se qqeacross = true, allora è stato impostato dal ciclo appena completato.
Grazie,
hiachiever
Il mio EA ha una serie di opzioni per calcolare lo stoploss di una posizione aperta. Una di queste opzioni è quella di utilizzare il minimo dell'ultimo numero "x" di barre di prezzo.
La linea di codice attualmente utilizzata nell'EA per calcolare lo stoploss (SL) di questa opzione per una posizione lunga è
SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0));
StopLossBars è una variabile inserita esternamente.
Il problema che ho è che voglio che il valore di StopLossBars aumenti ad ogni barra contata da quando la posizione è stata aperta fino a quando una delle mie altre condizioni per lo stoploss supera questa condizione. Credo che una linea di codice come
StopLossBars = StopLossBars + BarsCountedSincePositionOpened
farebbe il trucco. Sfortunatamente la mia codifica è piuttosto limitata al cut'n'paste e non so come calcolare o codificare BarsCountedSincePositionOpened.
Qualcuno potrebbe dirmi come fare, per favore?Il modo per farlo è creare una variabile nell'ambito globale (cioè prima di init)
ad esempio
int BarCount;
int init ()
Poi nel vostro codice di stop loss usate il seguente:
if (BarCount<Bars)
{
SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0));
StopLossBars++;
BarCount=Bars;
}
Questo incrementerà StopLossBars di 1 ad ogni nuova barra.
L'unica altra aggiunta al tuo codice sarebbe quella di resettare 'StopLossBars' al suo valore di default originale quando viene aperta una nuova operazione.
Grazie,
Hiachiever
Ho bisogno di aiuto con il seguente codice, al momento apre un ordine solo se AC è sopra o sotto lo zero e voglio che si apra se il rosso cambia in verde e viceversa
doppio AC1 = iAC(NULL, 0, Current + 0);
doppio AC2 = iAC(NULL, 0, Current + 1);
se ((AC1 < AC2)) Ordine = SIGNAL_CLOSEBUY;Bene, quello che ho fatto è stato aprire o visualizzare gli altri due buffer nel codice dell'indicatore rimuovendo queste due linee;
// SetIndexLabel(1,NULL);
// SetIndexLabel(2,NULL);
Poi con il mio AC modificato ho fatto una chiamata iCustom;
double ac1 = iCustom(NULL, 0, "AcceleratorMod", 1, 1);
double ac2 = iCustom(NULL, 0, "AcceleratorMod", 2, 1);
double ac11 = iCustom(NULL, 0, "AcceleratorMod", 1, 2);
double ac22 = iCustom(NULL, 0, "AcceleratorMod", 2, 2);
bool acbuy = ac2==0 && ac11==0; // Il rosso cambia in verde
bool acsell = ac1==0 && ac22==0; // Il verde cambia in rosso
Spero che questo aiuti
matrixebiz cosa intendi per rimuovere queste due linee; e come faccio, non posso entrare nel codice dell'indicatore AC che ho provato,