Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 857

 

Ciao, dove posso ottenere (dov'è) la cronologia dei tick delle quotazioni? E, soprattutto, come fare riferimento a ogni tick in mql?

 
ikatsko:

Ciao, dove posso ottenere (dov'è) la cronologia dei tick delle quotazioni? E, soprattutto, come fare riferimento a ogni tick in mql?

Forse vi aiuterà. Il metodo permette di ottenere la storia delle quotazioni, per tick

http://tradelikeapro.ru/kak-poluchit-kachestvo-modelirovaniya-99/

 
Top2n:

Potrebbe aiutare. Il metodo permette di ottenere la cronologia delle citazioni, per tick

http://tradelikeapro.ru/kak-poluchit-kachestvo-modelirovaniya-99/

Buon link. Grazie! Ma c'è una seconda domanda: come usare MQL per riferirsi ad ogni tick selezionato?
 
ikatsko:
Buon link. Grazie! Ma c'è una seconda domanda: come usare MQL per indirizzare ogni tick selezionato?

Per mezzo di MQL. Provatelo, compilatelo come EA e mettetelo su un grafico, e cercate il file "Record" nei file

//+------------------------------------------------------------------+
//|                                                ЗаписьBid_Ask.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
Запись();
   
  }
//+------------------------------------------------------------------+
void Запись()
{
  int handle;
  string st=TimeToStr(TimeCurrent(), TIME_DATE);
  string filename = st+" Запись.csv"; // Формируем имя файла
  handle = FileOpen(filename,FILE_CSV|FILE_READ | FILE_WRITE,';');
  if(handle < 1)
  {
    Print("Не удалось создать файл. Ошибка #", GetLastError());
    return;
    //FileClose(handle);
  }
  
  FileWrite(handle,                   
            " Время ",
            " Bid ",
            " Ask ",
            " Volume "
            ); // заголовок
  FileSeek(handle, 0, SEEK_END);
  FileWrite(handle,
            TimeToStr(TimeCurrent(),TIME_MINUTES|TIME_SECONDS),
            Bid,
            Ask,
            Volume[0]
            );
 
  FileClose(handle);
  return;
}

Buona fortuna.

 
r772ra:

Per mezzo di MQL. Provatelo, compilatelo come EA e mettetelo su un grafico, e cercate il file "Record" nei file

Buona fortuna.

Grazie e buona fortuna! Ho capito che questa procedura scriverà i tick attuali nel file. Sì?
 
ikatsko:
Grazie anche a te! Ho capito che questa procedura scriverà i tick attuali nel file. Sì?

Sì. Bid b Ask, e ancheVolume. QuandoVolume == 1, c'è un tempo di arrivo di 1 tick di una nuova barra.









 
r772ra:

Sì. Bid b Ask, e ancheVolume. QuandoVolume == 1, c'è un tempo di arrivo di 1 tick di una nuova barra.










Mi piacerebbe avere un array analogo a quello delle barre, in modo da poter indirizzare, per esempio, consecutivamente ad ogni tick, ovviamente, stiamo parlando di storia. Sento che dovrò formare manualmente (da solo) un tale array a partire dai valori esistenti delle citazioni nella storia. E poi sarò in grado di indirizzare gli elementi di quell'array

 

Ciao, sto smontando l'indicatore SMA. Non riesco a capirlo:

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 bars count
   if(rates_total<InpMAPeriod-1 || InpMAPeriod<2)
      return(0);
//--- counting from 0 to rates_total
   ArraySetAsSeries(ExtLineBuffer,false); //  если не объявлять то по умолчанию разве не стоит тоже самое?
   ArraySetAsSeries(close,false);
//--- first calculation or number of bars was changed

//+------------------------------------------------------------------+
//|   simple moving average                                          |
//+------------------------------------------------------------------+
void CalculateSimpleMA(int rates_total,int prev_calculated,const double &price[])
  {
   int i,limit;
//--- first calculation or number of bars was changed
   if(prev_calculated==0)
   
     {
      limit=InpMAPeriod;
      //--- calculate first visible value
      double firstValue=0;
      for(i=0; i<limit; i++)
         firstValue+=price[i];
      firstValue/=InpMAPeriod;
      ExtLineBuffer[limit-1]=firstValue;          Не чего не пойму, записываем в массив где limit =периоду(например 15-1),
     }
   else
      limit=prev_calculated-1;                       После первого запуска пусть будет равен Limit = 256 - 1;
//--- main loop
   for(i=limit; i<rates_total && !IsStopped(); i++)
      ExtLineBuffer[i]=ExtLineBuffer[i-1]+(price[i]-price[i-InpMAPeriod])/InpMAPeriod;  Тогда ExtLineBuffer[i-1]=0 т.к. ExtLineBuffer[256-1]=0 так получается, объясните пожалуйста эту строчку.
                                                                                                       Заранее благодарю
//---
  }
Если надо вставить (High[i+j]+Low[i+j])*0.5; то есть применить Median Price (HL/2)  Куда лучше подставить?
 

Quando si ottimizza nel tester, il seguente messaggio appare spesso nel log

"2015.03.05 11:04:55.924 Gestore della memoria: impossibile allocare 343699140 byte di memoria"

Per favore consigliate quale memoria non può essere rilevata dal terminale? Come si può rimediare?

 

Ciao, guarda il codice qui sotto, creazione dell'oggetto "Arrow" sul segnale, le frecce non vengono disegnate nel tester, anche se il log passa, e anche nel log all'avvio nel tester scrive un errore TestGenerator: unmatched data error (volume limit 412 at 2014.10.13 17:10 exceeded),

E durante il test genera un errore "Checking USDJPYm,M5 arrow: Error in object creation: code #4200" - ma credo che questo sia normale, perché all'inizio il programma trova che l'oggetto è stato creato, e dopo averlo cancellato, lo crea di nuovo. In generale, vi sarei grato per i vostri commenti alle domande.

Non giudicare strettamente come è scritto.

//+------------------------------------------------------------------+
//| SignalOpenOrderBuy SendMail                                      |
//+------------------------------------------------------------------+
if (PLO0>S0 && PLO1<=S1 && PLO2<S2 && Time[0] > SignalTime)
{
SignalTime = TimeCurrent();
bool SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);
Print("Стрелка Buy установлена");
ObjectSetInteger(0,"ArrowBay",OBJPROP_COLOR,clrGreen);
if(!SignalBuy)
Print("Ошибка создания объекта: code #",GetLastError());
ResetLastError();
ObjectDelete(0,"ArrowBay");
RefreshRates();
SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);
ObjectSetInteger(0,"ArrowBay",OBJPROP_COLOR,clrGreen);
if(!SignalBuy)
Print("Ошибка создания объекта: code #",GetLastError());
else
Print("Стрелка Buy установлена");
}


Motivazione: