どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 857

 

こんにちは!引用のティック履歴はどこで(どこで)手に入りますか?また、一番重要なことですが、mqlで各ティックは どのように参照するのでしょうか?

 
ikatsko:

こんにちは!引用のティック履歴はどこで(どこで)手に入りますか?また、一番重要なことですが、mqlで各ティックはどのように参照するのでしょうか?

もしかしたら、それが役に立つかもしれません。このメソッドでは、気配値の履歴を、ティック単位で取得することができます

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

 
Top2n:

役に立つかもしれません。この方法では、見積りの履歴を、ティック単位で取得することができます

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

いいリンクですね。ありがとうございました。しかし、2つ目の疑問があります。それは、MQLを使って、選択した各ティックに参照させる方法です。
 
ikatsko:
いいリンクですね。ありがとうございました。しかし、選択された各ティックに対応するために、MQLをどのように使用するかという第2の問題があります。

MQLによって。試しに、EAとしてコンパイルして、チャートに載せてみて、ファイルの中から「記録」ファイルを探してみてください

//+------------------------------------------------------------------+
//|                                                Запись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によって。試しに、EAとしてコンパイルして、チャートに載せてみて、ファイルの中から「記録」ファイルを探してみてください

頑張ってください。

ありがとうございました!頑張ってくださいこの手順では、現在の刻みをファイルに書き込むと 理解しています。はい?
 
ikatsko:
こちらこそ、ありがとうございました。この手順では、現在の刻みをファイルに書き込むと理解しています。はい?

はい、BidとAsk、そしてVolume です。Volume == 1のとき 新しいバーの 到着時刻は1tickである。









 
r772ra:

はい、BidとAsk、そしてVolume です。Volume == 1のとき、新しいバーの到着時刻は1tick である。










バーの配列に類似した配列があれば、例えば、各目盛りに 連続してアドレス指定できます。明らかに、私たちは履歴について話しているのです。このような配列は、履歴にある既存の引用符の値から手動で(自分で)形成する必要があると感じています。その後、その配列の要素を扱うことができるようになります。

 

こんにちは!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:一致しないデータエラー(ボリュームリミット412 2014.10.13 17時10分を超えた)されていない。

そして、テスト中にエラー "Checking USDJPYm,M5 arrow: Error in object creation: 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 установлена");
}