포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 857

 

안녕하세요! 따옴표의 틱 기록을 어디에서 얻을 수 있습니까? 그리고 가장 중요한 것은 mql의 각 틱 에 액세스하는 방법입니다.

 
ikatsko :

안녕하세요! 따옴표의 틱 기록을 어디에서 얻을 수 있습니까? 그리고 가장 중요한 것은 mql의 각 틱에 액세스하는 방법입니다.

도움이 될 수 있습니다. 이 방법을 사용하면 따옴표로 따옴표의 기록을 얻을 수 있습니다.

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

 
Top2n :

도움이 될 수 있습니다. 이 방법을 사용하면 따옴표로 따옴표의 기록을 얻을 수 있습니다.

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

좋은 링크. 고맙습니다! 그러나 두 번째 질문도 있습니다. MQL을 사용하여 선택한 각 틱에 액세스하는 방법은 무엇입니까?
 
ikatsko :
좋은 링크. 고맙습니다! 그러나 두 번째 질문도 있습니다. MQL을 사용하여 선택한 각 틱에 액세스하는 방법은 무엇입니까?

MQL 도구. Expert Advisor로 차트에서 컴파일하고 파일에서 "기록" 파일을 찾습니다.

 //+------------------------------------------------------------------+
//|                                                Запись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 ;
}

행운을 빕니다.

 
r772ra :

MQL 도구. Expert Advisor로 차트에서 컴파일하고 파일에서 "기록" 파일을 찾습니다.

행운을 빕니다.

감사합니다! 나는 이 절차가 현재 틱을 파일에 기록 한다는 것을 이해합니다. 예?
 
ikatsko :
감사합니다! 나는 이 절차가 현재 틱을 파일에 기록한다는 것을 이해합니다. 예?

네. Bid B Ask, 그리고 Volume. Volume == 1인 경우 새 막대 의 1틱 도착 시간이 있습니다.









 
r772ra :

네. Bid b Ask, 그리고 Volume. Volume == 1 이면 새 막대의 1틱 도착 시간이 있습니다.










예를 들어 각 틱 을 순차적으로 참조할 수 있도록 막대 배열과 유사한 배열을 갖고 싶었습니다. 우리가 역사에 대해 이야기하고 있다는 것이 분명합니다. 나는 역사에서 사용 가능한 따옴표 값에서 그러한 배열을 수동으로 (혼자서) 형성해야 할 것이라고 생각합니다. 그런 다음 이 배열의 요소에 액세스합니다.

 

안녕하세요! SMA 표시기 이해. 내가 이해할 수없는:

 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)  Куда лучше подставить?
 

테스터에서 최적화할 때 로그에 다음 메시지가 자주 나타납니다.

"2015.03.05 11:04:55.924 메모리 처리기: 343699140바이트의 메모리를 할당할 수 없습니다."

친애하는, 단말기가 감지할 수 없는 종류의 메모리를 알려주세요? 어떻게 치료됩니까?

 

안녕하세요! 아래 코드를 보십시오. 신호에 "화살표" 개체를 생성 하면 로그를 통과하지만 테스터에서 화살표를 그리지 않으며 테스터에서 시작할 때 로그에 오류 TestGenerator: unmatched를 씁니다. 데이터 오류(2014.10.13 17:10에서 볼륨 제한 412 초과),

테스트하는 동안 오류가 발생합니다. "Checking arrow USDJPYm,M5: Error creation object: code #4200" - 그러나 프로그램이 처음에 개체가 생성되었음을 발견하고 삭제한 후 다시 생성하기 때문에 이것이 정상임을 이해합니다. 일반적으로 질문에 대한 의견에 감사드립니다.

기록된 대로 엄격하게 판단하지 마십시오.

 //+------------------------------------------------------------------+
//| 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 установлена" );
}