インジケーターに関する雑多な質問 - ページ 6

 
彼はよく見ると答えました。
 
Marco vd Heijden:

もし、タイムフレームを切り替えるのであれば、タイマーは良い選択肢ではありません。

OnInit() 関数で行を作成し、OnTick() または OnTimer() 関数で行を更新することができます。

また、OnDeint()関数のObjectsDeleteAll()に注目してください。これは、新しいフレームで再び作成する前に、すべてが削除されることを確認します。

---

さらに、新しいローソク 足が発生するたびに行を更新したい 場合は、前のページの例と最後の例を組み合わせて、次のようにすることができます。

...

もし他に 問題が あれば、コードを示して ください。

私はあなたの最新のコメントを研究した。

別の2つの偉大なコメント。そのコードは似ているように見えますが(あなたの#18のコメント)、私にとっては非常に異なっています。

そうそう、フレームを切り替えるとタイマーを破壊してしまうんですよね。しかし、私のインジケータはPERIOD_**に一度だけ更新されるので、これは非常に便利です。

そうそう。init()関数でメインラインを 作成し、OnTimer()関数で更新している。

(以下のコードを見てもらえば、より明確に理解できると思います)

...新しいキャンドルはあなたが組み合わせることができます...

もっと何か問題があれば...

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

私が言ったように、それはより多くの時間を必要と する一つの問題があります。今、私はあなたに私のインジケータコードのいくつかを示す必要があります。そして、私は私の指標で'switch operator & ObjectMove()' を使用しない。

マルコ

以下のコードが良いのか悪い のか、教えてください。

また switch()とObjectMove() を私のインジケーターに取り入れる ことは可能でしょうか?(なぜ私が先に質問しているかというと、時間がかかるからです。)

(ご覧の通り、私はあなたの#18コメントからより多くの利益を得ました - そして今、私は私の下のコードとあなたの最新の二つの素晴らしいコメントの間でジレンマに直面しています)

//|+--------------------------------------------------------------------------------+
int  init()
{
    EventSetMillisecondTimer( 1250 );
    _CreateLines_M5();

    return(INIT_SUCCEEDED);
}
//|+--------------------------------------------------------------------------------+
int  start()
{
    return(0);
}
//|+--------------------------------------------------------------------------------+
int  deinit()
{
    ObjectsDeleteAll( 0, _prefix );
    return(0);
}
//|+--------------------------------------------------------------------------------+
void OnTimer()
{
    //---
    if ( _dt_Prd_M5 != iTime( Symbol(), _prd_M5, 0 ) )
    {
         _dt_Prd_M5  = iTime( Symbol(), _prd_M5, 0 );
         _CreateLines_M5();
    }
    return;
}
//|+--------------------------------------------------------------------------------+
void _CreateLines_M5( )
{
    //---
    int _dayCnt_M5 = _prd_cnt + 0;
    int    _cnt_M5 = iBarShift( Symbol(), 0, iTime( Symbol(), PERIOD_W1, _dayCnt_M5 ) );
    for ( i = 0; i < _cnt_M5; i++ )
    {
        _time_M5     = Time[i];
        _prdCvrt_M5  = PeriodSeconds( _prd_M5 );
        _timeCvrt_M5 = _time_M5 - ( _time_M5 % _prdCvrt_M5 ) + _prdCvrt_M5;

        _vlineName_M5 = _prefix + "PERIOD_M5 - " + TimeToStr( _timeCvrt_M5, TIME_DATE|TIME_MINUTES );

        if ( _Period < PERIOD_M15 )
        {
            if (
                    ...
                    TimeHour( _timeCvrt_M5 ) == 12
               )
            {
                ObjectCreate ( _vlineName_M5, OBJ_VLINE, 0, _timeCvrt_M5, 0  );
            }
        }
    }
    return;
}

では、よろしくお願いします。

 
Keith Watford:

私は他の人のことは知りませんが、あなたのフォント、色、太字、斜体などの組み合わせは気が散って迷惑だと思います。実際、私はこの記事を読むのが面倒でした。

このトピックの始まりから、私はこれらのコメントの上に「ジャンプ」していることに完全に同意します。
 
Max Enrik:

あなたの最新のコメントをリサーチしました。

別の2つの素晴らしいコメント。そのコードは似ているように見えますが(#18のコメント)、私にとっては非常に異なっています。

そうそう、フレームを切り替えたときに'Timer'が破壊されるのを感じていました。しかし、私のインジケータはPERIOD_**に一度だけ更新されるので、これは非常に便利です。

そうそう。init()関数でメインラインを 作成し、OnTimer()関数で更新している。

(以下のコードを見てもらえば、より明確に理解できると思います)

...新しいキャンドルはあなたが組み合わせることができます...

もっと何か問題があれば...

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

私が言ったように、それはより多くの時間を必要と する一つの問題があります。今、私はあなたに私のインジケータコードのいくつかを示す必要があります。そして、私は私の指標で'switch operator & ObjectMove()' を使用しない。

マルコ

以下のコードが良いのか悪い のか、教えてください。

また switch()とObjectMove() を私のインジケーターに取り入れる ことは可能でしょうか?(なぜ私が先に質問しているかというと、時間がかかるからです。)

(ご覧の通り、私はあなたの#18コメントからより多くの利益を得ました - そして今、私は私の下のコードとあなたの最新の二つの素晴らしいコメントの間でジレンマに直面しています)

//|+--------------------------------------------------------------------------------+
int  init()
{
    EventSetMillisecondTimer( 1250 );
    _CreateLines_M5();

    return(INIT_SUCCEEDED);
}
//|+--------------------------------------------------------------------------------+
int  start()
{
    return(0);
}
//|+--------------------------------------------------------------------------------+
int  deinit()
{
    ObjectsDeleteAll( 0, _prefix );
    return(0);
}
//|+--------------------------------------------------------------------------------+
void OnTimer()
{
    //---
    if ( _dt_Prd_M5 != iTime( Symbol(), _prd_M5, 0 ) )
    {
         _dt_Prd_M5  = iTime( Symbol(), _prd_M5, 0 );
         _CreateLines_M5();
    }
    return;
}
//|+--------------------------------------------------------------------------------+
void _CreateLines_M5( )
{
    //---
    int _dayCnt_M5 = _prd_cnt + 0;
    int    _cnt_M5 = iBarShift( Symbol(), 0, iTime( Symbol(), PERIOD_W1, _dayCnt_M5 ) );
    for ( i = 0; i < _cnt_M5; i++ )
    {
        _time_M5     = Time[i];
        _prdCvrt_M5  = PeriodSeconds( _prd_M5 );
        _timeCvrt_M5 = _time_M5 - ( _time_M5 % _prdCvrt_M5 ) + _prdCvrt_M5;

        _vlineName_M5 = _prefix + "PERIOD_M5 - " + TimeToStr( _timeCvrt_M5, TIME_DATE|TIME_MINUTES );

        if ( _Period < PERIOD_M15 )
        {
            if (
                    ...
                    TimeHour( _timeCvrt_M5 ) == 12
               )
            {
                ObjectCreate ( _vlineName_M5, OBJ_VLINE, 0, _timeCvrt_M5, 0  );
            }
        }
    }
    return;
}

あなたに幸運がありますように。

もしうまくいったら、そしてそうでなかったら、続けてみてください。

 
Marco vd Heijden:

もしうまくいったら、そしてうまくいかなかったら、続けてみてください。

ありがとうございました。
 

#ブローカータイム - リオープン

私はあちこちのフォーラムを読んだ。多分私の解決はそれらのどちらかである。しかし、私は理解していなかった。

このコメントの前に、もう一度試してみました。しかし、私は解決策を見つけることができません。
だから、私は2つのブローカー、AとBを持っています。

  • A: Vlineオブジェクトは、正しい時間を配置します。例:時間2017.02.180:00、Vラインオブジェクトも同じ時間を配置。
  • B: Vlineオブジェクトが間違った時刻に配置された場合(私が間違っているかもしれません)。時刻は2017.02.181:00ですが、Vラインオブジェクトは0:00に配置されています。
だから、誰かが私の懸念を理解する場合、任意のコメントは私のために良いだろう。

良い週末をお過ごしください。

 
Max Enrik:

#ブローカータイム - リオープン

私はあちこちのフォーラムを読んだ。多分私の解決はそれらのどちらかである。しかし、私は理解していなかった。

このコメントの前に、もう一度試してみました。しかし、私は解決策を見つけることができません。
だから、私は2つのブローカー、AとBを持っています。

  • A: Vlineオブジェクトは、正しい時間を配置します。例:時間2017.02.180:00、Vラインオブジェクトも同じ時間を配置。
  • B: Vlineオブジェクトが間違った時刻に配置された場合(私が間違っているかもしれません)。時刻は2017.02.181:00ですが、Vラインオブジェクトは0:00に配置されています。
だから、誰かが私の懸念を理解する場合、任意のコメントは私のために良いだろう。

良い週末をお過ごしください。

コードを参照してくださいする必要があります
 

以下のコードは、2つの異なるブローカーで私に異なる結果を提供します。
( 私の前のコメントは、あなたが私を理解するのに役立つ可能性があります )

事前にありがとうございます。

void PerioDay()
  {
// High

   ObjectSet("PeriodHigh",OBJPROP_PRICE1,iHigh(Symbol(),PERIOD_D1,0));
   ObjectSet("PeriodHigh",OBJPROP_PRICE2,iHigh(Symbol(),PERIOD_D1,0));

   ObjectSet("PeriodHigh",OBJPROP_TIME1,TimeCurrent());
   ObjectSet("PeriodHigh",OBJPROP_TIME2,TimeCurrent() -(TimeCurrent()-iTime(Symbol(),PERIOD_D1,0)));

// Low

   ObjectSet("PeriodLow",OBJPROP_PRICE1,iLow(Symbol(),PERIOD_D1,0));
   ObjectSet("PeriodLow",OBJPROP_PRICE2,iLow(Symbol(),PERIOD_D1,0));

   ObjectSet("PeriodLow",OBJPROP_TIME1,TimeCurrent());
   ObjectSet("PeriodLow",OBJPROP_TIME2,TimeCurrent() -(TimeCurrent()-iTime(Symbol(),PERIOD_D1,0)));
  }
 

iHighとiLowの値がブローカーによって異なるということであれば、それはごく一般的なことです。

2つの理由。

1.ブローカーによって価格が微妙に異なる、および

2.ブローカーのサーバーのGMTオフセットが異なる場合、バーは異なる時刻に開始されます。

 
honest_knave:

iHighとiLowの値がブローカーによって異なるということであれば、それはよくあることです。
2つの理由があります。
1.ブローカーによって価格がわずかに異なる、および
2.ブローカーのサーバーのGMTオフセットが異なる場合、バーは異なる時刻に開始されます。

つまり、時間だけが違うのです。

ということで、この問題を解決するチャンスはないのでしょうか?

どうもありがとうございます。