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

 

在mql4中,我使用iCustom制作指标,使用别人的现成指标,尽管我对编程一无所知...我已经受够了直觉。我正在使用mql5,但无论我如何努力去理解它,都没有用。请帮助我,请。

我在ex5里有这个 指标。我把它放在我的下载文件夹里。我想把它的两条线在其他时段的图表上画出来,也就是用iCustom使它成为多线程。

由于我不能从头开始写一个指标,我采用了一个简单的熊市力量指标的代码。我在那里没有改变任何东西,除了改变indicator_chart_window和DRAW_LINE和线,在我看来,应该拿出第一个缓冲区的数据和当前TF的默认参数。

ExtBearsBuffer[i]=iCustom(NULL,0,"Downloads\\RSI Analytics");

所有的东西都能编译,没有东西被画出来。它还需要什么?:(

#property copyright   "2009, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property description "Bears Power"
//--- indicator settings
#property indicator_chart_window                      //---------------------------------
#property indicator_buffers 2
#property indicator_plots   1
#property indicator_type1   DRAW_LINE                 //---------------------------------------
#property indicator_color1  Silver
#property indicator_width1  2
//--- input parameters
input int InpBearsPeriod=13; // Period
//--- indicator buffers
double    ExtBearsBuffer[];
double    ExtTempBuffer[];
//--- handle of EMA 
int       ExtEmaHandle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtBearsBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtTempBuffer,INDICATOR_CALCULATIONS);
//---
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpBearsPeriod-1);
//--- name for DataWindow and indicator subwindow label
   IndicatorSetString(INDICATOR_SHORTNAME,"Bears("+(string)InpBearsPeriod+")");
//--- get MA handle
   ExtEmaHandle=iMA(NULL,0,InpBearsPeriod,0,MODE_EMA,PRICE_CLOSE);
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Average True Range                                               |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &Time[],
                const double &Open[],
                const double &High[],
                const double &Low[],
                const double &Close[],
                const long &TickVolume[],
                const long &Volume[],
                const int &Spread[])
  {
   int i,limit;
//--- check for bars count
   if(rates_total<InpBearsPeriod)
      return(0);// not enough bars for calculation   
//--- not all data may be calculated
   int calculated=BarsCalculated(ExtEmaHandle);
   if(calculated<rates_total)
     {
      Print("Not all data of ExtEmaHandle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }
//--- we can copy not all data
   int to_copy;
   if(prev_calculated>rates_total || prev_calculated<0) to_copy=rates_total;
   else
     {
      to_copy=rates_total-prev_calculated;
      if(prev_calculated>0) to_copy++;
     }
//---- get ma buffers
   if(IsStopped()) return(0); //Checking for stop flag
   if(CopyBuffer(ExtEmaHandle,0,0,to_copy,ExtTempBuffer)<=0)
     {
      Print("getting ExtEmaHandle is failed! Error",GetLastError());
      return(0);
     }
//--- first calculation or number of bars was changed
   if(prev_calculated<InpBearsPeriod)
      limit=InpBearsPeriod;
   else limit=prev_calculated-1;
//--- the main loop of calculations
   for(i=limit;i<rates_total && !IsStopped();i++)
     {
      ExtBearsBuffer[i]=iCustom(NULL,0,"Downloads\\RSI Analytics"); \\--------------------------------------------
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Технический индикатор RSI ANALYTICS
Технический индикатор RSI ANALYTICS
  • 评论: 5
  • 2013.11.01
  • STRAT ANALYTICS
  • www.mql5.com
Зачем нам RSI в отдельном окне, если его можно построить в основном окне графика, что гораздо более понятно? RSI ANALYTICS - это индикатор, следящий за рынком, созданный на основе той же идеи, что и традиционный RSI (индекс относительной силы). При этом он строится не в отдельном подокне, а в том же окне, что и график цены финансового...
 
Nilog:

在mql4中,我使用iCustom制作指标,使用别人的现成指标,尽管我对编程一无所知...我已经受够了直觉。我正在使用mql5,但无论我如何努力去理解它,都没有用。我想向你寻求帮助。

我在ex5里有这个 指标。我把它放在我的下载文件夹里。我想把它的两条线在其他时段的图表上画出来,也就是用iCustom使它成为多线程。

由于我不能从头开始写一个指标,我采用了一个简单的熊市力量指标的代码。我在那里没有改变任何东西,除了改变indicator_chart_window和DRAW_LINE和线,在我看来,应该拿出第一个缓冲区的数据和当前TF的默认参数。

所有的东西都能编译,没有东西被画出来。它还需要什么?:(

在mql5中,自定义和标准指标的工作安排与mql4中不同。如果在mql4中你只能通过iCustom获得一个指标值,在mql5中你可以在数组中获得整个历史深度的指标值。第二个主要区别是指标缓冲区的索引方向。

翻阅所有的代码并与原文进行核对是很乏味的,所以我只指出其中的主要内容。

该文件必须位于 "指标 "文件夹中或位于同一 "指标 "的子文件夹中。

以下是获得MA指标手柄的线路

ExtEmaHandle=iMA(NULL,0,InpBearsPeriod,0,MODE_EMA,PRICE_CLOSE);

这是用于获取MA指标值的字符串

if(CopyBuffer(ExtEmaHandle,0,0,to_copy,ExtTempBuffer)<=0)

在这种情况下,是向一个额外的缓冲区或数组。

事实证明,要获得自定义指标的数据

ExtBearsHandle=iCustom(NULL,0,"RSI Analytics");
CopyBuffer(ExtBearsHandle,0,0,to_copy,ExtTempBuffer)

然后你可以以某种方式处理来自这个额外的缓冲区的指标值,或者你可以把它们放入指标缓冲区而不忘记索引的方向。

 
Alexey Viktorov:


谢谢你!我按照我的理解写了一些东西,现在编译时只弹出一个错误。上线

CopyBuffer(ExtBearsHandle,0,0,to_copy,ExtTempBuffer);

errorto_copy - 未声明的标识符。

在哪一节,如何申报?

 
Nilog:

谢谢你!我按照我的理解写了一些东西,现在编译时只弹出一个错误。上线

errorto_copy - 未声明的标识符。

在哪一节,如何申报?

你需要将我的提示与你的代码以及你已经修复的源代码进行比较。这个变量在这些代码中被声明。而除了我的言论之外,你应该试着去理解一般的建筑指标的逻辑,而不是一味地把一坨屎换成另一坨屎。

 
在MetaTrader 5中,一个EA在一种货币上的工作方式是否与RTS指数等不同?
 
lil_lil:
在MetaTrader 5中,一个EA在一个货币对上的表现可以与RTS指数等的表现截然不同吗?

议员将按照规定的方式工作。而不是其他。

至于必须考虑的细微差别:RTS是一个交易所,因此是NETTING类型的会计职位。如果EA最初的设计不是为了在网状物上工作,那么结果是不可预测的。

 
Vladimir Karputov:

议员将按照规定的方式工作。而不是其他。

至于必须考虑的细微差别:RTS是一个交易所,因此是NETTING类型的会计职位。如果EA最初的设计不是为了在网状物上工作,那么结果是不可预测的。

如果你的EA不打算 净值上工作,结果是不可预测的。

战略中没有多方向的头寸。

 
lil_lil:

谢谢你,你怎么能从代码中确定它是否被设计为在网状物上工作

战略中没有相反方向的头寸。

而且,如果是这样(工作中总是有一个头寸),那么就没有区别--无论是净值化还是套期保值。

 
Vladimir Karputov:

如果是这样的话(总是有一个头寸在运作),那么是净额结算还是套期保值就没有区别。

在货币(外汇)的反向信号中,头寸被关闭,但不是在交易所。去哪里找,找什么?

 
lil_lil:

在货币的反向信号中,头寸被关闭,但不在交易所中。去哪里找,找什么?

要寻找关闭仓位 的命令来自的地方。