Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1467

 

Puoi mantenerlo semplice?)))

Dove lo prendo?

L'indicatore ha un codice chiuso, come faccio a sapere il nome di questa enumerazione?

E di che tipo di variabile ho bisogno?

So solo come unire gli indicatori attraverso iCustom, ma non sono in grado di andare oltre).

Se non è troppo difficile, potresti renderlo più semplice))))

ENUM_BASE_CORNER provato, ancora non si vede.
 
Сергей:

Puoi mantenerlo semplice?)))

Dove lo prendo?

L'indicatore ha un codice chiuso, come faccio a sapere il nome di questa enumerazione?

E di che tipo di variabile ho bisogno?

So solo come unire gli indicatori attraverso iCustom, ma non sono in grado di andare oltre).

Se non è troppo difficile, potresti renderlo più semplice))))

ENUM_BASE_CORNER provato, ancora non si vede.

Ecco un esempio.

La prima opzione è l'uso dell'enumerazione standard ENUM_BASE_CORNER.

La seconda variante è usare l'enum personalizzato

Poi in iCustom, dove dovrebbe essere posto base o variabile my_base, a seconda di quale variante si sceglie.

File:
100.mq4  5 kb
 
Сергей:

Salve.

Potresti darmi un suggerimento, sono in difficoltà.

Prescrivo l'indicatore attraverso iCustom e mi trovo di fronte a un problema - l'indicatore ha un menu di testo con una scelta, si apre e ci sono diverse voci prescritte, beh, penso sia chiaro)

Come posso aggiungerlo nel menu?

extern int HIT = 0; non funziona, smette di visualizzare, non lasciando nessun parametro visualizzato.

Forse attraverso ENUM , ci cosa scegliere, o forse qualcos'altro?

Grazie in anticipo.

Avete inserito tutti i parametri in iCustom(,,,,,,,) nella sequenza corretta?

 

Buona giornata a tutti. Sto cercando di raccogliere dati all'apertura degli ordini. Voglio scrivere il valore dell'indicatore adh sui candelieri 1,2,3 in un file all'apertura di un ordine.

Faccio quanto segue. Ho aperto la directory dei dati, sono andato nella cartella del tester, sono andato nella cartella dei file e ho creato un file chiamato "ZNA4_ADX.csv". poi nel file di libreria con l'estensione .mqh con l'estensione . Qui sotto c'è il codice della funzione commentato.

void writing_adx_screen1_to_file(int i_param) // ФУНКЦИЯ ЗАПИСИ ДАННЫХ В ФАЙЛ
   { //---НАЧАЛО ФУНКЦИИ ЗАПИСИ В ФАЙЛ ЗНАЧЕНИЯ АДХ ПО ПЕРВОМУ ЭКРАНУЭКРАНУ-----------------------------------------------------------------------+
   
   //-НАЧАЛО ПОЛУЧЕНИЯ ХЕНДЕЛА ОТКРЫВАЕМОГО ФАЙЛА------------------------------------------------------------------------------+
   int hendel= FileOpen("ZNA4_ADX.csv",FILE_WRITE,';');
   
   //-КОНЕЦ ПОЛУЧЕНИЯ ХЕНДЕЛА ОТКРЫВАЕМОГО ФАЙЛА------------------------------------------------------------------------------+
   
   
//---НАЧАЛО ПОЛУЧЕНИЯ ЗНАЧЕНИЯ ОСНОВНОЙ ЛИНИИ АДХ------------------------------------------------------------------------+

  double adx1= iADX(Symbol(),//СИМВОЛ НА КОТОРОМ УСТАНОВЛЕН СОВЕТНИК
  PeriodForWork_screen1,// ТАЙМ ФРЕЙМ ПЕРВОГО ЭКРАНА
  period_adx_zapici_v_fail, //ПЕРИОД АДХ ДЛЯ ЗАПИСИ В ФАЙЛ 
  Price_adx_dl9_zapici,     // ЦЕНА РАСЧЁТА ЛИНИЙ АДХ ДЛЯ ЗАПИСИ В ФАЙЛ
  MODE_MAIN // ПОЛУЧЕНИЕ ЗНАЧЕНИЯ ОСНОВНОЙ ЛИНИИ АДХ 
,1);

//---АДХ_СВЕЧА 2 НАЧАЛО------------------------------------------------------------------------------------------+

double adx2= iADX(Symbol(),//СИМВОЛ НА КОТОРОМ УСТАНОВЛЕН СОВЕТНИК
  PeriodForWork_screen1,// ТАЙМ ФРЕЙМ ПЕРВОГО ЭКРАНА
  period_adx_zapici_v_fail, //ПЕРИОД АДХ ДЛЯ ЗАПИСИ В ФАЙЛ 
  Price_adx_dl9_zapici,     // ЦЕНА РАСЧЁТА ЛИНИЙ АДХ ДЛЯ ЗАПИСИ В ФАЙЛ
  MODE_MAIN // ПОЛУЧЕНИЕ ЗНАЧЕНИЯ ОСНОВНОЙ ЛИНИИ АДХ 
,2);
//---АДХ_СВЕЧА 2 КОНЕЦ---------------------------------------------------------------------------------------------+

//---АДХ_СВЕЧА 3 НАЧАЛО------------------------------------------------------------------------------------------+

double adx3= iADX(Symbol(),//СИМВОЛ НА КОТОРОМ УСТАНОВЛЕН СОВЕТНИК
  PeriodForWork_screen1,// ТАЙМ ФРЕЙМ ПЕРВОГО ЭКРАНА
  period_adx_zapici_v_fail, //ПЕРИОД АДХ ДЛЯ ЗАПИСИ В ФАЙЛ 
  Price_adx_dl9_zapici,     // ЦЕНА РАСЧЁТА ЛИНИЙ АДХ ДЛЯ ЗАПИСИ В ФАЙЛ
  MODE_MAIN // ПОЛУЧЕНИЕ ЗНАЧЕНИЯ ОСНОВНОЙ ЛИНИИ АДХ 
,3);
//---АДХ_СВЕЧА 3 КОНЕЦ----------------------------------------------------------------------------------------+

//--КОНЕЦ ПОЛУЧЕНИЯ ЗНАЧЕНИЯ ОСНОВНОЙ ЛИНИИ//------------------------------------------------------------------------------+
if(hendel>0)
FileWrite(hendel,"ордер "+(string)i_param+" "+(string)adx1,(string)adx2,(string)adx3); // ЗАПИСЫВАЮ ДАННЫЕ В ФАЙЛ:)

FileClose(hendel);

   
   }//---КОНЕЦ ФУНКЦИИ ЗАПИСИ В ФАЙЛ ЗНАЧЕНИЯ АДХ ПО ПЕРВОМУ ЭКРАНУ----------------------------------------------------------------+

Voglio che i dati siano scritti come nello screenshot qui sotto.

ESEMPIO DI COME VOGLIO REGISTRARE I DATI


Cioè, il testo rosso è un'intestazione che scriverò manualmente. La linea 2 è quella che voglio impostare con questa funzione. Questo è 1 numero d'ordine nel test. E abbiamo tre valori adx. Poi, quando il secondo ordine si apre nel test, abbiamo bisogno della prossima linea dove il numero dell'ordine diventa 2, e i valori adx saranno scritti per tre candele prima che questo ordine si apra, e così via quanti ordini nel test usciranno...

Sto chiamando la funzione stessa nel codice EA come mostrato nello snippet di codice qui sotto.


  //---КОНЕЦ БАЙ ТРЕНДА СИГНАЛ АО------------------------------------------------------------------------------------------+
  if(f_end_trend_buy_ao_market_order() && count_orders_market_buy == 0 && count_orders_market_sell == 0)
  {// НАЧАЛО ЕСЛИ ЕСТЬ СИГНАЛ ОКОНЧАНИЯ БАЙ ТРЕНДА ДИВЕРЕГЕНЦИЯ АО
      if(OrderSend(Symbol(),OP_SELL,lot,Bid,slippages,Bid+sl , Bid-tp ,Coment, Magik_number)) Print("ОТКРЫВАЕМ ОРДЕР СЕЛЛ ПО СИГНАЛУ ОКОНЧАНИЯ ТРНЕДА- ДИВЕРЕГЕНЦИЯ АО"); // ОТКРКЫВВАЕМ СЕЛ ОРДЕР
      writing_adx_screen1_to_file(i_nomer_ordera);// ВЫЗОВ ФУНКЦИ ЗАПИСИ ДАННЫХ В ФАЙЛ
      if (GetLastError()==141){Alert("ОШИБКА № "+string(GetLastError())+"УДАЛЯЕМ ЭКСПЕРТА С ГРАФИКА"); ExpertRemove();}// ПРОВЕРКА ОТ ДОЛБАНИЯ СЕРВЕРА И БАНА СЧЁТА   


  } // КОНЕЦ ЕСЛИ ЕСТЬ СИГНАЛ ОКОНЧАНИЯ БАЙ ТРЕНДА ДИВЕРЕГЕНЦИЯ АО//-------------------------------------------------------------------------------------------------+
  



Il test funziona senza errori, ma ho ottenuto questo risultato nel file (SCREEN BELOW ).

COSA HO OTTENUTO QUANDO HO SCRITTO NEL FILE


Ho ottenuto una linea con il primo ordine e tre valori, ma c'erano 189 ordini aperti nel test. Cosa e dove ho dimenticato di aumentare la variabile per contare il numero di ordini e come devo fare per registrare i dati successivi al primo ordine nelle linee 2,3-189? Per favore non mandatemi a code base e altri posti dove è difficile per me leggere il testo, e il codice di altre persone è quasi impossibile. Quindi ditemi in modo chiaro cosa aggiungere e dove posso trovare i dati di cui ho bisogno? P/S se non ti dispiace evidenziare il punto con l'aggiunta ...

 
DanilaMactep:

Buona giornata a tutti. Sto cercando di raccogliere dati all'apertura degli ordini. Voglio scrivere il valore dell'indicatore adh sui candelieri 1,2,3 in un file all'apertura di un ordine.

Faccio quanto segue. Ho aperto la directory dei dati, sono andato nella cartella del tester, sono andato nella cartella dei file e ho creato un file chiamato "ZNA4_ADX.csv". poi nel file di libreria con l'estensione .mqh con l'estensione . Qui sotto c'è il codice della funzione commentato.

Voglio che i dati siano scritti come nello screenshot qui sotto.


Cioè, il testo rosso è un'intestazione che scriverò manualmente. La linea 2 è quella che voglio impostare con questa funzione. Questo è 1 numero d'ordine nel test. E abbiamo tre valori adx. Poi, quando il secondo ordine si apre nel test, abbiamo bisogno della prossima linea dove il numero dell'ordine diventa 2, e i valori adx saranno scritti per tre candele prima che questo ordine si apra, e così via quanti ordini nel test usciranno...

Sto chiamando la funzione stessa nel codice EA come mostrato nello snippet di codice qui sotto.




Il test funziona senza errori, ma ho ottenuto questo risultato nel file (SCREEN BELOW ).


Ho ottenuto una linea con il primo ordine e tre valori, ma c'erano 189 ordini aperti nel test. Cosa e dove ho dimenticato di aumentare la variabile per contare il numero di ordini e come devo fare per registrare i dati successivi al primo ordine nelle linee 2,3-189? Per favore non mandatemi a code base e altri posti dove è difficile per me leggere il testo, e il codice di altre persone è quasi impossibile. Quindi ditemi in modo chiaro cosa aggiungere e dove posso trovare i dati di cui ho bisogno? P/S se non ti dispiace evidenziare il punto con l'aggiunta ...

Se il file viene aperto con un solo flag FILE_WRITE, tutto ciò che si trova nel file viene rimosso. Per salvare i dati esistenti in un file, è necessario aprire il file per leggere e scrivere.

Poi non dimenticate di spostare il puntatore alla fine del file.

 
Alexey Viktorov:

Se il file viene aperto con un solo flag FILE_WRITE, tutto ciò che si trova nel file viene cancellato. Per salvare i dati esistenti nel file, è necessario aprire il file in lettura e scrittura.

Poi non dimenticate di spostare il puntatore alla fine del file.

Alexey, grazie mille per avermi indicato dove "scavare" l'errore - finora sono riuscito a fare una registrazione riga per riga - tutto ciò che resta è pettinare il tutto in una forma utilizzabile per l'analisi))))
 

I valori dell'array sono in celle RAM che si susseguono. La lunghezza massima delle celle non occupate può dipendere da.

 
Perché non funziona con gli indirizzi di funzione?
template<typename T>
typedef T (*Fun)(const int, const int, const double &[], const double &[], const double &[], const double &[], const int &[]);
Fun    calculation,
       function;

//------------------------------------------------------------------------------------------------------------------------------

int OnInit()
  {
   calculation  = test;
   function     = Dis_HL_Value;
  //-----------------------------------------------------------------
   return(INIT_SUCCEEDED);
  }
 
Ciao, puoi dirmi se questa è una dichiarazione di un array bidimensionale?
      ArrayInitialize(ZigZagBuffer,0.0);
Grazie in anticipo!
 
Дмитрий:
Ciao, puoi dirmi se questa è una dichiarazione di un array bidimensionale? Grazie in anticipo!

No, è un'inizializzazione di uno già dichiarato.