[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 1127

 
drknn:
非常感谢您的帮助=)
 
Alexandr24:
非常感谢您的帮助=)


不要忘了,在测试器中,指标不会扔掉警报窗口,而是将警报信息写到日志中。用脚本来调试这样的代码片断更好--它更快。

另外,奇怪的是,指标信息在测试器中没有写到测试器日志中,而是写到了实时日志中。

 
在测试器中测试EA 时如何考虑佣金?
 
似乎被考虑到了,因为测试者使用了某个特定经纪商的所有设置。搜索会更准确地告诉你。
http://www.google.ru/search?as_sitesearch=mql4.com&as_q=%EA%EE%EC%E8%F1%F1%E8%FF+%E2+%F2%E5%F1%F2%E5%F0%E5
 
Abzasc:

没有 "直接 "的方法来做这件事。

你可以这样做

或者这里有另一种方法


谢谢你!
 

我不太明白这些条件是如何运作的。

我决定找出分形指标的工作原理,什么是MODE_UPPER和MODE_LOWER的区别,并写了以下代码

int start()
{int y;
y= WindowFirstVisibleBar();Alert ("y",y);
for (;y>=0;y--)
{ double up=iFractals(Symbol(),PERIOD_M15,MODE_UPPER,y) 。
double down=iFractals(Symbol(),PERIOD_M15,MODE_LOWER,y);
if (up>=1|down>=1){
Alert("Previous upper fractal is:", up, " Previous lower fractal is:", down);Alert ("y",y);}}。

WindowFirstVisibleBar()给出了图表上的条数,如果你从EA中划掉(up>=1||down>=1),这个东西就会起作用,它给出了一系列漂亮的计数条数,只是有这么多。

这就像一个||符号或,如果至少有一个条件为真,或者两个条件同时为真,操作者似乎会做括号{},对吗?

对我来说没有任何变化,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

我想我做对了,帮帮我吧!!!!!!!

 
Dimka-novitsek:

我不太明白这些条件是如何运作的。

我决定了解分形指标的工作原理,MODE_UPPER和MODE_LOWER之间有什么区别。

int start()
{int y;
y= WindowFirstVisibleBar();Alert("y",y)。
for (;y>=0;y--)
{ double up=iFractals(Symbol(),PERIOD_M15,MODE_UPPER,y);
double down=iFractals(Symbol(),PERIOD_M15,MODE_LOWER,y)。
如果(上>=1||下>=1){
Alert("Previous upper fractal is:", up, " Previous lower fractal is:", down);Alert("y",y);}}。

WindowFirstVisibleBar()给出了图表上的条数,如果你划掉(up>=1|down>=1),这个东西就能发挥作用,它给出了一系列漂亮的计算条数,但有很多条数。

这就像一个||符号或,如果至少有一个条件为真,或者两个条件同时为真,操作者似乎会做括号{},对吗?

对我来说没有任何变化,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

我认为一切都很正确。帮助我!!!!!!!



正常的代码地方通过反击 - M - 更快的反应......没有感叹词。
 
通过counter-alt - M - 还有更多细节?
 
Dimka-novitsek:

这就像|||

https://docs.mql4.com/ru/basis/operations/bool

一个逻辑性的OR操作。

Zy counter-alt - M就像SRC按钮,通过它进行编码。

 
drknn:

我已经尝试了你建议的代码。结果总是一样的--它在白天不断开仓交易。同样,我希望保留开/关选项。

以下是尝试过的变体。

外部 bool WaitForNewDay = true。

空白的init()

{

SMB=Symbol()。

返回。

}

空白启动()。

{

bool Trade=true。

如果(WaitForNewDay){如果(HistoryBuy(MAGICMA)+HistorySell(MAGICMA)!=0) Trade=false;}。

如果(CalculateCurrentOrders(Symbol())==0 && Trade)

{CheckForOpen(); return;}

}

//-----------------------------------------------------------------

int HistoryBuy(int MAGICMA)

{int BuyOrders=0;

for (int i=OrdersHistoryTotal()-1;i>=0;i--){

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

Print(" ",GetLastError()," ",i)。

}

否则 {

如果(OrderSymbol()!= SMB || OrderMagicNumber()!= MAGICMA){ 继续;}。

如果(OrderType()==OP_BUY){

如果(OrderOpenTime()>=iTime(SMB,PERIOD_D1,0)){

BuyOrders++;

}

}

}

}

return(BuyOrders)。

}

//-----------------------------------------------------------------

int HistorySell(int MAGICMA){

int SellOrders=0。

for (int i=OrdersHistoryTotal()-1;i>=0;i--) {

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

Print(" ",GetLastError()," ",i)。

}

否则 {

如果(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGICMA){ 继续;}。

如果(OrderType()==OP_SELL){

如果(OrderOpenTime()>=iTime(SMB,PERIOD_D1,0)){

SellOrders++;

}

}

}

}

return(SellOrders)。

}

////////////// 其他选项/////////////////////

外部 bool WaitForNewDay = true。

交易=真。

空白的init()

{

SMB=Symbol()。

如果(WaitForNewDay) {Trade=false;}

返回。

}

空白启动()。

{

如果(WaitForNewDay) {if(HistoryBuy(MAGICMA)+HistorySell(MAGICMA)==0) Trade=true;}。

如果(CalculateCurrentOrders(Symbol())==0 && Trade)

{CheckForOpen(); Trade=false; return;}

}

原因: