MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 977

 
Alexey Viktorov :

Sadece tam teşekküllü bir tavsiye için en baştan okumaya başlamanız tavsiye edilir. Oradan ilk soru ve tüm tartışmaların devam ettiği yer.

 
Kamilzhan :

Tam bir cevap için, dört değil, bir kez cevap vermeniz yeterlidir.


ALL, kesinlikle MT4'teki tüm renk göstergeleri , mevcut değer önceki çubuktaki değerden büyükse, arabelleklerden biri doldurulacak şekilde oluşturulmuştur. Ve mevcut değer bir önceki çubuktaki değerden küçükse, o zaman başka bir tampon doldurulur. Ve görüntüleme türü çok az önemlidir, bir çizgi, bir histogram veya yıldız işaretleri / noktalar ...

 

Grafiğin iki ekran görüntüsünü telgraflara gönderen, tam olarak çalışan bir danışman var, ilk ekran görüntüsünü terminaldeki açık bir pencereden ve ikincisi aynı araçla ancak farklı bir zaman diliminde,

bunun için yeni bir pencere açılır, şablon uygulanır , ekran alınır ve pencere silinir. Ancak ikinci ekranlı bu şema her zaman kararlı çalışmıyor, açılmayacak olanı değiştirmek istiyorum

yeni bir pencere, ancak sürekli aynı olanı kullandı ve ayrıca yalnızca istenen aracı değiştirdi, kodda bunu düzeltmeye yardımcı oldu.


 //+------------------------------------------------------------------+
//|                                                          777.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict

#include <Telegram.mqh>
string Token= "7417:AAH54X9HyFIbecqq1U1-R18tU" ;
int ChannelID= 33722 ;
CCustomBot bot;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
struct TSignalInfo
  {
   string             symbol;
   ENUM_TIMEFRAMES    timeframe;
   datetime           time_last;
   //---   
   static datetime GetMinute()
     {
       MqlDateTime dt;
       TimeCurrent (dt);
      dt.sec= 0 ;
       return ( StructToTime (dt));
     }
  };
TSignalInfo signal[];
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
bool SignalIsAllowed( const string _symbol,
                     const ENUM_TIMEFRAMES _timeframe)
  {
//--- find
   int total= ArraySize (signal);
   for ( int i= 0 ;i<total;i++)
     {
       if (signal[i].symbol==_symbol && 
         signal[i].timeframe==_timeframe)
        {
         //Print("found");
         if (signal[i].time_last<TSignalInfo::GetMinute())
           {
            signal[i].time_last=TSignalInfo::GetMinute();
             return ( true );
           }
         
         return ( false );
        }
     }

//--- add
   ArrayResize (signal,total+ 1 );
   signal[total].symbol=_symbol;
   signal[total].timeframe = _timeframe;
   signal[total].time_last = TSignalInfo::GetMinute();
   //Print("add");
   return ( true );
  }
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   bot.Token(Token);
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---

  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
  {
//---
   if (id== CHARTEVENT_CUSTOM + 234 )
     {
       if (!SignalIsAllowed( ChartSymbol (lparam), ChartPeriod (lparam)))
         return ;
       //Print("Custom: ",lparam," ",dparam," ",sparam);   
       ChartScreenShot (lparam, "chart.gif" );

       //--- первый скриншот
       string _photo_id;
       int err=bot.SendPhoto(_photo_id,ChannelID, "chart.gif" ,sparam);
       ChartSetSymbolPeriod (lparam, ChartSymbol (lparam), ChartPeriod (lparam));

       if ( ChartPeriod (lparam)!= PERIOD_H4 )
        {
         string _symbol= ChartSymbol (lparam);
         ChartScreenShot (_symbol, PERIOD_H4 , "chart.gif" , "BollingerBands" );
         string _photo_id2;
         int err2=bot.SendPhoto(_photo_id2,ChannelID, "chart.gif" ,sparam);
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ChartScreenShot ( long chart_id, const string file_name)
  {
//--- создать скриншот
   const int chart_width= 1280 ;
   const int chart_height= 623 ;

   FileDelete (file_name);
//---
   if ( ChartScreenShot (chart_id,file_name,chart_width,chart_height, ALIGN_RIGHT ))
     {
       //---
       ChartRedraw (chart_id);
       Sleep ( 500 );
       //--- waitng 30 sec for save screenshot
       int wait= 30 ;
       while (! FileIsExist (file_name) && --wait> 0 )
        {
         printf ( "Waiting %d sec ..." ,wait);
         Sleep ( 1000 );
         ChartRedraw (chart_id);
        }

       //--- check file
       if (! FileIsExist (file_name))
         printf ( "Failed to create a screenshot '%s'." ,file_name);
     }
   else
     {
       Print ( "ChartScreenShot error " , _LastError );
       return ( false );
     }
   return ( true );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ChartScreenShot ( const string _symbol,
                     const ENUM_TIMEFRAMES _tf,
                     const string file_name,
                     const string _template)
  {

//---
   long chart_id= ChartOpen (_symbol,_tf);
   ChartRedraw (chart_id);
   Sleep ( 155 );
//---     
   if ( StringLen (_template)> 0 )
       if (! ChartApplyTemplate (chart_id,_template))
         Print ( "Apply Template error: " , _LastError );

//--- создать скриншот
   const int chart_width= 1280 ;
   const int chart_height= 623 ;

   FileDelete (file_name);
//---
   if ( ChartScreenShot (chart_id,file_name,chart_width,chart_height, ALIGN_RIGHT ))
     {
       //---
       ChartRedraw (chart_id);
       Sleep ( 500 );

       //--- waitng 30 sec for save screenshot
       int wait= 30 ;
       while (! FileIsExist (file_name) && --wait> 0 )
        {
         printf ( "Waiting %d sec ..." ,wait);
         Sleep ( 1000 );
         ChartRedraw (chart_id);
        }

       //--- check file
       if (! FileIsExist (file_name))
         printf ( "Failed to create a screenshot '%s'." ,file_name);
     }
   else
     {
       Print ( "ChartScreenShot error " , _LastError );
       ChartClose (chart_id);
       return ( false );
     }

   ChartClose (chart_id);
   return ( true );
  }
//+------------------------------------------------------------------+ 
 
Alexey Viktorov :

Geçerli değer öncekinden daha yüksekse, yeşildir ve arabellek farklıdır, mql4'te ve tersi ise, o zaman ... tam tersi.))))

Teşekkürler, her şey açık.

 

Hepinize iyi günler. 50 enstrüman ticareti yapıyorum. Ticaret seviyeleri. 50 çizelge açmamak ve terminali yüklememek için işi yapılandırılan profiller üzerinden kurdum. Bu yüzden, tüm enstrümanlarda elle çizdiğim seviyeleri kullanacak ve belirli koşullar altında bana ekranda "Euro-dolara bakın, orada ilginç bir şey şekilleniyor" gibi bir işaret verecek bir asistan yazmak istiyorum. " Sanırım tüm enstrümanlardan tüm seviyelerin kopyalanacağı bir DLL yazmanız gerekiyor ve robotun çoklu para birimi olması gerekiyor.

Bu görevi nasıl yerine getireceğine dair bir fikri olan var mı?

DLL'deki profillerden veri nasıl çıkarılır?

not. Profile klasörüne baktım, tool klasörlerinde "chr" uzantılı dosyalar var. Not defteri ile açtım ve ihtiyacım olan tüm bilgileri gördüm. Nasıl böyle kullanırsın???

 
İyi günler, acemiyim ve programlamayı anlamıyorum, MT5 için Parabolik SAR göstergesine nokta olarak değil bir çizgi olarak gösterilmesine ihtiyacım var, bunu nasıl yapabilirim? Bana yardım et lütfen .
 
valeriikopp :
İyi günler, acemiyim ve programlamayı anlamıyorum, MT5 için Parabolik SAR göstergesine nokta olarak değil bir çizgi olarak gösterilmesine ihtiyacım var, bunu nasıl yapabilirim? Bana yardım et lütfen .

+

Dosyalar:
 

Merhaba! Yükselen yükseklere sahip bir dizi 4 çubuktan sonra tüm grafikte dikey çizgiler çizecek bir komut dosyası yazmaya çalışıyorum. Sonuç olarak, komut dosyası başlangıçta yalnızca bir satır çizer ve o kadar. Hata nerede? Yardım düzeltme

 void OnStart ()
 {
double bbup0,
       bbup1,
       bbup2,
       bbup3;
       int a= 0 ;
for (;a< Bars ;a++)
{
bbup0=High[a];
bbup1=High[a+ 1 ];
bbup2=High[a+ 2 ];
bbup3=High[a+ 3 ];

if ((bbup0<bbup1)&&(bbup1<bbup2)&&(bbup2<bbup3)) 
ObjectCreate ( 0 , "Line" , OBJ_VLINE , 0 ,Time[a], 0 );
 } 
}
 
pvba :

Merhaba! Yükselen yükseklere sahip bir dizi 4 çubuktan sonra tüm grafikte dikey çizgiler çizecek bir komut dosyası yazmaya çalışıyorum. Sonuç olarak, komut dosyası başlangıçta yalnızca bir satır çizer ve o kadar. Hata nerede? Yardım düzeltme

ad her satır için orijinal olmalıdır

hepsi için tek bir adın var

isme oluşturulma zamanını ekleyebilirsiniz

 
Iurii Tokman :

ad her satır için orijinal olmalıdır

hepsi için tek bir adın var

isme oluşturulma zamanını ekleyebilirsiniz

Çok teşekkürler!