//+------------------------------------------------------------------+//| Start day.mq4 |//| 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"#property strict#property indicator_chart_window//--- input parametersinputint timer=10; // seconds//--- parameterbool IsDefineTime=true; // true -> you can define time//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mappingEventSetTimer(timer);
//---
IsDefineTime=true;
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---int temp_day;
MqlDateTime dt_struct;
TimeToStruct(time[0],dt_struct);
temp_day=dt_struct.day;
if(IsDefineTime)
{
for(int i=0;i<rates_total-1;i++)
{
TimeToStruct(time[i],dt_struct);
if(dt_struct.day<temp_day)
{
Print("Start day ",time[i-1]);
IsDefineTime=false;
break;
}
}
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---
IsDefineTime=true; // true -> you can define time
}
//+------------------------------------------------------------------+
動作のアルゴリズム:インジケータを起動するときに、タイマーの時間間隔(例えば10秒)を設定します。
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---
IsDefineTime=true; // true -> you can define time
}
助けてください!(MQL4)
M15チャートで、各バーを考慮した日の開始時刻を 取得する必要があります - インジケータ用。
現在のバー(0)を考慮して秒単位で計算することにしましたが、私の勘違いでしょうか。
D_Shift=(Open_time-pos*15*60-(Open_time-Open_timeTF))/1440*60;
インジケーターのためなら。
しかし:このコードはOnCalculate()が入力されるたびに実行されます - あなたのニーズに応じて、bool フラグを追加するか、別の関数にコードを配置することができます。
インジケーター用なら。
しかし:このコードはOnCalculate()のたびに実行されます - あなたのニーズに応じて、またはbool フラグを追加したり、別の関数にコードを配置します。
ありがとうございますが、再計算を行うためにすべてのティックで 良いものではありません - 私は私のコードが動作しない理由を理解したいが、私はあなたのコードを分析する必要がある、ログに奇妙な数字が返されます。
その日の最初のバーと現在のバーの間に479本の差があることが判明しました。
ありがとうございます、しかし、すべてのティックで再計算することは良くありません - 私はあなたのコードを考える必要があります、しかし、私は私のコードが動作しない理由を理解したい一方で、ログは奇妙な数字を返します。
その日の最初のバーと現在のバーの間に479本の差があることが判明しました。
私は超能力者ではないことを示しましたが、それが理由です。
しかし、OnCalculate()が 入力されるたびにこのコードが実行 されます。ここで、あなたのニーズに応じて、bool フラグを追加するか、別の関数にコードを配置 します。
私は超能力者ではないことを指摘したのですが、それが理由です。
私はこの仕事の初心者で、OnCalculate 関数を使ったことがないので、rates_totalがそこで何を計算して いるのか、さらに言えば、どこに返せばいい のかがわかりません。私も全部別の関数にするのはよくわかりません...コメントがないとわかりにくいですね。
以下は、MQL4インジケーターの全コードです。
動作のアルゴリズム:インジケータを起動するときに、タイマーの時間間隔(例えば10秒)を設定します。
となり、IsDefineTime 変数に値trueが 代入される。何のために?IsDefineTime=trueの場合、OnCalculate()でループに入り、一日の開始時刻を決定することができます。
このループでは、time[] 配列(この配列にはオープニングタイムの値が格納されています)を右端のバー(インデックスは "0")から順に走査していきます。一日の始まりが見つかったら、その値を解除し、変数IsDefineTimeに 値falseを 代入します。このようにして、タイマーが再び作動するまで、一日の始まりの時間を決定するサイクルに入ることを防いでいます。
カルプトフ ウラジミール さん、ご説明ありがとうございます。しかし、これでどのように問題が解決するのでしょうか?
大まかに言えば、一日の始まりのバーに対応する現在の時間枠のバーを知る必要があります。各バーで把握し、それに応じて計算し、インジケータを描画する必要があります。
カルプトフ ウラジミール さん、ご説明ありがとうございます。しかし、これでどのように問題が解決するのでしょうか?
大まかに言えば、一日の始まりのバーに対応する現在の時間枠のバーを知る必要があります。すべてのバーでそれを把握し、それに応じて計算し、インジケータを描画する必要があります。
そうやって質問して、そうやって答えてもらったんですね :) .また、この日の最初のバーの時間ではなく、このバーのインデックスが必要な場合、それは、この日の始まりを印刷するときにここにあります。
インデックス[i-1]を使用します - これは、その日の最初のバーの番号です。
あなたが尋ねたように、あなたはあなたの答えを得ました :) .また、その日の最初のバーの時間ではなく、このバーのインデックスが必要な場合は、その日の始まりを印刷するときに、ここにあります。
インデックス[i-1]を使用します - これは、その日の最初のバーの番号です。
そうですね~、紛らわしく聞いてしまいました。
作ったアプリにインジケーターがあるのですが、正しくカウントされないんです。私はひどく頭が悪いので、どうすれば日足の最初のバーに対応する指数を正しく判定させることができるのか、皆さんの説明を受けても理解できません。
横柄な態度で申し訳ないのですが、あなたのコードと私のコードを組み合わせる方法を教えていただけませんか?
-Aleks-:
どうすれば、日足開始時の最初のバーに対応するインデックスを正しく検出できるようになりますか?
という感じです。