Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1295

 
Michail_David:

Grazie, Vitaly. Ma ottengo ancora un errore nella linea ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); sull'elemento [i}.

1. Controllare gli indici.

   SetIndexBuffer(2,ExtTempBuffer);
   SetIndexBuffer(2,ExtPriceBuffer);

2. Perché avete bisogno di questi 2 buffer

      ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2);
      ExtPriceBuffer[i] = NormalizeDouble((close[i+1]-open[i+1])/Point(),2);

se

 ExtPriceBuffer[i] = ExtTempBuffer[i+1]
 
Michail_David:

dà un errore nella linea ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); sull'elemento [i}.

Cattura

//+------------------------------------------------------------------+
//|                                                         MSBB.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#include <MovingAverages.mqh>

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1  clrGreen
#property indicator_color2  clrRed
#property  indicator_width1  1
input int            InpMSBBPeriod=3;        // Period
input ENUM_MA_METHOD InpMSBBMethod=MODE_SMA;  // Method
//--- indicator buffers
double         ExtMSBBBuffer[];
double         ExtTempBuffer[];
double         ExtPriceBuffer[];
double         ExtSignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
//--- indicator buffers mapping
   IndicatorDigits(Digits);
//--- drawing settings
   IndicatorBuffers(4);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMSBBBuffer);
   SetIndexBuffer(1,ExtSignalBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(2,ExtTempBuffer);
   SetIndexBuffer(3,ExtPriceBuffer);
   SetIndexDrawBegin(1,InpMSBBPeriod);
//--- name for DataWindow and indicator subwindow label
   IndicatorShortName("MSBB("+IntegerToString(InpMSBBPeriod)+")");
   SetIndexLabel(0,"MSBB");
   SetIndexLabel(1,"Signal");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator 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[])
  {
//------
   if((rates_total-prev_calculated-InpMSBBPeriod)<=0)return(0);
   
   for(int i=rates_total-prev_calculated-InpMSBBPeriod-1;i>=0;i--)
     {
      ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2);
      ExtPriceBuffer[i] = NormalizeDouble((close[i+1]-open[i+1])/Point(),2);
      //ExtMSBBBuffer[i]=price_open+ExtTempBuffer[i];
      //Print("ExtPriceBuffer[i] = ", ExtPriceBuffer[i]);
      if(ExtTempBuffer[i]==0)
         ExtMSBBBuffer[i]=0.0;
      if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]>0)
        {
         double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2);
         if((price_open<0 && price_close>0)||(price_open>0 && price_close<0))
            ExtMSBBBuffer[i] = 0.0;
         if((price_open<0 && price_close<0)||(price_open>0 && price_close>0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]<0)
        {
         double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2);
         if((price_open<0 && price_close>0)||(price_open>0 && price_close<0))
            ExtMSBBBuffer[i] = 0.0;
         if((price_open>0 && price_close>0)||(price_open<0 && price_close<0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]<0)
        {
         double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2);
         if((price_open<0 && price_close>0)||(price_open>0 && price_close<0))
            ExtMSBBBuffer[i]=0.0;
         if((price_open<0 && price_close<0)||(price_open>0 && price_close>0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]>0)
        {
         double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2);
         if((price_open>0 && price_close<0)||(price_open<0 && price_close>0))
            ExtMSBBBuffer[i]=0.0;
         if((price_open>0 && price_close>0)||(price_open<0 && price_close<0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      //--- signal line counted in the 2-nd buffer
      //ExtSignalBuffer[i]=iMAOnArray(ExtMSBBBuffer,0,InpMSBBPeriod,0,InpMSBBMethod,0);
      SimpleMAOnBuffer(rates_total,prev_calculated,1,InpMSBBPeriod+2,ExtMSBBBuffer,ExtSignalBuffer);
      Print ("ExtSignalBuffer = ", ExtSignalBuffer[i]);
      //--- done
     }
   /* if(ExtPriceBuffer[i]>0||ExtPriceBuffer[i]<0)
     {
      ExtMSBBBuffer[i] = ExtPriceBuffer[i]+ExtTempBuffer[i];
      Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]);
     }
   if(ExtPriceBuffer[i]==0)
     {
      ExtMSBBBuffer[i] = 0.0;
      Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]);
     }
   }*/
//---
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Ciao, c'èun indicatore modificato"iexposuregmini.mq4" basato sull'indicatore iExposure.mq4 costruito nel terminale. Potete per favore consigliarmi come spostare la posizione (finestra) dell'informatore nell'angolo in basso a sinistra della finestra del grafico? E dopo la cancellazione dell'indicatore da un grafico, la barra dell'indicatore rimane... Come si può rimediare? Vi sono molto grato in anticipo!
Как заказать торгового робота на MQL5 и MQL4
Как заказать торгового робота на MQL5 и MQL4
  • www.mql5.com
Главным преимуществом торговых терминалов MetaTrader является возможность создания автоматических торговых систем, способных совершать торговые операции без вмешательства трейдера, что позволяет исключить влияние психологии на результаты торговли. Для этого нужно сформулировать торговую стратегию и реализовать ее в виде программы на языке MQL...
File:
 
MakarFX:

1. Controllare gli indici

2. Perché avete bisogno di questi 2 buffer?

Con un buffer ExtTempBuffer[i]=ExtTempBuffer[i+1] non ha funzionato, ho deciso di provare in questo modo, ma non ha funzionato nemmeno questo.

 
Michail_David:

Con un buffer ExtTempBuffer[i]=ExtTempBuffer[i+1] non ha funzionato, ho deciso di provare in questo modo, ma non ha funzionato nemmeno questo.

Ho postato il codice funzionante

 
MakarFX:

Cattura

Grazie Mark. Stesso errore di nuovo sulla stessa linea durante il test. Non funziona in nessun modo.

Questo è ciò che 2020.11.03 23:38:19.815 2020.07.10 16:10:00 MSBB EURUSD,M5: array out of range in 'MSBB.mq4' (78,20)


 
Michail_David:

Grazie, Mark. Stesso errore di nuovo sulla stessa linea durante il test. Non funziona in nessun modo.

Questo è quello che dice 2020.11.03 23:38:19.815 2020.07.10 16:10:00 MSBB EURUSD,M5: array out of range in 'MSBB.mq4' (78,20)


Non ricevo nessun errore, ma i log sono enormi a causa di

Print ("ExtSignalBuffer = ", ExtSignalBuffer[i]);
 
MakarFX:

Non ricevo nessun errore, ma i log sono enormi a causa di

Sì, lo stesso. Non mi sembra di aver tenuto conto di tutte le condizioni. Sul valore del segnale molti sono enormi. Grazie per il vostro aiuto. Dovrò affrontare le condizioni d'ora in poi.

 
Александр:

Non si apre perché una delle condizioni non è soddisfatta.

È

o questo

Commentate i due flash // e vedrete di quale si tratta. È così che troverete l'errore.

Grazie alexander!

 
MakarFX:

Cattura

Compila senza problemi

'MSBB.mq4' MSBB.mq4 1 1
'MovingAverages.mqh' MovingAverages.mqh 1 1
0 errori, 0 avvisi, 187 msec trascorsi 1 1

Motivazione: