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

 
Alexey Viktorov:

我不记得了,我得检查一下,但我不想检查。也许,在mql4中,当试图用一个现有对象的名字创建一个对象时,会返回一个错误,而在mql5中不是一个错误,而是修改参数,如果坐标不同。

正如Artem所说--检查该对象的存在。

是的,这是正确的。

 
Maxim Kuznetsov:

突然(像往常一样)ObjectGetInteger(0,objectName,OBJPROP_TYPE)工作得更快。

ObjectFind是一个同步命令,也就是说,它等待图表对象的完全更新(和可用性)......使用它充满了明显的延迟。

如果你使用你自己的对象(即在你自己的股票中创建的),那么你不应该使用ObjectFind- 你已经知道在哪个窗口中创建了对象,而且它很可能存在,并且是正确的类型。
最坏的情况是用户删除了该对象或改变了该属性。

谢谢你。这很有意思。

 

祝大家今天愉快。
Kovalev的书中说,数组的索引 可以作为常量、变量 或表达式设置为整数值。
当我在mql4中设置索引作为 变量 时,编译器只给我一个错误

我是这样设置索引的
intW=1000

double T_P[W]={0};

空白的OnTick()

{

编码

}
请告诉我,我做错了什么。
谢谢你。

 
ANDREY:

祝大家今天愉快。
Kovalev的书中说,数组的索引 可以作为常量、变量 或表达式设置为整数值。
当我在mql4中设置索引作为 变量 时,编译器只给我一个错误

我是这样设置索引的
intW=1000

double T_P[W]={0};

空白的OnTick()

{

编码

}
请告诉我,我做错了什么。
谢谢你。

阵列索引不是阵列的大小。
 
Alexey Viktorov:
阵列索引不是阵列的大小。

明白了,谢谢。有没有办法 用一个变量来设置数组的大小

 
ANDREY:

明白了,谢谢。有没有办法 用一个变量来设置数组的大小?

在第一个数组维度上设置一个新的尺寸

intArrayResize(
void&array[],//由引用传递的数组
intnew_size,// 新的阵列大小
intreserve_size=0// reserve_size值(多余的)
)

 
Aleksey Vyazmikin:

设置第一个数组维度的新尺寸

intArrayResize(
void&array[],// 通过引用传递的数组
intnew_size,// 新的阵列大小
intreserve_size=0// reserve_size值(多余的)
)。

谢谢你提供的宝贵信息。

 

你好!请帮我写一个简单的代码。

我目前正在处理订单开仓/平仓机制,遇到了平仓的问题。

代码很简单。该算法的想法是在图表上绘制周期为100的MA(移动平均线)。如果前一根蜡烛[1] MA上方 开盘, MA下方 收盘,那么下一根蜡烛[0]就会打开一个卖出 订单。

//(购买的条件不同,我就不介绍了)

为了关闭订单,需要满足以下条件--当前价格已经超过了订单开仓价格的设定值,例如,40点。

例子: 一手以 Bid= 1.20045 开启,它应该以 Ask= 1.20005 收盘。

打开和关闭的代码被打包成两个相应的函数--CheckForOpen()和CheckForClose(),它们依次被OnTick()函数调用。事实上,价格可以超过一定的点值(超过收盘水平),但订单不会被关闭。

我搞不清楚哪里出了问题。

p/s/截图和代码附后。

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
4elovechishe:

你好!请帮我写一个简单的代码。

我目前正在处理订单开仓/平仓机制,遇到了平仓的问题。

代码很简单。该算法的想法是在图表上绘制周期为100的MA(移动平均线)。如果前一根蜡烛[1] MA上方 开盘, MA下方 收盘,那么下一根蜡烛[0]就会打开一个卖出 订单。

//(购买的条件不同,我就不介绍了)

为了关闭订单,需要满足以下条件--当前价格已经超过了订单开仓价格的设定值,例如,40点。

例子: 一手以 Bid= 1.20045 开启,它应该以 Ask= 1.20005 收盘。

打开和关闭的代码被打包成两个相应的函数--CheckForOpen()和CheckForClose(),它们依次被OnTick()函数调用。事实上,价格可以超过一定的点值(超过收盘水平),但订单不会被关闭。

我搞不清楚哪里出了问题。

p/s/截图和代码附后。

CheckForOpen()不应该直接在OnTick中调用,而应该在自己编写的OnBar中调用(应该在OnTick中调用)--在bar opening中调用。但这是一件微不足道的事情,

,而不是Open[1],Close[1](前一根蜡烛已经突破了MA100),我们应该看Open[1],Open[0](前一根蜡烛从MA的一侧打开,当前一根从另一侧打开)。否则就会看到蜡烛图之间的浅浅的差距,逻辑上就会被原谅。

中位数的SMA在第0个柱子上发生变化,也就是说,它不是恒定的。它不能与之相比。纠正算法。

 
Aleksey Vyazmikin:

设置第一个数组维度的新尺寸

intArrayResize(
void&array[],// 通过引用传递的数组
intnew_size,// 新的阵列大小
intreserve_size=0// reserve_size值(多余的)
)。

再次感谢您的提示,但是.....,在帮助中写到这个函数只适用于动态数组。而我的代码并不是一个动态数组,而是一个普通的数组。

如果你能告诉我(或者更好的是,告诉我)如何改变正规数组的一维大小,我将非常感激。
再次感谢您的帮助。