Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 838

 

In mql4 ho usato iCustom per fare indicatori che usano gli indicatori già pronti di qualcun altro, anche se non so nulla di programmazione... Ne ho abbastanza di intuizioni. Sto usando mql5 ma non funziona niente, per quanto mi sforzi di capirlo. Per favore, aiutatemi, per favore.

Ho questo indicatore in ex5. L'ho messo nella mia cartella Downloads. Voglio prendere entrambe le sue linee e disegnarle sul grafico in altri periodi, cioè renderlo multitime frame con iCustom.

Dato che non posso scrivere un indicatore da zero, ho preso il codice di un semplice indicatore Bears Power. Non ho cambiato nulla lì, tranne cambiare indicator_chart_window e DRAW_LINE e la linea, che, a mio avviso, dovrebbe togliere i dati del primo buffer con i parametri di default del TF corrente:

ExtBearsBuffer[i]=iCustom(NULL,0,"Downloads\\RSI Analytics");

Tutto si compila, niente viene disegnato. Di cos'altro ha bisogno? :(

#property copyright   "2009, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property description "Bears Power"
//--- indicator settings
#property indicator_chart_window                      //---------------------------------
#property indicator_buffers 2
#property indicator_plots   1
#property indicator_type1   DRAW_LINE                 //---------------------------------------
#property indicator_color1  Silver
#property indicator_width1  2
//--- input parameters
input int InpBearsPeriod=13; // Period
//--- indicator buffers
double    ExtBearsBuffer[];
double    ExtTempBuffer[];
//--- handle of EMA 
int       ExtEmaHandle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtBearsBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtTempBuffer,INDICATOR_CALCULATIONS);
//---
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpBearsPeriod-1);
//--- name for DataWindow and indicator subwindow label
   IndicatorSetString(INDICATOR_SHORTNAME,"Bears("+(string)InpBearsPeriod+")");
//--- get MA handle
   ExtEmaHandle=iMA(NULL,0,InpBearsPeriod,0,MODE_EMA,PRICE_CLOSE);
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Average True Range                                               |
//+------------------------------------------------------------------+
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 &TickVolume[],
                const long &Volume[],
                const int &Spread[])
  {
   int i,limit;
//--- check for bars count
   if(rates_total<InpBearsPeriod)
      return(0);// not enough bars for calculation   
//--- not all data may be calculated
   int calculated=BarsCalculated(ExtEmaHandle);
   if(calculated<rates_total)
     {
      Print("Not all data of ExtEmaHandle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }
//--- we can copy not all data
   int to_copy;
   if(prev_calculated>rates_total || prev_calculated<0) to_copy=rates_total;
   else
     {
      to_copy=rates_total-prev_calculated;
      if(prev_calculated>0) to_copy++;
     }
//---- get ma buffers
   if(IsStopped()) return(0); //Checking for stop flag
   if(CopyBuffer(ExtEmaHandle,0,0,to_copy,ExtTempBuffer)<=0)
     {
      Print("getting ExtEmaHandle is failed! Error",GetLastError());
      return(0);
     }
//--- first calculation or number of bars was changed
   if(prev_calculated<InpBearsPeriod)
      limit=InpBearsPeriod;
   else limit=prev_calculated-1;
//--- the main loop of calculations
   for(i=limit;i<rates_total && !IsStopped();i++)
     {
      ExtBearsBuffer[i]=iCustom(NULL,0,"Downloads\\RSI Analytics"); \\--------------------------------------------
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Технический индикатор RSI ANALYTICS
Технический индикатор RSI ANALYTICS
  • recensioni: 5
  • 2013.11.01
  • STRAT ANALYTICS
  • www.mql5.com
Зачем нам RSI в отдельном окне, если его можно построить в основном окне графика, что гораздо более понятно? RSI ANALYTICS - это индикатор, следящий за рынком, созданный на основе той же идеи, что и традиционный RSI (индекс относительной силы). При этом он строится не в отдельном подокне, а в том же окне, что и график цены финансового...
 
Nilog:

In mql4 ho usato iCustom per fare indicatori che usano gli indicatori già pronti di qualcun altro, anche se non so nulla di programmazione... Ne ho abbastanza di intuizioni. Sto usando mql5 ma non funziona niente, per quanto mi sforzi di capirlo. Per favore, aiutatemi, per favore.

Ho questo indicatore in ex5. L'ho messo nella mia cartella Downloads. Voglio prendere entrambe le sue linee e disegnarle sul grafico in altri periodi, cioè renderlo multitime frame con iCustom.

Dato che non posso scrivere un indicatore da zero, ho preso il codice di un semplice indicatore Bears Power. Non ho cambiato nulla lì, tranne cambiare indicator_chart_window e DRAW_LINE e la linea, che, a mio avviso, dovrebbe togliere i dati del primo buffer con i parametri di default del TF corrente:

Tutto si compila, niente viene disegnato. Di cos'altro ha bisogno? :(

In mql5 il lavoro con gli indicatori personalizzati e standard è organizzato diversamente che in mql4. Se in mql4 è possibile ottenere solo un valore di indicatore attraverso iCustom, in mql5 è possibile ottenere valori di indicatore per tutta la profondità della storia nell'array. La seconda grande differenza è la direzione dell'indicizzazione nei buffer degli indicatori.

È noioso guardare tutto il codice e controllarlo rispetto all'originale, quindi mi limiterò a segnalare i principali:

Il file deve trovarsi nella cartella Indicators o in una sottocartella situata nella stessa Indicators.

Ecco la linea per ottenere la maniglia dell'indicatore MA

ExtEmaHandle=iMA(NULL,0,InpBearsPeriod,0,MODE_EMA,PRICE_CLOSE);

e questa è la stringa per ottenere il valore dell'indicatore MA

if(CopyBuffer(ExtEmaHandle,0,0,to_copy,ExtTempBuffer)<=0)

in questo caso ad un buffer o array aggiuntivo.

Risulta che per ottenere i dati dell'indicatore personalizzato

ExtBearsHandle=iCustom(NULL,0,"RSI Analytics");
CopyBuffer(ExtBearsHandle,0,0,to_copy,ExtTempBuffer)

E poi puoi elaborare i valori dell'indicatore da questo buffer aggiuntivo in qualche modo, o puoi metterli nel buffer dell'indicatore senza dimenticare la direzione dell'indicizzazione.

 
Alexey Viktorov:


Grazie! Ho scritto qualcosa come ho capito, e ora solo un errore appare durante la compilazione. Sulla linea

CopyBuffer(ExtBearsHandle,0,0,to_copy,ExtTempBuffer);

erroreto_copy - identificatore non dichiarato.

In quale sezione e come lo dichiaro?

 
Nilog:

Grazie! Ho scritto qualcosa come ho capito, e ora solo un errore appare durante la compilazione. Sulla linea

erroreto_copy - identificatore non dichiarato.

In quale sezione e come lo dichiaro?

Devi confrontare i miei suggerimenti con il tuo codice e con il codice sorgente che hai già sistemato. Questa variabile è dichiarata in questi codici. E oltre alle mie osservazioni, dovreste cercare di capire la logica degli indicatori di costruzione in generale, e non solo cambiare un pezzo di merda per un pezzo di merda.

 
In MetaTrader 5, un EA può lavorare diversamente su una valuta che, per esempio, sull'indice RTS?
 
lil_lil:
In MetaTrader 5, la performance di un EA su una coppia di valute può essere radicalmente diversa dalla performance, per esempio, sull'indice RTS?

Il consigliere lavorerà nel modo in cui è scritto. E non altrimenti.

Per quanto riguarda le sfumature da considerare: RTS è uno scambio, quindi il tipo di posizioni contabili NETTING. Se l'EA non è originariamente progettato per lavorare sulla rete, il risultato è imprevedibile.

 
Vladimir Karputov:

Il consigliere lavorerà nel modo in cui è scritto. E non altrimenti.

Per quanto riguarda le sfumature da considerare: RTS è uno scambio, quindi il tipo di posizioni contabili NETTING. Se l'EA non è originariamente progettato per lavorare su reti, il risultato è imprevedibile.

Se il tuo EA non è destinatoa lavorare sul netting, il risultato è imprevedibile.

Non ci sono posizioni multidirezionali nella strategia.

 
lil_lil:

Grazie, come si fa a sapere con certezza dal codice se è progettatoper lavorare su reti o no.

Non ci sono posizioni a direzione opposta nella strategia.

E, se è così (sempre UNA posizione di lavoro), allora non c'è differenza - sia che si tratti di netting o di hedging.

 
Vladimir Karputov:

Se questo è il caso (c'è sempre UNA posizione in funzione), non fa differenza se si tratta di netting o di copertura.

Su un segnale inverso in valute (Forex) le posizioni sono chiuse, ma non sullo scambio. Dove cercare, cosa cercare?

 
lil_lil:

Su un segnale inverso sulle valute, le posizioni vengono chiuse, ma non sul cambio. Dove cercare, cosa cercare?

Cercare il luogo da cui proviene il comando di chiusura della posizione.

Motivazione: