//--- buffers (массивы под буферы индикатора)//--------------------------------------------------------------------double RSI[]; // буфер под RSI//--------------------------------------------------------------------double MAr1_fast[]; // буфер под быструю МАdouble MAr2_slow[]; // буфер под медленную МАdouble MAr2_slowColor[]; // буфер под цвета медленной МА//--------------------------------------------------------------------double MAr3_slow_glob[]; // буфер под глобальную медленную МАdouble MAr3_slow_globColor[]; // буфер под цвета глобальной медленной МА//--------------------------------------------------------------------
Скальперские автоматические системы по праву считаются вершиной алгоритмического трейдинга, но при этом они же являются и самыми сложными для написания кода. В этой статье мы покажем, как с помощью встроенных средств отладки и визуального тестирования строить стратегии, основанные на анализе поступающих тиков. Для выработки правил входа и...
我如何知道输入参数的类型?
编译器在调用模板函数的时候自己替换类型,如果代码中还没有这样的调用,那么编译器将创建另一个函数副本并自己设置类型--嗯,就像逻辑上的模板一样
如果问题是关于如何在这样一个函数中定义类型,那么就用
typenameUPD:在上面的例子中增加了参数类型打印机。
2020.09.16 18:58:21.679 tst (EURUSD,M5) int myfunc<int,int>(int, int)
2020.09.16 18:58:21.680 tst (EURUSD,M5) val1 = 2, typename = int
2020.09.16 18:58:21.681 tst (EURUSD,M5) val2 = 3, typename = int
2020.09.16 18:58:21.681 tst (EURUSD,M5) 5
2020.09.16 18:58:21.681 tst (EURUSD,M5) int myfunc<double,double>(double,double)
2020.09.16 18:58:21.681 tst (EURUSD,M5) val1 = 10.0, typename = double
2020.09.16 18:58:21.681 tst (EURUSD,M5) val2 = 30.0, typename = double
2020.09.16 18:58:21.681 tst (EURUSD,M5) 40
更新:在这个例子中添加了__FUNCSIG__。
下午。
在MQL5中编写指标时, 我遇到了一些奇怪的事情(指标在一个单独的子窗口中,4行)。
最初的缓冲区描述如下。
下一步在OnInit。
基本上:该指标画了4条线:前两条只是单色的,后两条是双色的(它们在扭结时改变颜色)。
双色是由于DRAW_COLOR_LINE的绘制方式造成的。
问题:第一行(上面代码中的缓冲区2和3)画得很完美,在OnInit中为它写的所有代码都能工作;
即不显示我在数据窗口中设置的文本,而只显示指标的名称,以代替缓冲区。虽然这条界线本身已经划定,而且它应该是多色的。,第二行由于某种原因显示出来,例如行不工作。
我认为诀窍在于编号的转变?例如,我不确定为什么在代码的上部,当我用#属性指令声明最后一行时,索引应该是4,而不是5,因为之前已经使用了4个缓冲区。在OnInit中,用#property声明时的行数和用数组链接时的缓冲区编号之间是否有任何关系?
请告知上面的代码有什么问题。也许有人能找到一个使用DRAW_COLOR_LINE.... 绘图方法绘制至少两条线的指标实例
还有一个相关的问题:五颜六色的线条缓冲区是如何被捆绑在一起的?我的意思是,编译后的代码如何知道,如果我把一个值放进一个颜色缓冲区,这个颜色应该被用来给其他缓冲区的一条线着色?
下午。
在MQL5中编写指标时, 我遇到了一些奇怪的事情(指标在一个单独的子窗口中,4行)。
最初的缓冲区描述如下。
下一步在OnInit。
基本上:该指标画了4条线:前两条只是单色的,后两条是双色的(它们在扭结时改变颜色)。
双色是由于DRAW_COLOR_LINE的绘制方式造成的。
问题:第一行(上面代码中的缓冲区2和3)画得很完美,在OnInit中为它写的所有代码都能工作;
即不显示我在数据窗口中设置的文本,而只显示指标的名称,以代替缓冲区。虽然这条界线本身已经划定,而且它应该是多色的。,第二行由于某种原因显示出来,例如行不工作。
我认为诀窍在于编号的转变?例如,我不确定为什么在代码的上部,当我用#属性指令声明最后一行时,索引应该是4,而不是5,因为之前已经使用了4个缓冲区。在OnInit中,用#property声明时的行数和用数组链接时的缓冲区编号之间是否有任何关系?
请告知上面的代码有什么问题。也许有人能找到一个使用DRAW_COLOR_LINE.... 绘图方法绘制至少两条线的指标实例
还有一个相关的问题:五颜六色的线条缓冲区是如何被捆绑在一起的?我的意思是,编译后的代码如何知道,如果我把一个值放进一个颜色缓冲区,这个颜色应该被用来给其他缓冲区的一条线着色?
映射的编号与缓冲区的编号不同。
这应该有效。
大家下午好!
我做了一个函数来修改止损。但当它工作时,却出现了EURUSD,H1: OrderModify错误130。
而且价格离应该设置止损的地方很远。
这里有一个函数。
void open_bu(string walpa, int op) { bool err; int spred=(int)MarketInfo(walpa,MODE_SPREAD); double point=MarketInfo(walpa,MODE_POINT); int digits=(int)MarketInfo(walpa,MODE_DIGITS); for(int is=OrdersTotal()-1; is>=0; is--) { if(OrderSelect(is, SELECT_BY_POS, MODE_TRADES) && OrderSymbol()==walpa) { if(OrderType()==op && NormalizeDouble(OrderStopLoss(),digits) < NormalizeDouble(OrderOpenPrice()+spred*point, digits) ) { err=OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice()+spred*point, digits), OrderProfit(), 0, clrNONE); if(!err) error(GetLastError()); } if(OrderType()==op && (NormalizeDouble(OrderStopLoss(),digits) > NormalizeDouble(OrderOpenPrice()-spred*point, digits) || OrderStopLoss()==0)) { Print(walpa," ",spred," ",point," ",digits," ",NormalizeDouble(OrderOpenPrice()-spred*point, digits)); err=OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice()-spred*point, digits), OrderProfit(), 0, clrNONE); if(!err) error(GetLastError()); } } } return; }编写了一个函数,从3个小节中找出分形的小节编号。在网上的图表中,它似乎能正确地找到它。但在测试器的视觉测试 中,它却在说谎。有哪位专业人士可以看一下这段代码,发现一些错误?
我将非常感激。
下午好。我应该添加什么代码使指标在一个月后停止在测试器中工作?也就是说,我写的都很好!但当我做回溯测试时,它又工作了。(mgl4)
你好!
我想在订单开放日 的订单关闭周期中设置一个条件,这样周五开放的就不会被关闭。
下午好。我应该添加什么代码使指标在一个月后停止在测试器中工作?也就是说,我写的都很好!但当我做回溯测试时,它又工作了。(mgl4)
你需要写的代码不是在OnInit,而是在OnTick()。
你好!
我想在订单开放日 的订单关闭周期中设置一个条件,这样周五开放的订单就不会被关闭。
这样试试吧。
for(int is=OrdersTotal()-1; is>=0; is--) { if(OrderSelect(is,SELECT_BY_POS,MODE_TRADES)) { if ((OrderMagicNumber()==Magic) && (TimeDayOfWeek(OrderOpenTime())<5)) { if (OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_BID),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE); if (OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE); if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error, " ",Symbol()); } else error=0; } else Print("NoMagic ", OrderMagicNumber()); // for Debug } else Print( "Error when order select ", GetLastError()); }