Perguntas de um "boneco" - página 187

 
G001:
Estou completamente exausto. Não se abre correctamente.

Por favor, ajudem-me. Onde está o erro?

Experimente isto:
MqlTradeRequest request={0};
MqlTradeResult result={0};
MqlTradeCheckResult check={0};
 
fyords:
Experimente desta forma:
Obrigado.
Abre, apenas não lê correctamente os sinais do indicador.
Será que isso ajuda?
 
G001:
Obrigado.
Abre, apenas não lê correctamente os sinais do indicador.
Isto vai ajudar?
ArraySetAsSeries(Bull,true);

É feito uma vez no OnInit.

CopyBuffer(Indicator,1,0,3,Bull);
Não estragou os números tampão?
 
fyords:

Isto é feito uma vez no OnInit.

Os números tampão estão correctos?
Não me parece. O indicador encontra-se na página anterior.
 
G001:
Abre, só que não lê correctamente os sinais do indicador.

O que quer dizer com errado?

Pode imprimir o valor do indicador para verificar - "o que recebemos?

 
fyords:

O que quer dizer com errado?

Pode imprimir o valor do indicador para verificar - "o que recebemos?

Verifiquei a EA com outros indicadores e ela funciona.
Talvez haja um problema com o indicador?
Abre no primeiro tique com este indicador.

Desculpe, não sei onde acrescentar a impressão.

Exemplo para BUY_STOP, vai do vermelho para o cinzento.

//+------------------------------------------------------------------+ 
//|                                                      MACDATR.mq5 | 
//|                                      Copyright © 2011, Svinozavr | 
//+------------------------------------------------------------------+ 
//---- Indicator settings
#property indicator_separate_window 
#property indicator_buffers 4 
#property indicator_plots   4
#property indicator_level1 +0.0005
#property indicator_level2 -0.0005
#property indicator_levelcolor DimGray
#define RESET 0
//-----
#property indicator_type1 DRAW_HISTOGRAM
#property indicator_color1 Gray
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
#property indicator_label1 "MACD"
//-----
#property indicator_type2 DRAW_HISTOGRAM
#property indicator_color2 Green
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
#property indicator_label2 "Bull"
//-----
#property indicator_type3 DRAW_HISTOGRAM
#property indicator_color3 Red
#property indicator_style3 STYLE_SOLID
#property indicator_width3 1
#property indicator_label3 "Bear"
//-----
#property indicator_type4 DRAW_LINE
#property indicator_color4 Olive
#property indicator_style4 STYLE_SOLID
#property indicator_width4 1
#property indicator_label4 "ATR"
//-----
//----- Indicator parameters
//+------------------------------------------------------------------+
input uint FastEMA      = 12;
input uint SlowEMA      = 26;
input uint SignalEMA = 9;
input int  ATRG         = 0;
input ENUM_APPLIED_PRICE AppliedPrice=PRICE_CLOSE;
//+------------------------------------------------------------------+
//-----
double ATRmin=0;
double kATR=1;
int min_rates_total;
int ATRHandle,MACDHandle;
double MACDBuffer[],ATRBuffer[],Bull[],Bear[];
//+------------------------------------------------------------------+    
//| MACD indicator initialization function                           | 
//+------------------------------------------------------------------+  
void OnInit()
{
//-----
  if(ATRG) min_rates_total=int(MathMax(FastEMA,SlowEMA)+ATRG);
  else min_rates_total=2*int(MathMax(FastEMA,SlowEMA));
//-----
  int ATR;
  if(!ATRG) ATR=int(SlowEMA); 
  else ATR=ATRG;
  ATRmin*=_Point;
//-----
  ATRHandle=iATR(NULL,0,ATR);
  if(ATRHandle==INVALID_HANDLE)Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà ATR");
//-----
  MACDHandle=iMACD(NULL,0,FastEMA,SlowEMA,SignalEMA,AppliedPrice);
  if(MACDHandle==INVALID_HANDLE)Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà MACD");
//-----
  SetIndexBuffer(0,MACDBuffer,INDICATOR_DATA);
  PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
  ArraySetAsSeries(MACDBuffer,true);
//-----
  SetIndexBuffer(1,Bull,INDICATOR_DATA);
  PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
  ArraySetAsSeries(Bull,true);
//-----
  SetIndexBuffer(2,Bear,INDICATOR_DATA);
  PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);
  ArraySetAsSeries(Bear,true);
//-----
  SetIndexBuffer(3,ATRBuffer,INDICATOR_DATA);
  PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total);
  ArraySetAsSeries(ATRBuffer,true);
//-----
  string shortname;
  StringConcatenate(shortname,"MACDATR (",FastEMA,", ",SlowEMA,", ",SignalEMA,", ",EnumToString(AppliedPrice),")");
//-----
  IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//-----
  IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//-----
}
//+------------------------------------------------------------------+  
//| MACD iteration function                                          | 
//+------------------------------------------------------------------+  
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[]
                )
  {
//----- Check for data
  if(rates_total<min_rates_total) return(0);
//-----
  int to_copy,limit,i;
  double atr,Atr[];
  datetime Time[1];
//-----
  if(prev_calculated>rates_total || prev_calculated<=0)
  {
    limit=rates_total-min_rates_total;
  }
  else limit=rates_total-prev_calculated;
//----- 
  ArraySetAsSeries(Atr,true);
//-----
  to_copy=limit+1;
//-----
  if(CopyBuffer(ATRHandle,0,0,to_copy,Atr)<=0) return(RESET);
  if(CopyBuffer(MACDHandle,MAIN_LINE,0,to_copy,MACDBuffer)<=0) return(RESET);
//-----
  for(i=limit; i>=0 && !IsStopped(); i--)
  {
    atr=kATR*Atr[i]; // ATR
    atr=MathMax(atr,ATRmin);
//-----
    if(MACDBuffer[i]>0) {ATRBuffer[i]=MACDBuffer[i]-atr;}
    if(MACDBuffer[i]<0) {ATRBuffer[i]=MACDBuffer[i]+atr;}
  }
//-----
  for(i=limit; i>=0 && !IsStopped(); i--)
  {
//-----
    Bear[i]=0;
    Bull[i]=0;
//-----
    if(MACDBuffer[i]>0 && MACDBuffer[i+1]<MACDBuffer[i] && ATRBuffer[i]>=0) {Bull[i]=MACDBuffer[i];}
    if(MACDBuffer[i]<0 && MACDBuffer[i+1]>MACDBuffer[i] && ATRBuffer[i]<=0) {Bear[i]=MACDBuffer[i];}
  }
//+------------------------------------------------------------------+
//----- Done
  return(rates_total);
}
//+------------------------------------------------------------------+

 
G001:
Testou a EA com outros indicadores e funciona.
Talvez o indicador seja o problema?
Com este indicador, abre-se no primeiro tique.

Desculpe, não sei onde acrescentar a impressão.

Exemplo para BUY_STOP, vai do vermelho para o cinzento.

Ainda não encontrei nenhum problema, tudo funciona. Tirei os códigos da página 189.

 

Pergunta sobre propriedade do programa#property tester_file "" .

Preciso de ligar muitos ficheiros à minha EA para testes, 3800 para ser exacto .

Níveis de opção diários para vários instrumentos apenas para este ano .

Qual é a solução?

Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
  • www.mql5.com
Основы языка / Препроцессор / Свойства программ (#property) - Документация по MQL5
 
Karlson: Pergunta sobre propriedade do programa#property tester_file "" .

Necessidade de ligar muitos ficheiros à EA para testes, 3800 para ser exacto. Níveis de opção diários para vários instrumentos apenas para este ano. qual é a solução?

Se, para serem testados, se verificar que toda a informação contida nestes ficheiros deve ser imutável (arquivada). Tentaria escrever duas funções: uma redefine todos os dados de centenas de ficheiros num ficheiro, a outra lê esse ficheiro de acordo com regras bem definidas. Já tentou dessa forma?
 
Yedelkin:
Se, para serem testados, se verificar que toda a informação contida nestes ficheiros deve ser imutável (arquivada). Tentaria escrever duas funções: uma redefine todos os dados de centenas de ficheiros para um ficheiro, a outra lê este ficheiro de acordo com regras bem definidas. Já tentou dessa forma?
Ainda não o experimentei, mas a ideia de recolher num ficheiro é compreensível. Talvez os programadores indiquem uma opção - uma forma de ligar dados inalteráveis de uma pasta.
Razão: