Помогите перейти на 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, а нужно от последнего посчитанного бара до rates_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,

Спосиба за Ваше внимание.

 Вот полный код.Не смог сделать так что бы рисовал. Если сможете-поставьте здесь.

Прикольно,что в експерт делаю разные пары,разные фреймы-а один индикатор переписать-прикол.

//+------------------------------------------------------------------+
//|                                                       2_2_v2.mq5          |
//|                                                      Yuriy Tokman         |
//|                                            yuriytokman@gmail.com    |
//+------------------------------------------------------------------+
#property copyright "Yuriy Tokman"
#property link      "yuriytokman@gmail.com"
#property version   "1.00"
#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
//#property indicator_label1  "EURUSD"
//#property indicator_label2  "GBPUSD"

input int period_1 = 13 ;
input int period_2 = 55 ;
input ENUM_MA_METHOD ma_method = MODE_SMA;
input ENUM_APPLIED_PRICE applied_price = PRICE_CLOSE;

double ExtMapBuffer1[];
double ExtMapBuffer2[];
int EMHandle1;
int EMHandle2;
int EMHandle11;
int EMHandle22;
double ma1[],ma2[],ma3[],ma4[];//Временни буфери
double p1 = SymbolInfoDouble("EURUSD",SYMBOL_POINT);
double p2 = SymbolInfoDouble("GBPUSD",SYMBOL_POINT);
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
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_BEGIN,1);
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,1);
  
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
   PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE);
  
//--- name for DataWindow
   IndicatorSetString(INDICATOR_SHORTNAME,"2_2_MA");
//---
//--- set accuracy
   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);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,    // размер массива price[];
                 const int prev_calculated,// количество доступных баров ;на предыдущем вызове;
                 const int begin,// с какого индекса в массиве  price[] начинаются достоверные данные;
                 const double &price[]) // массив, по которому и будет считаться индикатор;
  {
   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());}

 

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

   Comment(
      "\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)
      );
//---
  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
void OnDeinit(const int reason)
  {
   Comment("");      
  }
//+------------------------------------------------------------------+ 

 

Всем доброго времени суток.

У меня просьба, переделать этот индикатор под MT5 потому как в торгах использую только его.

Файлы:
 

Ребят я очень извиняюсь что не в тему, даже незнаю куда написать, но может поможете разобраться в таком вопросе: в MT4 всё просто копируешь советника в папку experts запускаешь тестер стратегий всё прекрасно видиться и работает, но в MT5 я понять немогу как протестировать советник, я скидываю в папку experts, причём с расширением .mq5, но ни в тестере стратегий не в терминале он не видиться, там отображаються только стандартные советники, я вообще куда только не копировал и разные невидяться они и всё, подскажите как правильно и куда скопировать советник чтобы он увиделся?

 
ZahvatkiN:

Ребят я очень извиняюсь что не в тему, даже незнаю куда написать, но может поможете разобраться в таком вопросе: в MT4 всё просто копируешь советника в папку experts запускаешь тестер стратегий всё прекрасно видиться и работает, но в MT5 я понять немогу как протестировать советник, я скидываю в папку experts, причём с расширением .mq5, но ни в тестере стратегий не в терминале он не видиться, там отображаються только стандартные советники, я вообще куда только не копировал и разные невидяться они и всё, подскажите как правильно и куда скопировать советник чтобы он увиделся?

Запустить как в тестере, так и в реалтайме, можно лишь советник с расширением ex5 те скомпилированную версию,

открой mq5 файл в МетаЭдиторе нажми F7 и будет счастье. Исходный код с расширением mq5, это всего лишь тестовая информация, для того чтоб из неё получился байт-код (исполняемый код) нужно его скомпилировать.

 

Urain благодарю за ответ, только все эти основы я знаю, я и компилировал и всё делал как по инструкции, хоть я её и знал, но ещё раз прочитал, даже незнаю что может быть не так, вот прикладываю 2-а скина. MT5 скачал с этого сайта.

Файлы:
1__17.jpg  420 kb
2__10.jpg  117 kb
 
ZahvatkiN:

Urain благодарю за ответ, только все эти основы я знаю, я и компилировал и всё делал как по инструкции, хоть я её и знал, но ещё раз прочитал, даже незнаю что может быть не так, вот прикладываю 2-а скина. MT5 скачал с этого сайта.

Отлично, теперь после того как убедился что советник grr-al.ex5 в нужной папке стоит перезагрузить МТ5.

Кстати МТ5 один на компе стоит?

 

Urain наконецто разобрался, дело в том, что советники копируються не в папку C:\Program Files\MT5\MQL5\Experts а в C:\Users\Дима\AppData\Roaming\MetaQuotes\Terminal\8B052D0699A0083067EBF3A36123603B\MQL5\Experts, непонятно только нафига такой гемор, вот блин чёртовы програмисты)))

Причина обращения: