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

 
Alexey Navoykov:
テキストハンドルはどこで見たことがありますか?) また、ややこしい話ですが、ハンドルは構造体 として指定することも可能です。
そうですね...といった具合に。
struct A { int i; };
bool SelectHandle( A& ) { return true; }
A GetHandle() { A a; return a; }
A NewHandle;
datetime time = MACRO100( NewHandle, TimeCurrent());

勤務先

 
A100:
そうですね...といった具合に。

勤務先

まだ配列があります ) そして、まずバイト配列にし、独自のTypeToBytesライブラリを使って構造体に変換する必要があります )

 
Alexey Navoykov:

まだ配列が残っています ) そして、まずバイトの配列にし、独自のTypeToBytes ライブラリを使って構造体に変換する必要があります)

私はそれをテストすることはできません - 私はそのような ライブラリファイルを持っていない(ビルド1961x32)。1週間後には、自分の目で確かめることができるようになります

 
Alexey Navoykov:
テキストハンドルはどこで見たことがありますか?) また、条件を複雑にすれば、ハンドルも構造体として設定することができます。

タスクのリンクを教えてください。
ありがとうございます。

 
Sergey Dzyublik:

タスクのリンクを教えてください。
ありがとうございます。

https://www.mql5.com/ru/forum/1111/page2350#comment_9974834

 

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

バグ、バグ、質問

pavlick_, 2018.12.21 17:23

int MACROS_helper_PrevHandle;
datetime MACROS_helper_time;
#define  MACROS(NEW_HANDLE_, FN_)   (MACROS_helper_PrevHandle=GetHandle())*0 == 0 ?  \
                                     (MACROS_helper_time=SelectHandle(NEW_HANDLE_) ? FN_ : 0)*0 == 0 ? \
                                        SelectHandle(MACROS_helper_PrevHandle)*0 == 0 ? MACROS_helper_time : 0 : 0 : 0
残念ながら、このバリアントが指すのは
Alexey Navoykov:
グローバル変数を 使用します。


この問題については、あまり深く考えたことがありません。すぐに解決策が見つからないので、このフォーラムで勉強することにしました。陰謀に興味はない、実践で使いたいから - バーチャルビーブル、これがないと戦闘EAがもう想像できない。

さて、すでに2人の方が追加変数なしの解決策があるとおっしゃっているので、週末に試してみようと思います。

NewHandleには定数を指定することができることを明記します。すなわち、有効な通話である。

time = MACROS(0, TimeCurrent()); // TimeCurrent из 0-хендла.
time = MACROS(1, TimeCurrent()); // TimeCurrent из 1-хендла.

MACROS(0, SymbolInfoTick(_Symbol, Tick)); // SymbolInfoTick из 0-хендла.

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
Price = MACROS(3, Bid); // Bid из 3-хендла.
 

fxsaber:

NewHandleには定数を指定することができる。すなわち、次のような有効なコールです。

すべてがうまくいく。

#include "Простейшее.mqh"
 int GetHandle() { return 0; }
bool SelectHandle( int ) { return true; }
#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
void OnStart()
{
        datetime time = MACRO100(0, TimeCurrent());
                 time = MACRO100(1, TimeCurrent());
        MqlTick tick;
        MACRO100(0, SymbolInfoTick(_Symbol, tick));
        double price = MACRO100(3, Bid);
}

他にいつチャンスがあるのか...。実質的なレベルを確認するために
議論から判断すると...ここで...プログレッシブな人たちは、OOPについてなど、聞こえの良い言葉を巧みに操っています。(諺の半分以上すら理解できないこともある)。

そして、リアルってなんだ! ティンゼルか? それとも、まだみんな参加してないのか?
もう一度強調しておきますが、複雑なこと、珍しいこと、特別な知識が必要なことは、すぐに書きますし、ここでは、最も簡単なこと(!)です。だから、脳をオンにして、選択肢を書く...。あるいは、待て!

 
https://www.mql5.com/ru/forum/1111/page2350#comment_9974834、別スレッドに立ててくれませんか? ここで迷っちゃうよ、A100の液漏れの様子を見てみたい。
 
pavlick_:
A100がどんな風に液体を漏らすのか見てみたいです。

なんで騒ぐんだ?3桁の仕事を作って、誰がうんこしたか審判で決めればいいじゃん。

 
fxsaber:
残念ながら、このオプションは


この問題については、あまり深く考えたことがない。その場では解決策が見つからなかったので、掲示板で教えてもらうことにしました。私は実際に使用したいので、陰謀は面白くない - 私はもはや戦闘EAを想像することはできませんが、仮想-ビブル、。

もう、いろいろな意味で考えさせられました。私の理解が正しければ、重要なのはマクロから返される型の可変性です。C++で解決できるかもしれません。

//------------------------------------ 1 вариант
template <typename T>
T f(T(*fp)()) {...}
//------------------------------------ 2 вариант
template <typename T>
struct Store {
   static inline T val;
};
int MACROS_helper_PrevHandle;
#define  MACROS(NEW_HANDLE_, FN_)   (MACROS_helper_PrevHandle=GetHandle())*0 == 0 ?           \
      (Store<decltype(FN_)>::val=SelectHandle(NEW_HANDLE_) ? FN_ : 0)*0 == 0 ?               \
      SelectHandle(MACROS_helper_PrevHandle)*0 == 0 ? Store<decltype(FN_)>::val : 0 : 0 : 0

しかし、gccのプリプロセッサーはそれができる。

#define  M(FN_) ({int a=5; ; FN_;})
int ff() {return 50;}

int val = M(ff());

をµlで実装しようとしましたが、失敗に終わりました。多分、SelectHandle(new, set_next=INT_MAX) を修正するのが一番良い解決策だと思います。 でも、もしかしたら、誰かがトリッキーなマクロで私を驚かせてくれるかもしれませんね。