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

 
こんにちは。

どなたか、線が交差したとき、2本なら2本、"0 "の線を越えたときなど、何らかの基準で、インジケーターチャートに矢印などのアイコンを描くコード例をご存じないでしょうか?好ましくは、セルフスケーリング表示窓の上部と下部
 
Sergei Vladimirov:
Load "を押す。最後の2048本の小節だけが自動的に読み込まれ、残りはキックする必要があります。
ロード」の後はこうなった・・・。
 
Mike:
ロード」の後にそう出てきたんです.
履歴アーカイブフォルダを強制的に消去し、ターミナルを実行- その後、すべての引用符をダウンロードします。
 
Leo59:
こんにちは。

どなたか、線が2本ある場合は交差したときに、あるいは「0」ラインを交差したときに、インジケータ・チャートに矢印などのアイコンを描くサンプルコードをお持ちではないでしょうか?好ましくは、セルフスケーリング表示窓の上部と下部

私の七面鳥を一つ紹介します。参考になるかもしれません。コードはMT4用で、そのままです。また、ログとの連携も可能です。

void PlotArrowUP(int i)
{
    string sup = "\xE9"; //233
    datetime dt = iTime(NULL, 0, i); 
    double dprice = (WindowPriceMax()-WindowPriceMin())/(100.0/ArrowOffsetInPercentOfScreen); //настроить масштаб под свои нужды
    ObjectCreate("arr1"+ArrowIdx, OBJ_TEXT, 0, dt, FastBuffer[i]-dprice);   
    ObjectSetText("arr1"+ArrowIdx, sup, ArrowFontSize, "Wingdings", ColorArrowUp);
    ArrowIdx++;
    if(EnableLogFile)
    {
        string dts = TimeToStr(TimeCurrent(), TIME_DATE | TIME_MINUTES | TIME_SECONDS);
        FileWrite(LogFile1, dts, "  call PlotArrowUp(i) i=", i, "  FastBuffer[i]=", FastBuffer[i]);
    }
}

void PlotArrowDown(int i)
{
    string sup = "\xEA"; //234
    datetime dt = iTime(NULL, 0, i); 
    double dprice = (WindowPriceMax()-WindowPriceMin())/(100.0/ArrowOffsetInPercentOfScreen);
    dprice*= 2.0;
    ObjectCreate("arr0"+ArrowIdx, OBJ_TEXT, 0, dt, FastBuffer[i]+dprice);   
    ObjectSetText("arr0"+ArrowIdx, sup, ArrowFontSize, "Wingdings", ColorArrowDown);
    ArrowIdx++;
    if(EnableLogFile)
    {
        string dts = TimeToStr(TimeCurrent(), TIME_DATE | TIME_MINUTES | TIME_SECONDS);
        FileWrite(LogFile1, dts, "  call PlotArrowDown(i) i=", i, "  FastBuffer[i]=", FastBuffer[i]);
    }
}
 
アレクセイ・ヴォルチャンスキー

Вот из моего индюка, может, поможет. Код для МТ4, выкладываю, как есть. Там еще работа с логами.

アレクセイさん、ご感想をありがとうございます。

あなたの例では、オブジェクトを通してです。スケールを変更したときに、常にウィンドウの上下の境界線 になるように、配列を介して行うことは可能でしょうかね?
 
Leo59:
アレクセイ・ヴォルチャンスキー
アレクセイさん、ご感想をありがとうございます。

あなたの例では、オブジェクトを通してです。スケールを変更したときに、常にウィンドウの上下に あるように、配列を介して行うことは可能でしょうか?

アレイのことがよくわからないのですが。コメント参照、追記しました

ObjectCreate("arr0"+ArrowIdx, OBJ_TEXT, 0, dt, FastBuffer[i]+dprice);
// "arr0"+ArrowIdx - формируем уникальное имя стрелки
// FastBuffer[i]+dprice - тут формируется цена, на которой будет рисоваться стрелка
   
ObjectSetText("arr0"+ArrowIdx, sup, ArrowFontSize, "Wingdings", ColorArrowDown);
ArrowIdx++; // для каждой стрелки нужно уникальное имя

さらに、上側のボーダーに描画する必要がある場合は、次のようにします。

ObjectCreate("arr0"+ArrowIdx, OBJ_TEXT, 0, dt, ChartGetDouble(0,CHART_PRICE_MAX,0); 

エディターのヘルプを読んでください; ここでは例を挙げて詳しく説明します。

MQL4 リファレンス / 標準定数、列挙、構造体 / チャート定数 / チャートを使った作業例

 
Alexey Volchanskiy:

アレイのことがよくわからないのですが。コメント参照、追記しました

さらに、上側のボーダーに描画する必要がある場合は、次のようにします。

また、エディターのヘルプを読む必要があります。

MQL4 リファレンス / 標準定数、列挙、構造体 / チャート定数 / チャートを使った作業例

変更

WindowPriceMax() и WindowPriceMin()

オブジェクトはウィンドウの境界線から所定の距離に強制的に再描画されること

 
Leo59:

変更に伴い

オブジェクトは、ウィンドウの境界線から所定の距離で強制的に再描画される必要があります。

古いものは古いままで、古い値段で。境界線に移動させる必要がある場合は、手動で再描画する必要があります。あなたの問題を完全に把握しているわけではありません。

OnChartEventを 使用すると、ウィンドウの変更を追跡することができます。

 
Alexey Volchanskiy:

古いものは古いままで、古い値段で。境界線まで移動させる必要がある場合は、手で描き直さなければなりません。ただ、あなたのタスクを完全に把握しているわけではありません。

OnChartEventを使用すると、ウィンドウの変更を追跡することができます。

一見すると、簡単な作業のように思えます。が! ..............................
インジケーターウィンドウには、相対的に "0 "で動いている任意のオシレーターのラインがあり、異なる振幅で動いています。
実際の問題点は
- 下から上へ交差する "0 "の位置で、インジケーターウィンドウの下枠に矢印を描きます。
- 0 "で上から下へ交差するように、インジケーターウィンドウの上側の境界線 付近に矢印を描きます。
- インジケーターウィンドウのオシレーターチャートのセルフスケーリングでは、矢印は自動的にインジケーターウィンドウの境界線に留まるはずです。
例えば、チャートの履歴を前後にスクロールしたり、水平スケールを変更したりしても、矢印は常にインジケータウィンドウの境界線に留まります。
 
Leo59:
一見すると、3コペックのような簡単な作業に見える。が! ..............................
インジケーターウィンドウには、任意のオシレーターのラインがあり、相対的に "0 "を異なる振幅で回転させる。
実際の問題点は
- 下から上へ交差する "0 "の位置で、インジケーターウィンドウの下枠に矢印を描きます。
- 0 "で上から下へ交差するように、インジケーターウィンドウの上側の境界線 付近に矢印を描きます。
- インジケーターウィンドウのオシレーターチャートのセルフスケーリングでは、矢印は自動的にインジケーターウィンドウの境界線に留まるはずです。
例えば、チャートの履歴を前後にスクロールしたり、水平スケールを変更したりしても、矢印は常にインジケータウィンドウの境界線に留まります。

課題はというと、非常にシンプルです。

ウィンドウが変更されたりスクロールされたりすると、OnChartEventが呼び出され、パラメータなしでイベントが渡さ れます。

CHARTEVENT_CHART_CHANGEチャート変更イベント

このイベントが発生した場合、左右の可視バーを決定し、その範囲内でインジケータウィンドウのすべての矢印を見つけます。見つかった場合は、目的の境界線に移動させる。矢印を作成する際は、UpArrow*****、DownArrow*****などの名前を付けておくと、解析に関わるトラブルを回避することができます。そして念のため、ChartRedrawを呼び出します。

理由: