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)。
这种方式&这 更简明。
好吧,让我首先开始。
要关闭一个订单,我们不需要定义订单类型 和与该类型相对应的价格。在OrderClosePrice()中写上 "按价格关闭 "就足够了!
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()也不需要?
很好!) 谢谢。
需要的。只是由于懒惰而错过了......
是的,嗯...真的很混乱。
但以前,我没有遇到过这些话题。
所以你只能在相应的OrderSelect之后使用OrderClosePrice。由于OrderSelect为Order(const)-functions复制了一次数据,而同一个RefreshRates无法更新它们。
例如,如果OrderClosePrice未能关闭,那么在下一次尝试之前必须再次进行OrderSelect(不需要RefreshRates)。
ZS 这条线是2005年的!这里 有开发者的详细论证。
未结订单应从更高的数字开始分析,即for(int nom=OrdersTotal()-1; nom>=0; nom--)
这在删除订单时尤其重要。
但如果我们反其道而行之,for(int nom=0; nom<OrdersTotal(); nom++)会发生什么??
一开始,索引等于零,第一个编号为0的订单被删除。
那么指数就会变成等于1。在这一点上,其余的订单被转移了,而编号为1的订单
占据零点位置。前2号人物占据1号位置。它将被删除。
然后指数变成2。而一开始是4号的订单将被删除。
因此,在开始时占据偶数位置的订单被删除。奇数的将被保留。这可以从订单和数字的评论中看出。
我附上一个脚本,显示了删除和截图的两个选项
有20个未决订单
被逐一删除