Domande da un "manichino" - pagina 132

 
Yedelkin:

Se siete interessati al calcolo dei dati di un altro indicatore, potete farlo nel modo seguente. In primo luogo, creiamo un altro indicatore con il proprio metodo di calcolo dei dati, e poi prendiamo l'handle di questo indicatore(MQL5 Reference Guide / Technical Indicators / iCustom ) e questo handle viene utilizzato nel nuovo indicatore. Guarda attentamente l'esempio. Se avete domande sull'esempio

Ho delle domande, ancora non lo capisco.
Ok, prendiamo Custom Moving Average.mq5 come base.

aggiungere la nuova procedura di lisciatura MODE_MYMA - nessun problema.

La domanda è come alimentare i dati. attraverso l'i-cast di un altro indicatore? ok. prendiamo come esempio un qualsiasi indicatore fatto dal secondo modulo (se l'indicatore è fatto dal primo modulo... non so come prendere l'alto-basso... quindi significa solo il secondo modulo?)

Ok, dichiariamo

int newHandl;

definirlo nell'onInit (parabolico, cioè qualunque cosa, l'importante è il 2° tipo, giusto? Ho capito come implementare il mio)

newHandl=iCustom(_Symbol,0, "ParabolicSAR.mq5",0.02,0.2);

e poi in onCalculate lo alimentiamo al posto del prezzo standard?

CalculateEMA(rates_total,prev_calculated,begin,newHandl);???

giura. o cosa? per favore spiegami, non capisco... (((((

Sì, sto ancora usando i modelli mcl4. lì, è semplice - loop, dati (qualsiasi!) prendere, smussare, uscita.
Ma qui.... Non so a cosa aggrapparmi...

 
GameOver:

(se l'indicatore è fatto dalla prima forma... non ho capito da dove prendere l'alto-basso... quindi significa solo dalla seconda forma?)

Sì, riguardo all'alto-basso era solo un esempio, come trattare gli articoli da soli. Per la prima forma puoi prendere il compito di disegnare la linea close[i]/2 [o sqrt(close[i]/2 )]. In generale, si può arrivare a un mucchio di varianti usando anche un singolo array.

GameOver:

OK, dichiariamo

int newHandl;

in onInit definirlo (come esempio - parabolico. comunque, la cosa principale è il 2° tipo, giusto? come implementare il proprio è più o meno chiaro)

newHandl=iCustom(_Symbol,0, "ParabolicSAR.mq5",0.02,0.2);

Va bene. Lo finirò ora.

Se il manico dell'indicatore è corretto, significa che possiamo indirizzare ai buffer di questo indicatore. Guarda di nuovo l'esempio da MQL5 Reference / Technical Indicators / iCustom C'è una linea:

//--- скопируем значения индикатора Custom Moving Average в наш индикаторный буфер
   int copy=CopyBuffer(MA_handle,0,0,rates_total,Label1Buffer);

Ora leggete MQL5 Reference / Access to Timeseries and Indicators / CopyBuffer (...Ancora: molte cose diventano chiare quando si analizzano gli esempi riga per riga).

Prova a ricevere i dati di qualsiasi buffer di indicatori che hai selezionato. Non ho un terminale, ma in parabolica si può vedere quali buffer sono calcolati e la loro numerazione.

Документация по MQL5: Технические индикаторы
Документация по MQL5: Технические индикаторы
  • www.mql5.com
Технические индикаторы - Документация по MQL5
 

Domanda sulla descrizione delle funzioni ArrayIsSeries() e ArrayGetAsSeries().

C'è una frase del genere nel Manuale di riferimento:"Gli array passati nella funzione riflettono i dati dei prezzi, cioè, questi array hanno il segno della serie temporale e la funzione ArrayIsSeries() restituirà true quando controlla questi array . Ma comunque, in ogni caso, la direzione di indicizzazione dovrebbe essere controllata solo con la funzione ArrayGetAsSeries()".

Ne consegue da una lettura letterale che anche se la funzione ArrayIsSeries() restituisce true (cioè conferma che l'array controllato è un array di serie temporali), comunque la direzione di indicizzazione dovrebbe essere controllata solo dalla funzione ArrayGetAsSeries(). Allora non capisco la ragione di introdurre la funzione ArrayIsSeries() se i suoi risultati devono essere comunque controllati ulteriormente. Qual è il punto? È possibile che l'array sia una serie temporale, ma la sua direzione di indicizzazione non sarà la stessa di una serie temporale (il flag AS_SERIES non sarà impostato)?

 


Durante il porting da Mql4 a Mql5 è spuntato un errore Lot:

'Lot' - la costante non può essere modificata

input double Lot = 0.1; // Lot

if (MartingaleType ==7)
 {
 if (Counter1==1)
 Lot=Lots() ;
}

Come correggere?


 
Dark.Angel:


Durante il porting da Mql4 a Mql5, si è verificato un errore di lotto:

'Lot' - la costante non può essere modificata

Come si risolve il problema?

Non si può. Non è un bug, è una caratteristica. :)

In mql5 le variabili di input non sono modificabili (const).

Fare un semplice disaccoppiamento:

input int x=5;
input double StartLot = 0.01;

int X;
double Lot;
...
...
void OnInit()
  {
   ....
    X=x;
    Lot=StartLot;
   .......
  }
.....
void OnStart()
  {
   ....
   Lot=Lots();
  }
 

Nella sezioneMQL5 Manual / Array Operations / ArraySetAsSeries, c'è un esempio in cui la funzione ArraySetAsSeries() si applica all'array const datetime&time[] ad ogni tick:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---  будем хранить время открытия текущего нулевого бара
   static datetime currentBarTimeOpen=0;
//--- перевернем доступ к массиву time[] - сделаем как в таймсерии
   ArraySetAsSeries(time,true);
//--- return value of prev_calculated for next call
   return(rates_total);
  }

È questo che tutti fanno (capovolge l'array ad ogni tick) per lavorare con l'array come una serie temporale?

Un'altra domanda: gli array usati da OnCalculate() possono cambiare arbitrariamente la loro direzione di indicizzazione? O è sufficiente controllare questa direzione una volta?

 


Durante il porting da Mql4 a Mql5 un errore SymbolInfoDouble:
'SymbolInfoDouble' - nessuno degli overload può essere applicato alla chiamata di funzione

на Mql4:
double a = balance / MarketInfo (Symbol (), MODE_MARGINREQUIRED) - 0.2 ; 

на Mql5:
double a = balance / SymbolInfoDouble(Symbol(), 0) - 0.2 ;

Come posso correggerlo?
 
Dark.Angel:


Durante il porting da Mql4 a Mql5, è apparso l'errore SymbolInfoDouble:
'SymbolInfoDouble' - nessuno degli overload può essere applicato alla chiamata di funzione


Come posso correggerlo?

Perché c'è uno 0 in basso?

https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_double

E oltre a questo, controllate la divisione per 0.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

I risultati del tester di strategia sono visualizzati in grafici:


Potete dirmi dove trovare il significato dei diversi colori sulle tabelle?

 
pusheax:

I risultati del tester di strategia sono visualizzati in grafici:

Potete dirmi dove trovare il significato dei diversi colori sulle tabelle?

Quelli blu sono profitti, quelli rossi sono perdite. Ma quello in alto a sinistra è solo discutibile...