初学者的问题 MQL5 MT5 MetaTrader 5 - 页 97

 
Vladon:

这个想法是你的,但不是代码。程序员写了代码,而不是你,你写了ToR。

想象一下--Windows用户要求开放源代码--这不是很荒谬吗?

据我所知,专家使用的代码属于MetaQuotes,还是属于你个人?

这和Windows有什么关系,首先用户没有权利要求,因为这个产品是属于宏软的,这里有一点不同,宏软会开始向编写他们产品的程序员要求开放源代码,他们会扭着手指不给。

 
Vladon:

所以,在保护之前还有来源? 那你还想要什么?有人告诉你--没有人会给受保护的EA的开放源代码,我也不会给它。还有,如果有要求,在完成后要求你的产品的源代码

如果是我,我会拒绝这个任务。

那你还需要什么呢?在答辩前有源代码,所以它和有答辩的顾问是一样的。他们应该同样能工作。

在EA的工作过程中,进行了修改,增加了各种功能,等等,但并没有这些修改的公开源代码。
 
ComplexFX:
在专家顾问的工作过程中,进行了修改,增加了各种功能,等等,但这些修改没有开放的源代码。

那么我认为真理就在你这边。

据我所知,专家使用的代码属于MetaQuotes,还是属于你个人?

如果我写了代码,它就属于我个人。MetaQuotes拥有编程语言。

一切都是公平的。

 
你能告诉我如何在专家顾问中关闭一个未结订单吗?我知道如何使用止损或止盈平仓。我怎样才能手动操作呢?
 
pogeon:
你能告诉我如何在专家顾问中关闭一个未结订单吗?我知道如何使用止损或止盈平仓。如何手动操作?
在mql5中,一个未平仓的头寸被相反方向的订单平仓,这些订单的总数量等于平仓的数量。
 
progeon:
你能告诉我如何在专家顾问中关闭一个未结订单吗?我知道如何在止损或止盈时平仓。如何手动操作?

或者使用 CTrade 类,它有一个函数

trade.PositionClose(_Symbol);

类似这样的事情

https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/ctrade/ctradepositionclose

Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / PositionClose
Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / PositionClose
  • www.mql5.com
Стандартная библиотека / Торговые классы / CTrade / PositionClose - Документация по MQL5
 
Yedelkin: 在mql5中,一个未平仓的头寸被相反方向的订单关闭,这些订单的总数量等于平仓的数量。

lazarev-d-m:或者 使用 CTrade 类,有一个函数

CTrade类的 PositionClose()方法也使用相反的订单关闭头寸

 

请告诉我这种情况的解决办法或原因。我不久前才在MQL5中工作,所以我还没有足够的经验。

我曾试图在不使用类的情况下制作一个多货币的EA。 不幸的是,我没有找到任何关于多货币EA的详细文章。

我写了以下一段代码。

int nomer_instr; // 这是货币名称阵列中货币的索引号。

string Name_symbol[6] = { "AUDUSD", "EURUSD", "GBPUSD", "USDCAD", "USDCHF", "USDJPY" } ; // 货币名称的文本阵列:在[0]-"AUDUSD", 1-"EURUSD", 2-"GBPUSD", 3-"USDCAD", 等等。

double Close_buf[], Open_buf[], High_buf[], Low_buf[]; //烛台参数的基础数组

datetime Time_buf[]; //酒吧开放时间的基础数组

double Close_H1[6][150], Open_H1[6][150], High_H1[6][150], Low_H1[6][150]; // H1时间框架的多货币EA烛台参数数组。

//数组中的行数与被分析货币的数量相对应。

datetime Time_H1[6][150]; // 酒吧开盘时间的数组

double Close_H4[6][150], Open_H4[6][150], High_H4[6][150], Low_H4[6][150]; // H4时间框架的多货币专家顾问的烛台参数数组。

//数组中的行数与所分析的货币数量相对应。

datetime Time_H4[6][150]; // array bar open time



int OnInit()

{

}

空白的OnDeinit(const int reason)。
{
//---
ArrayFree(Time_buf)。
ArrayFree(Close_buf)。
ArrayFree(Open_buf)。

ArrayFree(High_buf)。

ArrayFree(Low_buf)。

}


空白的OnTick()

{

//------------------------------------------------------------------------------

这里有一段代码,用于确定一个新条形图打开的时刻 Nev_Time[0] 。

以及在测试或交易过程中被处理的条码的序列号

//------------------------------------------------------------------------------------------------------------------------

ArraySetAsSeries(Close_buf, true); //将close_array数组的索引设置为timeseries。
ArraySetAsSeries(Open_buf, true); //为数组open_array设置索引,如同在timeseries中一样。
ArraySetAsSeries(High_buf, true); //将数组high_array的索引设置为时间序列的索引。
ArraySetAsSeries(Low_buf, true); //将数组low_array的索引设置为时间序列的索引。

ArraySetAsSeries(Time_buf, true); //设置数组time_array的索引,如同timeseries中的索引。


for( nomer_instr=0; nomer_instr<=5; nomer_instr++ )
{


//========================================================================
CopyTime( Name_symbol[nomer_instr], PERIOD_H1,0,160,Time_buf); // 复制每个柱状图的历史时间数据到缓冲区。
CopyClose( Name_symbol[nomer_instr], PERIOD_H1,0,160,Close_buf); // 将每个柱状图的历史收盘数据复制到缓冲区。
CopyOpen( Name_symbol[nomer_instr], PERIOD_H1,0,160,Open_buf); // 将每个柱状图的历史数据复制到缓冲区。
CopyHigh( Name_symbol[nomer_instr], PERIOD_H1,0,160,high_buf); // 将每个柱状图的历史数据高点复制到缓冲区。
CopyLow( Name_symbol[nomer_instr], PERIOD_H1,0,160,low_buf); // 将每个柱状的历史数据低点复制到缓冲区。
//========================================================================

for( i=1; i<=145; i++ )
{
Time_H1[nomer_instr][i]=Time_buf[i];
Close_H1[nomer_instr][i]=Close_buf[i];
Open_H1[nomer_instr][i]=Open_buf[i];
High_H1[nomer_instr][i]=High_buf[i];
Low_H1[nomer_instr][i]=Low_buf[i];
}

//======================================================================================
// 检查生成的一小时时间框架的蜡烛图数据的时间偏移。

如果( Schetchik_svech > 8 && Schetchik_svech < 15 )
{
如果( nomer_instr == 5 )
{
Alert("================================================");
Alert(" bar number = ",Schetchik_svech,", bar open time Nev_Time[0]=",Nev_Time[0])。
Alert(" 仪器编号。nomer_instr=",nomer_instr,", instrument: Name_symbol[nomer_instr]=",Name_symbol[nomer_instr])。
Alert("---------------------------------------------------------");
for(( i=1; i<=5; i++ )
{
Alert("i=",i,", Time_H1[nomer_instr][i]=",Time_H1[nomer_instr][i],", Close_H1[nomer_instr][i]=",Close_H1[nomer_instr][i]);
}
}
}
//======================================================================================

}//结束H1时间框架上所用货币的循环。


//##############################################

这里是H4时间框架的同一块图表

//############################################


}//OnTick()函数 的结束


检查这款软件的性能时,我发现了一个意想不到的结果。

- 对于H1的情况,当输出图表的条形参数时,专家顾问站在上面,我们在零条和第一条之间有一个小时的时间差。

例如,专家顾问在欧元兑美元的图表上,零条的开盘时间是Nev_Time[0]=2011.01.03 13:00:00,那么第一条的开盘 时间是Time_H1[1][1]=2011.01.03 12:00:00

这个结果是符合常识的。

- 现在专家顾问在同一个图表上,我们分析任何其他货币的数据,例如 澳元兑美元。

零条的开盘时间 Nev_Time[0]=2011.01.03 13:00:00,那么第一条的开盘时间 Time_H1[1][1]=2011.01.03 11:00:00

这个结果根本无法接受,但我没有在文章中找到这种效果的原因。

请告知如何摆脱这种困扰,我不能为每种货币写一个专家顾问。

谢谢你的反馈。

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Boris.45: 零点开盘时间 Time_H1[1][1]=2011.01.03 13:00:00, 那么第一条开盘时间 Time_H1[1][1]=2011.01.03 11:00:00
那么Time_H1[1][0]返回什么?
 
Yedelkin:

Time_H1[1][0]返回什么?

我不使用数组中的这个元素,因为我将直接进入搜索最后5个条形的分形的算法。 而Time_H1[1][0]是零条形的开盘时间,这个条形的参数还没有形成。 我可能错了,但根据我自己的经验,我知道使用零条形的参数来形成时间序列会导致其失真。