模板<typename T> int Compare( T x, // 第一个值 T y // 第二个值 )。
结果是,我有以下代码(或者说,代码有我)。
#ifndef MyInclude #define MyInclude
//template<typename T> //interface ICollection //#include <Generic\Interfaces\ICollection.mqh> template<typename T> int Compare( T x, // first value T y //第二个值 );
class CMarketBook { private: string m_symbol; MqlTick m_ticks[]; MqlTick LastTicks[];
受到保护。
public: void CMarketBook::CompareTicks(void); }; //+------------------------------------------------------------------+ //|Compare two ticks colllection and find new ticks | //+------------------------------------------------------------------+ void CMarketBook::CompareTicks(void) { MqlTick n_ticks[]; ulong T_begin = (TimeCurrent()-(1*20))*1000;/20sec ago m_symbol = Symbol(); int Total = CopyTicks(m_symbol, n_ticks, COPY_TICKS_ALL, T_begin, 1000); if (Total <1) {printf("Failed to get ticks"); return;} if (ArraySize(m_ticks) == 0) {ArrayCopy(m_ticks, n_ticks, 0, 0,WHOLE_ARRAY) 。return;}
int k = ArraySize(m_ticks)-1; int n_t = 0; int Limit_comp = 20; int Comp_success = 0;
// 试试新收到的ticks for (int i = ArraySize(n_ticks)-1; i>=0 && k>=0; i--) { if (!Compare(n_ticks[i], m_ticks[k]) { n_t = ArraySize(n_ticks) - i; k = ArraySize(m_ticks) - 1; Comp_success = 0; } else { Comp_success += 1; if (Comp_success >= Limit_comp) break; k--; }; }; //调用收到的ticks ArrayResize(m_ticks, Total); ArrayCopy(m_ticks, n_ticks, 0, 0, WHOLE_ARRAY); //计算新ticks的起始索引,并将其复制到缓冲区,以便访问 ArrayResize(LastTicks, n_t); if (n_t > 0) { int index = ArraySize(n_ticks) - n_t; ArrayCopy(LastTicks, m_ticks, 0, index, n_t); }; }; #endif
Именно с этой, улучшенной и дополненной версией мы и начнем работать, чтобы постепенно превратить ее в скальперский стакан цен. Краткий обзор графической библиотеки CPanel Созданию пользовательских интерфейсов в MQL5 посвящено много статей. Среди них особенно выделяется серия Анатолия Кажарского "Графические интерфейсы", после которой сложно...
阿列克谢,谢谢你!现在很清楚,这是不可能的。
这是真的,我没有确切的mql4。我正试图通过CiOpen类来 改变数据。我对Update方法感到困惑,它应该改变数组中指定位置的元素。
复制到你的变量/数组中,并已经用它们工作。
所以我做了。
我非常感谢您的帮助!我对编程相当陌生。
在学习过程中,我在执行代码时遇到了困难。有一篇文章https://www.mql5.com/ru/articles/3336,我不明白是如何进行比较的。
if(!CompareTiks(n_tiks[i], m_ticks[k]))
我怀疑使用的是 "模板数据收集",有这样一个全局方法"比较"。但文章中并没有给出如何让编译器理解我应该使用"数据 模板集合" 中的 "比较"。 我没有找到 任何关于"数据模板集合 " 中的全局方法的例子。
全局方法描述中的以下条目将不会改变结果
模板<typename T>
int Compare(
T x, // 第一个值
T y // 第二个值
)。
结果是,我有以下代码(或者说,代码有我)。
#ifndef MyInclude
#define MyInclude
//template<typename T>
//interface ICollection
//#include <Generic\Interfaces\ICollection.mqh>
template<typename T>
int Compare(
T x, // first value
T y //第二个值
);
class CMarketBook
{
private:
string m_symbol;
MqlTick m_ticks[];
MqlTick LastTicks[];
受到保护。
public:
void CMarketBook::CompareTicks(void);
};
//+------------------------------------------------------------------+
//|Compare two ticks colllection and find new ticks |
//+------------------------------------------------------------------+
void CMarketBook::CompareTicks(void)
{
MqlTick n_ticks[];
ulong T_begin = (TimeCurrent()-(1*20))*1000;/20sec ago
m_symbol = Symbol();
int Total = CopyTicks(m_symbol, n_ticks, COPY_TICKS_ALL, T_begin, 1000);
if (Total <1) {printf("Failed to get ticks"); return;}
if (ArraySize(m_ticks) == 0) {ArrayCopy(m_ticks, n_ticks, 0, 0,WHOLE_ARRAY) 。return;}
int k = ArraySize(m_ticks)-1;
int n_t = 0;
int Limit_comp = 20;
int Comp_success = 0;
// 试试新收到的ticks
for (int i = ArraySize(n_ticks)-1; i>=0 && k>=0; i--)
{
if (!Compare(n_ticks[i], m_ticks[k])
{
n_t = ArraySize(n_ticks) - i;
k = ArraySize(m_ticks) - 1;
Comp_success = 0;
}
else
{
Comp_success += 1;
if (Comp_success >= Limit_comp) break;
k--;
};
};
//调用收到的ticks
ArrayResize(m_ticks, Total);
ArrayCopy(m_ticks, n_ticks, 0, 0, WHOLE_ARRAY);
//计算新ticks的起始索引,并将其复制到缓冲区,以便访问
ArrayResize(LastTicks, n_t);
if (n_t > 0)
{
int index = ArraySize(n_ticks) - n_t;
ArrayCopy(LastTicks, m_ticks, 0, index, n_t);
};
};
#endif
编译时,会产生一个错误--"对象仅通过引用传递",指向n_ticks[ i]的行if (!Compare(n_ticks[i], m_ticks[k]))
大家下午好。
我正在测试一个Alpari MT4专家顾问。在我做测试之前,MT建议我设置点差(要么是当前值,要么是一个特定的值)。
在Alpari,价差是浮动的。这就是为什么上述价差大小设置不适合我。
问:哪个函数在历史上显示每个历史点的价差值?
或者,考虑到订单打开或关闭时有效的点差值,我应该如何让我的EA打开和关闭订单?
感谢大家的帮助。
大家下午好。
我正在测试一个Alpari MT4专家顾问。在测试之前,MT建议我设置点差值(当前或任何特定的报价值)。
在Alpari,价差是浮动的。这就是为什么上述价差值对我不起作用。
问:哪个函数在历史上显示每个历史刻度的价差值?
或者,我们应该如何使我们的EA打开和关闭订单,考虑在打开或关闭订单时有效的点差值?
感谢大家的帮助。
你不能在MT4中这样做,但你可以在MT5中这样做
在MT 4中没有,在MT 5中你可以
非常感谢您提供的宝贵信息。
我将开始学习mql5。他们说,这与mql4 非常相似。如果你能告诉我如何在mql5 中实现我的想法,我将非常感激。
非常感谢您提供的宝贵信息。
我将开始学习mql5。他们说,它与mql4 非常相似。如果你能告诉我mql5 如何实现我的想法,我将非常感激。
在MT5中,你不需要发明任何东西。
这很好。谢谢你提供的宝贵信息。
如果你想快速从mql4切换到mql5,你最好同时阅读mql4和mql5 的手册 ,并注意它们之间的差异。 一切都是通过比较得知的.....大家好!
我已经开始学习mql5。我首先研究了订单是如何开启的。我已经了解到,打开订单的代码写在一个单独的include文件中。我现在已经掌握了这个代码和它最后的交易变体。我很惊讶,mql4 中的开单比 mql5 中的开单要容易和简单得多。
我想问的是,我是否确定我已经有打开订单的代码的文件,我不需要写这个代码。如果这样的文件在某处可用,那么我只需要将其连接到我的EA,并设置我需要的订单参数值?如果有这样的文件,应该在哪里和如何找到它,以及它的名称是什么。
我很乐意把文件的名称告诉你。