"ダミー "からの質問 - ページ 248

 

Silent:

えっ、K?Kはfalseとして初期化される。途中からアサインされた真次に、-if (K)を確認します。えっ、K?


まずはドキュメントを読んでみてください。

ifのboolは単なるtrue/falseではないことを理解してください。 コンパイラにとっては、0でないものはtrueなのです。

https://www.mql5.com/ru/docs/basis/types/integer/boolconst

Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип bool - Документация по MQL5
 
sergeev:

手始めにドキュメントを読んでみてください。

コンパイラにとって、0でないものはすべてtrueであることを理解してください。

https://www.mql5.com/ru/docs/basis/types/integer/boolconst

ああ、その点は何となく見落としていました。ありがとうございます、覚えておきます。
 

ハイライトされたトレンドラインの時間/価格を取得しようとしています。

datetime       TL1_Old_Time,TL1_New_Time,TL2_Old_Time,TL2_New_Time;
double         TL1_Old_Prise,TL1_New_Prise,TL2_Old_Prise,TL2_New_Prise;
int            i;
string         n;

void OnStart()
  {
   if(ObjectsTotal(0,0,OBJ_TREND)<=0)
     {
      Print("-1 Trendlines не обнаружены");
      return;
     };
   for(i=ObjectsTotal(0,0,OBJ_TREND)-1;i>=0;i--)
     {
      n=ObjectName(0,i,0,OBJ_TREND);
      Print("0 Trendline "+n);
      if(ObjectGetInteger(0,n,OBJPROP_SELECTED))
        {
         TL1_Old_Prise=ObjectGetDouble(0,n,OBJPROP_PRICE,0);
         Print("TL1_Old_Prise = "+DoubleToString(TL1_Old_Prise));
         TL1_Old_Time=ObjectGetInteger(0,n,OBJPROP_TIME);
         Print("TL1_Old_Time = "+TimeToString(TL1_Old_Time));
         TL2_Old_Prise=ObjectGetDouble(0,n,OBJPROP_PRICE,0);
         Print("TL2_Old_Prise = "+DoubleToString(TL2_Old_Prise));
         TL2_Old_Time=ObjectGetTimeByValue(0,n,TL2_Old_Prise,0);
         Print("TL2_Old_Time = "+TimeToString(TL2_Old_Time));
        };
     };
  }

にとって

TL1_Old_Time=ObjectGetInteger(0,n,OBJPROP_TIME);

警告が表示される

possible loss of data due to type conversion

しかし

ObjectGetInteger
Возвращает значение соответствующего свойства объекта.
Свойство объекта должно быть типов datetime, int, color, bool или char.

質問1:正しく変換する方法は?

について

TL2_Old_Time=ObjectGetTimeByValue(0,n,TL2_Old_Prise,0);

2行目の点の時刻を取得せず、記号で物語の始まりの時刻を取得する

2013.05.19 17:01:52     s_Trend_Line_avto_position_1_00 (EURUSD,D1)     TL2_Old_Time = 1970.01.01 00:00

質問2:なぜ、もし

ObjectGetTimeByValue
Возвращает значение времени для указанного значения цены указанного объекта.

с

   int     line_id       // номер линии

いろんな仕掛けをしたり、数字を消したり足したり......オブジェクトタイムが出ないんです。

行の識別子という ことであれば、その取得方法ですが、関数が見当たりません。

更新情報

line_id

一般的には指標に関係するようですが、ではなぜ文書に反映されないのでしょうか。それでは

ObjectGetTimeByValue

をグラフィカル・オブジェクトのセクションに追加しました。

 

と宣言することで、警告を消すことができました。

long           TL1_Old_Time,TL2_Old_Time;

と理解されるはずです。

ObjectGetInteger
Возвращает значение соответствующего свойства объекта в каком формате?.
Свойство объекта должно быть типов datetime, int, color, bool или char.
 
Silent:

for
TL1_Old_Time=ObjectGetInteger(0,n,OBJPROP_TIME);

警告が出る。

型変換によるデータ消失の可能性

TL1_Old_Time=(datetime)ObjectGetInteger(0,n,OBJPROP_TIME)です。

のような曲線は、言語関数

 
A100:

TL1_Old_Time=(datetime)ObjectGetInteger(0,n,OBJPROP_TIME)です。

のような曲線は、言語関数

つまり、関数の変換を指定することができる(私の場合はそうすべき)?

ありがとうございます。

 
Silent:

では、関数に対して変換を指定することは可能(私の場合は必要)なのでしょうか?

した方がいいことがわかりました。しかし、警告を無視することも可能で、場合によってはあまり便利ではありません
 
A100:
した方がいいことがわかりました。しかし、警告を無視することも可能で、場合によってはあまり便利ではありません

OKです。

また、無視という選択肢はなく、エラーログはコンパイル中に何かでいっぱいになり、潜在的に問題のある場所 - だから、あなたは答えを探さなければなりません :)

 

高値のタイムフレームから分単位のバー数を取得したいのですが。

バーズから訳の分からない番号が来る。H1で起動すると1201になる。M1では6個です。

どこが問題なのか、教えてください。

//--- для H1
//--- переменные для указания параметров функции
   int start = 5; // индекс бара
   int count = 1; // количество баров
   int b=72000;   // секунд в H1
   int bm;        // надо получить
   datetime tm[]; // массив, в котором возвращается время баров
//--- копирование времени 
   CopyTime(_Symbol,PERIOD_CURRENT,start,count,tm);
//--- вывод результата
   Print(tm[0]);

   bm=Bars(_Symbol,PERIOD_M1,tm[0]+b,tm[0]);
   Print("bm = "+bm);
//--- возвращает bm = 1201
   bm=Bars(_Symbol,PERIOD_M1,tm[0]-b,tm[0]);
   Print("bm = "+bm);
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int start=5;
   int count=2;
   datetime _time[];
   datetime _timeM1[];
   int ntime=CopyTime(_Symbol,_Period,start,count,_time);//узнаем время 5 и 4 бара, нумерация как в тайм серии
   if(ntime>0)
     {
      Print("_time[0]=",_time[0]);
      Print("_time[1]=",_time[1]);
      
      datetime endtime=_time[1]-PeriodSeconds(PERIOD_M1);
      int nM1=CopyTime(_Symbol,PERIOD_M1,_time[0],endtime,_timeM1);//получаем массив содержащий время минуток и число минуток
      if(nM1>0)
       {
        Print("Число минуток в период с ",_time[0]," по ",endtime," =",nM1);
       }
      int nbarsM1=Bars(_Symbol,PERIOD_M1,_time[0],endtime);//проверимся
      Print("Число минуток =",nbarsM1);
     }
  }
//+------------------------------------------------------------------+

できるんですね。

しかも、1時間には72,000秒もの秒数があるんですよ。現実にこれだけあればいいのですが))。

実際のコードでは、やはり小さい時間枠の同期を確認する必要があります。