Kayıpsız MetaTrader 5'e geçmeme yardım et - sayfa 13

 
mario065 :

Merhaba,

Dönmediğim için yapamadım, istediğim buydu

Kısa olanlar, durdurulan göstergeden farklı bir çift için hesaplanan farklı bir hareketli tampon çağırır.

[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] 

i (bar için) yerine 0 olduğunda sonucu görüyorum, bar için (current= i ) ne zaman ikinci çift için veri bulamadığını veriyor.

Parite tablosu açık, market penceresinde bir sembol var, nerede/neyi karıştırıyorum anlamadım?

Bir göstergede iki farklı çift - peki benim hatam nerede?

0'a ayarladığımda sonucu yorum olarak görüyorum ama denemediğim için çizgiler çekmiyor.

Açıklama: bir çiftte ma1 ve ma2 ve başka bir çiftte ma3 ve ma4.

Teşekkürler.

İlk olarak, 0----->prev_hesaplanmış-1'den sayarsınız ve son hesaplanan çubuktan Rate_total'a ihtiyacınız vardır.

Bugün nasılsın:

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

buna değiştir:

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

İkincisi, gerçekten anlamadım, farklı enstrümanlardan veya farklı zaman dilimlerinden hareketler almak istiyorsunuz, kodda birini veya diğerini bulamadım.

 

İyi günler beyler!

Aşağıdaki göstergeleri MT5 (ekli dosyalar) için uyarlamak için kim yapabilir?

İş için bir biraya 10 dolar veririm.

Dosyalar:
 
master_kiln :

İyi günler beyler!

Aşağıdaki göstergeleri MT5 (ekli dosyalar) için uyarlamak için kim yapabilir?

İş için bir biraya 10 dolar veririm.

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

Ukrayna ,

İlginiz için teşekkürler.

İşte kodun tamamı, çizemedim. Yapabilirsen buraya yaz.

Uzmanda farklı çiftler, farklı kareler yapıyor olmam harika ve bir göstergeyi yeniden yazmak şaka gibi.

//+------------------------------------------- --------------------+
//| 2_2_v2.mq5 |
//| Yuri Tokman |
//| yuriytokman@gmail.com |
//+------------------------------------------- --------------------+
#özellik telif hakkı "Yuriy Tokman"
#özellik bağlantısı " yuriytokman@gmail.com "
#özellik sürümü "1.00"
#özellik göstergesi_separate_window
#özellik göstergesi_buffers 6
#özellik göstergesi_plots 2
#özellik göstergesi_type1 DRAW_COLOR_LINE
#özellik göstergesi_type2 DRAW_COLOR_LINE
#özellik göstergesi_renk1 clrMavi
#özellik göstergesi_renk2 clrRed
#özellik göstergesi_style1 STYLE_SOLID
#özellik göstergesi_style2 STYLE_SOLID
//#özellik göstergesi_etiket1 "EURUSD"
//#özellik göstergesi_etiket2 "GBPUSD"

giriş int period_1 = 13 ;
girdi int period_2 = 55 ;
ENUM_MA_METHOD girin ma_method = MODE_SMA;
ENUM_APPLIED_PRICE girdisi application_price = PRICE_CLOSE;

çift ExtMapBuffer1[];
çift ExtMapBuffer2[];
intEMHandle1;
intEMHandle2;
intEMHandle11;
intEMHandle22;
double ma1[],ma2[],ma3[],ma4[];//Zaman arabelleği
double p1 = SymbolInfoDouble("EURUSD",SYMBOL_POINT);
double p2 = SymbolInfoDouble("GBPUSD",SYMBOL_POINT);
//+------------------------------------------- --------------------+
//| özel gösterge başlatma işlevi |
//+------------------------------------------- --------------------+
int OnInit()
{
//--- gösterge arabellek eşlemesi
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);

//--- DataWindow için isim
IndicatorSetString(INDICATOR_SHORTNAME,"2_2_MA");
//---
//--- kesinliği ayarla
GöstergeSetTamsayı(INDICATOR_DIGITS,4);

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

ArraySetAsSeries(ExtMapBuffer1,true);
ArraySetAsSeries(ExtMapBuffer2,true);
ArraySetAsSeries(ma1, true);
ArraySetAsSeries(ma2, doğru);
ArraySetAsSeries(ma3, doğru);
ArraySetAsSeries(ma4, true);

//---
dönüş(0);
}
//+------------------------------------------- --------------------+
//| özel gösterge yineleme işlevi |
//+------------------------------------------- --------------------+
int OnCalculate (const int oranlar_toplam, // fiyat[] dizi boyutu;
const int prev_hesaplanmış,// mevcut çubuk sayısı ;önceki çağrıda;
const int başlangıç,// geçerli verinin fiyat[] dizisindeki hangi dizinde başladığı;
const double &fiyat[]) // göstergenin hesaplanacağı dizi;
{
if(CopyBuffer(EMHandle1, 0, 0, 1, ma1) < 0){Print("CopyBuffer ma1 hatası =", GetLastError());}
if(CopyBuffer(EMHandle2, 0, 0, 1, ma2) < 0){Print("CopyBuffer ma2 hatası =", 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 hatası =", GetLastError());}

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

Yorum(
"\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)
);
//---

//--- sonraki çağrı için prev_hesaplananın dönüş değeri
dönüş(oranlar_toplam);
}
geçersiz OnDeinit(const int nedeni)
{
Yorum("");
}
//+------------------------------------------- --------------------+

 

Hepinize iyi günler.

Bu göstergeyi MT5 için yeniden yapma isteğim var çünkü onu yalnızca ticarette kullanıyorum.

Dosyalar:
 

Beyler, konu dışı olduğu için çok üzgünüm, nereye yazacağımı bile bilmiyorum, ama bu sorunu çözmeme yardım edebilir misiniz: MT4'te danışmanı uzmanlar klasörüne kopyalayın, strateji test cihazını çalıştırın, her şey yolunda görünüyor ve çalışıyor, ancak MT5'te danışmanı nasıl test edeceğimi bulamıyorum, onu uzmanlar klasörüne ve .mq5 uzantısıyla bırakıyorum, ancak strateji test cihazında veya terminalde görünmüyor , orada sadece standart danışmanlar gösteriliyor, hiçbir yere kopyalamadım ve farklı görülemezler ve hepsi bu, bana danışmanı nasıl doğru bir şekilde kopyalayacağımı ve onu nerede göreceğimi söyle?

 
ZahvatkiN :

Beyler, konu dışı olduğu için çok üzgünüm, nereye yazacağımı bile bilmiyorum, ama bu sorunu çözmeme yardım edebilir misiniz: MT4'te danışmanı uzmanlar klasörüne kopyalayın, strateji test cihazını çalıştırın, her şey yolunda görünüyor ve çalışıyor, ancak MT5'te danışmanı nasıl test edeceğimi bulamıyorum, onu uzmanlar klasörüne ve .mq5 uzantısıyla bırakıyorum, ancak strateji test cihazında veya terminalde görünmüyor , orada sadece standart danışmanlar gösteriliyor, hiçbir yere kopyalamadım ve farklı görülemezler ve hepsi bu, bana danışmanı nasıl doğru bir şekilde kopyalayacağımı ve onu nerede göreceğimi söyle?

Hem test cihazında hem de gerçek zamanlı olarak çalıştırabilirsiniz, yalnızca ex5 uzantısıyla EA yapabilirsiniz, derlenmiş sürümler,

mq5 dosyasını MetaEditor'da açın, F7'ye basın ve mutlu olacaksınız. mq5 uzantılı kaynak kod sadece test bilgisidir, ondan bir bayt kodu (çalıştırılabilir kod) almak için onu derlemeniz gerekir.

 

Cevap için teşekkür ederim Urain , tüm bu temel bilgileri sadece ben biliyorum, her şeyi talimatlara göre derledim ve yaptım, bilsem de tekrar okudum, neyin yanlış olabileceğini bile bilmiyorum, işte uyguluyorum 2 cilt. MT5 bu siteden indirildi .

Dosyalar:
1__17.jpg  420 kb
2__10.jpg  117 kb
 
ZahvatkiN :

Cevap için teşekkür ederim Urain , tüm bu temel bilgileri sadece ben biliyorum, her şeyi talimatlara göre derledim ve yaptım, bilsem de tekrar okudum, neyin yanlış olabileceğini bile bilmiyorum, işte uyguluyorum 2 cilt. MT5 bu siteden indirildi.

Harika, şimdi grr-al.ex5 Expert Advisor'ın doğru klasörde olduğundan emin olduktan sonra MT5'i yeniden başlatmalısınız.

Bu arada, MT5 bilgisayarınızda yalnız mı?

 

Urain sonunda anladı, gerçek şu ki, Uzman Danışmanlar C:\Program Files\MT5\MQL5\Experts klasörüne değil, C:\Users\Dima\AppData\Roaming\MetaQuotes\Terminal\8B052D0699A0083067EBF3A36123603B\ klasörüne kopyalandı MQL5\Experts, böyle bir hemoroid için ne olduğu belli değil, lanet olası programcılar)))

Neden: