ChartObject *hline=HLine::New(1.255).Color(clrGreen).Width(2).Selectable(true); // не надо помнить очерёдность параметров и можно писать в одну строку - цепочкой
// получается вот из подобного : class HLine:public ChartObject { public: HLine(double price); HLine *New(double _price) { return new HLine(_price); } // это чтобы не городить (new HLine(...)).Method1 HLine *Color(color _clr) { fgColor=_clr; return GetPointer(this); } // а это чтобы получались цепочки obj.Method1(..).Method2(..) };
// После этого в MQL4 будут компилироваться все библиотеки из MQL5\Include\Math#property strict#ifdef __MQL4__#include <Math\Alglib\bitconvert.mqh>
#define TEMP_MACROS(A) double A( double ) { return(0); }
TEMP_MACROS(MathLog1p)
TEMP_MACROS(MathExpm1)
TEMP_MACROS(MathArcsinh)
TEMP_MACROS(MathArccosh)
TEMP_MACROS(MathArctanh)
#undef TEMP_MACROS
#endif
少なくともメソッド・セッターでは、これは正当化されるでしょう - コードはより読みやすく、コンパクトになるかもしれません。
ChartObject *hline=HLine::New(1.255).Color(clrGreen).Width(2).Selectable(true); // не надо помнить очерёдность параметров и можно писать в одну строку - цепочкой
// получается вот из подобного :
class HLine:public ChartObject {
public:
HLine(double price);
HLine *New(double _price) { return new HLine(_price); } // это чтобы не городить (new HLine(...)).Method1
HLine *Color(color _clr) { fgColor=_clr; return GetPointer(this); } // а это чтобы получались цепочки obj.Method1(..).Method2(..)
};
、返される型によって関数の修飾に少し支障があります。
メソッドからGetPointer(this)を返すのはご自由に。
このように&thisは より簡潔です。
では、まず私から。
注文を決済するために、注文の種類と その種類に対応する価格を定義する必要はない。OrderClosePrice()に "close at price "と書くだけで十分です!
void OnStart()
{
int i, total = OrdersTotal()-1;
for(i = total; i >= 0; i--)
{
if(OrderType() < OP_SELLSTOP)
{
if(!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100))
printf("***********");
}
}
}/********************************************************************/
かなりカッコイイ!) ありがとうございました。
例から判断して、OrderSelect()も必要ないのでは?
(カッコイイ!) ありがとうございます。
例から判断して、OrderSelect()も必要ないのでは?
いいね!) ありがとうございます。
必要である。ただ、怠慢で見逃してしまっただけなのですが・・・。
ええ、まあ...本当にメチャクチャ。
しかし、以前は、このような話題に出会うことはありませんでした。
そのため、OrderClosePriceは対応するOrderSelectの後にのみ使用することができます。OrderSelectはOrder(const)-functionsのデータを一度コピーするので、同じRefreshRatesでは更新ができないのです。
つまり、例えばOrderClosePriceがクローズできなかった場合、次の試行の前にOrderSelectを再度行う必要があります(RefreshRatesは必要ありません)。
ZS このスレッドは2005年の ものですここには、開発者の詳細な主張が書かれています。
未決済注文は、より大きな数字から分析する必要があります、つまり for(int nom=OrdersTotal()-1; nom>=0; nom--)
保留中の注文は20件
これは、注文を削除する際に特に重要です。
しかし、逆のことをするとどうなるか for(int nom=0; nom<OrdersTotal(); nom++)?
最初はインデックスが0になり、番号0の一番最初のオーダーが削除されます。
すると、インデックスが1になる。このとき、残りのオーダーはシフトされ、1番を持つものが
はゼロ位置を占めます。元2番が1番ポジションを取る。削除されます。
すると、指数は2となる。そして、最初に4番だったオーダーは削除されます。
従って、先頭の偶数番目に位置するオーダーは削除される。奇数番号のものは残ります。それは、オーダーや数値に対するコメントからもうかがい知ることができます。
削除とスクリーンショットの両方のオプションを表示するスクリプトを添付します。