エラー、バグ、質問 - ページ 1747

 

NOT LABELオブジェクトがバーの時間座標に視覚的に張り付くのを除去するにはどうすればよいですか?

オブジェクトの時間座標を秒に設定しましたが、タイムフレームに設定したかのようにビジュアライズされます。

質問を掘ってみた

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

エラー、バグ、質問

アンドリュー・ペトラ さん 2014.11.26 13:34

三角形や楕円、矩形などのオブジェクトを動かすのが得意なのですが、アンカーポイントが不釣り合いに「浮いて」しまうのです。

これらの設定に依存しない


私が作る


ドラッグ&ドロップ


長方形は2点目を、三角形と楕円は3点目を「ドリフト」している。

これは直るのでしょうか?正確な「計測」が必要なのです。

精密なタイムスケール」を選択すると、そのようなバインディングはなくなり、すべてが本来の姿で表示されます。しかし、MQL5では、このパラメータを有効/無効にする方法がどこにも見当たりません。用意されていないのでしょうか?

 

本当に助けてください数時間、この奇妙な動作の原因を突き止めようとしています。結局、予想外の結果になったEAを書きました

#define TOSTRING(A) #A + " = " + (string)A + "\n"

string TimeToString( const ulong Time )
{
  return(TimeToString(Time / 1000, TIME_DATE|TIME_SECONDS) + "." + ::IntegerToString(Time % 1000, 3, '0'));
}

void OnTick()
{
  static MqlTick PrevTick = {0};
  
  MqlTick NowTick;
  
  if (SymbolInfoTick(_Symbol, NowTick) && (PrevTick.time_msc > NowTick.time_msc))
    Alert(TOSTRING(TimeToString(PrevTick.time_msc)) + TOSTRING(TimeToString(NowTick.time_msc)));
    
  PrevTick = NowTick;  
}

結果(ボトムアップ)

2016.10.31 11:55:51.031 Test10 (Si-12.16,M1)    TimeToString(NowTick.time_msc) = 2016.10.31 12:58:10.698
2016.10.31 11:55:51.031 Test10 (Si-12.16,M1)    TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:10.702
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1)    
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1)    TimeToString(NowTick.time_msc) = 2016.10.31 12:58:10.654
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1)    TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:10.656
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1)    
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1)    TimeToString(NowTick.time_msc) = 2016.10.31 12:58:05.458
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1)    TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:05.464
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1)    
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1)    TimeToString(NowTick.time_msc) = 2016.10.31 12:56:05.474
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1)    TimeToString(PrevTick.time_msc) = 2016.10.31 12:56:05.476

SymbolInfoTickは時々、前のものより低い時間のティックを返すことがあります(待たなければなりません)。

それは一体どういうことなのか!コンフィギュレーション

Network 'xxx': authorized on BCS-MetaTrader5 through Access Server #2 (ping: 112.19 ms)
Terminal        C:\Program Files\BCS Broker MetaTrader 5 Terminal
Terminal        Windows 7 Ultimate (x64 based PC), IE 09.00, Intel Core i7-2700K  @ 3.50GHz, RAM: 11327 / 16301 Mb, HDD: 4346 / 30000 Mb, GMT+02:00
Terminal        MetaTrader 5 x64 build 1455 started (MetaQuotes Software Corp.)
 
fxsaber:

本当に助けてください数時間、この奇妙な動作の原因を突き止めようとしています。結局、予想外の結果になったEAを書きました

#define TOSTRING(A) #A + " = " + (string)A + "\n"

string TimeToString( const ulong Time )
{
  return(TimeToString(Time / 1000, TIME_DATE|TIME_SECONDS) + "." + ::IntegerToString(Time % 1000, 3, '0'));
}

void OnTick()
{
  static MqlTick PrevTick = {0};
  
  MqlTick NowTick;
  
  if (SymbolInfoTick(_Symbol, NowTick) && (PrevTick.time_msc > NowTick.time_msc))
    Alert(TOSTRING(TimeToString(PrevTick.time_msc)) + TOSTRING(TimeToString(NowTick.time_msc)));
    
  PrevTick = NowTick;  
}

結果(ボトムアップ)

2016.10.31 11:55:51.031 Test10 (Si-12.16,M1)    TimeToString(NowTick.time_msc) = 2016.10.31 12:58:10.698
2016.10.31 11:55:51.031 Test10 (Si-12.16,M1)    TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:10.702
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1)    
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1)    TimeToString(NowTick.time_msc) = 2016.10.31 12:58:10.654
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1)    TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:10.656
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1)    
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1)    TimeToString(NowTick.time_msc) = 2016.10.31 12:58:05.458
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1)    TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:05.464
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1)    
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1)    TimeToString(NowTick.time_msc) = 2016.10.31 12:56:05.474
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1)    TimeToString(PrevTick.time_msc) = 2016.10.31 12:56:05.476

SymbolInfoTickは時々、前のものより低い時間のティックを返すことがあります(待たなければなりません)。

それは一体どういうことなのか!コンフィギュレーション

Network 'xxx': authorized on BCS-MetaTrader5 through Access Server #2 (ping: 112.19 ms)
Terminal        C:\Program Files\BCS Broker MetaTrader 5 Terminal
Terminal        Windows 7 Ultimate (x64 based PC), IE 09.00, Intel Core i7-2700K  @ 3.50GHz, RAM: 11327 / 16301 Mb, HDD: 4346 / 30000 Mb, GMT+02:00
Terminal        MetaTrader 5 x64 build 1455 started (MetaQuotes Software Corp.)
そう、ここで助けを必要としているのは、あなただけではないのです。数週間前から、ティックを普通にローソク足に巻き込むようにしています。それで...ダニがまだ生々しい。BODへの応募#1598238
 

マジックライン

#include "key.mqh"
virtual int f( const ABCDEFGHIJK ) const { return ABCDEFGHIJK; }

アクションの順序(厳密)

  1. 添付ファイルを同じフォルダーに入れる。次に、MetaEditorでマウスを使用します。
  2. ファイル->開く->Test.mqhを選択->開くボタン
  3. 編集」→「検索と置換」→「置換」→「検索」「置換先」を下図のように入力→「すべて置換」ボタン

結果

設定はこちら: https://www.mql5.com/ru/forum/1111/page1127#comment_795376

ファイル:
Test.mqh  1 kb
key.mqh  1 kb
 
Alexey Kozitsyn:
そう、ここで助けを必要としているのは、あなただけではないのです。数週間前からチックをちゃんとキャンドルに巻いてみたりしています。それで...チックはまだ生々しい。SD#1598238で 落札
チックは普通にローソクに転がっています。
 
fxsaber:
ティキは普通にキャンドルに転がり込む。
そうなんですか?ボリュームも一致?そして、コントロールはしましたか?そして、ログも見せてもらえるのでしょうか?
 
Alexey Kozitsyn:
そうなんですか?ボリュームも同じ?そして、制御を実行したのでしょうか?そして、ログも見せてもらえるのでしょうか?

制御を行った - コードベースを見る。ローソク足と計算された出来高の不一致は気にしないでください。なぜなら、それは境界の刻みのことであり、どちらかのバーに入る可能性があるからです。これはプリンシパルではありません。また、フォーラムにトレードターンオーバーのインジケータを掲載しました。だから、まったく問題はない。

あなたの場合、すごくオタクになると、バー作成の仕組みは摘発できても、CopyTicksは摘発できないんですよ。

 

コンパイルエラー

class A {
protected:
        void f(  int ) {} //(*)
};
class B : public A {
public:
        void f( uint ) {}
};
void OnStart()
{
        B b;
        b.f( 1 ); //'A::f' - cannot call protected member function
}

そして、(*)の行を削除すれば、すべてOKです。B::f(uint)の何が問題なのでしょうか?逆の立場で見れば

class A {
public:
        void f(  int ) {} //(**)
};
class B : public A {
public:
        void f( uint ) {}
};

は、マッチング関数を検索するMQLアルゴリズムの根本的な欠点を見ることができます。2番目の例では、B::f(uint)は文字列がなくなるまで呼び出されます(**)。(**)行が現れると同時に、A::f(int)が呼び出されます。これは、ベースクラスの変更が最終結果に影響することを意味するが、C++ではベースクラスの変更に関係なくB::f(uint)が常に呼ばれるため、最終結果の安定性が保証される。

MQLでは、Aクラスの開発者が新しいpublicなprivate関数を発明し、そのためにBクラスのユーザがコードのコンパイルをやめたり、もっと重要なことですが、最終結果が変更されたことが判明します。

 
A100:

マジックライン

#include "key.mqh"
virtual int f( const ABCDEFGHIJK ) const { return ABCDEFGHIJK; }

アクションの順序(厳密)

  1. 添付ファイルを同じフォルダーに入れる。次に、MetaEditorでマウスを使用します。
  2. ファイル->開く->Test.mqhを選択->開くボタン
  3. 編集」→「検索と置換」→「置換」→下図のように「検索:」と「置換先:」を入力し、「すべて置換」ボタンをクリックします。

結果

設定はこちら: https://www.mql5.com/ru/forum/1111/page1127#comment_795376

ご投稿ありがとうございました。
 
A100:

コンパイルエラー

class A {
protected:
        void f(  int ) {} //(*)
};
class B : public A {
public:
        void f( uint ) {}
};
void OnStart()
{
        B b;
        b.f( 1 ); //'A::f' - cannot call protected member function
}

そして、(*)の行を削除すれば、すべてOKです。B::f(uint)の何が問題なのでしょうか?逆の立場で見れば

class A {
public:
        void f(  int ) {} //(**)
};
class B : public A {
public:
        void f( uint ) {}
};

は、マッチング関数を検索するMQLアルゴリズムの根本的な欠点を見ることができます。2番目の例では、B::f(uint)は文字列がなくなるまで呼び出されます(**)。(**)行が現れると同時に、A::f(int)が呼び出されます。これは、ベースクラスの変更が最終結果に影響することを意味するが、C++ではベースクラスの変更に関係なくB::f(uint)が常に呼ばれるため、最終結果の安定性が保証される。

MQLでは、Aクラスの開発者が新しいpublicな関数を発明し、そのためにBクラスのユーザーはコードをコンパイルしなくなった、あるいはより重大なことに、最終結果が変わってしまったことが判明します。

b.f( 1 ) の定数 "1" だけは int として解釈されます。明示的な変換を行えば、すべてがうまくいく。

b.f( (uint)1 );