TLユーザ:線形MT4チャートを対数グラフに変更するアイデア
ページ 1 - 322 12 最終最終
Results 1 to 10 of 15

Thread: TLユーザ:線形MT4チャートを対数グラフに変更するアイデア

  1. #1
    こんにちは 、
    私は、MT4MT5を使用している線図で、適切なトレンドラインを描かないためにMT4MT5を責めにしているすべての人に、非常に特別なアイデアを持っています。
    どのCoderもこの周期変換器を通常のMT4 - 算術 - 線形図から対数グラフ尺度に変更することができます。
    私はこれがすべての技術トレンドラインの恋人のためのMT4MT5の対数グラフを得る唯一の方法だと思います。
    ここにindiとソースコードがあります:
    // ------------------------------------ ----------- -------------------
    //| Period_Converter_Opt.mq4 |
    //| Copyright(c)2005、MetaQuotes Software Corp. |
    //|
    http://www.metaquotes.net|
    //| miccllyによって変更されたVer.1.6 |
    //| Ver.1.5がfaiによって変更されました|
    //| Period_Converterに基づいてwfy05 @ talkforexによって変更されました。
    //|
    http://www.talkforex.com|
    // ------------------------------------ ----------- -------------------
    #property copyright
    #property link http://www.mql4.com/codebase/indiors/277/
    #property indior_chart_window

    #include lt; WinUser32.mqhgt;

    /*
    Readme:

    I.特徴:
    これはMT4の周期コンバータの改良バージョンです。
    メタクォートによるMT4のデフォルト期間コンバータ
    既定の期間コンバータスクリプトはリアルタイムの更新をサポートしていませんが、
    多くのCPU(50%〜9x%)を消費するため、システム全体が遅くなります。
    また、デフォルトのスクリプトは、MT4を終了すると保存されないスクリプトですが、
    再起動後は、すべてのコンバータースクリプトを再適用しなければなりません
    迷惑な。

    これは上記の問題をすべて解決しました。
    1.リアルタイム更新またはカスタムインターバルミリ秒レベルの更新。
    2.低CPUコスト、平均5%〜10%以下。
    3.インジケータとして機能するので、再起動時に保存して再ロードすることができます。
    4.それはスクリプトではないので、グラフの制限ごとに1つのコンバータはありません
    それ以上の場合は、1つのウィンドウをソースとして使用して複数のウィンドウを生成できます
    可能な限り新しい時間枠図。
    5.新しい履歴ブロックがロードされている場合、自動更新。

    II。使い方:
    mq4ファイルをMT4インジケータフォルダにコピーします(エキスパート\インジケータ)
    スクリプトではなく指標としてインストールします。カスタムインジケータで
    リストに、必要なチャートにperiod_converter_optを添付します。
    それは4つのパラメータをサポートします:
    PeriodMultiplier:新しい期間乗数係数です。デフォルトは2です。
    UpdateInterval:更新間隔(ミリ秒単位)
    ゼロはリアルタイムで更新されることを意味します。デフォルトは0です。
    有効:このオプションで削除せずに無効にすることができます。

    他のパラメータはコメントまたはデバッグのために無視しても安全です。

    また、[共通]タブで[DLLのインポートを許可する]オプションが選択されていることを確認するか、
    それは動作しません

    その後、FileOpen Offlineを使用して、生成されたオフラインデータを開きます。次に
    オフラインデータは自動的に更新されます。

    ソースチャートを開いたままにして、コンバーターインジケーター
    実行中、インジケータを含む生成されたチャートは常に
    更新します。生成されたグラフを閉じて再度開くこともできます
    後でFileOpen Offlineから問題なく。

    MT4を終了したい場合は、それらのオフラインチャートを他のものとして残すことができます
    通常のオンラインチャート。次回MT4を起動すると、これらのグラフは
    ロードして更新することもできます。


    III。ノート:
    オフラインチャートの一般的なプロパティでオフラインチャートオプションをオフにしないでください。
    またはMT4を再起動すると、そのチャートがオンラインのチャートおよびリクエストとして扱われます
    サーバーからのデータ、空のグラフウィンドウ。
    2.同じウィンドウに複数のコンバータを別々に取り付けることができます
    PeriodMultiplier(例:3つのコンバーターを
    PeriodMultiplier = 2,4,10からM1を選択してM2、M4、M10を同時に生成する。
    M1チャートを使用してH2のようなHourlyチャートを生成することもOKです。
    最初の変換時にCPUリソースをわずかに増やすだけです。しかし、通常は
    ほとんどのサーバーは短期間に多くのデータを持っていません。その結果
    生成されたデータは長期間十分に長くはありません。それは示唆されている
    必要に応じて時間別/日別チャートをソースとして使用できます。
    3.リアルタイム更新モードでは、できるだけ速く見積もりを更新しますが、
    これはスクリプトを介して行われ、MTはstart()関数の呼び出しをスキップします。
    あなたのPCは忙しく、引用収入がたくさんあります。とにかく、これはめったに起こらない、
    少なくとも毎秒10回の更新が可能です
    十分です。
    4.オフラインチャートには、チャートに入札行が表示されていませんが、すべてのデータ
    インジケータを含むチャートではまだ更新中ですが、
    だから心配しないで。オフラインチャートをクリック解除して入札単価を表示することができます
    オプションを使用します。しかし、それはあまり役に立たないし、忘れると
    終了する前にオフラインチャートのオプションをチェックする。エラーが発生し、
    次の起動時に空になります。ウィンドウを閉じて開いて
    もう一度FileOpenオフラインから、問題のない価値があります。

    IV。歴史:
    2014.03.10 1.6ビルド600以降をサポートするように変更されました
    2009.08.07 1.5オプションの追加(ShiftTiming、GMTShift、OmitDigit)
    2005.12.24 1.4浮動小数点を削除してデータを変更した場合の検出が高速
    CSVファイルをリアルタイムで出力するためのサポートが追加されました。
    OutputCSVFile = 0はCSVがないことを意味します。
    OutputCSVFile = 1はCSV HSTを意味します
    OutputCSVFile = 2 CSVのみ、HSTはありません。
    (内蔵期間にCSVを生成する場合に便利です)
    CSVファイル名は、拡張子を除くHSTファイルと同じになります。
    期間乗数を安全にチェックしました。
    2005.12.04 1.3大量のデータがある場合の欠落データの修正
    いくつかのブロックにロードされ、自動更新をサポートします
    新しい履歴がロードされたとき。
    2005.11.29 1.2欠落したデータとサーバーの変更に関する追加の修正。
    2005.11.29 1.1再起動後の部分データの欠落を修正しました。
    サーバーまたはデータの変更後に再初期化します。
    2005.11.28 1.0初回リリース
    *


    extern doubleバージョン= 1.6;/コードバージョン
    extern string BuildInfo = 2014.03.10 by micclly;
    extern int PeriodMultiplier = 1;/新しい周期倍率
    extern int OutputCSVFile = 0;/CSVファイルも出力しますか?
    extern int UpdateInterval = 0;/間隔をミリ秒で更新します。ゼロはリアルタイム更新を意味します。
    extern bool Enabled = true;
    extern bool Debug = false;

    extern int ShiftTiming = 0;/0-3、H1ChartとPeriodMultiplierを使用する= 4;
    //if 1、ServerH4Chart = 00:00/04:00/08:00/12:00 ...
    //= gt; OfflineH4Chart = 01:00/05:00/09:00/13:00 ...
    extern int GMTShift = 0;/9の場合、Server Time = GMT 0オフラインチャート時間= GMT 9
    extern int OmitDigit = 0;/1,5桁の場合4桁

    int FileHandle = -1;
    int CSVHandle = -1;
    int NewPeriod = 0;
    string MySymbol =;
    int ShiftBase;
    #define OUTPUT_HST_ONLY 0
    #define OUTPUT_CSV_HST 1
    #define OUTPUT_CSV_ONLY 2


    #define CHART_CMD_UPDATE_DATA 33324

    void DebugMsg(string msg)
    {
    if(Debug)アラート(msg);
    }

    int init()
    {
    ShiftBase =期間()* 60;/秒
    文字列接尾辞=;
    if(ShiftTiming!= 0)suffix = StringConenate(接尾辞、s、シフトタイミング);
    if(GMTShift!= 0)suffix = StringConenate(サフィックス、g、GMTSh ift);
    if(OmitDigit!= 0)suffix = StringConenate(接尾辞、o*、OmitDigit *);
    MySymbol = Symbol() _ 接尾辞。
    if(StringLen(MySymbol)gt; 11)
    MySymbol = StringConenate(StringSubstr(MySy mbol、0,11-StringLen(接尾辞))、接尾辞);
    //期間乗数の安全なチェック。
    if(PeriodMultiplier lt; = 1 suffix ==){
    //出力するCSVファイルのみ
    期間乗算器= 1;
    出力CSVファイル= 2;
    }
    NewPeriod = Period()* PeriodMultiplier;
    if(OpenHistoryFile()lt; 0)return(-1);
    WriteHistoryHeader();
    UpdateHistoryFile(Bars-1、true);
    UpdateChartWindow();
    return(0);
    }

    void deinit()
    {
    //ファイルハンドルを閉じる
    if(FileHandle gt; = 0){
    FileClose(FileHandle);
    FileHandle = -1;
    }
    if(CSVHandle gt; = 0){
    FileClose(CSVHandle);
    CSVHandle = -1;
    }
    }


    int OpenHistoryFile()
    {
    文字列名。
    名前= MySymbol NewPeriod;
    if(OutputCSVFile!= OUTPUT_CSV_ONLY){
    FileHandle = FileOpenHistory(名前 .hst、FILE_BIN | FILE_WRITE | FILE_SHARE_READ);
    if(FileHandle lt; 0)は、(-1)を返します。
    }
    if(OutputCSVFile!= OUTPUT_HST_ONLY){
    CSVHandle = FileOpen(name .csv、FILE_CSV | FILE_WRITE | FILE_SHARE_READ | FILE_ANSI、 '、');
    if(CSVHandle lt; 0)が(-1)を返します。
    }
    return(0);
    }

    int WriteHistoryHeader()
    {
    文字列c_copyright;
    int i_digits = Digits-OmitDigit;
    int i_unused [13] = {0};
    intバージョン= 400;

    if(FileHandle lt; 0)は、(-1)を返します。
    c_copyright =(C)opyright 2003、MetaQuotes Software Corp .;
    FileWriteInteger(FileHandle、version、LONG_VALUE);
    FileWriteString(FileHandle、c_copyright、64);
    FileWriteString(FileHandle、MySymbol、12);
    FileWriteInteger(FileHandle、NewPeriod、LONG_VALUE);
    FileWriteInteger(FileHandle、i_digits、LONG_VALUE);
    FileWriteInteger(FileHandle、0、LONG_VALUE);/timesign
    FileWriteInteger(FileHandle、0、LONG_VALUE);/last_sync
    FileWriteArray(FileHandle、i_unused、0、ArraySize(i_unused));
    return(0);
    }


    static double d_open、d_low、d_high、d_close、d_volume;
    static int i_time;

    void WriteHistoryData()
    {
    if(FileHandle gt; = 0){
    FileWriteInteger(FileHandle、i_time GMTShift * 60 * 60、LONG_VALUE);
    FileWriteDouble(FileHandle、d_open、DOUBLE_VALUE);
    FileWriteDouble(FileHandle、d_low、DOUBLE_VALUE);
    FileWriteDouble(FileHandle、d_high、DOUBLE_VALUE);
    FileWriteDouble(FileHandle、d_close、DOUBLE_VALUE);
    FileWriteDouble(FileHandle、d_volume、DOUBLE_VALUE);
    }
    if(CSVHandle gt; = 0){
    int i_digits = Digits-OmitDigit;
    FileWrite(CSVHandle、
    TimeToStr(i_time、TIME_DATE)、
    TimeToStr(i_time、TIME_MINUTES)、
    DoubleToStr(d_open、i_digits)、
    DoubleToStr(d_high、i_digits)、
    DoubleToStr(d_low、i_digits)、
    DoubleToStr(d_close、i_digits)、
    d_volume);
    }
    }

    int UpdateHistoryFile(int start_pos、bool init = false)
    {
    static int last_fpos、csv_fpos;
    int i、ps;
    //if(FileHandle lt; 0)return(-1);
    //オープンタイムを正規化する
    ps = NewPeriod * 60;
    i_time =(時刻[start_pos] -ShiftBase * ShiftTiming)/ps;
    i_time = i_time * ps ShiftBase * ShiftTiming;
    if(init){
    //最初のデータ、initデータ
    d_open = [start_pos]を開きます。
    d_low =ロー[start_pos];
    d_high =高[start_pos];
    d_close =閉じる[start_pos];
    d_volume =ボリューム[start_pos];
    i = start_pos - 1;
    if(FileHandle gt; = 0)last_fpos = FileTell(FileHandle);
    if(CSVHandle gt; = 0)csv_fpos = FileTell(CSVHandle);
    } else {
    i = start_pos;
    if(FileHandle gt; = 0)FileSeek(FileHandle、last_fpos、SEEK_ SET);
    if(CSVHandle gt; = 0)FileSeek(CSVHandle、csv_fpos、SEEK_SET);
    }
    if(i lt; 0)return(-1);

    int cnt = 0;
    int LastBarTime;
    //処理バー
    while(i gt = 0){
    LastBarTime = Time [i];

    //新しいバー
    if(LastBarTime gt; = i_time ps){
    //バーデータを書き込む
    WriteHistoryData();
    cnt ;
    i_time =(LastBarTime-ShiftBase * ShiftTiming)/ps;
    i_time = i_time * ps ShiftBase * ShiftTiming;
    d_open = [i]を開く。
    d_low = Low [i];
    d_high =高[i];
    d_close =閉じる[i];
    d_volume =ボリューム[i]。
    } else {
    //新しいバーがありません
    d_volume = Volume [i];
    if(Low [i] lt; d_low)d_low = Low [i];
    if(High [i] get; d'high)d'high =高[i];
    d_close =閉じる[i];
    }
    私 - ;
    }
    //最後のバーを書き込む前にlast_fposを記録します。
    if(FileHandle gt; = 0)last_fpos = FileTell(FileHandle);
    if(CSVHandle gt; = 0)csv_fpos = FileTell(CSVHandle);
    WriteHistoryData();
    cnt ;
    d_volume - =ボリューム[0]。
    //書き込まれたデータをフラッシュする
    if(FileHandle gt; = 0)FileFlush(FileHandle);
    if(CSVHandle gt; = 0)FileFlush(CSVHandle);
    return(cnt);
    }

    int UpdateChartWindow()
    {
    static int hwnd = 0;

    if(FileHandle lt; 0){
    //HSTファイルは開かず、更新する必要はありません。
    return(-1);
    }
    if(hwnd == 0){
    //更新のためにチャートウィンドウを検出しようとしています
    hwnd = WindowHandle(MySymbol、NewPeriod);
    }
    if(hwnd!= 0){
    if(IsDllsAllowed()== false){
    //DLL呼び出しを許可する必要があります
    DebugMsg(Dll呼び出しを許可する必要があります)。
    return(-1);
    }
    if(PostMessageA(hwnd、WM_COMMAND、CHART _CMD_UPDATE_DATA、0)== 0){
    //PostMessageに失敗しました。チャートウィンドウが閉じました
    hwnd = 0;
    } else {
    //PostMessage succeed
    return(0);
    }
    }
    //ウィンドウが見つからないか、PostMessageが失敗しました
    return(-1);
    }


    /*
    int PerfCheck(bool Start)
    {
    static int StartTime = 0;
    static int Index = 0;
    if(Start){
    StartTime = GetTickCount();
    インデックス= 0;
    return(StartTime);
    }
    索引 ;
    int diff = GetTickCount() - StartTime;
    アラート(使用時間[ インデックス ]: diff);
    StartTime = GetTickCount();
    return(diff);
    }
    *

    static int LastStartTime = 0;
    static int LastEndTime = 0;
    static int LastBarCount = 0;

    void reinit()
    {
    deinit();
    その中に();
    LastStartTime =時間[Bars-1];
    LastEndTime =時間[0]。
    LastBarCount =バー。
    }

    bool IsDataChanged()
    {
    /*
    static int LastBars = 0、LastTime = 0、LastVolume = 0;
    スタティックダブルLastOpen = 0、LastClose = 0、LastHigh = 0、LastLow = 0;
    if(LastVolume!= Volume [0] || LastBars!=バー|| LastTime!= Time [0] ||
    LastClose!=閉じる[0] || LastHigh!=高[0] || LastLow!= Low [0] ||
    LastOpen!= Open [0]){

    LastBars =バー;
    LastVolume =ボリューム[0]。
    最後の時間=時間[0];
    LastClose =閉じる[0];
    LastHigh =高[0]。
    LastLow = Low [0];
    LastOpen =開く[0];
    return(true);
    }
    return(false);
    *
    /*
    浮動小数点演算なしの高速版
    *
    static int LastBars = 0、LastTime = 0、LastVolume = 0;
    ブールret;
    ret = false;
    if(LastVolume!= Volume [0]){
    LastVolume =ボリューム[0]。
    ret = true;
    }
    if(LastTime!= Time [0]){
    最後の時間=時間[0];
    ret = true;
    }
    if(LastBars!= Bars){
    LastBars =バー;
    ret = true;
    }
    リターン(ret);
    }

    int CheckNewData()
    {
    静的な文字列LastServer =;
    if(Bars lt; 2){
    //データはまだロードされていません。
    DebugMsg(データはロードされず、バー バーのみ)。
    return(-1);
    }

    文字列serv = ServerAddress();
    if(serv ==){
    //まだサーバーがありません
    DebugMsg(サーバーが接続されていません)。
    return(-1);
    }

    //サーバーが変更されましたか?これをチェックして、サーバを変更している間に間違ったデータを防ぐために再設定してください
    if(LastServer!= serv){
    DebugMsg(サーバーは サーバーから サーバーに変更されました);
    LastServer = serv;
    reinit();
    return(-1);
    }

    if(!IsDataChanged()){
    //リソースを保存するためにデータが変更されなかった場合に戻る
    //DebugMsg(データは変更されません);
    return(-1);
    }

    if(Time [Bars-1]!= LastStartTime){
    DebugMsg(開始時間の変更、新しい履歴のロードまたはサーバーの変更)。
    reinit();
    return(-1);
    }
    int i、cnt;
    //通常はTime [0]またはTime [1]のLastEndTimeバーを見つけようとしますが、
    //操作が速いので
    for(i = 0; i; Bars; i ){
    if(Time [i] lt; = LastEndTime){
    ブレーク;
    }
    }
    if(i gt; = Bars || Time [i]!= LastEndTime){
    DebugMsg(終了時刻 TimeToStr(LastEndTime) 見つからない);
    reinit();
    return(-1);
    }
    cnt =バー - i;
    if(cnt!= LastBarCount){
    DebugMsg(読み込まれたデータ、cntは cnt LastBarCountは LastBarCountです);
    reinit();
    return(-1);
    }

    //新しいデータが読み込まれず、LastEndTimeの位置に戻ります。
    LastBarCount =バー。
    LastEndTime =時間[0]。
    return(i);
    }

    // ------------------------------------ ----------- -------------------
    //|プログラム開始機能|
    // ------------------------------------ ----------- -------------------
    int start()
    {
    static int last_time = 0;

    if(!Enabled)return(0);
    //常に一定の間隔の後にのみ更新または更新する
    if(UpdateInterval!= 0){
    int cur_time;
    cur_time = GetTickCount();
    if(MathAbs(cur_time - last_time)lt; UpdateInterval){
    return(0);
    }
    last_time = cur_time;
    }

    //if(Debug)PerfCheck(true);
    int n = CheckNewData();
    //if(デバッグ)PerfCheck(false);
    if(n lt; 0)return(0);

    //履歴ファイルを新しいデータで更新する
    UpdateHistoryFile(n);
    //チャートウィンドウを更新する
    UpdateChartWindow();
    //if(デバッグ)PerfCheck(false);
    return(0);
    }

    アタッチメントインジケータ:
    添付ファイル


    https://www.forexgroove.com/attachme...9574793598.mq460 KB | 0ダウンロード

  2. #2
    編集:トレーダーは、このような指標でオフラインチャートを優先取引することはできませんが、私は何年も前からやっている通常のチャートから取引を管理することは可能です。とにかく、このアイデアに興味のある人はいますか?誰かが私と同じ意見でない場合は、自分自身を見てください。 Trend Lineで通常のLinear Scaled MT4MT5 -Chartを比較する際には、独自のテストを行い、いくつかのフリーソフトウェアでネット上のあらゆる場所で利用できるLogarithmic Sc​​aled Chartで同じ操作を行います。それは素晴らしいだろう。通常の線形スケーリングされたチャートと対数スケールチャートのトレンドラインとの大きな違いです。 Greeds Zack

  3. #3
    相違点を示すためにいくつかの画像を投稿できますか?

  4. #4
    私は非常に時間が限られているので、あなた自身を見てください。あなた自身のためにネット上で利用可能な対数グラフ。安心。もし興味があれば、教えてください。実際に誰にも役立たない価値のない指標をコーディングするよりも、このコードで作業する方が明らかです。ご注意いただきありがとうございます。 Greeds Zack

  5. #5
    Quote Originally Posted by ;
    私は非常に時間が限られているので、あなた自身を見てください。あなた自身のためにネット上で利用可能な対数グラフ。安心。もし興味があれば、教えてください。実際に誰にも役立たない価値のない指標をコーディングするよりも、このコードで作業する方が明らかです。ご注意いただきありがとうございます。 Greeds Zack
    インジケータ
    https://www.forexgroove.com/attachme...2885342069.mq4私のプラットフォームでは動作しませんでした。コードに他のバグがある場合。それを修正してください。

  6. #6
    しかし、.ex4が動作しているはずです。すべての情報ありがとう。 Z.

  7. #7

    Quote Originally Posted by ;
    しかし、.ex4が動作しているはずです。すべての情報ありがとう。 Z.
    ex4のバージョンをアップロードできますか?
    https://www.forexgroove.com/trading-...le-corner.htmlTks

  8. #8

  9. #9

    Quote Originally Posted by ;
    ここにあります。 Z. {ファイル}
    どうもありがとう 。パラメータ設定の説明とこのインジケータの使用方法(オフラインチャートまたは...?)を教えてください。タイムシフトはhptmm periodmultiplierに.... .... ....

  10. #10

投稿権限

  • Youma新しいスレッドを投稿しない
  • Youmaは返信しない
  • あなたは添付ファイルを投稿しないかもしれない
  • Youma Notedityourposts
  •  
  • スマイリーはオンです
  • スマイリーはオンです
  • [IMG]コードがオンです
  • [VIDEO]コードがオンです
  • HTMLコードがオフです
This website uses cookies
We use cookies to store session information to facilitate remembering your login information, to allow you to save website preferences, to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners.