Errori, bug, domande - pagina 422

 
Dopo l'aggiornamento alla build 468 nel tester, le compravendite diagnosticate come [trade disabled] non vengono più elaborate. Test sul conto del campionato 2010.
Automated Trading Championship 2010
  • championship.mql5.com
Automated Trading Championship 2010
 

Buon pomeriggio, membri del forum.

Per favore, aiutatemi a capire. L'indicatore non appare sul grafico per qualche motivo - non so dove sia l'errore.

In generale, dovrebbe essere visualizzato sul grafico in questo modo:

Ma non ho niente nella finestra di questo indicatore. MT4.

Ecco il codice dell'indicatore. C'è un errore nel codice o in qualcos'altro?

//+------------------------------------------------------------------+
//|                                                        Bands.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Blue
#property indicator_color2 Yellow
#property indicator_color3 Red
//---- indicator parameters
extern int    BandsPeriod=50;
extern int    BandsShift=0;
extern double BandsDeviations=2.0;
extern int    TrendBars = 10;
extern bool EnableTextDisplay = true;
//---- buffers
double MovingBuffer[];
double UpperBuffer[];
double LowerBuffer[];
double HighTrend[];
double LowTrend[];
double MidTrend[];

//bool DisplayText = false;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,MovingBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,UpperBuffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,LowerBuffer);
   SetIndexBuffer(3,HighTrend);
   SetIndexBuffer(4,LowTrend);
   SetIndexBuffer(5,MidTrend);
   
//----
   SetIndexDrawBegin(0,BandsPeriod+BandsShift);
   SetIndexDrawBegin(1,BandsPeriod+BandsShift);
   SetIndexDrawBegin(2,BandsPeriod+BandsShift);
//----
   if(EnableTextDisplay)
   {
      DisplayLabel_1();
      DisplayLabel_2();
      DisplayLabel_3();
   }
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Bollinger Bands                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int    i,k,counted_bars=IndicatorCounted();
   double deviation;
   double sum,oldval,newres;
//----
   if(Bars<=BandsPeriod) return(0);
//---- initial zero
   if(counted_bars<1)
      for(i=1;i<=BandsPeriod;i++)
        {
         MovingBuffer[Bars-i]=EMPTY_VALUE;
         UpperBuffer[Bars-i]=EMPTY_VALUE;
         LowerBuffer[Bars-i]=EMPTY_VALUE;
        }
//----
   int limit=Bars-counted_bars;
   if(counted_bars>0) limit++;
   for(i=0; i<limit; i++)
      MovingBuffer[i]=iMA(NULL,0,BandsPeriod,BandsShift,MODE_SMA,PRICE_CLOSE,i);
//----
   i=Bars-BandsPeriod+1;
   if(counted_bars>BandsPeriod-1) i=Bars-counted_bars-1;
   while(i>=0)
     {
      sum=0.0;
      k=i+BandsPeriod-1;
      oldval=MovingBuffer[i];
      while(k>=i)
        {
         newres=Close[k]-oldval;
         sum+=newres*newres;
         k--;
        }
      deviation=BandsDeviations*MathSqrt(sum/BandsPeriod);
      UpperBuffer[i]=oldval+deviation;
      LowerBuffer[i]=oldval-deviation;
      i--;
     }
//----

   double TestVal1 = 0;
   double TrendValueHigh = 0;
   for(i=0;i<TrendBars;i++)
   {
         TestVal1 = UpperBuffer[i] - UpperBuffer[1+1];
         TrendValueHigh = TrendValueHigh - TestVal1;

   }
   double TrendValueLow = 0;
   for(i=0;i<TrendBars;i++)
   {
         TestVal1 = LowerBuffer[i] - LowerBuffer[1+1];
         TrendValueLow = TrendValueLow - TestVal1;

   }   
   double TrendValueMid = 0;
   for(i=0;i<TrendBars;i++)
   {
         TestVal1 = MovingBuffer[i] - MovingBuffer[1+1];
         TrendValueMid = TrendValueMid - TestVal1;

   }  
   
   
   MidTrend[0] = TrendValueMid * 1000;
   HighTrend[0] = TrendValueHigh * 1000;
   LowTrend[0] = TrendValueLow * 1000;


   if(EnableTextDisplay)
   {
      ObjectSetText("Label_Message1","High " + DoubleToStr(HighTrend[0], 2),14,"Arial",Yellow);
      ObjectSetText("Label_Message2","Mid " + DoubleToStr(MidTrend[0], 2),14,"Arial",Yellow);
      ObjectSetText("Label_Message3","Low " + DoubleToStr(LowTrend[0], 2),14,"Arial",Yellow);
   }


   return(0);
  }
  
  int  DisplayLabel_1()  
{
   ObjectCreate("Label_Message1", OBJ_LABEL, 0, 0, 0);// Creating obj.
   ObjectSet("Label_Message1", OBJPROP_CORNER, 1);    // Reference corner
   ObjectSet("Label_Message1", OBJPROP_XDISTANCE, 10);// X coordinate
   ObjectSet("Label_Message1", OBJPROP_YDISTANCE, 15);// Y coordinate

   ObjectSetText("Label_Message1","",14,"Arial",White);
   
   return(0);      
}
int  DisplayLabel_2()  
{
   ObjectCreate("Label_Message2", OBJ_LABEL, 0, 0, 0);// Creating obj.
   ObjectSet("Label_Message2", OBJPROP_CORNER, 1);    // Reference corner
   ObjectSet("Label_Message2", OBJPROP_XDISTANCE, 10);// X coordinate
   ObjectSet("Label_Message2", OBJPROP_YDISTANCE, 35);// Y coordinate

   ObjectSetText("Label_Message2","",14,"Arial",White);
   
   return(0);      
}
int  DisplayLabel_3()  
{
   ObjectCreate("Label_Message3", OBJ_LABEL, 0, 0, 0);// Creating obj.
   ObjectSet("Label_Message3", OBJPROP_CORNER, 1);    // Reference corner
   ObjectSet("Label_Message3", OBJPROP_XDISTANCE, 10);// X coordinate
   ObjectSet("Label_Message3", OBJPROP_YDISTANCE, 55);// Y coordinate

   ObjectSetText("Label_Message3","",14,"Arial",White);
   
   return(0);      
}

//+------------------------------------------------------------------+
 

Mi dispiace, ma è meglio andare sul sito di MT4

http://forum.mql4.com/ru/


È MT5.

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


Qualcuno può dirmi qual è la dimensione massima consentita del file bin

che può essere aperto dal consigliere per la lettura, perché 25 m con 3 mln.

Può essere che 25 metri e 3 milioni di decine di valori non saranno letti, ma 500.000 valori saranno letti?

MQL4: форум по механическим торговым системам и тестированию стратегий
  • www.mql5.com
MQL4: форум по механическим торговым системам и тестированию стратегий
 
Im_hungry:

Mi dispiace, ma è meglio andare sul sito di MT4

https://www.mql5.com/ru/forum


È MT5.

Grazie, ci andrò.
 
Im_hungry:

Qualcuno può dirmi qual è la dimensione massima ammissibile del file bin

che può essere aperto dall'Expert Advisor per la lettura, perché 25 m con 3 mln.

non vuole aprirsi, ma si apre con 500.000 valori ?

Agli sviluppatori. Non c'è nulla nella documentazione sulla limitazione della dimensione dei file.
 
Im_hungry:


Qualcuno può dirmi qual è la dimensione massima ammissibile del file bin

che può essere aperto dall'Expert Advisor per la lettura, perché 25 m con 3 mln.

non vuole aprirsi, ma si apre con 500.000 valori?

Suppongo che il file venga letto nell'array? - Molto probabilmente non c'è abbastanza RAM.
 
Stringa


Print((int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR)," ",(int)ChartGetInteger(0,CHART_VISIBLE_BARS));

Restituisce quasi gli stessi valori (la differenza è solo una barra), come è possibile?

2011.06.18 00:03:45     CHFJPY (CHFJPY,M15)     384 385

Nell'idea una funzione dovrebbe restituire quante barre visualizzare sul grafico corrente (per esempio 5000) e l'altra solo il numero che entra nello schermo (nel mio caso poco più di 380).

Build 466, Full 7 x64

 
olyakish:
La linea


Restituisce quasi gli stessi valori (la differenza è solo una barra), come è possibile?

Nell'idea una funzione dovrebbe restituire il numero totale di barre da visualizzare nel grafico corrente (per esempio 5000) e l'altra dovrebbe restituire solo il numero che entra nello schermo (nel mio caso poco più di 380).

Build 466, Fortock OS 7 x64

Proprio così. Numero di barre visibili:
ChartGetInteger(0,CHART_VISIBLE_BARS)

è sempre 1 in più del numero della prima barra visibile (a sinistra):

ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR)

L'ultima barra (a destra) ha il numero 0.

A meno che il grafico non venga fatto scorrere. Se il grafico è "scrollato", <numero della prima barra visibile> = <numero di barre visibili> + <lo spostamento del grafico in barre>-1.

E quello che scrivi:

...quante barre totali visualizzare sì il grafico corrente (per esempio 5000)...

è un po' diverso:

TerminalInfoInteger(TERMINAL_MAXBARS);   // Максимальное количество баров на графике
 

A proposito di non aprire la dimensione del file, e per l'anno 2010 e 2009 2008 non vuole aprire,

Ho provato ad aprire un file creato con questo strumento ma dice che non si può aprire.

2 значения - первое целое (хранит время в секундах)

второе дробное (цену или еще что),


Когда время (т.е. секунды) в файле совпадает с временем, текущим, используем второе значение

и выводим его. Все это я реализовал следующим образом - работает без косяков - пока :-)


double proverka()
{
 handle= FileOpen("kor.bin", FILE_BIN|FILE_READ);
 if(handle<0) Print("-----Неоткрывается :-)");
 ulong file=FileSize(handle);
 ulong N = 0.0;
 double kor = 0.0;
 datetime bar[1];
 CopyTime(Symbol_1,NULL,0,1,bar);
 ulong New = (ulong) bar[0];
 while (N < file)
  {
   kor=FileReadDouble(handle); 
   N = FileTell(handle);
   if (kor == New) 
    {
     double ss = FileReadDouble(handle);
     FileClose(handle);
     return (ss);
     break;
    }
  } 
 FileClose(handle);
 return (kor);
}

Qualsiasi intervallo di tempo tranne 2011, 01, 01 apre il resto no,

Che tipo di problema?

Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
Файловые операции / FileOpen - Документация по MQL5
 
uncleVic:

è un po' diverso:


Temo che non funzionerà.

TerminalInfoInteger(TERMINAL_MAXBARS); 

Per esempio, ho 50000 barre selezionate nelle mie impostazioni ma 11375 barre caricate nella realtà.


Il metodo

PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,);


E quale numero usare qui.

ZS Ecco cosa c'è suInit

   SetIndexBuffer(0,CHF,INDICATOR_DATA);
   PlotIndexSetString(0,PLOT_LABEL,"CHF");
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrMagenta);
   ArraySetAsSeries(CHF,true);
   ArrayInitialize(CHF,EMPTY_VALUE);
   //PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,);

E la spazzatura nella storia non viene pulita...