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

 
barabashkakvn:
我同意关于int(round)的说法。谢谢你。明确的类型转换 也无妨。尽管它在没有明确的类型转换的情况下工作。
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Virty:
我同意关于int(round)的说法。谢谢你。明确的类型转换 也无妨。但它在没有明确的类型转换的情况下工作得很好。
它成功了,但编译器的评论...他们很烦人。
 
barabashkakvn:

我没有任何错误。该建筑是最新的。

谢谢你,MT5的更新帮助了我。该错误已经消失了。该版本是2013年7月23日的版本。顺便说一下,在旧版本中,没有类型转换 授权,这就是为什么我没有注意到它们。

谁会想到编译器会出现如此严重的错误。

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Virty:

谢谢你,MT5的更新帮助了我。这个错误已经消失了。 该版本是2013年7月23日的版本。 顺便说一下,在旧的版本中,没有类型转换 权证,所以我没有注意到它们。

谁会想到编译器会出现如此严重的错误。

最主要的是它起作用了:)。 就这样了,去睡觉吧。
 

需要找到时间间隔内的最小值。我编写了以下代码来寻找时间间隔中的最小值。

datetime ts=st+StartTime*60;// начало временного диапазона в секундах от 01.01.1970
int tss=(int)ts;//преобразование в секунды
Alert( "tss",tss);
datetime tsp=st+StopTime*60;// конец временного диапазона в секундах от 01.01.1970
int tspp=(int)tsp;//преобразование в секунды

为了找到这个区间的最小值,我使用函数CopyLow。

double Low[];
CopyLow(_Symbol,_Period,tss,tspp,Low); 

然后,如果我理解正确,我得到一个一维数组Low[]。

我在用ArrayMinimum寻找其中的最小值

int start=0;
int count=WHOLE_ARRAY; 
double min=ArrayMinimum(Low,tss, tspp);  
Alert("min=",min);

我试图在今天设置一个开始时间为1小时,停止时间为2小时,并调用Alert检查min=-1。

问题:对于这个问题,为了解决这个问题,函数的选择是否正确,还是在某个地方有错误?我需要得到最低价格

 
你好 尊敬的交易员,请帮助我正确设计多币种EA中3张幻灯片的程序片。

我试图在《手册》中查找,但这是一个基于类的例子,而我还没有准备好。

我想写一个不使用类的EA。我已经排除了所有不相干的东西,并为每个人获得了3张纸条。

我写了以下程序片段。

输入 int Kurtz_Period=5; //快速移动的Kurtz周期

输入int Mittel_Period=8

输入int Long_Period=13。

int maHandle; // 移动平均线 指标的手柄

double ma_buf[]; // 这是一个缓冲数组,用于存放MA函数的移动平均线读数。

// 然后它将被复制到相应的数组中。

datetime Time_buf[]; // 这是一个酒吧开放时间的数组。

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

double Kurtz[6][70]; //这是一个快速移动Kurtz的数组,行号对应于使用的货币数量,而列是移动的计数。

double Mittel[6][70]; // 这是移动平均线Mittel的阵列。

double Long[6][70]; // 这是一个用于长周期滑动的数组 Long

string Name_symbol[6] = { "AUDUSD", "EURUSD", "GBPUSD", "USDCAD", "USDCHF", "USDJPY" } ; // 这是一个货币名称的文本阵列。

int nomer_instr; // 这是一个工具(货币)编号,只是为了按货币组织周期。

int OnInit()

{

//-----

//-------

}

空白的OnDeinit(const int reason)。

{

//---

ArrayFree(Time_buf)。

ArrayFree(ma_buf); // 将释放的数组清零。

//-------

}

空白的OnTick()

{

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

ArraySetAsSeries(time_buf, true); //将时间阵列的索引设置为timeseries的索引。

ArraySetAsSeries(ma_buf,true); //将数组ma_buf 的索引设置为时间序列的索引

for( nomer_instr=0; nomer_instr<=5; nomer_instr++ ) // 这是 对所有已用货币的循环

{

int digit = int( SymbolInfoInteger( Name_symbol[nomer_instr], SYMBOL_DIGITS)); // 这是货币报价中的数字。

CopyTime( Name_symbol[nomer_instr], PERIOD_M1,0,160,Time_buf); // 复制每个柱状图的历史时间数据到缓冲区。

for( i=1; i<=145; i++ ) Time[nomer_instr][i]=Time_buf[i]; // 第一根 柱子的开盘时间。

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

//产生前3个滑动条的计数:Kurtz,Mittel,Long

manHandle = iMA( Name_symbol[nomer_instr],PERIOD_M1, Kurtz_Period , 0, MODE_SMMA, PRICE_CLOSE );

如果( CopyBuffer(maHandle,0,0,155,ma_buf)<0 )

{

Alert("复制指标缓冲区时出错---PERIOD_M1,Kurtz_Period---移动平均线---错误号。",GetLastError())。

返回。

}

for( i=1; i<=45; i++ ) Kurtz[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], digit);

/*

//===============================================================

// BLOCK检查时间序列中的条形偏移和数字归一化的准确性

//快速移动的MA-5

if( Multi_Torgi == 0 && Optim_parametrov == nomer_instr ) // 这是一个选择专家顾问模式的键,现在它处于调试模式。

{

for( i=1; i<=5; i++ )

{

if(i==1) Alert("====================");

if(i==1) Alert(" 第1 开盘时间。Time[nomer_instr][1]=",Time[nomer_instr][1] );

Alert(" bar number:i=",i,", MA_buf[i]=",MA_buf[i],", Kurtz[nomer_instr][i]=",Kurtz[nomer_instr][i]);

}

}

//=================================================================

*/

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

maHandle = iMA( Name_symbol[nomer_instr],PERIOD_M1, Mittel_Period, 0, MODE_SMMA, PRICE_CLOSE ) 。

如果(CopyBuffer(maHandle,0,0,155,ma_buf)<0)

{

Alert("复制指标缓冲区时出错 ===PERIOD_M1, Mittel_Period,===移动平均线 - 错误编号。",GetLastError())。

返回。

}

for( i=1; i<=45; i++ ) Mittel[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], digit);

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

maHandle = iMA( Name_symbol[nomer_instr],PERIOD_M1, Long_Period, 0, MODE_SMMA, PRICE_CLOSE ) 。

如果(CopyBuffer(maHandle,0,0,155,ma_buf)<0)

{

Alert("复制指标缓冲区时出错 ===PERIOD_M1, Long_Period,===Moving Average - 错误编号。",GetLastError())。

返回。

}

for( i=1; i<=45; i++ ) Long[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], digit);

// 形成前3张幻灯片计数的区块的末端:Kurtz,Mittel,Long

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

}// 按使用中的货币结束循环

//============================================================

其他项目运营商

//============================================================

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

}// End ofOnTick()

//+------------------------------------------------------------------+

这个程序在编译时没有检测到错误,但当在日志中对每个滑移进行测试时,有一个

错误信息:4806是 "未找到要求的数据"。

请告诉我哪里出了错误。

谢谢你。

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
DC2008:

你不明白类型化 的原则吗?它是如此简单。

现在看来很清楚了)事实证明,int st操作数的类型比datetime tp[]小。

这就是为什么在操作中没有转换为秒的原因。

int st=tp[0];

我试图找到时间间隔中的最小值。我不确定我的做法是否正确。你能看到之前的帖子吗?

如果没有新的刻度线,如何调用Alert或Comment来做周末检查?

 
forexman77:

需要找到时间间隔内的最小值。我编写了以下代码来寻找时间间隔中的最小值。

为了找到这个区间的最小值,我使用函数CopyLow。

然后,如果我理解正确,我得到一个一维数组Low[]。

我在用ArrayMinimum寻找其中的最小值

我试图在今天设置一个开始时间为1小时,停止时间为2小时,并调用Alert检查min=-1。

问题:对于这个问题,为了解决这个问题,函数的选择是否正确,还是在某个地方有错误?你需要获得最低价格

仔细阅读

返回值。

该函数考虑到数组的序列性,返回找到的元素的索引 。如果失败,该函数返回-1

因此,它应该是这样的。

Alert("min=",Low[ArrayMinimum(Low)]);
 

在周末及以后的时间里进行检查和测试,你必须要有脚本。

 
DC2008:

在周末及以后的时间里进行检查和测试,你必须要有脚本。

谢谢你!