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

 
Ekburg, ok
 
Ekburg:


安装最新的构建到终端,在里面写代码更容易,不容易出错,我建议!)

纠正了先发的部分,没有括号的最后部分,不清楚为什么......


这是我的EA退出,如果所有条件都满足,那么EA就退出了。

fail=true。

然后

如果(失败)返回(0)。

 
SpikeOne:


这是我在退出EA,如果所有条件都满足,那么EA就退出了。

fail=true。

然后

如果(失败)返回(0)。


这是可以理解的,但在一开始发送的代码中,在输出函数前有很多不必要的括号)。

我送去的那份有帮助吗!?

 
如果 ( AccountProfit()+ AccountBalance()>=740)
{
for(int zx=OrdersTotal(); zx+1>=0; zx--)
{
如果(OrderSelect(zx,SELECT_BY_POS,MODE_TRADES) ==true)
OrderDelete(OrderTicket())。
}
while (OrdersTotal()>0)
{
如果(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{
如果(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID), MarketInfo(OrderSymbol(),MODE_DIGITS),3,CLR_NONE) 。
如果(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE)。
如果(OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
OrderDelete(OrderTicket())。
if(result!=TRUE)
{
er=GetLastError()。
Print("LastError = ",er, ",Symbol())。
}
否则er=0。
}
}
fail=true。
}

如果(失败)返回(0)。

如果你将我的代码插入EAhttps://www.mql5.com/ru/code 之前的地方

如果(or_bu==风险 && tick_b==0) open(0)

如果(or_sl==风险 && tick_s==0) open(1);

然后EA开始不同的交易,尽管在我的代码中,它应该在我输入740后才进入,最初我的余额在测试器中是700。

测试的数值可以设置如下。

extern bool test=false; //在测试时将对象关闭。

extern int prof=2; //利润水平

外部int int chag=1.7; // 订单之间的步长

外来的int risk=0; //风险等级

外置双倍数lot = 0.01; //初始lot

外置双倍数k_lot=2; // 体积递增

外置双倍lot_max=100。

bool result。

bool fail=false。

问题是它的交易方式不同,我搞不清楚我在2013年参加考试的日期。11. 08. и 2013.11 .09.

 
SpikeOne:

然后EA开始不同的交易,尽管在我的代码中,它应该只在拨打740后进入,最初我在测试器中的余额是700。


if ( AccountProfit()+ AccountBalance()>=740)
   {
   for(int zx=OrdersTotal(); zx+1>=0; zx--)
      {
      if(OrderSelect(zx,SELECT_BY_POS,MODE_TRADES)==true)
      OrderDelete(OrderTicket());
      }
   while (OrdersTotal()>0)
      {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
         {
         if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
         if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
         if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
         OrderDelete(OrderTicket());
         if(result!=TRUE)
            {
            er=GetLastError();
            Print("LastError = ",er, " ",Symbol());
            }
         else er=0;
         }
      else Print( "Error when order select ", GetLastError());
      }
   if(OrdersTotal()==0) fail=true;
   }
if(fail=true) return(0);

试着编译我的代码,让我知道结果,然后我们再考虑一下......

如果它提前进入这个代码,那么问题就出在初始运算符上,让我们看看哪里出了问题

 
Ekburg:

试着编译我的代码,让我知道结果,然后我们再考虑一下......

如果它进入这个代码的时间比需要的时间早,那么问题就出在开始运算符上,让我们看看那里出了什么问题。


是的,我编译了它,但问题仍然存在....。感觉它在需要之前就已经进入了代码。
 
SpikeOne:

是的,已编译,但问题仍然存在....。是的,感觉它提前进入了代码,尽管它不应该。

帐户利润返回以基础货币表示的经常账户的利润值。

我想这就是问题所在,你想知道以英镑计算的利润,而它以欧元回报,例如

试着将第一条代码语句的整个计算过程替换成这样。

帐户权益返回当前账户的权益金额。股本的计算取决于交易服务器的设置。

并最终编译出这个运算符。

if(AccountEquity()>=740)
   {
   ...
   }
 
Ekburg:

帐户利润返回以基础货币表示的经常账户的利润值。

我想这就是问题所在,你想知道以英镑计算的利润,而它以欧元回报,例如

试着将第一条代码语句的整个计算过程替换成这样。

帐户权益返回当前账户的权益金额。股本的计算取决于交易服务器的设置。

并最终编译出这个运算符。


问题似乎是不同的,如果我在一个不能正常工作的EA中插入能正常工作的代码,那么在编译之后,EA就不能正常工作了,感觉就像你在浏览器中打开一个页面,每次都会给你缓存。

即使你创建了一个新的EA,并在其中插入了一个工作代码,但由于某些原因,它的工作是歪的。

 
SpikeOne:


...如果我在一个正常工作的EA中插入不正确的代码,那么在编译之后,EA就不能正常工作了...


那我就没办法了)你需要通过整个EA。
 
Ekburg:

那我就帮不上忙了)我需要翻阅整个EA。


我似乎发现了一个错误=)初始数据中,订单之间的步长被设置为int,我把1.7,我把它改成了双倍,它工作得很好=)