[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 24

 

Era già in funzione. Non ha previsto il segnale di apertura per molto tempo, e l'aria era fornita dallo stesso timer.

In breve, Paolo è morto.

 
Qualcuno può consigliare: è una domanda banale , ma non riesco a risolverla tutto il giorno. Come fare in modo che l'EA apra un ordine all'apertura di una candela, e se si chiude sulla stessa candela, non aprire fino alla comparsa di una nuova candela. Il problema qui è che quando il segnale si apre, diciamo che l'ordine viene chiuso sulla stessa candela, quindi il segnale è in vigore, ma non è più rilevante perché il robot è stato scritto per il prezzo di apertura. Ricordo che c'era un modo, ma non riesco a ricordarlo.
 

La bandiera si chiama.

Quando l'ordine si apre, assegna OrderIsOpened=true. Quando si apre una nuova candela - ...=falso, e così via.

 
tara:

La bandiera si chiama.

Quando l'ordine si apre, assegna OrderIsOpened=true. Quando si apre una nuova candela - ...=falso, e così via.

Grazie. E come codificare l'apertura di una nuova candela?
 
kwadrad:
Grazie. E come codificare l'apertura di una nuova candela?


Qualunque cosa vi piaccia - è tutto nelle vostre mani. Per esempio:

- quando il tempo cambia in base alla dimensione della TF (più facile)

- quando il "nuovo" prezzo aperto differisce dal "vecchio" prezzo

dalla stessa tecnologia della "bandiera".

Non c'è di che.

 
kwadrad:
Grazie. E come si codifica l'apertura di una nuova candela?
Esplora con un motore di ricerca.
 
Fartarantula:

Ciao caro popolo di mql. Ecco il mio primo problema di codice.

È un indicatore di tendenza. Il compito è un indicatore di tendenza con coordinate 1a linea = massimo dell'ultimo giorno e del giorno prima e 2a linea = minimo dell'ultimo giorno e del giorno prima.

Sarebbe OK, ma quando si passa a un timeframe inferiore, la coordinata è aggrappata all'inizio della giornata, anche se al livello di prezzo corrispondente.... e il senso della linea si perde completamente.

Quando si crea un oggetto trendline, il parametro datetime è da biasimare. Non riesco a pensare come arrivarci. È necessario calcolare il tempo di formazione degli estremi di prezzo. Sembra che questa informazione

Sembra che questa informazione sia incorporata nel lasso di tempo di 1 minuto. Come determinare l'orario in cui il timeframe cambia in modo che un trend sia ridisegnato e le coordinate siano attaccate alle barre corrispondenti agli estremi.

Sfortunatamente, la ricerca non ha prodotto nulla sull'argomento. Sarei grato per un consiglio.

Capisco che la procedura stessa di scrittura del codice causi difficoltà.

Vi offro il seguente modo di risolvere questo compito:

// Ваша трендовая по High на дневном таймфрейме
datetime Time1 = iTime(Symbol(), PERIOD_D1, 1);
double   High1 = iHigh(Symbol(), PERIOD_D1, 1);
datetime Time2 = iTime(Symbol(), PERIOD_D1, 2);
double   High2 = iHigh(Symbol(), PERIOD_D1, 2);
ObjectCreate("High_Trend", OBJ_TREND, 0, Time2, High2, Time1, High1, 0, 0);

// Ищем точное время High'ев на таймфрейме PERIOD
int PERIOD = PERIOD_M5;

int BarTime1 = iBarShift(Symbol(), PERIOD, Time1);
int BarTime2 = iBarShift(Symbol(), PERIOD, Time2);
Time1 = iTime(Symbol(), PERIOD, 
      Highest(Symbol(), PERIOD, MODE_HIGH, BarTime1, 1));
Time2 = iTime(Symbol(), PERIOD, 
      Highest(Symbol(), PERIOD, MODE_HIGH, BarTime2, BarTime1+1));

ObjectSet("High_Trend", OBJPROP_TIME2, Time1);
ObjectSet("High_Trend", OBJPROP_TIME1, Time2);

L'unico problema è che se lanci l'Expert Advisor con questo codice nello Strategy Tester e imposti la variabile PERIOD a PERIOD_M1, entrambe le funzioni iBarShift restituiscono -1, cioè la funzione non può trovare una barra su TF M1 con lo stesso tempo nella storia... Non so perché succede.

Ho scoperto perché! Non c'era nessuna storia per le barre M1 nel periodo testato.

 
alex12:

Ho bisogno di visualizzare il comportamento del prezzo sull'intera storia dello strumento per MA, ma l'indicatore non viene disegnato quando viene inserito nel grafico.

Qual è il problema?

Quando compilato = 0 e 0.

A proposito - il terminale MT4 si blocca!

Impostate i parametri di ingresso History e Aver_Bars su un valore più piccolo e il terminale smetterà di "penzolare".

Cosa ti fa pensare che l'indicatore non venga disegnato quando è attaccato a un grafico? Questo è ciò che il tuo indicatore ha disegnato quando l'ho messo sul grafico di oggi per EUR/USD TF M1:


:D :D :D :D

 
artmedia70:
Quando si verifica questo errore (divisione per zero), l'EA smette di funzionare. Cercate un posto nel codice dove si verifica la divisione per zero - molto probabilmente, lo zero è ottenuto come risultato del calcolo di alcuni parametri.
Grazie, l'ho capito. Lo controllerò nel fine settimana.
 

Salve, cari membri del forum.

Naturalmente, ho alcune domande da parte di un nuovo arrivato. Sto cercando di imparare mql4, dato che non ho mai sviluppato alcun programma prima, quindi le domande possono essere molto primitive. Ma non sono mai stato capace di farli da solo.

Ho deciso di "pasticciare" con la visualizzazione dei volumi disegnando una linea invece di un grafico a barre con qualche elaborazione. Il codice dovrebbe avere il seguente senso. Partendo dalla seconda barra che è nella stessa direzione della barra precedente (entrambe sono in alto), il volume viene disegnato dalla seconda barra. Come risultato, ottengo una linea spezzata nella finestra dell'indicatore, che è effettivamente disegnata dalla seconda barra in su, ma non in tutti i casi per qualche motivo. La linea è interrotta perché le altre condizioni del suo disegno non sono affatto definite, è una cosa del futuro. Ma qui io stesso per capire perché la linea non è disegnata su ogni seconda barra verso l'alto, non posso. Per favore, aiutatemi.

Ecco il codice. Se avete altri commenti su altri bug nel codice, sarò felice di aiutarvi.

double dVolume=Volume[i];
double vback1=Volume[i+1];

         {
         double vteor12=(dVolume+vback1)/2;
            if (Close[i+1]>Open[i+1] && Close[i]>Open[i]) double UP12=(Close[i]-Open[i+1])*1000; else UP12=0;
            if (UP12!=0) double vrealUP12=(dVolume+vback1)/UP12; else vrealUP12=0;
            if (Close[i+1]>Open[i+1])
            if (Close[i]>Open[i])
            ExtVolumesBuffer[i]=dVolume+vteor12-vrealUP12;
            if (ExtVolumesBuffer[i]<0) ExtVolumesBuffer[i]=0;
              }
Motivazione: