MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 357

 
STARIJ:
日付、時間、入札、計算結果を各ティック ごとにファイルに書き込んでみて ください。そして、それをExcelにアップロードして確認します。プログラムの数十行ごとに照合するのは、ほとんど意味がないのです

しかし、見てください。条件演算子のすべての分岐にreturnがある、つまり常に実行されているのです。そこで、条件演算子から取り出すのです。

Bid[1] - そうなんですか?


ありがとうございます。これから試してみます。私はあなたのコードの要点を理解し、それはすでに私のための偉大な成果です :)また、自分の欠点も見えてきました。

SRCボタンとは何ですか?

 
STARIJ:
日付、時間、Bid、計算結果を各ティック ごとにファイルに書き込んでみて ください。そして、それをExcelにアップロードして確認します。プログラムの数十行ごとに照合するのは、ほとんど意味がないのです

しかし、見てください。条件演算子のすべての分岐にreturnがある、つまり常に実行されているのです。そこで、条件演算子のスコープから外れるようにします。

Bid[1]・・・という感じでしょうか?


カスタムインジケータの"コンストラクタ "にコードを挿入しました。まとめました。OnCalculateが2つ定義されているため、コンパイラが警告を1つ生成しました。OHLC版が使用される(意味がわからない)。

編集された製品を入手した。チャートに貼り付けます。チャートの別ウィンドウが開きますが、ティックが出ているにもかかわらず、ヒストグラムの情報が表示されません。

どうしたんですか?お願いします、アドバイスお願いします。

#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Label2
#property indicator_label2  "Label2"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

//- local variables
int Tick, Tick2;       // Для вставки программы используйте кнопку SRC
double Bid1;

//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer);
   SetIndexBuffer(1,Label2Buffer);
   Bid1=Bid;
//---
   return(INIT_SUCCEEDED);
  }
  
 
    void start()   // Вместо start более модно писать OnTick
{
    if(Bid > Bid1) Tick++;                             
    else Tick2++;
    Bid1=Bid;                      
}
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

 
YarTrade:

カスタムインジケータの「コンストラクタ」にコードを挿入してみました。コンパイルした。コンパイラは1つの警告を出しました: 2つのOnCalculateが定義されています。OHLC版が使用される(意味がわからない)。

編集された製品を入手した。チャートに貼り付けます。チャートの別ウィンドウが開きますが、ティックが出ているにもかかわらず、ヒストグラムの情報が表示されません。

どうしたんですか?アドバイスをお願いします。

ここにコードを貼り付ける場合は、メッセージエディターSRCのボタンを使用します - メッセージフィールドの上部にあるメッセージフォーマットパネルには、多くの便利なものがあります。

入力中の文字のすぐ上に目線を上げるのは、難しいことではありませんよね?それに、スワッグではなく、普通のコードを見てもらったほうが気持ちいいじゃないですか。

私はあなたの投稿にあなたのコードを正しく挿入しました(SRC)。

 
Artyom Trishkin:

ここにコードを貼り付けたら、SRC投稿編集ボタンを使ってください。投稿ボックスの上部にある投稿書式設定パネルには、便利な機能がたくさんあります。

入力中の文字のすぐ上に目線を上げるのは、難しいことではありませんよね?それに、スワッグではなく、普通のコードを見たほうが、人は嬉しいじゃないですか。

私はあなたのためにあなたのメッセージにあなたのコードを正しく置いた(SRC)


ええ、ありがとうございます。それは知らなかった。

 
YarTrade:

OnCalculateが2つ定義されているため、コンパイラに警告を1つ発行しました。OHLCのバージョンが使用されます(この意味はよくわかりません)。

編集された製品を入手した。チャートに貼り付けます。チャートの別ウィンドウが開きますが、ティックが出ているにもかかわらず、ヒストグラムの情報が表示されません。

どうしたんですか?お願いします、アドバイスお願いします。

以前はStartという関数でしたが、Expert AdvisorではOnTick、indicatorではOnCalculateと 呼ばれるようになりました。コンパイラは、「同じ関数が異なる名前で2回使用されています」と警告します。Startの内容をOnCalculateに移動し、Startを削除します。また、何をどのように表示させるかをプログラムに記述する必要があります。まず、そこにどんなイメージを持たなければならないか、自分で決めてください。MQL言語の勉強は、スクリプトを書くことから始めるとよいでしょう。Expert Advisorはより複雑で、Indicatorはさらに複雑です。

 
STARIJ:

以前はStartという関数でしたが、現在はEAではOnTick、インジケーターではOnCalculateと呼ばれています。コンパイラは、「同じ関数が異なる名前で2回使用されています」と警告します。Startの内容をOnCalculateに移動し、Startを削除します。また、何をどのように表示させるかをプログラムに記述する必要があります。まず、そこにどんなイメージを持たなければならないか、自分で決めてください。MQL言語の勉強は、スクリプトを書くことから始めるとよいでしょう。Expert Advisorはもっと難しく、インジケータはさらに難しい。


OnCalculateに Startの内容を挿入できず、エラーが多発します

 
YarTrade: Startの内容をOnCalculateに挿入することができず、多くのエラーが発生します。


インジケーターには、スタート時点の情報しか表示されません。データウィンドウ(Ctrl-D)には、カーソルが向いているローソク足のデータが表示されます。

//+------------------------------------------------------------------+
//|                                                     -Тики-07.mq4 |
//+------------------------------------------------------------------+
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
//  #property indicator_plots   2        в MQL-4 такое отсутствует
#property indicator_label1  "Вверх"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  Salmon
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

#property indicator_label2  "Вниз"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2

datetime Время=0;   // Время прошлого бара
double Bid1;

double   Buf_1[], Buf_2[]; // 2 буфера

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
}
 
 
//+------------------------------------------------------------------+
//| 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[])
{
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[0]=0;         // и обнулить последний элемент буфера
      Buf_2[0]=0;
   }

   if(Bid > Bid1) Buf_1[0]++;                             
   else Buf_2[0]--;
   Bid1=Bid;                      

  return(rates_total);
}
 
Alexey Kozitsyn:

:)

と、作成した状況を関数名でどのように定式化するのか?
 
STARIJ:
また、作成した状況を関数名でどのように定式化するのか。

start - 旧名称。OnTick()はティック処理関数の実名です。

とにかく、どう定義してもいいのですが、「トレンディ」という言葉だけで、微笑ましくなりました。

 
Alexey Kozitsyn:

start - 旧名称。OnTick()はティック処理関数の実名です。

とにかく、どう定義してもいいんです。"トレンディ "という言葉だけで笑顔になれるんです。

Obsoleteはもう使われていない。しかし、スタートは生きているし、これからも生き続ける。