Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1340

 
Böylece senaryonun ortaya çıktığı ortaya çıktı.
 void OnStart ()
  {
   int Target= 6 ;       //Количество тайм-фреймов
   int Counter_UP= 0 ;   //Счетчик нахождения цены над МА
   int Counter_DOWN= 0 ;
   int MA = 200 ;       //Период МА
   double bufer_MA[];   //Буфер для хендла
   ENUM_TIMEFRAMES frame1[ 10 ];   //Битная маска тайм-фреймов
//___________________int битная маска ENUM  Массив таймфреймов__________________________________________
   frame1[ 1 ]= 1 ;
   frame1[ 2 ]= 5 ;
   frame1[ 3 ]= 15 ;
   frame1[ 4 ]= 30 ;
   frame1[ 5 ]= 16385 ;
   frame1[ 6 ]= 16388 ;
   frame1[ 7 ]= 16408 ;
   frame1[ 8 ]= 32769 ;
   frame1[ 9 ]= 49153 ;
//____________________________________________________________________________________________________________

   int KollSymbols = SymbolsTotal ( true );   //Колл. символов в маркет вотч
   Alert ( "Колл.Инстр = " ,KollSymbols);
//---
   int MA200;   //Переменная для хендла
   for ( int i= 0 ; i<KollSymbols; i++) //Перебераем все символы из маркет вотч
     {
       string symbol = SymbolName (i, true );   //Выбираем имя символа из маркет вотч
     // Alert("symbol = ",symbol,"i= ",i);
       for ( int I= 1 ; I<=Target; I++)   //Перебераем таймфреймы
        {
         MA200 = iMA (symbol,frame1[I],MA, 0 , MODE_EMA , PRICE_MEDIAN );   //хендл на выбранном тайме
         CopyBuffer (MA200, 0 , TimeCurrent (), 5 ,bufer_MA); // заполнение масива bufer_MA хендлом MA200 выбранного тайма

         ArraySetAsSeries (bufer_MA, true );   //Разворачиваем массив как в тайм-серии

         //Alert("Символ - ",symbol,"i= ",i);
         // Alert("Simbol = ",symbol," bufer_MA[1] = ",bufer_MA[1]);
         if ( iClose (symbol,frame1[I], 1 ) > bufer_MA[ 1 ])   //Если цена 1 баре, на выбранном символе и тайме, БОЛЬШЕ цены скользяхи на 1 баре
           {
             //Alert("iClose= ",iClose(symbol,frame1[I],1), " bufer_MA[1]= ",bufer_MA[1]);
            Counter_UP++;
             if (Counter_UP==Target)
               Alert ( "Инструмент для наблюдения в покупки - " ,symbol);

             ArrayFree (bufer_MA);       //Очистка буфера индикатора
         
           }
         else
           {
             ArrayFree (bufer_MA);       //Очистка буфера индикатора
           }
         IndicatorRelease (MA200); //Удаление хендла
        }
      Counter_UP= 0 ;
      Counter_DOWN= 0 ;
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

normlarda çalışır. Ve 22 instr. işlemleri oldukça uzun bir süre min 5. Bu garip olsa da. Zamanının çoğunu diziye tutamacı yazarak geçiriyor. Profil Özeti


Soru. Listeden 22 enstrüman için 132 kez kopyalama yapılmasına rağmen, tanıtıcıdan diziye 5 değeri kopyalamak neden bu kadar zaman alıyor? Yani, 273 enstrüman için 1632 kez kopyalamanız ve tüm enstrümanların geçmişini sabit bir bilgisayara yüklemeniz gerekecek.

 
Fast235 # :

tanıtıcı oluşturma ve silme hakkında,

işe yarıyor, nasıl doğru olacağı ile ilgileniyorum, umarım geliştiriciler der ki

İşte tam da bunu yapıyorum, yukarıdaki koda bakın, sorular da var))

 
Kira27 # :
Böylece senaryonun ortaya çıktığı ortaya çıktı.

normlarda çalışır. Ve 22 instr. işlemleri oldukça uzun bir süre min 5. Bu garip olsa da. Zamanının çoğunu diziye tutamacı yazarak geçiriyor. Profil Özeti


Soru. Listeden 22 enstrüman için 132 kez kopyalama yapılmasına rağmen, tanıtıcıdan diziye 5 değeri kopyalamak neden bu kadar zaman alıyor? Yani, 273 enstrüman için 1632 kez kopyalamanız ve tüm enstrümanların geçmişini sabit bir bilgisayara yüklemeniz gerekecek.

Eğer hiçbir şeyi mahvetmediysen.

İyi çalışıyor gibi görünüyor, alıntılar yüklenirse yavaşlamıyor. İlk lansman çok uzun, görünüşe göre alıntılar indiriliyor.

 //+------------------------------------------------------------------+
void OnStart ()
  {
   int Target = 6 ;     //Количество тайм-фреймов
   int Counter_UP = 0 ; //Счетчик нахождения цены над МА
   int Counter_DOWN = 0 ;
   int MA = 200 ;       //Период МА
   double bufer_MA[];   //Буфер для хендла
   int MA200[][ 9 ];   //Переменная для хендла
   string symbol[];

   ENUM_TIMEFRAMES frame1[ 9 ];   //Битная маска тайм-фреймов
//___________________int битная маска ENUM  Массив таймфреймов__________________________________________
   frame1[ 0 ] = 1 ;
   frame1[ 1 ] = 5 ;
   frame1[ 2 ] = 15 ;
   frame1[ 3 ] = 30 ;
   frame1[ 4 ] = 16385 ;
   frame1[ 5 ] = 16388 ;
   frame1[ 6 ] = 16408 ;
   frame1[ 7 ] = 32769 ;
   frame1[ 8 ] = 49153 ;
//____________________________________________________________________________________________________________

   int KollSymbols = SymbolsTotal ( true );   //Колл. символов в маркет вотч
   Print ( "Колл.Инстр = " , KollSymbols);
   int res = 0 ;
   for ( int i = 0 ; i < KollSymbols; i++)
     {
       for ( int I = 0 ; I < 9 ; I++) //Перебераем таймфреймы
        {
         ArrayResize (MA200, i + 1 );
         ArrayResize (symbol, i + 1 );
         symbol[i] = SymbolName (i, true ); //Выбираем имя символа из маркет вотч
         MA200[i][I] = iMA (symbol[i], frame1[I], MA, 0 , MODE_EMA , PRICE_MEDIAN ); //хендл на выбранном тайме
         if (MA200[i][I] == INVALID_HANDLE )
             PrintFormat ( "Инвалид хэндл, символ %s, тайм %d" , symbol[i], frame1[I]);
         res++;
        }
     }
   Print ( "Создано хэндлов = " + ( string )res);

//---
   for ( int i = 0 ; i < KollSymbols; i++)
     {
       for ( int I = 0 ; I < 9 ; I++) //Перебераем таймфреймы
        {
         int size = CopyBuffer (MA200[i][I], 0 , 1 , 1 , bufer_MA); // заполнение масива bufer_MA хендлом MA200 выбранного тайма
         PrintFormat ( "Скопировано %d, символ %s, тайм %d" , size, symbol[i], frame1[I]);
         if (size > 0 )
             if ( iClose (symbol[i], frame1[I], 1 ) > bufer_MA[ 0 ]) //Если цена 1 баре, на выбранном символе и тайме, БОЛЬШЕ цены скользяхи на 1 баре
              {
               Counter_UP++;
              }
        }
     }
   Print ( "Counter_UP = " + ( string )Counter_UP);
  }
//+------------------------------------------------------------------+
 
Kira27 # :

Komut dosyasının anlamı, piyasa saatinden her enstrümanı 1 dakikadan 4 saate kadar olan zaman dilimlerinde sıralamaktır.

Bunu yapsaydım, bir dizi oluşturur ve mevcut olanı güncelleyerek geçmiş verileri içinde saklardım. Bu, ağır döngülerden ve CopyBuffer'dan kaçınacaktır. Her şey uçacak.

 
Aleksandr Slavskii # :

Eğer hiçbir şeyi mahvetmediysen.

İyi çalışıyor gibi görünüyor, alıntılar yüklenirse yavaşlamıyor. İlk lansman çok uzun, görünüşe göre alıntılar indiriliyor.

Yanıt için teşekkürler ve performans sürümünüz için deneyeceğim)! Programın bitiminden önce neden tutamaçları silmiyorsunuz anlamıyorum? Veya programın sonunda otomatik olarak silinirler. Görev yöneticisi tarafından değerlendirilen operatör serbest bırakılmasa da.

 
Aleksei Stepanenko # :

Bunu yapsaydım, bir dizi oluşturur ve mevcut olanı güncelleyerek geçmiş verileri içinde saklardım. Bu, ağır döngülerden ve CopyBuffer'dan kaçınacaktır. Her şey uçacak.

Teşekkür ederim! Onu da düşüneceğim)

 
Kira27 # :

Yanıt için teşekkürler ve performans sürümünüz için deneyeceğim)! Programın bitiminden önce neden tutamaçları silmiyorsunuz anlamıyorum? Veya programın sonunda otomatik olarak silinirler. Görev yöneticisi tarafından değerlendirilen operatör serbest bırakılmasa da.

Görünüşe göre bir yerde, betiğin tamamlanmasının ardından gösterge tutamaçlarının belirli bir süre sonra silindiğini okudum. Ama tam olarak öyle değil.

 
İyi! lütfen söyle sonra nasıl   MQL5'te bir Expert Advisor'ı test ederken, fareyi okların üzerine getirdiğinizde bir açılır pencerede istatistiklerinizden herhangi birini görüntüleyin?
 

Merhaba

terminalde doğrusal bir regresyon aracı var

aynı kanalı grafik nesnelerle çizen scriptler var

ancak sadece merkez çizgisi doğru çizilir ve sapma çizgileri merkezden yanlış mesafede çizilir

terminaldeki gibi olacak şekilde sapmayı hesaplamak için doğru formülü bilen varsa söyle

yada çözebilen var mı

TEŞEKKÜR EDERİM

 

Merhaba!

Lütfen AMarkets komisyoncusu ile test ederken OrderSend işlevinin kripto para biriminde neden çalışmadığını söyleyin. Yönetmeliklere göre, kriptoda ticaret danışmanları hakkında bir yasak bulamadım. Ya da belki kodda hatalar var? GetLastError 4756 hatası veriyor

 #property copyright "qwerty"
#property link        "qwerty@list.ru"
#property version    "1.00"
//-----------------
//-----------------
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\AccountInfo.mqh>
//-----------------
//-----------------
CPositionInfo  aPosition;
CTrade         aTrade;
CSymbolInfo    aSymbol;
CAccountInfo   aAccount;
//-----------------
//-----------------

int       Slippage      = 3000 ;
//---
//---------------------------------
//------пробные переменные
double LotsCrypto = 0 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   if (!aSymbol.Name( Symbol ()))
       return ( INIT_FAILED );
   RefreshRates();
//---устанавливаем допустимое проскальзывание
   aTrade.SetDeviationInPoints(Slippage);
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
  RefreshRates();
   LotsCrypto = 0.1 ;
   if (OpenSellPosition(aSymbol.Name(), LotsCrypto, NULL , Slippage, ORDER_FILLING_RETURN ))
       Print ( "Ура" );  
   Comment ( "Symbol.Name = " + string (aSymbol.Name()) + "\n" +
           "Ask = " +   string (aSymbol.Ask()) + "\n" +
           "GetLastError = " +   string ( GetLastError ()) + "\n" +
           "LotsCrypto = " +   string (LotsCrypto));

}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//+ Обновление котировок                                             +
//+------------------------------------------------------------------+
bool RefreshRates()
  {
   if (!aSymbol.RefreshRates())
     {
       Print ( "Не удалось обновить котировки валютной пары!" );
       return ( false );
     }
   if (aSymbol.Ask() == 0 || aSymbol.Bid() == 0 )
       return ( false );
   return ( true );
  }

//+------------------------------------------------------------------+
bool OpenSellPosition( string symbol, double volume, string comment= "" , ulong deviation= 1000 , ENUM_ORDER_TYPE_FILLING filling= ORDER_FILLING_FOK )
  {
   MqlTradeRequest Request;
   MqlTradeResult Results;
   ZeroMemory (Request);
   ZeroMemory (Results);
   Request.price= SymbolInfoDouble ( _Symbol , SYMBOL_BID );
   Request.action= TRADE_ACTION_DEAL ;
   Request.type= ORDER_TYPE_SELL ;
   Request.symbol=symbol;
   Request.volume=volume;
   Request.deviation=deviation;
   Request.comment=comment;
   Request.type_filling=filling;
   bool res= false ;
   res= OrderSend (Request,Results);
   if (res)
     {
       if (Results.deal> 0 )
         return ( true );
       else
         return ( false );
     }
   return ( false );
  }
//+------------------------------------------------------------------+