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

 
Alexey Volchanskiy:

.ex5对任何人都没有用,如果你想得到帮助,请公布源代码。


操,我还以为是源代码呢 :-)我也在看其他的icons....。我想知道哪一个是源...... 这个 :-)

事实证明,这不是....

附加的文件:
ChekParam.mq5  11 kb
 

重点是,从末尾开始的负第三小节上的脉冲是零,并被画成零。但它在缓冲区内不是零。

我不知道是什么原因,但我通过在一个新的指标中粘贴所有的代码PULSE,绕过了icustom,解决了问题。

我在减去第二条的时候没有错误。我没有改变代码中的其他内容,所以这确实是元引号中的一个错误。

 
LookingFor:

重点是,从末尾开始的负第三小节上的脉冲是零,并被画成零。但它在缓冲区内不是零。

我不知道是什么原因,但我通过在一个新的指标中粘贴所有的代码PULSE,绕过了icustom,解决了问题。

我在减去第二条的时候没有错误。我没有改变代码中的其他内容,所以这确实是元引号中的一个错误。


没有代码,这个错误只能是你的。不幸的是,通过寻求帮助,你没有提供材料......

 
有谁能帮忙吗?什么是错误,为什么指标不能正确显示?
附加的文件:
ChekParam.mq5  11 kb
 
Vladislav Andruschenko:

不幸的是,当你请求帮助的时候,你没有给出材料...

弗拉迪斯拉夫,以正义的名义,以了解这一切的愿望,出于对你的尊重,我把密码给你。


//+------------------------------------------------------------------+
//|                                                   PULS_SWING.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots   1
//--- plot Pulse_Swing
#property  indicator_label1  "Pulse_Swing"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- input parameters
input double   points=0.005;
input double   begin_price_level=1.0;
//--- indicator buffers
double         Pulse_Swing [], pulse [] , trend [] , delta [];
int PULSE_Handle ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Pulse_Swing,INDICATOR_DATA);
   SetIndexBuffer(1,pulse,INDICATOR_CALCULATIONS);
   SetIndexBuffer(2,trend,INDICATOR_CALCULATIONS);
   SetIndexBuffer(3,delta,INDICATOR_CALCULATIONS);
   IndicatorSetInteger(INDICATOR_DIGITS,0);
   ResetLastError(); 
   PULSE_Handle = iCustom(NULL,0,"PULSE",
                          points,          // Points
                          begin_price_level          // begin_price_level
                          );
   Print("PULSE_Handle",PULSE_Handle,"  error = ",GetLastError()); 
//---
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID);
   //ArrayFree (pulse);ArrayFree (delta);ArrayFree (Pulse_Swing);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   int  bar, start  ;
   if (prev_calculated==0)
   {pulse [0] = pulse [1] =0; start =begin+2 ;}
   else {start = prev_calculated ;}
   //Print(IntegerToString(bar));
   for (bar= start ;bar<rates_total;bar ++)
   {CopyBuffer(PULSE_Handle,0,bar,1,pulse);
   //Print(IntegerToString(pulse[bar]));
   if ((pulse [bar-1]- pulse [bar -2])>0) trend[bar-1] = 1 ; // 
   else
   if ((pulse [bar-1] - pulse [bar -2])<0) trend[bar-1] = -1 ; //
   else
   if (pulse [bar-1] == pulse [bar -2])  {trend[bar-1] = trend[bar-2] ;} // 
   else 
   continue ;
   delta[bar] = pulse[bar]- pulse[bar-1];
   if (trend [bar-1]== 1 && pulse [bar] != pulse [bar-1])
   Pulse_Swing [bar] = Pulse_Swing [bar-1] + delta[bar];
   else
   if (trend [bar-1]== -1 && pulse [bar] != pulse [bar-1])
   Pulse_Swing [bar] = Pulse_Swing [bar-1] - delta[bar];
   else
   if (delta [bar]==0 )Pulse_Swing [bar] = Pulse_Swing [bar-1] ;
   }
   //Print(IntegerToString(delta[rates_total-1]));
   Print(IntegerToString(delta[rates_total-2]));
   //Print(IntegerToString(pulse[rates_total-1]));
   Print(IntegerToString(pulse[rates_total-3]));
   Print(IntegerToString(pulse[rates_total-2]));
   Print(IntegerToString(pulse[rates_total-1]));
  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 

我在阅读交易操作的结果 时遇到了困难。我是这样写的。

MqlTradeRequest request={0};
MqlTradeResult result={0};
//--- установка параметров операции
....
//--- отправка запроса
if ( !OrderSend(request,result) )
  PrintFormat("OrderSend error %d",GetLastError()); // если отправить запрос не удалось
else // Я хочу получить парамеры резултата
{ Sleep(9999); // Жду получения резултата
  double ClosePrice=result.price;
}

如果你删除睡眠:我总是得到ClosePrice=0.0。即使我等待10秒钟(我不想等待更长时间),我几乎总能得到结果,但有时却得不到。

我怎样才能得到结果?

OrderSend()的描述说。

注意事项

一个交易请求会在交易服务器上经过几个验证阶段。首 请求参数的所有必要字段都会被检查是否正确 ,如果没有错误,服务器会接受订单进行进一步处理如果订单被交易服务器成功接受,OrderSend()函数返回true。

也就是说,当我从OrderSend()得到true时,我没有得到MqlResult参数,如果我理解正确的话。

他们什么时候会来找我?

 
Ivan Ivanov:

我无法阅读我的交易结果

关于交易、自动交易系统和策略测试的论坛

修改订单时出现错误131

fxsaber, 2017.09.12 19:47

你所要做的就是写下交易服务器的名称和符号,问题很快就会得到解决,因为每个人都可以自己尝试。

同时,人们会感觉到,任务不是找到一个解决方案,而是回答是/否。

 

各位程序员。

这里有一个问题:如果MT5中的策略测试器 只在开盘价时显示出良好的结果,那么如果机器人只在开盘价时开仓交易,结果是否也是如此?

 
Dzyga:

各位程序员。

问题:如果MT5中的策略测试器 只在开盘价时显示出良好的结果,那么机器人只在开盘价时进行交易,也会有同样的结果吗?


这很容易检查:在EA中,你只在开盘价(即在开盘时)打开交易,在策略测试器中,你在 "所有刻度 "的刻度生成模式下检查。

 

同事们,请帮助我

我不明白这个循环出了什么问题,Handle的数据没有进入psa1数组。

if (prev_calculated == 0 ){i=bars =start=1;}
  else {start = prev_calculated ;}
  for ( bars=start ; bars<rates_total ; bars ++)
  {CopyBuffer(pulse_Handle,0,start,1,pca1);
  
  if (pca1[bars]!=pca1[bars-1]) {pca2[i]=pca1[bars]; i++;
  string s="";s=IntegerToString(pca1[bars])+"  ";Print(s); continue;}
  else continue ;}
原因: