初学者的问题 MQL4 MT4 MetaTrader 4 - 页 202

 
Yurij Kozhevnikov:

如果我对替代原则理解正确的话,情况似乎是这样的。

大括号后有额外的分号。而且也不清楚还指的是什么。

遗憾的是,显然没有简单的方法来自动进行宏观扩展,看看会发生什么。除非我可以自己编造剧本。

谢谢你!宏中的while后面没有分号是有原因的。

宏是一件好事,但在他们的情况下,善与恶之间的界限甚至比女人还要细)))。你必须非常、非常小心地对待他们。是的,在我的例子中,不是';',而恰恰是else,它开始指的是if,这在宏中,在你去掉;之后。

我非常善于使用宏,所以对于像你这样的情况,我已经放弃了使用宏,大约有1.5年了,这是最佳状态。

inline bool CheckRead(){
   ...
}

if (!CheckRead()) return;
 

除了我在这里找不到任何关于内联的信息。

而且我不懂C++。

 

下午好!请帮助

有一个相当简单的代码来打开和修改一个订单。订单发送(OrderSend)、订单选择(OrderSelect)和订单修改(OrderModify)这三个函数 被放入一个循环中,两次尝试之间有一个小的延迟。为了尽量减少通信错误,等等。

以下奇怪的事情发生了:订单正常打开,随后成功修改StopLoss和成功修改TakeProfit。但当我设置TP时,StopLoss是无效的。我无法理解其中的原因。

这里是代码的这一部分。

send = 5; //设置订单的最大尝试次数

tick=0。

sendschet=0; //尝试计数器

while(!tick && sendschet<=send)

{

tick=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lot,2),Bid,150,0.0,0.0,komm,MagNum,0,Yellow)。

sendschet++;

Sleep(1000); //延迟1秒后再进行下一次尝试

}

select = 5; //选择一个订单的最大尝试次数

slschet=0; //选择订单的尝试计数器

while(!OrderSelect(tick,SELECT_BY_TICKET) && slschet<=select)

{

slschet++;

Sleep(500); //延迟0.5秒后再进行下一次尝试

}

如果(slschet<select) //尝试的次数少于最大值,这意味着订单被成功选择。

{

修改 = 5; //修改订单的最大尝试次数。

mdschet=0。

while(!OrderModify(tick,OrderOpenPrice(),NormalizeDouble(SL,Digits), OrderTakeProfit(),0,Yellow)

&& mdschet<=modify)

{

mdschet++;

Sleep(500); //延迟0.5秒后再进行下一次尝试。

}

*这里一切都很好--SL已经设定好了

mdschet=0; //在改变TP之前重置计数器。

while(!OrderModify(tick,OrderOpenPrice(),OrderStopLoss(), NormalizeDouble(TP,Digits),0,Yellow)

&& mdschet<=modify)

{

mdschet++;

睡眠(500)。

}

}

*其中TP是正常设置的,但SL已经等于0.0。因此,事实证明OrderStopLoss()等于0.0。

不过,订单的选择并没有改变。

如果我们在设置SL和TP之间再添加一次OrderSelect,一切似乎都能正常进行。但这与逻辑相悖。

提前感谢您在此问题上的帮助。

 

下午好!

请帮助我处理改变动态数组 的大小问题。

比方说,我正在设置一个数组。

int DB[][8];

然后在循环中的第一个子程序中,可能会有几次(对此没有疑问 -- 到目前为止,它是按预期工作的)。

ushort i = 0;
ArrayResize(DB,i+1);

在下一个子程序中,我将在循环的第一个维度中添加元素。我不知道提前了多少。我知道这比你事先声明尺寸要慢。但我认为每年最多增加500人不会有什么影响。

问题是,我如何在这个子程序中找出数组的现有大小?要把它作为一个基础尺寸,并在其上添加一个新的值。

ArraySize()并除以8?还是有什么其他功能更适合我?

提前感谢!

 
Oleg_Ko:

下午好!

请帮助我处理改变动态数组 的大小问题。

比方说,我正在设置一个数组。

然后在循环中的第一个子程序中,可能会有几次(对此没有疑问 -- 到目前为止,它是按预期工作的)。

在下一个子程序中,我将在循环的第一个维度中添加元素。我不知道提前了多少。我知道这比你事先声明尺寸要慢。但我认为每年最多增加500人不会有什么影响。

问题是,我如何在这个子程序中找出数组的现有大小?要把它作为一个基础尺寸,并在其上添加一个新的值。

ArraySize()并除以8?还是有什么其他功能更适合我?

提前感谢!

ArrayRange()

Документация по MQL5: Операции с массивами / ArrayRange
Документация по MQL5: Операции с массивами / ArrayRange
  • www.mql5.com
Операции с массивами / ArrayRange - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin:

ArrayRange()

Artem,谢谢你。
 

下午好。

很久没有在MT4上交易了,决定再次尝试。以前用过这个脚本(附后),但现在不能运行了,请看看是哪里出了问题。

附加的文件:
RiskAdvisor.mq4  12 kb
 
Nauris Zukas:

你好!
有什么方法可以立即知道CopyHigh在任何时间段内数组的元素数量 吗?

我自己回答,也许有人会通过搜索引擎遇到这个问题。

SeriesInfoInteger(symbol_name,timeframe,SERIES_BARS_COUNT);
 
Nauris Zukas:

我自己回答,也许有人会通过搜索引擎遇到这个问题。

还有Bars(),iBars()。
 
Artyom Trishkin:
还有Bars(), iBars()。

使用Bars(),你不能找出任何时间段 内的数组元素的 数量,而只能找出当前图形中的数量。