ライブラリ: CDouble & CDoubleVector
amrali, 2018.02.12 23:53
#define forEach(element, array) for (int __i = 0, __max = ArraySize((array)); __i < __max && ((element) = array[__i]) == (element); __i++)
Renat Fatkhullin, 2015.02.10 08:16
私はまだコードを実行していませんが、ソースコードにはHistorySelectの終了日が間違っているという古典的なエラーが示されています。
最初のプログラマーは皆、間違った日付でこの関数を呼び出し、常に履歴の終わりをスナックし、「履歴に入る長い時間の取引」を検出します。
レナト・ファトフーリン, 2015.02.10 09:15
間違いは、人々が現在の瞬間が何であるかを考えず、間違ったソースから取得した間違った日付を代入することです。
廃止されたserverTimeではなく、既知の遠い日付を終了日として指定すれば十分です。
レナト・ファトフーリン, 2015.02.10 13:56
そして、開始日と終了日は、エラーの実現と強制的なマージンで設定されるべきです。つまり、最低でもマイナスN秒、プラスN秒です。
TimeTradeServer()はrltimeの正確な時間ではなく、マーケット概要に入ってくる価格ティックのみで更新されます。
履歴サンプルに突然データがない場合、それは99%クエリの境界にエラーがあることを意味します。
HistorySelect(0, LONG_MAX);
Предопределённые переменные _XXXX переводятся в функции MQL5 при помощи беспараметрической формы #define:
//--- _Digits変数は、小数点以下の桁数を格納する、 #define _Digits Digits()
//--- 現在のシンボルの最新の売り手価格(アスク価格)。 double GetAsk() { MqlTick tick; SymbolInfoTick(Symbol(),tick); return(tick.ask); }
恐ろしく高い!本当に構造を通してやりたいのなら、せめてやっておくべきだった。しかもなぜかチェックがない。
SymbolInfoDoubleは MT4に完全対応しています。
#define IsTradeContextBusy true
え?
もしかして嘘?取引、自動取引システム、取引戦略のテストに関するフォーラム。
fxsaber、2017.09.26 09時55分。
bool RefreshRates( void ) { return(true); } double MarketInfo( const string Symb, const ENUM_SYMBOL_INFO_DOUBLE Property ) { return(SymbolInfoDouble(Symb, Property)); } int MarketInfo( const string Symb, const ENUM_SYMBOL_INFO_INTEGER Property ) { return((int)SymbolInfoInteger(Symb, Property)); } bool IsTesting(void) { return(MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_OPTIMIZATION)); } bool IsTradeContextBusy( void ) { return(false); } bool IsTradeAllowed(void) { return(MQLInfoInteger(MQL_TRADE_ALLOWED)); } bool IsExpertEnabled(void) { return(AccountInfoInteger(ACCOUNT_TRADE_EXPERT)); } int ObjectFind( const string Name ) { return(ObjectFind(0, Name)); } int ObjectsTotal( void ) { return(ObjectsTotal(0)); } bool ObjectDelete( const string Name ) { return(ObjectDelete(0, Name)); } string ObjectName( const int Pos ) { return(ObjectName(0, Pos)); } double AccountFreeMarginCheck(const string Symb,const int Cmd,const double dVolume) { double Margin; return(OrderCalcMargin((ENUM_ORDER_TYPE)Cmd, Symb, dVolume, SymbolInfoDouble(Symb, (Cmd == ORDER_TYPE_BUY) ? SYMBOL_ASK : SYMBOL_BID), Margin) ? AccountInfoDouble(ACCOUNT_MARGIN_FREE) - Margin : -1); } #define False false #define True true #define Digits _Digits #define Point _Point #define MODE_BID SYMBOL_BID #define MODE_ASK SYMBOL_ASK #define MODE_POINT SYMBOL_POINT #define MODE_DIGITS SYMBOL_DIGITS #define MODE_STOPLEVEL SYMBOL_TRADE_STOPS_LEVEL #define MODE_SPREAD SYMBOL_SPREAD #define StrToTime StringToTime #define StrToInteger StringToInteger #define TimeToStr TimeToString #define DoubleToStr DoubleToString #define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID) #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
fxsaber:
В копилку
#define forEach(element, array) for (int __i = 0, __max = ArraySize((array)); __i < __max && ((element) = array[__i]) == (element); __i++)
興味深い、明白ではないテクニック )
どれだけひねくれたことができる?
ディファインは、あるテキストを別のテキストに置き換えた愚かなものだ。何の力もない!
テンプレートで同じことをやってみた方がいい。
何回できる?
ディファインは、あるテキストを別のテキストに置き換える愚かな行為だ。そこには何の力もない!
文章は少ない方が便利なこともある
同じことをテンプレートでやってみたほうがいい。
実現可能性、使いやすさ、パフォーマンスの問題だ。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事 トレーダーのハック: 定義と ForEach のブレンド (#define) はパブリッシュされました:
この記事は、現在MQL4でコーディングしていて、MQL5に切り替えたいとは思っていない人のためのものです。 今回はMQL4のスタイルでコードを書く方法を模索していきます。 #define プリプロセッサのマクロ置換を見ていきます。
メタエディタ にはカスタムスニペットがないので、' define ' を適用します。 #defineマクロの置換は、目標を追求した怠惰で賢いプログラマによって考案されました。 これには読みやすさと繰り返しコードを書くことの利便性があります。
多くのプログラミング言語は、標準の for ループに加えて、 for >for(<typename> element:Collection) 、for (式の識別子の型)などのバリエーションを備えています。 次のコードを書くことができれば
、プログラマーは少し楽になると思います。 インターネット上では、このアプローチに対する賛成意見と反対意見があります。 ここでは、#define のマクロと同じようなことを行う方法を紹介します。
簡単なタスクから始めましょう-すべての相場のシンボルの名前を取得します。 次のマクロを書き直します。
作者: Vladimir Karputov