任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1069

 
CloseAllBuy()只在一个地方被调用:在OnTick()函数中,条件是if(Bid>buycloseprice) CloseAllBuy();这个条件在新的开启时没有出现,在关闭期间也没有出现,但是当EA再次开启时,CloseAllBuy()函数还是被触发了。
 
rapid_minus:
CloseAllBuy()在一个地方被调用:在OnTick()函数中,条件是if(Bid>buycloseprice) CloseAllBuy();这个条件在新的启用时没有出现,在停用期间也没有出现,但是当EA再次启用时,CloseAllBuy()函数还是被触发了。
会不会有一个代码?什么是buycloseprice,它来自哪里,它的初始化是什么,它在哪里被改变了,你从这里看不到它......
 
这里有一段代码。
 
由于某种原因,我无法看到SRC是否被插入了。如果没有,请告诉我,我会用文字重复一遍。
 
问题: ,请告知在这种情况下如何具体应用全局变量我搞不清楚。谢谢你。
 
rapid_minus:
这里有一段代码。

是不可见的。

rapid_minus
问题告知在这种情况下,究竟如何应用全局变量我搞不清楚。谢谢你。

阅读文档终端的全局变量,查看元编辑器的帮助,在那里更新更快。

另外,你可以把重要变量的设置和数值保存到一个文件中,并在加载时从那里读取它们。

但大多数时候,你可以不做这些,只要用你的头脑,在代码中做出正确的逻辑。

 
用文字重复。RefreshRates()。
total=OrdersTotal();
if(total>0)
{
for(int i=0; i<=OrdersTotal(); i++)
if(OrderSelect(i,SELECT_BY_POS) ==true)
{
如果(OrderType()==OP_BUY && OrderMagicNumber()==magic)
{ RefreshRates();
如果(Bid>buycloseprice) CloseAllBuy();
}

如果(OrderType()==OP_SELL && OrderMagicNumber()==magic)
{ RefreshRates();
if(Ask<sellcloseprice) CloseAllSell();
}
}
}

if((total==0) ||(total>0 &&OrderSelect(1,SELECT_BY_POS,MODE_TRADES)==true &&OrderSymbol()!=Symbol()
{
Comment("Noopen positions");

if(condition && timeBar!=iTime(Symbol(),Period(),1))
{
Print("Criterion-1 for BAY has appeared");
int poz_1 = OrderSend(Symbol(,OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_2 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_3 = OrderSend(Symbol(,OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_4 = OrderSend(Symbol(,OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_5 = OrderSend(Symbol(,OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
timeBar=iTime(Symbol(),Period(),1);
double spread = (Ask-Bid);
buyopentime = iTime(Symbol(),Period(),0);
buycloseprice = NormalizeDouble((iOpen(Symbol(),Period(),0)+spread+75*Point),Digits)。
Comment("Magic 510015 BAY");
Print("CLOSE PRICE = ",buycloseprice);
}
}

}

//+------------------------------------------------------------------+*/
void CloseAllBuy()
{
bool fc;
for (int i=OrdersTotal()-1; i>=0; i-)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ==false) break;
if (OrderType()==OP_BUY)
{
fc=OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slip);
buycloseprice=0.0;
tc=OrderCloseTime();
}
}
}
 
那么我的代码中哪里出错了呢?
 
rapid_minus:
在文本中重复出现。

仍然不清楚buycloseprice 从何而来,在条件if(Bid>buycloseprice) CloseAllBuy() 之前会发生什么。因为我在代码中只看到了这个,在--buycloseprice = NormalizeDouble((iOpen(Symbol(), Period(), 0)+spread+75*Point), Digits);,但这个buycloseprice 在哪里声明,初始化的值是什么?


如果这是所谓的买入订单的 收盘价,那么这里的逻辑就崩溃了,因为这个值是在触发后传递给变量的,而你还没有向我们展示之前的内容。

现在进行一下运算,代码中存在这样一个循环。

for(int i=0; i<=OrdersTotal(); i++)

比方说,有5个订单,范围从0到4。循环计数从0到5。这个循环的工作是否正确?

另外,在if(condition && timeBar!=iTime(Symbol(),Period(),1))一行中,condition和 timeBar 来自哪里?

 
我想我明白了--错误在于,我设置了全局的buycloseprice,并立即给它一个0.0的值。虽然之后在开仓 时取了一个特定的值,但这个值在终端关闭时丢失了,而在开启时取了原来的值,即0.0,并分别遵守条件if(Bid>buycloseprice)和关闭的命令。 但如何将这个变量转移到全局终端,我不明白。