专家顾问 - 杂项问题 - 页 33

 

MQL4:

MODE_LOTSTEP

24

改变批次的步骤


Print("Step for changing lots=",MarketInfo(Symbol(),MODE_LOTSTEP));

MQL5:

符号_音量_步骤

交易执行的最小体积变化步骤

双倍


Print(" Step: ",SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

因此,它告诉你关于最小的手数上升或下降的步骤,如果它是0.01,那么你的手数必须同意0.01,0.02,0.03,0.04等等。

如果是0.1,那么你的手数变化就必须符合0.1、0.2、0.3等。

所以我不明白你的意思。

   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

也许你的意思是不同的手数步骤?

通常情况下,你不会改变这个值,因为它对每个符号都是固定的。

 
Max Enrik:
// lot plus
if(sparam==lotbuttonplus)
  {
   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

如果你改变一个直观命名的变量的值,事情会变得很混乱。我建议lotstep始终是lotstep,而不是其他。

像这样的情况如何?

   double increment = (lotsize < lotstep*100) ? lotstep : lotstep*100;
   lotmaxdivide=lotmax/lotmax *(lotvalue*10);
   lotsize=fmin(lotmaxdivide,lotsize+(( ctrlfalse) ? increment*10 : increment));
编辑:对不起,刚看到Marco的回答。我同意关于lotstep的命名。
 

Marco vd Heijden:

所以我不明白你的意思。

   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

也许你的意思是不同的手数步骤?
通常情况下,你不会改变这个值,因为它对每个符号都是固定的。

是的!我的意思是不同的手数,所以当欧元兑美元的手数达到1.00手时。那么我需要将手数增加1.00。在手数达到1.00之前,手数增加0.01,0.02等等。(但在手数达到1.00后,手数增加1.00、2.00、3.00,等等。
这就是我在这个分题中想做的事情。

谢谢你了。

 
honest_knave:

如果你改变一个直观命名的变量的值,事情会变得很混乱。我建议lotstep始终是lotstep,而不是其他。
像这样的情况如何?

   double increment = (lotsize < lotstep*100) ? lotstep : lotstep*100;
   lotmaxdivide=lotmax/lotmax *(lotvalue*10);
   lotsize=fmin(lotmaxdivide,lotsize+(( ctrlfalse) ? increment*10 : increment));
编辑:对不起,刚看到Marco的回答。我同意关于lotstep的命名。

(我只是稍微改变了一下不 - ...lotstep : lotstep*100 - ...? lotstep : lotstep*10 )

是的!在我原来的代码中,事情是混乱的。
在你的大力帮助下,我解决了我的问题。非常感谢。

我也希望手数能像这样增加。
所以手数的增加是这样的:0.99,1.00,1.01,1.11
但我需要像这样0.99,1.00,1.10,1.20等。

提前感谢。

 

我认为0.99、1.00、1.01、1.02...将是最好的主意。

我想,坚持使用最小的可用步骤。

你为什么要采取这些超大型的步骤?

你试过吗?

请试一下吧。
 
Marco vd Heijden:

我认为0.99、1.00、1.01、1.02...将是最好的主意。
我想,坚持使用最小的可用步骤。
你为什么要采取这些超大型的步骤?
你试过吗?

请试一下吧。

我已经试过了,我想如果我需要达到手数5.00,我应该按40次手数增加按钮(+ctrl)。

 

哇,为什么是五个?

你可以用+和-来代替*。

lotsize=lotsize+0.1;
lotsize=lotsize-0.1;

但在我的机器人中,有一句话使它免于彻底毁灭,它就是这个。

static input double lotsmax=1;// Max Lots (please respect the setting)
 
Marco vd Heijden:

但在我的机器人中,有一句话使它免于彻底毁灭,它就是这个。

这绝对是事实,当然我也尊重这种设定。

但这只是一个问题--我是说我可以随时调整它。
也许我需要一点关于批量大小的经验。

我想这个分题可以暂时结束了。

谢谢@Marco vd Heijden@honest_knave

#Lot Step - 关闭

 

#Lot Size Max - Open

@Marco vd Heijden- 非常感谢你的最新评论,这是我为我的EA写这部分代码的灵感。(我刚刚停止写其他函数--我试着在其他函数之前写这个函数)

所以,通常我尝试测试一些最大手数的东西。
当手数大于最大手数时,打印功能不能让我了解交易模式。
在我解决了这个问题之后,我需要把这个功能的卖出和买入按钮功能。

问: 我怎样才能使打印功能让我了解交易模式?(-手数比最大手数好或比它小)
:这个方法对最大手数有用吗?

谢谢你。

void example()
  {
   string trademode;
   ENUM_ACCOUNT_TRADE_MODE accounttype=(ENUM_ACCOUNT_TRADE_MODE) AccountInfoInteger(ACCOUNT_TRADE_MODE);

   if(accounttype==ACCOUNT_TRADE_MODE_DEMO)
     {
      switch(accounttype)
        {
         case ACCOUNT_TRADE_MODE_DEMO:
            if( lotsize > ( lotstep * lotsizemax ) ) return;
            trademode="demo";
            break;
         case ACCOUNT_TRADE_MODE_CONTEST:
            trademode="contest";
            break;
         default:
            trademode="live";
            break;
        }
     }
   Print("Trade Mode: ",trademode);
  }
 

没有,用于验证是否是模拟账户 或真实账户,比赛很少使用。

最大手数可以很容易。

//---
// calculate lotsize here
//---

// check if lotsize is not too high

if(lotsize>lotsize_max)
{
  lotsize=losize_max;
}