帮助升级到MetaTrader 5而没有损失 - 页 13

 
mario065:

你好。

我不能做我想做的事。

我的脑子里有一个不同的口型缓冲器,我有一副不同的,与我脑子里的那个不同。

[code]
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_plots   2
#property indicator_type1   DRAW_COLOR_LINE
#property indicator_type2   DRAW_COLOR_LINE
#property indicator_color1  clrBlue
#property indicator_color2  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_style2  STYLE_SOLID

input int period_1 = 20;
input int period_2 = 100;
input ENUM_MA_METHOD ma_method = MODE_SMA;
input ENUM_APPLIED_PRICE applied_price = PRICE_CLOSE;

double ExtMapBuffer1[];
double ExtMapBuffer2[];
int EMHandle1=0;
int EMHandle2=0;
int EMHandle11=0;
int EMHandle22=0;
MqlParam params[];      // Структура за съхранение  параметрите на индикатора
double ma1[],ma2[],ma3[],ma4[];//Временни буфери

int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0, ExtMapBuffer1, INDICATOR_DATA);
   SetIndexBuffer(1, ExtMapBuffer2, INDICATOR_DATA);
   SetIndexBuffer(2, ma1, INDICATOR_DATA);
   SetIndexBuffer(3, ma2, INDICATOR_DATA);
   SetIndexBuffer(4, ma3, INDICATOR_DATA);
   SetIndexBuffer(5, ma4, INDICATOR_DATA);
  
   PlotIndexSetInteger(0, PLOT_SHIFT, 0);
   PlotIndexSetInteger(1, PLOT_SHIFT, 0);
  
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID);
   PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_SOLID);
//---
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrBlue);
   PlotIndexSetInteger(1,PLOT_LINE_COLOR,clrRed);

   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
   PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE);
   IndicatorSetString(INDICATOR_SHORTNAME,"2_2_MA");
//--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,4);  
//---
   ArrayResize(params,4);
   params[0].type         =TYPE_INT;
   params[0].integer_value=period_1;
   // Смещение
   params[1].type         =TYPE_INT;
   params[1].integer_value=0;
   // Метод расчета: простое усреднение
   params[2].type         =TYPE_INT;
   params[2].integer_value=MODE_SMA;
   // Тип цен для рассчета: цены закрытия
   params[3].type         =TYPE_INT;
   params[3].integer_value=PRICE_CLOSE;
  
   EMHandle1 = IndicatorCreate(_Symbol, 0, IND_MA, 4, params);
   ArrayResize(params,4);
   params[0].type         =TYPE_INT;
   params[0].integer_value=period_2;
   params[1].type         =TYPE_INT;
   params[1].integer_value=0;
   params[2].type         =TYPE_INT;
   params[2].integer_value=MODE_SMA;
   params[3].type         =TYPE_INT;
   params[3].integer_value=PRICE_CLOSE;
  
   EMHandle2 = IndicatorCreate(_Symbol, 0, IND_MA, 4, params);
   ArrayResize(params,4);
   params[0].type         =TYPE_INT;
   params[0].integer_value=period_1;
   params[1].type         =TYPE_INT;
   params[1].integer_value=0;
   params[2].type         =TYPE_INT;
   params[2].integer_value=MODE_SMA;
   params[3].type         =TYPE_INT;
   params[3].integer_value=PRICE_CLOSE;
  
   EMHandle11 = IndicatorCreate(_Symbol, 0, IND_MA, 4, params);
   ArrayResize(params,4);
   params[0].type         =TYPE_INT;
   params[0].integer_value=period_2;
   params[1].type         =TYPE_INT;
   params[1].integer_value=0;
   params[2].type         =TYPE_INT;
   params[2].integer_value=MODE_SMA;
   params[3].type         =TYPE_INT;
   params[3].integer_value=PRICE_CLOSE;
  
   EMHandle22 = IndicatorCreate(_Symbol, 0, IND_MA, 4, params);
     
   return(0);
}
int OnCalculate (const int rates_total,    // размер массива price[];
                 const int prev_calculated,// количество доступных баров ;на предыдущем вызове;
                 const int begin,// с какого индекса в массиве  price[] начинаются достоверные данные;
                 const double &price[]) // массив, по которому и будет считаться индикатор;
  {
   int i;
   ArraySetAsSeries(ma1, true);
   ArraySetAsSeries(ma2, true);
   ArraySetAsSeries(ma3, true);
   ArraySetAsSeries(ma4, true);
  
   if(CopyBuffer(EMHandle1, 0, 0, 1, ma1) < 0){Print("CopyBuffer ma1 error =", GetLastError());}
   if(CopyBuffer(EMHandle2, 0, 0, 1, ma2) < 0){Print("CopyBuffer ma2 error =", GetLastError());}
   if(CopyBuffer(EMHandle11, 0, 0, 1, ma3) < 0){Print("CopyBuffer ma3 error =", GetLastError());}
   if(CopyBuffer(EMHandle22, 0, 0, 1, ma4) < 0){Print("CopyBuffer ma4 error =", GetLastError());} 
   int limit;
   //if(prev_calculated<1)
      //limit=period_1;
      limit=prev_calculated-1;
   for( i=0; i<limit; i++)
   ExtMapBuffer1[0]=вычисление;
   ExtMapBuffer2[0]=вычисление;

      Comment(
      "\n=====================",
      "\n ma1[0]     :   ",DoubleToString(ma1[0],5),
      "\n ma2[0]     :   ",DoubleToString(ma2[0],5),
      "\n ma3[0]     :   ",DoubleToString(ma3[0],5),
      "\n ma4[0]     :   ",DoubleToString(ma4[0],5),
      "\n ExtMapBuffer1[0] : ",DoubleToString(ExtMapBuffer1[0],4),
      "\n ExtMapBuffer2[0] : ",DoubleToString(ExtMapBuffer2[0],4)
      );
       return(rates_total);
  }
void OnDeinit(const int reason)
  {
   Comment("");      
  }
[/code] 

当0代替i时(对于一个条形图)我看到了结果,当条形图(当前=i)显示我找不到第二对数据。

该货币对的图表是开放的,在市场窗口中,我不知道我在哪里混淆了事情。

一个指标中有两个不同的配对 - 那么我的错误在哪里?

我试着输入0,看到结果是注释,但我没有得到一行。

澄清一下:我把ma1和ma2放在一对,ma3和ma4放在另一对。

谢谢。

首先,你从0----->prev_calculated-1开始计算,你需要从最后一栏计算到rate_total。

这一点。

      limit=prev_calculated-1;
   for( i=0; i<limit; i++)
   ExtMapBuffer1[0]=вычисление;

把它改成这样。

   
   for(int i=prev_calculated-1>=0?prev_calculated-1:0; i<rates_total; i++)
       ExtMapBuffer1[i]=вычисление;

第二件事我不太明白,你想从不同的工具或不同的时间框架中获得缪量,我在代码中找不到这两点。

 

日安,先生们!

谁能帮助我为MT5改编以下指标(预存文件)。

我将扔给你10美元的啤酒作为工作报酬。

附加的文件:
 
master_kiln:

日安,先生们!

谁能帮助我为MT5改编以下指标(预存文件)。

我将扔给你10美元的啤酒作为工作报酬。

https://www.mql5.com/ru/job
MQL5 работа
MQL5 работа
  • www.mql5.com
Заказы на разработку программ для трейдинга
 

Urain

谢谢你的关注。

我不能让它画出来。 如果你能,就放在这里。

我认为在xpert中制作不同的配对和不同的框架是很酷的。

//+------------------------------------------------------------------+
//|2_2_v2.硕士生
//|尤里-托克曼 |
//|yuriytokman@gmail.com|
//+------------------------------------------------------------------+
#财产版权 "Yuriy Tokman"
#属性链接"yuriytokman@gmail.com"
#财产版本 "1.00"
#属性 indicator_separate_window
#property indicator_buffers 6
#property indicator_plots 2
#属性 indicator_type1 DRAW_COLOR_LINE
#属性 indicator_type2 DRAW_COLOR_LINE
#property indicator_color1 clrBlue
#属性 indicator_color2 clrRed
#property indicator_style1 STYLE_SOLID
#property indicator_style2 STYLE_SOLID
//#property indicator_label1 "EURUSD"
//#property indicator_label2 "GBPUSD"

输入 int period_1 = 13 ;
输入 int period_2 = 55 ;;
输入ENUM_MA_METHOD ma_method = MODE_SMA。
输入ENUM_APPLIED_PRICE applied_price = PRICE_CLOSE。

双倍ExtMapBuffer1[]。
双倍ExtMapBuffer2[]。
int EMHandle1;
int EMHandle2;;
int EMHandle11;
int EMHandle22;
双倍的ma1[],ma2[],ma3[],ma4[];//times buffer
double p1 = SymbolInfoDouble("EURUSD",SYMBOL_POINT)。
double p2 = SymbolInfoDouble("GBPUSD",SYMBOL_POINT)。
//+------------------------------------------------------------------+
//|自定义指标初始化函数
//+------------------------------------------------------------------+
int OnInit()
{
//------指标缓冲区的映射
SetIndexBuffer(0, ExtMapBuffer1, INDICATOR_DATA)。
SetIndexBuffer(1, ExtMapBuffer2, INDICATOR_DATA)。
SetIndexBuffer(2, ma1, INDICATOR_DATA)。
SetIndexBuffer(3, ma2, INDICATOR_DATA)。
SetIndexBuffer(4, ma3, INDICATOR_DATA)。
SetIndexBuffer(5, ma4, INDICATOR_DATA)。

PlotIndexSetInteger(0, PLOT_SHIFT, 0)。
PlotIndexSetInteger(1, PLOT_SHIFT, 0)。

PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID)。
PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_SOLID)。
//---
PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrBlue)。
PlotIndexSetInteger(1,PLOT_LINE_COLOR,clrRed)。

PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,1)。
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,1)。

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE)。
PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE)。

//----数据窗口的名称
IndicatorSetString(INDICATOR_SHORTNAME, "2_2_MA")。
//---
//---设置精度
IndicatorSetInteger(INDICATOR_DIGITS,4)。

EMHandle1 = iMA("EURUSD", 0, period_1, 0, ma_method, applied_price);
EMHandle2 = iMA("EURUSD", 0, period_2, 0, ma_method, applied_price);
EMHandle11 = iMA("GBPUSD", 0, period_1, 0, ma_method, applied_price);
EMHandle22 = iMA("GBPUSD", 0, period_2, 0, ma_method, applied_price);

ArraySetAsSeries(ExtMapBuffer1,true)。
ArraySetAsSeries(ExtMapBuffer2,true)。
ArraySetAsSeries(ma1,true)。
ArraySetAsSeries(ma2,true)。
ArraySetAsSeries(ma3,true)。
ArraySetAsSeries(ma4, true)。

//---
return(0);
}
//+------------------------------------------------------------------+
//|自定义指标迭代函数|
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,// size of array price[];
const int prev_calculated,//可用的条数;在之前的调用中。
const int begin,//价格[]数组中的哪个索引将开始有效数据。
const double &price[]) // array, on which the indicator will be calculated;
{
如果(CopyBuffer(EMHandle1, 0, 0, 1, ma1)<0){打印("CopyBuffer ma1 error =", GetLastError());}。
如果(CopyBuffer(EMHandle2, 0, 0, 1, ma2)<0){打印("CopyBuffer ma2 error =", GetLastError());}。
如果(CopyBuffer(EMHandle11, 0, 0, 1, ma3)<0){打印("CopyBuffer ma3 error =", GetLastError());}。
如果(CopyBuffer(EMHandle22, 0, 0, 1, ma4) < 0){打印("CopyBuffer ma4 error =", GetLastError());}。

ExtMapBuffer1[0]=(ma1[0]-ma2[0])/p1;
ExtMapBuffer2[0]=(ma3[0]-ma4[0])/p2;

评论(
"\n=====================",
"/n ma1[] : ",DoubleToString(ma1[0],5),
"/n ma2[] : ",DoubleToString(ma2[0],5),
"/n ma3[] : ",DoubleToString(ma3[0],5),
"/n ma4[] : ",DoubleToString(ma4[0],5),
"/n ExtMapBuffer1[] : ",DoubleToString(ExtMapBuffer1[0],4)。
"/n ExtMapBuffer2[] : ",DoubleToString(ExtMapBuffer2[0],4)
);
//---

//---为下一次调用返回prev_calculated的值
return(rate_total)。
}
空白的OnDeinit(const int reason)。
{
评论(")。
}
//+------------------------------------------------------------------+

 

大家好。

我有一个请求,希望为MT5重做这个指标,因为我只在交易中使用它。

附加的文件:
 

我不知道该在哪里写,但也许你能帮我解决这个问题:在MT4中,你只需将EA复制到experts文件夹中,然后运行策略测试器,一切看起来都很好,可以正常工作,但在MT5中,我不明白如何测试一个EA,我把它扔在experts文件夹中,扩展名是.NET。我在其他地方复制和粘贴了它们。 你能告诉我如何复制一个EA并在哪里正确粘贴吗?

 
ZahvatkiN:

我不知道该在哪里写,但也许你能帮我解决这个问题:在MT4中,你只需将EA复制到experts文件夹中,然后运行策略测试器,一切看起来都很好,可以正常工作,但在MT5中,我不明白如何测试EA,我在文件夹experts中扔了一个扩展名为.我把它们复制并粘贴在其他地方。 你能告诉我如何正确地复制一个EA,并把它粘贴在哪里?

你既可以在测试器中运行,也可以在实时中运行,你只能运行带有扩展名ex5的EA或编译版的EA。

如果你在MetaEditor中打开一个mq5文件,按F7,你会很高兴。带有扩展名mq5的源代码,这只是测试信息,为了从它得到字节码(可执行代码),你需要编译它。

 

Urain 谢谢你的回答,只是我知道所有的基础知识,我按照说明编译和做了所有的事情,尽管我知道,但我再一次读了一遍,我不知道会有什么问题,这里有2个皮肤的附件。我从这个网站下载了MT5

附加的文件:
1__17.jpg  420 kb
2__10.jpg  117 kb
 
ZahvatkiN:

Urain 谢谢你的回答,只是我知道所有的基础知识,我按照说明编译和做了所有的事情,尽管我知道,但我再一次读到了,我甚至不知道会有什么问题,这里有2个皮肤的附件。我从这个网站下载了MT5。

我想把我的grr-al.ex5的副本放在正确的文件夹里,并在确保它在正确的文件夹里后重新加载MT5。

顺便问一下,电脑上只有MT5吗?

 

Urain 终于明白了,事情是这样的:EA不是复制到C:\Program Files\MT5\MQL5\Experts文件夹,而是复制到C:\Users\Dyma\AppData\Roaming\MetaQuotes\Terminal\8B052D0699A0083067EBF3A36123603B\MQL5\Experts,我不知道为什么这样麻烦,这些该死的程序员))))。