Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 747

 
Sergey Gritsay:

Vitaliy, controlla https://www.mql5.com/ru/docs/series/timeseries_access#synchronized, c'è uno script di esempio per caricare la cronologia, potrebbe aiutare

Grazie, cercherò di occuparmene.

Ora sorge già una domanda:

Il prossimo controllo importante è quello di verificare il tipo di programma da cui viene chiamata la funzione. Ricordate che inviare una richiesta di aggiornamento di una serie temporale con lo stesso periodo di quello dell'indicatore che chiama l'aggiornamento è altamente indesiderabile. L'indesiderabilità di richiedere dati dello stesso periodo di tempo di quello dell'indicatore è determinata dal fatto che l'aggiornamento dei dati storici viene eseguito nello stesso thread in cui lavora l'indicatore. Pertanto, c'è un'alta probabilità di uno scontro. Per controllarlo, usiamo la funzioneMQL5InfoInteger() con il modificatoreMQL5_PROGRAM_TYPE.

if(MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR&&Period()==periodo&&Symbol()==simbolo)
ritorno(-4);


Dovrebbe funzionare nel mio indicatore.

 

Signori, alle prese con ZigZag.

Ho bisogno di ottenere i dati esatti dei quattro vertici. Risulta che il primo, il più necessario vertice che iCustom dà in modo errato. È in ritardo rispetto all'immagine grafica, i prossimi tre sono corretti. Una cosa simile è già stata trovata - https://www.mql5.com/ru/forum/100123

Ho provato di tutto, ho anche creato un Expert Advisor separato solo per controllare i dati di ZigZag. Guardate voi stessi, forse ho fatto un errore da qualche parte? Basta installare e attivare la visualizzazione dei prezzi di apertura. Prendi questo...


//+------------------------------------------------------------------+
//|                                                  data_ZigZag.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

input string   data_Zig_Zag_IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII;
input int      ExtDepth=12;
input int      ExtDeviation=5;
input int      ExtBackstep =3;
input int n_zz=100;//n_zz =100; 
double pd_1,pd_2,pd_3,pd_4;
int pn_1,pn_2,pn_3,pn_4;
int zz_Handle;
double zz_buf[];
datetime time[];
string this_sym;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   this_sym=Symbol();
//+------------------------------------------------------------------+
//--- сохраним текущий символ графика для дальнейшей работы советника именно на этом символе
   zz_Handle=iCustom(this_sym,0,"Examples\\Zigzag",
                     ExtDepth,
                     ExtDeviation,
                     ExtBackstep
                     );
   Print(__FUNCTION__,"__LINE__",__LINE__," . . . . . ",
         "zz_Handle = ",zz_Handle,"  error = ",GetLastError());
//--- проверяем наличие хендла индикатора
   if(zz_Handle==INVALID_HANDLE)
     {
      //--- хендл не получен, выводим сообщение в лог об ошибке, завершаем работу с ошибкой
      Print(__FUNCTION__,"__LINE__",__LINE__," ----- ",
            "Не удалось получить хендл индикатора zz_Handle","  error = ",GetLastError());
      return(-1);
     }
//--- добавляем индикатор на ценовой график
   ChartIndicatorAdd(ChartID(),0,zz_Handle);
//--- устанавливаем индексацию для массива zz_buf как в таймсерии
   ArraySetAsSeries(zz_buf,true);
   ArraySetAsSeries(time,true);
//---

//+------------------------------------------------------------------+
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(zz_Handle);
   ArrayFree(zz_buf);
   ArrayFree(time);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//+------------------------------------------------------------------+
   int zz_copy=0;
//--- копируем данные из индикаторного массива в динамический массив 
   zz_copy=CopyBuffer(zz_Handle,0,0,n_zz,zz_buf);
//--- если есть ошибки, то выводим сообщение в лог об ошибке и выходим из функции
   if(zz_copy<0)
     {
      Print("Не удалось скопировать данные из индикаторного буфера zz_buf.  error = ",
            GetLastError()); return;
     }
//+------------------------------------------------------------------+
   pd_1 =0;
   pd_2 =0;
   pd_3 =0;
   pd_4 =0;
   pn_1 =0;
   pn_2 =0;
   pn_3 =0;
   pn_4 =0;

   int zz_q=ArraySize(zz_buf);
   int q=0;

   for(q=0; q<zz_q; q++)
     {
      if(zz_buf[q]!=0 && zz_buf[q]!=EMPTY_VALUE)
        {
              if(pd_1==0) { pn_1=q; pd_1=zz_buf[q]; }
         else if(pd_2==0) { pn_2=q; pd_2=zz_buf[q]; }
         else if(pd_3==0) { pn_3=q; pd_3=zz_buf[q]; }
         else if(pd_4==0) { pn_4=q; pd_4=zz_buf[q]; }
        }
      if(pn_4>0)break;
     }
//+------------------------------------------------------------------+
   CopyTime(this_sym,Period(),0,n_zz,time);
//+------------------------------------------------------------------+
   ObjectDelete(0,"name1");
   string name1="name1";

   if(!ObjectCreate(0,name1,OBJ_ARROW_UP,0,time[pn_1],pd_1))
     {
      Print(__FUNCTION__,"__LINE__",__LINE__,
            ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
     }
//--- установим размер знака 
   ObjectSetInteger(0,name1,OBJPROP_WIDTH,6);
//+------------------------------------------------------------------+
   ObjectDelete(0,"name2");
   string name2="name2";

   if(!ObjectCreate(0,name2,OBJ_ARROW_UP,0,time[pn_2],pd_2))
     {
      Print(__FUNCTION__,"__LINE__",__LINE__,
            ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
     }
//--- установим размер знака 
   ObjectSetInteger(0,name2,OBJPROP_WIDTH,6);
//+------------------------------------------------------------------+
   ObjectDelete(0,"name3");
   string name3="name3";

   if(!ObjectCreate(0,name3,OBJ_ARROW_UP,0,time[pn_3],pd_3))
     {
      Print(__FUNCTION__,"__LINE__",__LINE__,
            ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
     }
//--- установим размер знака 
   ObjectSetInteger(0,name3,OBJPROP_WIDTH,6);
//+------------------------------------------------------------------+
   ObjectDelete(0,"name4");
   string name4="name4";

   if(!ObjectCreate(0,name4,OBJ_ARROW_UP,0,time[pn_4],pd_4))
     {
      Print(__FUNCTION__,"__LINE__",__LINE__,
            ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
     }
//--- установим размер знака 
   ObjectSetInteger(0,name4,OBJPROP_WIDTH,6);
//+------------------------------------------------------------------+
///*
   if(pd_1!=0 && pd_2!=0 && pd_3!=0 && pd_4!=0)
      Alert(__FUNCTION__,"__LINE__",__LINE__,
            "   q =",q,
            "   pd_1 =",pd_1,
            "   pd_2 =",pd_2,
            "   pd_3 =",pd_3,
            "   pd_4 =",pd_4,

            "   pn_1 =",pn_1,
            "   pn_2 =",pn_2,
            "   pn_3 =",pn_3,
            "   pn_4 =",pn_4,
            "   TimeCurrent()=",TimeCurrent()
            );
//*/
//+------------------------------------------------------------------+
  }
//+------------------------------------------------------------------+
Come ottenere dati accurati?
Как получить значение индикатора ZigZag в точках...
Как получить значение индикатора ZigZag в точках...
  • 2006.04.09
  • www.mql5.com
Уважаемые гуру и другие адепты MQ4 Я прикрепил схемку. Это стандартный ZigZag...
 
Salve. L'altro ieri ho iniziato a studiare MQL.


Il tester dà questo risultato:


Non riesco a capire la fregatura. Cari professionisti, per favore illuminatemi, ve ne sarei molto grato.


 

Domanda Posso scrivere un programma in Metatrader 4 per aprire da 2 a 250 posizioni di mia scelta con uno stoploss impostato e un profitto impostato in un clic? Così non devo aprirne manualmente uno alla volta

 
fxtz:

Domanda Posso scrivere un programma in Metatrader 4 per aprire da 2 a 250 posizioni di mia scelta con uno stoploss impostato e un profitto impostato in un clic? Non è necessario aprire uno per uno

Sì, è possibile. Ma stai facendo la domanda nel posto sbagliato - qui su MT5.

Ci sono diversi thread per i neofiti di MT4.

Per esempio - qui.

 
antonsinichkin:
Salve. L'altro ieri ho iniziato a studiare MQL.


Il tester dà questo risultato:


Dov'è la fregatura che non riesco a capire. Illustri professionisti vi prego di illuminarmi, ve ne sarò molto grato.



Traducetelo in stringa prima della stampa. O spiegare cosa c'è di sbagliato.
 
I commenti non relativi a questo argomento sono stati spostati in "Domande dai principianti di MQL4 MT4 MetaTrader 4".
 
Buon pomeriggio. Dopo l'ultimo aggiornamento di MT5 alla build 1604 i miei indicatori non funzionano più correttamente. Sto usando
I cosiddetti indicatori "liquidi". Per esempio, ho diversi stocastici multiperiodali in una finestra. Bene, ora i corti sono disegnati
Come prima, quelli leggermente più lunghi disegnano solo alcune barre e quelli più lunghi non vengono disegnati affatto.

Ho l'impressione che improvvisamente abbiano cominciato a mancare la storia. Puoi dirmi cosa potrebbe essere sbagliato?
 
Sono appena passato da mql4 a mql5. Sto testando un Expert Advisor sull'indice RTS e ora ho il problema che apre diverse operazioni, ma una delle condizioni per aprire un'operazione è la seguente: if (...OrdiniTotali()==0). Perché questa condizione non funziona? Cosa posso fare per aprire una sola posizione?
 
RogozaIV:
Sono recentemente passato da mql4 a mql5. Sto testando un Expert Advisor sull'indice RTS e ho un problema con l'apertura di diverse posizioni, sebbene una delle condizioni per l'apertura di una posizione sia specificata: if (...OrdersTotal()==0). Perché questa condizione non funziona? Cosa posso fare per aprire un solo trade?
PositionsTotal()
Motivazione: