Ajuda para actualizar para MetaTrader 5 sem perdas - página 13

 
mario065:

Olá,

Não consegui fazer o que queria.

Tenho um amortecedor de muwing diferente na minha cabeça, tenho um par diferente, do que aquele que tinha na minha cabeça.

[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 em vez de i (para uma barra) vejo o resultado, quando a barra (corrente = i) mostra que não consigo encontrar dados para o segundo par.

O gráfico do par está aberto, na Janela de Mercado não sei onde confundir as coisas.

Dois pares diferentes num só indicador - então onde está o meu erro?

Tento colocar 0 e ver o resultado como um comentário, mas não tenho uma linha.

Para esclarecer: coloco ma1 e ma2 num par e ma3 e ma4 no outro par.

Obrigado.

Primeiro está a contar de 0----->prev_calculated-1 e precisa de contar desde a última barra até ao total de tarifas

isto:

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

alterá-lo para isto:

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

A segunda coisa que realmente não compreendo, se queres obter as muwings de diferentes instrumentos ou prazos diferentes, não consegui encontrar nenhum deles no código.

 

Bom dia, cavalheiros!

Quem me pode ajudar a adaptar os seguintes indicadores para o MT5 (pré-fichas).

Atirar-lhe-ei 10 dólares por uma cerveja para o trabalho.

Arquivos anexados:
 
master_kiln:

Bom dia, cavalheiros!

Quem me pode ajudar a adaptar os seguintes indicadores para o MT5 (pré-fichas).

Atirar-lhe-ei 10 dólares por uma cerveja para o trabalho.

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

Urain,

Obrigado pela vossa atenção.

Não posso fazê-lo desenhar. Se puder, coloque-o aqui.

Acho que é fixe fazer diferentes pares e diferentes molduras em xpert.

//+------------------------------------------------------------------+
//|2_2_v2.mq5 |
//|Yuriy Tokman |
//| yuriytokman@gmail.com|
//+------------------------------------------------------------------+
#propriedade copyright "Yuriy Tokman"
#ligação de propriedade"yuriytokman@gmail.com"
#propriedade versão "1.00"
#janela_indicadora de propriedade_separate_window
#nóculos_indicadores de propriedade 6
#property indicator_plots 2
#indicador de propriedade_tipo1 DRAW_COLOR_LINE
#property indicator_type2 DRAW_COLOR_LINE
#indicador de propriedade_color1 clrBlue
#indicador de propriedade_color2 clrRRed
#property indicator_style1 STYLE_SOLID
#property indicator_style2 STYLE_SOLID
//# indicador de propriedade_label1 "EURUSD
//# indicador de propriedade_label2 "GBPUSD

input int período_1 = 13 ;
input int período_2 = 55 ;;
input ENUM_MA_METHOD ma_method = MODE_SMA;
input ENUM_APPLIED_PRICE applied_price = PREÇO_CLOSE;

duplo ExtMapBuffer1[];
duplo ExtMapBuffer2[];
em EMHandle1;
em EMHandle2;;
int EMHandle11;
em EMHandle22;
duplo ma1[],ma2[],ma3[],ma4[];// tampão de tempo
duplo p1 = SymbolInfoDouble("EURUSD",SYMBOL_POINT);
duplo p2 = SymbolInfoDouble("GBPUSD",SYMBOL_POINT);
//+------------------------------------------------------------------+
//| Função de inicialização de indicador personalizado |
//+------------------------------------------------------------------+
int OnInit()
{
//--- cartografia de amortecedores indicadores
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,clrRRed);

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 para DataWindow
IndicatorSetString(INDICADOR_SHORTNAME, "2_2_MA");
//---
//--- definir precisão
IndicatorSetInteger(INDICADOR_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);

//---
return(0);
}
//+------------------------------------------------------------------+
//| Função de iteração de indicador personalizada |
//+------------------------------------------------------------------+
int OnCalculate (const int taxas_total,// tamanho do preço da matriz[];
const int prev_calculated,// número de barras disponíveis ;na chamada anterior;
const int begin,// que índice em matriz de preços[] começará dados válidos;
const double &price[]) // matriz, sobre a qual o indicador será calculado;
{
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;

Comentário(
"\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)
);
//---

//--- valor de retorno de pré_cálculo para a próxima chamada
return(rates_total);
}
nulo OnDeinit(const int razão)
{
Comentário(");
}
//+------------------------------------------------------------------+

 

Bom dia a todos.

Tenho um pedido para refazer este indicador para o MT5 porque só o utilizo no comércio.

Arquivos anexados:
 

Não sei onde escrever, mas talvez me possa ajudar a resolver esta questão: em MT4 basta copiar uma EA para os peritos da pasta e executar o teste de estratégia, tudo parece bom e funciona, mas em MT5 não consigo entender como testar uma EA, atiro os peritos da pasta, com a extensão .Copiei-os e colei-os noutro sítio. Pode dizer-me como copiar uma EA e onde colá-los correctamente?

 
ZahvatkiN:

Não sei onde escrever, mas talvez me possam ajudar a resolver este problema: no MT4 apenas copio uma EA para a pasta dos peritos, coloco-a no Strategy Tester, tudo parece bem e funciona, mas no MT5 não consigo entender como testar uma EA, coloco-a na pasta dos peritos com a extensão .Copiei-os e colei-os noutro sítio. Pode dizer-me como copiar correctamente uma EA e onde colá-los?

Pode correr tanto no testador como em tempo real, só pode correr um EA com a extensão ex5 ou a versão compilada,

Se abrir um ficheiro mq5 no MetaEditor, prima F7 e ficará satisfeito. O código-fonte com extensão mq5, isto é apenas informação de teste, a fim de obter o byte-código (código executável) a partir dele, é necessário compilá-lo.

 

Urain obrigado pela resposta, só eu conheço todas as bases, compilei e fiz tudo de acordo com as instruções, apesar de o saber, mas mais uma vez li, não sei o que poderia estar errado, aqui estão 2 peles anexadas. Descarreguei o MT5 a partir deste site.

Arquivos anexados:
1__17.jpg  420 kb
2__10.jpg  117 kb
 
ZahvatkiN:

Urain obrigado pela resposta, só eu conheço todas as bases, compilei e fiz tudo de acordo com as instruções, mesmo sabendo, mas mais uma vez li, nem sei o que poderia estar errado, aqui estão 2 peles anexadas. Descarreguei o MT5 a partir deste site.

Quero colocar a minha cópia de grr-al.ex5 na pasta certa e recarregar o MT5 depois de me certificar de que está na pasta certa.

A propósito, o MT5 é o único no computador?

 

Urain finalmente descobriu, o problema é que os EAs são copiados não para a pasta C:\Program Files\MT5\MQL5\Experts mas para C:\Users\Dyma\AppData\Roaming\MetaQuotes\Terminal\8B052D0699A0083067EBF3A36123603B\MQL5\Experts, não sei porque é que isto é incómodo, estes malditos programadores))))