Aiuto per aggiornare a MetaTrader 5 senza perdite - pagina 13

 
mario065:

Salve,

Non potevo fare quello che volevo.

Ho una coppia diversa da quella che avevo in testa.

[code]
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_plots   2
#property indicator_type1   DRAW_COLOR_LINE
#property indicator_type2   DRAW_COLOR_LINE
#property indicator_color1  clrBlue
#property indicator_color2  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_style2  STYLE_SOLID

input int period_1 = 20;
input int period_2 = 100;
input ENUM_MA_METHOD ma_method = MODE_SMA;
input ENUM_APPLIED_PRICE applied_price = PRICE_CLOSE;

double ExtMapBuffer1[];
double ExtMapBuffer2[];
int EMHandle1=0;
int EMHandle2=0;
int EMHandle11=0;
int EMHandle22=0;
MqlParam params[];      // Структура за съхранение  параметрите на индикатора
double ma1[],ma2[],ma3[],ma4[];//Временни буфери

int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0, ExtMapBuffer1, INDICATOR_DATA);
   SetIndexBuffer(1, ExtMapBuffer2, INDICATOR_DATA);
   SetIndexBuffer(2, ma1, INDICATOR_DATA);
   SetIndexBuffer(3, ma2, INDICATOR_DATA);
   SetIndexBuffer(4, ma3, INDICATOR_DATA);
   SetIndexBuffer(5, ma4, INDICATOR_DATA);
  
   PlotIndexSetInteger(0, PLOT_SHIFT, 0);
   PlotIndexSetInteger(1, PLOT_SHIFT, 0);
  
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID);
   PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_SOLID);
//---
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrBlue);
   PlotIndexSetInteger(1,PLOT_LINE_COLOR,clrRed);

   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
   PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE);
   IndicatorSetString(INDICATOR_SHORTNAME,"2_2_MA");
//--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,4);  
//---
   ArrayResize(params,4);
   params[0].type         =TYPE_INT;
   params[0].integer_value=period_1;
   // Смещение
   params[1].type         =TYPE_INT;
   params[1].integer_value=0;
   // Метод расчета: простое усреднение
   params[2].type         =TYPE_INT;
   params[2].integer_value=MODE_SMA;
   // Тип цен для рассчета: цены закрытия
   params[3].type         =TYPE_INT;
   params[3].integer_value=PRICE_CLOSE;
  
   EMHandle1 = IndicatorCreate(_Symbol, 0, IND_MA, 4, params);
   ArrayResize(params,4);
   params[0].type         =TYPE_INT;
   params[0].integer_value=period_2;
   params[1].type         =TYPE_INT;
   params[1].integer_value=0;
   params[2].type         =TYPE_INT;
   params[2].integer_value=MODE_SMA;
   params[3].type         =TYPE_INT;
   params[3].integer_value=PRICE_CLOSE;
  
   EMHandle2 = IndicatorCreate(_Symbol, 0, IND_MA, 4, params);
   ArrayResize(params,4);
   params[0].type         =TYPE_INT;
   params[0].integer_value=period_1;
   params[1].type         =TYPE_INT;
   params[1].integer_value=0;
   params[2].type         =TYPE_INT;
   params[2].integer_value=MODE_SMA;
   params[3].type         =TYPE_INT;
   params[3].integer_value=PRICE_CLOSE;
  
   EMHandle11 = IndicatorCreate(_Symbol, 0, IND_MA, 4, params);
   ArrayResize(params,4);
   params[0].type         =TYPE_INT;
   params[0].integer_value=period_2;
   params[1].type         =TYPE_INT;
   params[1].integer_value=0;
   params[2].type         =TYPE_INT;
   params[2].integer_value=MODE_SMA;
   params[3].type         =TYPE_INT;
   params[3].integer_value=PRICE_CLOSE;
  
   EMHandle22 = IndicatorCreate(_Symbol, 0, IND_MA, 4, params);
     
   return(0);
}
int OnCalculate (const int rates_total,    // размер массива price[];
                 const int prev_calculated,// количество доступных баров ;на предыдущем вызове;
                 const int begin,// с какого индекса в массиве  price[] начинаются достоверные данные;
                 const double &price[]) // массив, по которому и будет считаться индикатор;
  {
   int i;
   ArraySetAsSeries(ma1, true);
   ArraySetAsSeries(ma2, true);
   ArraySetAsSeries(ma3, true);
   ArraySetAsSeries(ma4, true);
  
   if(CopyBuffer(EMHandle1, 0, 0, 1, ma1) < 0){Print("CopyBuffer ma1 error =", GetLastError());}
   if(CopyBuffer(EMHandle2, 0, 0, 1, ma2) < 0){Print("CopyBuffer ma2 error =", GetLastError());}
   if(CopyBuffer(EMHandle11, 0, 0, 1, ma3) < 0){Print("CopyBuffer ma3 error =", GetLastError());}
   if(CopyBuffer(EMHandle22, 0, 0, 1, ma4) < 0){Print("CopyBuffer ma4 error =", GetLastError());} 
   int limit;
   //if(prev_calculated<1)
      //limit=period_1;
      limit=prev_calculated-1;
   for( i=0; i<limit; i++)
   ExtMapBuffer1[0]=вычисление;
   ExtMapBuffer2[0]=вычисление;

      Comment(
      "\n=====================",
      "\n ma1[0]     :   ",DoubleToString(ma1[0],5),
      "\n ma2[0]     :   ",DoubleToString(ma2[0],5),
      "\n ma3[0]     :   ",DoubleToString(ma3[0],5),
      "\n ma4[0]     :   ",DoubleToString(ma4[0],5),
      "\n ExtMapBuffer1[0] : ",DoubleToString(ExtMapBuffer1[0],4),
      "\n ExtMapBuffer2[0] : ",DoubleToString(ExtMapBuffer2[0],4)
      );
       return(rates_total);
  }
void OnDeinit(const int reason)
  {
   Comment("");      
  }
[/code] 

Quando 0 invece di i (per una barra) vedo il risultato, quando la barra (corrente = i) mostra che non posso trovare dati per la seconda coppia.

Il grafico della coppia è aperto, nella finestra di mercato non so dove confondo le cose.

Due coppie diverse in un indicatore - quindi dov'è il mio errore?

Provo a mettere 0 e vedo il risultato come commento, ma non ho una linea.

Per chiarire: ho messo ma1 e ma2 su una coppia e ma3 e ma4 sull'altra coppia.

Grazie.

Prima stai contando da 0----->prev_calculated-1 e hai bisogno dall'ultima barra contata a rates_total

questo:

      limit=prev_calculated-1;
   for( i=0; i<limit; i++)
   ExtMapBuffer1[0]=вычисление;

cambiarlo in questo:

   
   for(int i=prev_calculated-1>=0?prev_calculated-1:0; i<rates_total; i++)
       ExtMapBuffer1[i]=вычисление;

La seconda cosa che non capisco bene, vuoi ottenere muwings da diversi strumenti o diversi timeframes, non ho trovato nessuno dei due nel codice.

 

Buona giornata, signori!

Chi può aiutarmi ad adattare i seguenti indicatori per la MT5 (pre-file).

Ti darò 10 dollari per una birra per il lavoro.

File:
 
master_kiln:

Buona giornata, signori!

Chi può aiutarmi ad adattare i seguenti indicatori per la MT5 (pre-file).

Ti darò 10 dollari per una birra per il lavoro.

https://www.mql5.com/ru/job
MQL5 работа
MQL5 работа
  • www.mql5.com
Заказы на разработку программ для трейдинга
 

Urain,

Grazie per l'attenzione.

Non posso farlo disegnare, se puoi, mettilo qui.

Penso che sia bello fare diverse coppie e diversi telai in xpert.

//+------------------------------------------------------------------+
//|2_2_v2.mq5 |
//|Yuriy Tokman |
//| yuriytokman@gmail.com|
//+------------------------------------------------------------------+
#proprietà copyright "Yuriy Tokman"
#proprietà link"yuriytokman@gmail.com"
#proprietà versione "1.00"
#proprietà indicator_separate_window
#proprietà indicator_buffers 6
#proprietà indicator_plots 2
#proprietà indicator_type1 DRAW_COLOR_LINE
#proprietà indicator_type2 DRAW_COLOR_LINE
#proprietà indicator_color1 clrBlue
#proprietà indicator_color2 clrRed
#proprietà indicator_style1 STYLE_SOLID
#proprietà indicator_style2 STYLE_SOLID
//#property indicator_label1 "EURUSD"
//#property indicator_label2 "GBPUSD"

input int period_1 = 13 ;
input int period_2 = 55 ;;
input ENUM_MA_METHOD ma_method = MODE_SMA;
input ENUM_APPLIED_PRICE applied_price = PRICE_CLOSE;

doppio ExtMapBuffer1[];
doppio ExtMapBuffer2[];
int EMHandle1;
int EMHandle2;;
int EMHandle11;
int EMHandle22;
doppio ma1[],ma2[],ma3[],ma4[];//tempi buffer
double p1 = SymbolInfoDouble("EURUSD",SYMBOL_POINT);
double p2 = SymbolInfoDouble("GBPUSD",SYMBOL_POINT);
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int OnInit()
{
//--- mappatura dei buffer degli indicatori
SetIndexBuffer(0, ExtMapBuffer1, INDICATOR_DATA);
SetIndexBuffer(1, ExtMapBuffer2, INDICATOR_DATA);
SetIndexBuffer(2, ma1, INDICATOR_DATA);
SetIndexBuffer(3, ma2, INDICATOR_DATA);
SetIndexBuffer(4, ma3, INDICATOR_DATA);
SetIndexBuffer(5, ma4, INDICATOR_DATA);

PlotIndexSetInteger(0, PLOT_SHIFT, 0);
PlotIndexSetInteger(1, PLOT_SHIFT, 0);

PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID);
PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_SOLID);
//---
PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrBlue);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,clrRed);

PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,1);
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,1);

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE);

//--- nome per DataWindow
IndicatorSetString(INDICATOR_SHORTNAME, "2_2_MA");
//---
//--- impostare la precisione
IndicatorSetInteger(INDICATOR_DIGITS,4);

EMHandle1 = iMA("EURUSD", 0, period_1, 0, ma_method, applied_price);
EMHandle2 = iMA("EURUSD", 0, period_2, 0, ma_method, applied_price);
EMHandle11 = iMA("GBPUSD", 0, period_1, 0, ma_method, applied_price);
EMHandle22 = iMA("GBPUSD", 0, period_2, 0, ma_method, applied_price);

ArraySetAsSeries(ExtMapBuffer1,true);
ArraySetAsSeries(ExtMapBuffer2,true);
ArraySetAsSeries(ma1,true);
ArraySetAsSeries(ma2,true);
ArraySetAsSeries(ma3,true);
ArraySetAsSeries(ma4, true);

//---
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di iterazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,// dimensione dell'array price[];
const int prev_calculated,// numero di barre disponibili ;sulla chiamata precedente;
const int begin,// quale indice nell'array price[] inizierà i dati validi;
const double &price[]) // array su cui verrà calcolato l'indicatore;
{
if(CopyBuffer(EMHandle1, 0, 0, 1, ma1) < 0){Print("CopyBuffer ma1 error =", GetLastError());}
if(CopyBuffer(EMHandle2, 0, 0, 1, ma2) < 0){Print("CopyBuffer ma2 error =", GetLastError());}
if(CopyBuffer(EMHandle11, 0, 0, 1, ma3) < 0){Print("CopyBuffer ma3 error =", GetLastError());}
if(CopyBuffer(EMHandle22, 0, 0, 1, ma4) < 0){Print("CopyBuffer ma4 error =", GetLastError());}

ExtMapBuffer1[0]=(ma1[0]-ma2[0])/p1;
ExtMapBuffer2[0]=(ma3[0]-ma4[0])/p2;

Commento(
"\n=====================",
"\n ma1[] : ",DoubleToString(ma1[0],5),
"\n ma2[] : ",DoubleToString(ma2[0],5),
"\n ma3[] : ",DoubleToString(ma3[0],5),
"\n ma4[] : ",DoubleToString(ma4[0],5),
"\n ExtMapBuffer1[] : ",DoubleToString(ExtMapBuffer1[0],4),
"\n ExtMapBuffer2[] : ",DoubleToString(ExtMapBuffer2[0],4)
);
//---

//--- restituire il valore di prev_calculato per la prossima chiamata
return(rates_total);
}
void OnDeinit(const int reason)
{
Commento(");
}
//+------------------------------------------------------------------+

 

Buona giornata a tutti.

Ho una richiesta di rifare questo indicatore per MT5 perché lo uso solo nel trading.

File:
 

Non so dove scrivere, ma forse potete aiutarmi a risolvere questo problema: in MT4 mi basta copiare un EA nella cartella experts, metterlo in Strategy Tester, tutto sembra buono e funziona, ma in MT5 non riesco a capire come testare un EA, lo metto nella cartella experts con l'estensione .Li ho copiati e incollati da qualche altra parte. Potete dirmi come copiare un EA e dove incollarlo correttamente?

 
ZahvatkiN:

Non so dove scrivere, ma forse potete aiutarmi a risolvere questo problema: in MT4 mi basta copiare un EA nella cartella experts, metterlo in Strategy Tester, tutto sembra buono e funziona, ma in MT5 non riesco a capire come testare un EA, lo metto nella cartella experts con l'estensione .Li ho copiati e incollati da un'altra parte. Potete dirmi come copiare correttamente un EA e dove incollarlo?

Puoi eseguire sia nel tester che in tempo reale, puoi solo eseguire un EA con l'estensione ex5 o la versione compilata,

Se aprite un file mq5 in MetaEditor, premete F7 e sarete felici. Il codice sorgente con estensione mq5, queste sono solo informazioni di prova, per ottenere il byte-code (codice eseguibile) da esso, è necessario compilarlo.

 

Urain grazie per la risposta, solo io conosco tutte le basi, ho compilato e fatto tutto secondo le istruzioni, anche se lo sapevo, ma ancora una volta ho letto, non so cosa potrebbe essere sbagliato, ecco 2 pelli allegate. Ho scaricato MT5 da questo sito.

File:
1__17.jpg  420 kb
2__10.jpg  117 kb
 
ZahvatkiN:

Urain grazie per la risposta, solo io conosco tutte le basi, ho compilato e fatto tutto secondo le istruzioni, anche se lo sapevo, ma ancora una volta ho letto, non so nemmeno cosa potrebbe essere sbagliato, ecco 2 pelli allegate. Ho scaricato MT5 da questo sito.

Voglio mettere la mia copia di grr-al.ex5 nella cartella giusta e ricaricare MT5 dopo essermi assicurato che sia nella cartella giusta.

A proposito, la MT5 è l'unica sul computer?

 

Urain ha finalmente capito, il fatto è che gli EA non vengono copiati nella cartella C:\Program Files\MT5\MQL5\Experts ma in C:\Users\Dyma\AppData\Roaming\MetaQuotes\Terminal\8B052D0699A0083067EBF3A36123603B\MQL5\Experts, non so perché questo fastidio, questi maledetti programmatori)))

Motivazione: