#include <Trade\Trade.mqh>
CTrade trade;// Объект № 1 в глобальной области программыintOnInit()
{
trade.SetExpertMagicNumber(123);
}
voidOnTick()
{
CTrade trade;// Объект № 2 в локальной области OnTick()
trade.Buy(0.1);
}
#include <Trade\Trade.mqh>
CTrade trade;// Объект trade в глобальной области программыintOnInit()
{
trade.SetExpertMagicNumber(123);
}
voidOnTick()
{
CTrade *trade_ptr=GetPointer(trade);// Указатель на объект trade
trade_ptr.Buy(0.1);
}
我请版主把所有的讨论放在一个单独的主题中。可能有几十个这样的主题在讨论OOP的优势。
还有一个问题:声明一个变量、获取/创建一个指针、创建一个对象实例之间有什么区别。这不是区别,而是在哪些情况下使用更好。例如,只需声明一个用于开仓的变量即可。
以及在什么情况下使用指针更好,什么情况下我们不能没有对象实例。
一种方法或另一种方法的优点和缺点是什么?
1.如果一个对象在全局范围 内,它就是一个静态对象。它被放置在静态内存中,只要程序存在就会存在。
它的构造函数在调用程序的第一个函数之前被调用。解构器在OnDeinit()之后被调用。
例如,像这样。
或者甚至像这样。
{ MyClass object; ... } // Здесь вызывается деструктор.它将在退出街区时被销毁。当它被销毁时,会调用析构器。
由于堆栈的大小通常是有限的,非常大的对象不能放在堆栈中。
例子。
在这个例子中,有两个变量被创建。堆中的MyClass类的一个对象。
而pObject变量是一个指向MyClass的指针。这个变量被分配给动态内存中的对象的地址。
当从函数中退出时,pObject变量将被销毁,但该对象将保留在动态内存中。
为了能够删除它,它的地址必须被储存在某个地方。
当它们被创建和销毁时,构造函数和析构函数也被调用。
动态变量的访问时间通常比局部变量要长。
在创建一个对象时,你应该考虑到这一切。
1.如果一个对象在全局范围 内,它就是一个静态对象。它被放置在静态存储器中,只要程序存在就会存在。
...
我是否正确地认为,通过这个选项
在不考虑编译器警告的 情况下,该位置可能以一个不等于123的神奇数字打开?
也就是说,在OnTick函数中会创建一个新的对象,魔术师在其中不等于123。
我是否正确地认为,通过这个选项
在不考虑编译器警告的 情况下,该位置可能以123以外的神奇数字打开?
也就是说,一个新的对象将在OnTick函数中被创建,而魔术师在其中不会等于123。
设置专家的魔法号码
我是否正确地认为,通过这个选项
在不考虑编译器警告的 情况下,该位置可以用一个神奇的非123?
也就是说,一个新的对象将在OnTick函数中被创建,它的MagicNumber不是123。
是的,这是正确的。这是两个不同的对象。由于OnTick中的本地对象与全局对象的名称相同,所以只有它可以在OnTick函数中被访问。全局对象超出了范围。因此,对于本地贸易对象,MagicNumber还没有被设置。
我是否正确地认为,通过这个选项
在不考虑编译器警告的 情况下,该位置可以用一个神奇的非123?
也就是说,一个新的对象将在OnTick函数中被创建,而魔术师将不会在其中被123。
这与变量的情况完全一样。
还有重点。
为什么一开始就需要这个SetExpertMagicNumber?
它为贸易类的对象设置了一个神奇的数字。整个程序可以有一个以上的 CTrade 类对象,就像现在 kodobase 中的做法一样。这是一个对象。该对象用于执行交易操作。没有必要为整个程序创建一个对象,并在每次需要改变新的魔术师、滑移和其他在初始化期间设置的参数时对其进行重置。可以为每个交易的符号创建一个单独的交易对象,根据符号的属性为其设置必要的参数,这个特定的CTrade类的对象属于这个对象,并通过从必要的符号获得必要的交易类对象的指针来轻松进行交易,而不需要覆盖在此设置的参数。
为了与另一个魔术师合作,可以定义一个单独的交易对象,并进行适当的设置。一个EA中可以有几个巫师。
这一切都取决于对什么和如何使用它的理解。
它为一个贸易类的对象设置一个魔法。整个程序不可能只有一个CTALT类的对象,因为它通常在kodobase中是这样做的。 这是一个对象。该对象用于执行交易操作。没有必要为整个程序创建一个对象,并在每次需要改变新的魔术师、滑移和其他在初始化期间设置的参数时对其进行重置。可以为每个交易的符号创建一个单独的交易对象,根据符号的属性为其设置必要的参数,这个特定的CTrade类的对象属于这个对象,并通过从必要的符号获得必要的交易类对象的指针来轻松进行交易,而不需要覆盖在此设置的参数。
为了与另一个魔术师合作,可以定义一个单独的交易对象,并进行适当的设置。一个EA中可以有几个巫师。
这一切都取决于对什么和如何使用它的理解。
在这种情况下,是否
SetExpertMagicNumber Устанавливает идентификатор эксперта不正确的描述?
我的理解是,如果为EA设置,那么任何订单/仓位都应该有这种魔力。((