初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 605

 
Alexander Antoshkin:

ウラジミールさん、こんにちは。

私の質問の仕方が悪かったのでしょう。

サブウィンドウは必要ない、インジケータは標準チャートとして価格チャートに配置する必要がある

私はそれを一例としてとらえ、理解しようと努めています。

チャートに搭載するインジケーターに番号をつけて、「Add」ボタンで必要な枚数をチャート上に作成できるようにしたいのですが・・・・。十字」ボタンで選択したものを削除したいのですが・・・・・・(まだ記述しません))。

メインチャートウィンドウにインジケータを追加する場合

サブウィンドウ

[0 はメインチャートウインドウを意味 します。新しいウィンドウにインジケータを追加するには、パラメータは最後に存在したウィンドウのインデックスより1つ多く、つまりCHART_WINDOWS_TOTALと 同じである必要があります。パラメータ値がCHART_WINDOWS_TOTALを 超える場合、新しいウィンドウは作成されず、インジケータも追加されません。

この段階ではエキスパートがまだ形成されていないため、OnInit()にインジケータを追加することはできません。しかし、関数 - OnTick()はExpert Advisorが完全に動作していることを示すものです。

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

input int MA_Period=21;
input int MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMA;
//--- variables
int MA_handle=INVALID_HANDLE;
bool first_start=false;
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit()
  {
   Print(__FUNCTION__,", first_start = ",first_start);
   MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average",MA_Period,MA_Shift,MA_Method,PRICE_CLOSE);
   if(MA_handle==INVALID_HANDLE)
      return(INIT_FAILED);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!first_start)
     {
      if(AddIndicator()) //попробуем добавить индикатор на график 
         first_start=true;
     }
  }
//+------------------------------------------------------------------+ 
//| Функция проверки и добавления индикатора на график               | 
//+------------------------------------------------------------------+ 
bool AddIndicator()
  {
//--- сбросим код ошибки 
   ResetLastError();
//--- накладываем индикатор на график   
   int subwindow=0;
   PrintFormat("Добавляем индикатор на окно %d графика",subwindow);
   if(!ChartIndicatorAdd(0,subwindow,MA_handle))
     {
      PrintFormat("Не удалось добавить индикатор  на окно %d графика. Код ошибки  %d",
                  subwindow,GetLastError());
     }
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
また、AddIndicator()関数を書き換えて、インジケータの追加に失敗したときにfalseを返すようにします。
削除済み  
Alexander Antoshkin:

ウラジミールさん、こんにちは。

私の質問の仕方が悪かったのでしょう。

サブウィンドウは必要ない、インジケータは標準チャートとして価格チャートに配置する必要がある

私はそれを一例としてとらえ、理解しようと努めています。

チャートに搭載するインジケーターに番号をつけて、「Add」ボタンで必要な枚数をチャート上に作成できるようにしたいのですが・・・・・。十字ボタンで選択したものを削除したい ...... (妄想はたくさんあるので、まだ書きたくない))

インジケータは名前をつけてもいいし、数字が好きなら数字にすればいい。ただし、番号は番号ではなく、テキストになります。1つまたは複数から任意の指標番号を追加できるカスタムコントロールパネルが欲しいですか?
 
月内の日数と週数で別々にフィルタリングする方法を教えてください。 日内 私はこれを行いました。


bool TimeStart=false;

int hour=12;


//--Фильтр по ремени открытия бара внутри дня

if (TimeStart==true)

{      

      datetime  Open_timePos=iTime(_Symbol,0,0);

      MqlDateTime str1; 

      TimeToStruct(Open_timePos,str1);

      str1.hour=hour;

      str1.min=0;

      str1.sec=0;


      datetime start_time=StructToTime(str1);

      if (start_time>iTime(_Symbol,0,0))

      {

            BuyPrIMA=false;

            SellPrIMA=false;      

      

      } 

 

 

削除済み  
-Aleks-:
月内の日数と週数で別々にフィルタリングする方法を教えてください。 日内 私はこれを行いました。

int НомерДНЯвМесяце=TimeDay(iTime(_Symbol,0,0));

int НомерДняНедели=TimeDayOfWeek(iTime(_Symbol,0,0)); int НомерНеделиВмесяце=NormalizeDouble(НомерДНЯвМесяце/7,0);

削除済み  
new-rena:
月の週を聞いてくる
削除済み  
pako:
月の週について尋ねている

そこでは3つの選択肢をすべて作りました。彼はどれをベースにしたいのか、お願いします。

これか?

int НомерНеделиВмесяце=NormalizeDouble(НомерДНЯвМесяце/7,0);
削除済み  
new-rena:
そこで3つの選択肢を全部やりました。ご指定ください。

1カ月は5~6週あり、今日は4週目です

str.dayは月日

曜日

 
new-rena:
ありがとうございます。
削除済み  
pako:
1カ月は4週5週で、今日は4週目です
なるほど、前月29日(例えば月曜日)から当月31日(例えば月曜日)までの週をこのように計上したいということですね。1ヶ月以上です。そのような週を数えるのは論理的ではありません。そうでなければ、その週は丸々1週間にはならない。いや、意味がない...。
削除済み  
new-rena:

そこでは3つの選択肢をすべて作りました。彼がベースにしたいと言っているのはどれなのか、教えてください。

これか?

それじゃダメなんです。