[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 466

 
Cmu4:

不......我按你的建议做了--同样的事情仍然存在。

另外,我还修改了代码,按条件分别划分为开场和结尾区块。这都是一样的。我不知道现在该怎么做。

这是测试者的截图,测试者的EA在预告片中。


你可以这样去做,用一个开放的位置控制
附加的文件:
 
Vinin:

可能是这样的东西,控制开放的位置。


也是往这个方向想的。但我对这个错误本身感兴趣。它在哪里?

p.s. 谢谢你对代码的补充!当pompiled时,它抱怨在Closeall函数中存在未定义的order_type

 
Cmu4:


也是往这个方向想的。但我对这个错误本身感兴趣。它在哪里?

p.s. 谢谢你对代码的补充!在编译时,它在Closeall函数中发誓说order_type未定义。


void Closeall(int OP=-1)
{
   for (int i=OrdersTotal()-1; i>=0; i--) 
   { 
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
      { 
         if(OrderSymbol()==Symbol())
         { 
            if (OrderType()==OP || OP=-1) 
            {
               if(OrderType()==OP_BUY)
                  OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
               else if(OrderType()==OP_SELL)
                  OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
            }
         } 
      }
   }
}
 
Cmu4:

不......我按你的建议做了--同样的事情仍然存在。

另外,我还修改了代码,按条件分别划分为开场和结尾区块。这都是一样的。我不知道现在该怎么做。

这是一个测试者的截图,专家顾问在预告片中。

我需要知道:是否像这样连续开仓? 买入、卖出、买入、卖出等或连续的,如买入。

我认为你有买入和卖出的头寸在陆续打开。

原因是:被比较的MACD非常接近,并迅速改变位置(大的是小的)。因此,先满足一个条件,再满足另一个条件。

解决方案。

if (MA1-MA2 > 0.0001 &&  MA2-MA3 > 0.0001 && Napr==1) //или другая константа
 
extralifes:

没有通过如果不工作。

应该是只要条件(d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2是正确的,如果iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7) 只开一个卖单。

反之亦然。

可以通过while或bool来完成吗?我在编程方面完全处于紧缩状态。我明白这个逻辑链,但我的手在代码中执行起来很慢。


所以这不是问题......一切都应该通过如果......它以这种方式工作--只要(你的同一个while)条件(d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2--满足并且RSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0。7 &&iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7),那么我们只开盈利...

你在这里不需要任何bool - 你为什么要处理标志,因为一切都很清楚,当所有这些条件得到满足时,我们要么打开买单,要么打开卖单?

total=OrdersTotal();
if(total<1)

{

  if (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 &&  iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7)
        OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
   

  if (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0) > 0.3) 
       OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

  }

再一次仔细观察。

在代码的其他地方寻找错误。你写道:"它不能与If一起工作"--更详细地解释一下--在 "日志 "中是怎么说的?

 
ikatsko:

你好!我不想(有时也会)打出StopOut。我决定将这批货限制在一个不会在最坏条件下 "抓住 "StopOut的值。经历了很长一段时间的试验和错误。也许有人有办法解决?

初始数据。

- 货币对 - 不一定是欧元兑美元

- 价格(买入/卖出价格)

- 指定的止损点(假定最坏的情况是,即使达到止损水平,也不会抓到一个止损点)。

- 指定的批次价值

- 其他数值应使用MT4功能填写:大小1手,杠杆,交叉率。

最好是一个代码。

理论上,我明白需要什么:余额减去StopLoss水平的可能损失除以保证金。而且这个值应该大于StopOut(以百分比计算)。

类似这样的事情

int level=AccountStopoutLevel(); ///// ТОЛЬКО ЕСЛИ ВЫРАЖЕН В ПРОЦЕНТАХ!!!
if (AccountStopoutMode==0)
  {
   double Marga = NormalizeDouble(MarketInfo("EURUSD", MODE_MARGINREQUIRED), 2);
   double TickValue = NormalizeDouble(MarketInfo("EURUSD", MODE_TICKVALUE), 2);
   int SL = 26;////Пунктов
   double lotsShortNaVSE = NormalizeDouble(AccountBalance() / (level * Marga / 100.0 + SL * TickValue ), 2);
  }

手数不得高于手数ShortNaVSE

SL ---- 是指你所开的头寸可能出现的损失。

而经纪公司对可能的损失也有自己的看法。

这就是为什么我们需要从你或经纪公司那里获得最大的数字。例如,目前欧元兑美元货币对 的交易员中心有一个可能的损失SL=26。

SL = MathMax(VashSLvPunktah, SLvPunktahUVashegoDillinga);
还有其他选择吗?
 
rlx:


而经纪公司对可能的损失也有自己的看法。

这就是为什么你应该承担你或你的经纪公司的最大损失数。例如,目前经纪公司对欧元兑美元的可能损失SL=26。

也许还有一些其他的变种?


这就是如何计算DC的这个观点。

但这对短期交易者来说更为关键。

 

例如,如果你的止损是5点,那么自然会计算出很多未平仓的手数。

但是开设这样的职位是行不通的,因为经纪公司有自己的风险管理系统。

 
rlx:


唯一的问题是如何计算DC的这个观点。

但这对短线客来说更为关键。


日安!请帮助。我需要一个脚本,在手动交易 中自动设置止损和利润。你认为这是否可能,如果存在,请给我一个链接。
 
Cmu4:

不......我按照你的建议做了--同样的事情仍然存在。

另外,我还修改了代码,按条件分别划分为开场和结尾区块。这都是一样的。我不知道现在该怎么做。

这是测试者的截图,测试者的EA在预告片中。

只要满足MAKDak条件,订单也将在每个tick上分批打开。

添加到条件中
对于买入头寸:如果没有市场上的买入订单,那么打开它...
对于卖出头寸:如果没有市场上的卖出订单,则打开它...。

而问题将得到解决。