[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 97

 
MaxZ:

我一定是错过了什么。



NewOrder已经处理好了,谢谢,现在这一步可以了。
 
SeALALex:

我已经实现了NewOrder,谢谢,现在订单正常了。

要小心使用这个代码。它是临时写的,还没有经过测试!:)))

而且我只写了一种解决你问题的方法。


顺便说一下,你之前给出了以下代码。

Болк открытия на бай
if(Buy==true) 
  {Buy=false;

   ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask, Digits),5,SL,TP,Order,070177,0,Orange);
   if(ticket>0)
    { 
     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
      {Print("BUY order opened : ",OrderOpenPrice());
       Alert("Buy Order for ",Symbol());
       SendMail("Buy Order "+Symbol()+" "+Ask,SL);     
       }
     }
     else Print("Error opening BUY order : ",GetLastError()); 
     return(0); 
   }

比如说,如果有一个重新报价,怎么办?那么 "买 "的订单将不会被打开,而信号可能是正确的。而在几个小时后,你会看到价格已经远远地向上移动,但由于重新报价,买入订单还没有打开......

 
MaxZ:

要小心使用这个代码。它是临时写的,没有经过测试!:)))

而且我只写了一种解决你问题的方法。


顺便说一下,你之前引用了以下代码。

比如说,如果有一个重新报价,怎么办?那么 "买 "的订单将不会被打开,而信号可能是正确的。你会看到,在几个小时内,价格已经远远地向上移动,但由于重新报价,买入订单还没有打开......


而你如何为它投保呢?

 
SeALALex:


以及你如何对冲它?

最基本的方法是以不同的方式重写代码。

Болк открытия на бай
if(Buy==true) 
  {ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask, Digits),5,SL,TP,Order,070177,0,Orange);
   if(ticket>0)
    { 
     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
      {Buy=false;
       Print("BUY order opened : ",OrderOpenPrice());
       Alert("Buy Order for ",Symbol());
       SendMail("Buy Order "+Symbol()+" "+Ask,SL);     
       }
     }
     else Print("Error opening BUY order : ",GetLastError()); 
     return(0); 
   }

只要订单没有打开,打开多头买入头寸的信号就会挂在真实状态。

 
MaxZ:

最基本的方法是以不同的方式重写代码。

在订单打开之前,开立长线买入头寸的信号将挂在真实状态。


非常感谢!也非常感谢罗曼。

我需要在一系列未平仓的买单中增加手数,而不需要保证金(因为保证金有时会影响我们,使手数减少,而我不需要),我需要在一系列订单中严格增加一定的规模。也就是说,如果根据一个标准有一个买入信号的趋势,那么根据第二个标准会出现一个额外的买入信号,并开出一个订单;在第一个标准仍然是一个买入信号后,根据第二个标准,在一个小的修正后会出现一个额外的买入信号,并开出另一个订单,但订单的大小是在初始参数中设置的);在所有买入订单关闭后会出现一个卖出信号,然后一切以初始交易量重新开始。

请问,应该显示哪一段代码?

 
SeALALex:


非常感谢!也非常感谢罗曼。

但我还是不能让它按一定的步骤增加很多,我需要在一系列未平仓的买单中增加很多,而不需要保证金(因为保证金有时会减少很多,而我不需要),我需要在一系列订单中严格按一定的规模增加。

如果你在手数计算中不使用保证金,只用指定的恒定参数进行操作,例如,在外部变量中,手数将相应地只增加恒定值。我在上面给出了可以编写代码的原则。

SeALALex


也就是说,如果根据一个标准有一个买入信号的趋势,然后根据第二个标准出现一个额外的买入信号--一个订单被打开,然后根据第一个标准,买入信号仍然存在,根据第二个标准, 在一个小的修正后,买入信号再次出现,一个更多的订单被打开,但规模更大(规模在初始参数中设置),在所有买入订单关闭后,卖出信号出现,然后一切又从初始规模的手开始

请问,你需要展示哪一段代码?

你有变量Lots、LotsInitial和LotsStep。当趋势改变时,你将Lots重置为零,并为LotsInitial分配一个初始值如果趋势仍在继续,并且已经发出了开立新订单的信号,你就用LotsStep步骤增加变量Lots并开立订单

你似乎明白所有的逻辑,但不知为什么你不能把它变成if语句。为什么,我不知道。

也许这可能有帮助。

extern LotsInitial = 0.5;
extern LotsStep    = 0.1;
       Lots;

int start()
{
   ...

   if ((Тренд окончен) && (Все ордера закрыты) && (Пришёл сигнал о возможном начале нового тренда))
      Lots = LotsInitial;
 
   if ((Тренд подтверждён) && (Коррекция) && (Пришёл ещё сигнал открыться по тренду))
      Lots += LotsStep;
  
   ...
}
 
MaxZ:

如果你不打算在手数计算中使用保证金,而只用恒定的参数进行操作,例如在外部变量中设置,那么手数将相应地只增加恒定值。我在上面给出了写代码所依据的原则。

你有变量Lots和LotsStep。当趋势改变时,你将Lots重置为零,并指定一个初始值。如果趋势仍在发展,而且信号已经打开,你就以LotsStep的增量增加Lots变量,并打开一个新订单。

你看,你明白整个逻辑,但由于某些原因,你不能把它变成if语句......。为什么呢,我也不知道。


我可以把部分代码作为一个文件负责打开,你看...我做了,但看起来我发布的代码有问题,它多开了一步,但不完全是。
附加的文件:
 
SeALALex:

我可以粘贴一部分负责打开为文件的代码,你看一下...粘贴了,但看来我发布的代码有问题,它多开了一步,但距离很远。

你会先修复所有的错误。如果没有这个东西,你为什么要在你的EA中添加一些东西呢?虽然,这段代码看起来并不像一个功能齐全的EA。你一定是剪掉了部分内容,现在你想让我修改错误。:)))

例如,init()没有关闭...和隐晦的变量:LastOrder...

请修复这些错误。

 
MaxZ:

你最好先修复所有的错误。如果没有这个东西,你为什么要在专家顾问中添加一些东西呢?该代码似乎不具备专家顾问的全部功能。你一定是剪掉了部分内容,现在你想让我修改错误。:)))

例如,init()没有关闭...和隐晦的变量:LastOrder...

请修正这些错误。


是的,我把它组装成一个建筑组,似乎是工作,现在尝试或多或少带来一个正常的形式,并将铺开
 
splxgf:


这不是关于ND的问题。point是点的大小,乘以0.5就是0.00005,我认为将这个数字与OrderClosePrice()-OrderTakeProfit()相比较没有意义。TP并不保证完全相同的收盘价。另外,Bais和Selves的检查条件将是不同的。

这种设计更加可靠。



谢谢你!!!阅读。 另外,对白和自己将有不同的测试条件--令人敬畏的真相!!。