///////////////////////////////////////////////////////////////////////////////////////////////////////double iMAf( string symbol, ENUM_TIMEFRAMES timeframe, int period, int mama_shift, ENUM_MA_METHOD mama_method, int applied_pricece, int shift){
Print ( " iMAfsymbol ",symbol," iMAftimeframe ",timeframe," iMAfperiod ",period," iMAfmama_shift ",mama_shift ," iMAfmama_method ",mama_method,
" iMAfapplied_pricece ", applied_pricece," iMAfshift ",shift);
MA_handle=iMA(symbol,timeframe,periodd(period),mama_shift, mama_method,applied_pricece);Sleep(2000);
//--- если не удалось создать хэндлif(MA_handle==INVALID_HANDLE)
{
//--- сообщим о неудаче и выведем номер ошибкиPrintFormat("Не удалось создать хэндл индикатора iMA для пары %s/%s, код ошибки %d",
symbol,
EnumToString(timeframe),
GetLastError()); ResetLastError();return (0.0);}
CopyBuffer( MA_handle,0,0,100,MA);
ArraySetAsSeries(MA,true);
if(shift>99) return(0);
return( (MA[shift])); }
///////////////////////////////////////////////////////////////////////////////////////////////////////
请告诉我错误在哪里。 我得到了准确的数值,但我不能使 "Obem_Pozic "的数值为1.00,这样我就可以计算出显示的手数,我不想把它规范化,它只是给出了4位小数。
我是用MQL4写的。
我在适当的论坛上询问MQL4的情况,这里是A。
你应该使用DoubleToStr() 来在屏幕上显示更准确的数值。
这一对可能是由终端提供的,它只需要被连接。如果是手动,那么在市场观察中。而如果是长大的,应该用SymbolSelect() 手动完成。
只要你有一个错误,其他的就会随之而来。第一个错误是在终端的底部。因此,我们应该努力消除第一个错误,然后我们再看 :)
谢谢!!!。理解得非常好,写得也很好。我的EA中确实有SymbolSelect()。我把它和代码一起贴在第1页上。53,如果你需要它,你可以看到它。我在帮助下进行了检查--它是正确的!!!。那么,如果这一对是由终端提供的,我应该怎么想?
此外,如果第一行的错误是在终端的底部。为什么打印机错误信息和终端信息不交替出现--不,它们被归为一组?
也许终端没有报告这个函数的错误?
是的,我可以看到。让我们这样试一试。
谢谢你!!!。!!
请告诉我可变时限的印刷品应该是什么样子的,可以是数字的吗?我看到一个,我是说数字一显示出来了。
我在问为什么。这是一个函数,它有一个带打印的行。因此,从顶部开始的第二个人。
下面是函数的调用。
///////////////////////////////////////////////////////////////////// int Distance_from_MA(string symbb) { double MAMA = iMAf( symbb, periodd(TFMA), periodMA, ma_shift, ma_method, applied_price, 0); int spread = (int) MathRound(SymbolInfoInteger(symbb,SYMBOL_SPREAD)); double point = SymbolInfoDouble(symbb,SYMBOL_POINT); if(SymbolInfoInteger(symbb,SYMBOL_DIGITS) == 3 || SymbolInfoInteger(symbb,SYMBOL_DIGITS) == 5) {spread = (int) MathRound(SymbolInfoInteger(symbb,SYMBOL_SPREAD)/10); point = SymbolInfoDouble(symbb,SYMBOL_POINT)*10;} if(iClose(symb,TF_Price,0)+(spread*point)+(Min_Distance_from_MA*point)<=MAMA) return(-1); if(iClose(symb,TF_Price,0)-(Min_Distance_from_MA*point)>=MAMA) return (1); return(0); } ////////////////////////////////////////////////////////////////////注意,我在调用行中使用了另一个函数。它是用来定罪的时间框架。之所以如此,是因为我的专家顾问已经从4岁开始被剥夺了。我曾在其中使用过开箱 器。后来,为了以防万一,我在F4时间框架中加入了F,以进一步使用它。
这就是我所看到的
那么,就在这段代码的下面,使用了
EnumToString(timeframe),我想我已经知道问题可能出在哪里了。我现在就来描述一下。
从图片中,你可以看到EA在M1上运行,时间框架==1,周期==140 。这是否正确?
时间框架==1的值很可能表明时间框架==M1。同时,periodd(period)条目意味着periodd(140)。 根据代码,periodd(140)函数必须返回PERIOD_CURRENT 值。因此,事实证明,periodd(140)==M1。
这意味着iMA调用看起来像这样:iMA(symbol,M1,M1...) 我不知道在计算iMA时,第二个参数的值与第三个参数的值重合(即周期与平均周期重合)是否可以接受,但有些东西告诉我这是错误的。