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

 
Marco vd Heijden:

不,那是为了验证是模拟账户 还是真实账户,比赛很少使用。
最大手数可以很容易。

谢谢你的及时答复。

我只需要在模拟账户上申请最大手数。
(当然实际上是真实账户--这只是为了测试--我想试试,如果是模拟账户,如果手数更好,那么手数最大值就不会打开 卖单和买单--但如果是真实账户或比赛账户--那么这个手数最大值就不会 同时适用于 它们(真实或比赛))。

我可以使用切换操作员吗?

非常感谢。
(我以后会尝试。)

 
是的,你可以使用开关操作员。
 
Marco vd Heijden:
//---
// calculate lotsize here
//---

// check if lotsize is not too high

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

我想问 - 你想说 - 如果 "lotsize > lotsize_max",那么模拟账户 的手数应该是 "lotsize = lotsize_max"?我的理解是正确的,请问?

非常感谢。
(我正在努力解决这个问题)

 
Max Enrik:

我想问 - 你想说 - 如果 "lotsize > lotsize_max",那么模拟账户 的手数应该是 "lotsize = lotsize_max"?我没有理解错吧,请问?

非常感谢。
( 我正在努力解决 )

试试
如果(IsDemo() && lotsize>lotsize_max) lotsize=lotsize_max;
 
honest_knave:
尝试一下
if(IsDemo() && lotsize>lotsize_max) lotsize=lotsize_max。

哦!不错非常感谢。

----
功能 应该问我 - 或否- 我认为这对现在来说是更好。(我只是需要这个功能的经验,它是如何在我的模拟(当然是真实)账户上工作的 - 我将在周一测试这个功能 - 如果我能完成这部分代码)
(现在我对这个功能的了解还不够--我希望我可以在明天之前完成)

任何好的评论对我来说都是最好的帮助。
请提前感谢。

 

是的,当然,通过所有手段去使用它,没有Lotsmax,如果你以后想微调你的策略或想限制风险,你可以使用它,所以它不是一个必要的,因为目前。

你可以取消它,我只是想向你展示我的安全机制的一些线路。


如果你想确认,你可以使用一个

MessageBox()

https://docs.mql4.com/common/messagebox


int result=MessageBox(" This is a Messagbox, Do you want to proceed?","Warning",MB_YESNO);

if(result==IDYES)
{
  // Yes Pressed
   Print("OK");
}

if(result==IDNO)
{
  // No Pressed
}

以下是你在消息后的消息框功能中设置的主要标志。

常数

价值

说明

MB_OK

0x00000000

信息窗口只包含一个按钮。确定。默认值

MB_OKCANCEL

0x00000001

信息窗口包含两个按钮。确定和取消

mb_abortretryignore

0x00000002

消息窗口包含三个按钮。中止、重试和忽略

MB_YESNOCANCEL

0x00000003

消息窗口包含三个按钮。是、否和取消

MB_YESNO

0x00000004

信息窗口包含两个按钮。是和否

MB_RETRYCANCEL

0x00000005

消息窗口包含两个按钮。重试和取消

mb_canceltrycontinue

0x00000006

消息窗口包含三个按钮。取消,重试,继续


还有这里的返回值。

常数

返回值

说明

IDOK

1

"OK "按钮已被按下

IDCANCEL

2

已按下 "取消 "按钮

取消

3

已按下 "中止 "按钮

IDRETRY

4

已按下 "重试 "按钮

终止

5

"忽略 "按钮已被按下

忽略

6

已按下 "是 "按钮

拒绝

7

按了 "否 "的按钮

身份证号:IDTRYAGAIN

10

已按下 "再试 "按钮

IDCONTINUE

11

"继续 "按钮已被按下


Messagebox()在测试器中不起作用。

MessageBox - Common Functions - MQL4 Reference
MessageBox - Common Functions - MQL4 Reference
  • docs.mql4.com
MessageBox - Common Functions - MQL4 Reference
 
Marco vd Heijden:

是的,当然,通过各种手段去使用它,没有Lotsmax,如果你后来想微调你的策略或想限制风险,你可以使用它,所以它不是一个必要的,因为目前。
你可以取消它,我只是想向你展示我的安全机制的一些线路。

非常感谢您的巨大帮助。

所以,我刚刚尝试了以下方法,请问我做得对吗?
(我需要在我把它们带到我的主要.mq4文件之前问一下 - 我正在努力)

先谢谢你。

if(sparam==SellButton)
{
  result_message=MessageBox("Do you want to proceed?","Warning",MB_YESNO);

  if(result_message==IDYES)
    {
     ordersell(); // Send Order function here
     Print("Clicked YES"," Sell Order Applied");
    }

  if(result_message==IDNO)
    {
     Print("Clicked NO"," Sell Order Canceled");
    }
  ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
}
 

只是一个风格提示,这将使你的代码运行(非常,非常轻微)更有效率......但是,嘿,这一切都增加了

你有一个有2个按钮的消息框。如果它不是IDYES,它一定是IDNO(或者函数 没有成功完成)。

所以没有必要对result_message测试 两次。

if(sparam==SellButton)
{
  result_message=MessageBox("Do you want to proceed?","Warning",MB_YESNO);

  if(result_message==IDYES)
    {
     ordersell(); // Send Order function here
     Print("Clicked YES"," Sell Order Applied");
    }
   else
    {
     Print("Clicked NO"," Sell Order Canceled");
    }
  ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
}

如果你喜欢看到它被写下来,可以使用 "else if "语句。

if(sparam==SellButton)
{
  result_message=MessageBox("Do you want to proceed?","Warning",MB_YESNO);

  if(result_message==IDYES)
    {
     ordersell(); // Send Order function here
     Print("Clicked YES"," Sell Order Applied");
    }

  else if(result_message==IDNO)
    {
     Print("Clicked NO"," Sell Order Canceled");
    }
  ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
}
 
honest_knave:

只是一个风格提示,这将使你的代码运行(非常,非常轻微)更有效率......但是,嘿,这一切都增加了
你有一个有2个按钮的消息框。如果它不是IDYES,它一定是IDNO(或者函数 没有成功完成)。
所以没有必要对result_message 进行两次测试

非常感谢你所做的一切。
现在,我可以把它们放在主EA中。
( 我还需要MessageBox()的经验 )

 
Max Enrik:

非常感谢你所做的一切。
现在,我可以把它们放在主EA中。
(我还需要MessageBox()的经验)

用另一种方式写没有错,这只是个人喜好的问题。很高兴你解决了这个问题。