新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 56

 

我还在完善它。

如果该条件为真

开单1

价格是否已达到应有的水平

开单2

LastLot=订单2(或更大的数字)。

最后价格=订单2(或更大的数字)。

如果价格已经或没有移动到它应该移动的地方...

LastLot=订单3(或更大的数字)。

LastPrice=订单3(或更大的数字)。

问题是,最后一个(或不是)订单将总是在止损和止盈之间,这意味着当其他订单关闭时,它不会重置,因为订单本身仍在那里。如果我们不知道订单的数量,我们如何将其与其他订单绑定?

事实证明,将最后的第一个或倒数第二个与其他的结合起来的机制是低效的,因为他们的数量随着数字的变化而变化。

结果应该是这样的:"如果给定系列的任何订单已经关闭,则关闭所有其他订单"。

系列检查--当前方向的第一个订单(另一个订单不会打开)--这里应该使用一个额外的标识符或一些其他绑定方法。关键是--第一个订单是根据条件打开的,其余的订单是辅助性的。

有什么想法吗?

 
trader781:

我还在完善它。

如果该条件为真

开单1

价格是否已达到应有的水平

开单2

LastLot=订单2(或更大的数字)。

最后价格=订单2(或更大的数字)。

如果价格已经或没有移动到它应该移动的地方...

LastLot=订单3(或更大的数字)。

LastPrice=订单3(或更大的数字)。

问题是,最后一个(或不是)订单将总是在止损和止盈之间,这意味着当其他订单关闭时,它不会重置,因为订单本身仍在那里。如果我们不知道订单的数量,我们如何将其与其他订单绑定?

事实证明,将最后的第一个或倒数第二个与其他的结合起来的机制是低效的,因为他们的数量随着数字的变化而变化。

结果应该是这样的:"如果给定系列的任何订单已经关闭,则关闭所有其他订单"。

系列检查--当前方向的第一个订单(另一个订单不会打开)--这里应该使用一个额外的标识符或一些其他绑定方法。关键是--第一个订单是根据条件打开的,其余的订单是辅助性的。

有什么想法吗?

这一点并不清楚。尝试更清楚地表达你的想法。

这里我们有:"如果价格走势正确与否,我们应该打开订单2" - 我们应该如何理解在任何情况下我们应该打开订单2

而我们会得到越来越多的 "否则"。

如果我们不希望出现诸如"当价格金额未知时,如何将其与其余订单联系起来"的问题,我们应该先找出金额。

 
Vitalie Postolache:

这是混乱的,不可理解的。试着使你的想法更加清晰。

这个"如果价格向正确的方向移动或不移动--打开订单2" - 你如何理解在任何情况下"打开订单2"?

而我们会得到越来越多的 "否则"。

如果我们不想陷入"如果我们不知道金额,如何将其与其余订单联系起来"这样的问题,我们应该首先找出金额。

好了,有了数字

欧元兑美元=1.10000

根据TP开立买入订单的命令(已经写入)。

如果欧元兑美元=1.10200,我们给出一个买入指令(已经写好)。

如果EURUSD=1.09800就 "买入"(已经写好了)。

以此类推,步幅为200

如果任何订单被关闭(止损和接管被设置,但不是所有的订单都被关闭)。

关闭整个网格

寻找一种方法来识别网格
 
trader781:

好了,有了数字

欧元兑美元=1.10000

根据TP以当前价格开立买入订单的命令(已经写入)。

如果欧元兑美元=1.10200,添加到买入订单(已经写好)。

如果EURUSD=1.09800就 "买入"(已经写好了)。

以此类推,步幅为200

如果任何订单关闭(停止和接管已经被放置)。

关闭整个网格

寻找一种方法来识别网格
您可以用订单号添加评论。而且,如果订单系列是同一类型的,我们可能只是重新计算它们并固定金额。
 
Vitalie Postolache:
可以添加带有订单号的注释。如果整个系列的订单都是一种类型 - 那么他们应该简单地重新计算并固定数量。

我想的是评论,但从反馈来看,厨师认为这些评论不能吃,要么删除,要么改成自己的。

至于计数,那么我在添加另一个数字时必须计数和记录?

 
trader781:

关于计数,当我再增加一个时,我是否必须计数并记录数量?

是的,如果数量比上次有所减少--关闭所有剩余的。

你也可以在历史中监控已关闭的订单。并在出现符合指定特征的新订单时关闭该系列。

你也可以不在订单中设置TP/SL,而是在专家顾问中计算整个系列的总TP/SL。用它们来结束这个系列。优点是--经纪公司看不到断点水平,如果一个订单触发了TP或SL,寻找系列的问题依然存在。
 
问候......新年快乐......祝你一切顺利和繁荣......在这个代码中,请改变地段的计算是在最大可能的杠杆账户进行的。
//+------------------------------------------------------------------+
double volume(string symbol,double risk,double sl)
  {
   double lot=0.0;
   double procent=0.0;
   double balans=0.0;
   double tc = SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE);
   double tv = SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE);
   double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);

   if(Type_Balanse==Balance) balans=AccountInfoDouble(ACCOUNT_BALANCE);
   if(Type_Balanse==Equity) balans=AccountInfoDouble(ACCOUNT_EQUITY);
   if(Type_Balanse==FreeMargin) balans=AccountInfoDouble(ACCOUNT_FREEMARGIN);

   procent=(balans/100.0)*risk;

   switch((int)MarketInfo(symbol,MODE_PROFITCALCMODE))
     {
      case 0: if(sl!=0 && tv!=0) lot=procent/(sl*tv);break;
      case 1: if(sl!=0 && point!=0 && tc!=0) lot=procent/(sl*point*tc);break;
      case 2: if(sl!=0 && point!=0 && tv!=0 && ts!=0) lot=procent/(sl*point*(tv/ts));break;
     }
   return(NormalizeVolume(symbol,lot));
  }
 
如何在专家顾问中规定自动计算手数,取决于杠杆......比如杠杆1:50的存款3000。
 
Movlat Baghiyev:
好吧,让我问你一个简单的问题。 我如何设置EA根据杠杆自动计算手数。 假设杠杆是1:50,存款是3000...

像这样试试吧。

void OnTick()
{
  Comment( cLot(100) );
}
//===============================================================================================
//------------------------------------ Расчет лота по риску ------------------------------------+
//===============================================================================================
double cLot(double Percent=0) {
double Free=AccountFreeMargin(),
        One_Lot=MarketInfo(_Symbol,MODE_MARGINREQUIRED),
        Min_Lot=MarketInfo(_Symbol,MODE_MINLOT),
        cStep=MarketInfo(_Symbol,MODE_LOTSTEP),
        Lots_New=0;
if(Percent > 100) {
    Percent = 100;
  }
  if(Percent == 0) {
    Lots_New = 0;
     return(0);
   } else {
    Lots_New = MathFloor(Free*Percent/100/One_Lot/cStep)*cStep;
   }
  if(Lots_New < Min_Lot) {
    Lots_New = Min_Lot;
  }
  if(Lots_New*One_Lot > Free) {
    return(0);
  }
   return(NormalizeDouble(Lots_New,LotDigit()));
}
//===============================================================================================
//-------------------- Кол-во знаков после точки в значении торгового лота ---------------------+
//===============================================================================================
int LotDigit(){
  double lotStep = MarketInfo(_Symbol,MODE_LOTSTEP);
return((int)MathCeil(MathAbs(MathLog(lotStep)/MathLog(10))));
}
 
对不起,我需要某种风险%的选择。 我只需要一次开出尽可能大的手数,增量不超过0.01。
原因: