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

 
Vladimir Karputov :

Yazılmıştır: "... Adım 1 ..."

2. adımın üstünde - şimdi kendiniz düşünün, yani, ÇATIŞMA OLMADAN birkaç iş parçacığı nasıl TEK dosyaya yazabilir.


Evet, işin gerçeği şu ki, yapamazlar...

Ağ aracılarının dll'lerle çalışamayacağını anlıyorum?


Testçinin geçiş numarasını nasıl öğrenebilirim? O zaman dosyaları ne yapıştırırdı ...

 
Aleksey Vyazmikin :

Temsilcilere bir dosyaya yazmaları nasıl öğretilir? Artık herkes kendi klasöründe kendi dosyasını yaratıyor, bu iyi değil.

Aracı verilerini bir dosyaya yazmak için Çerçeve modunu kullanmanız gerekir.

 // Пример записи данных Агентов (включая Облачные) в один файл
input int Range = 0 ;

void OnTick ()
{
// ....
}

// Файл открываем только в режимах одиночночного прогона или Фрейма.
const int handle = (( MQLInfoInteger ( MQL_TESTER ) && ! MQLInfoInteger ( MQL_OPTIMIZATION )) || MQLInfoInteger ( MQL_FRAME_MODE )) ?
                   FileOpen ( __FILE__ , FILE_WRITE | FILE_TXT ) : INVALID_HANDLE ;

// Подготовка данных
void GetData( string &Str, MqlTick &Ticks[], double &Balance )
{
  Str = "Hello World!" ;
  
   CopyTicks ( _Symbol , Ticks, COPY_TICKS_ALL , 0 , 2 ); // Последние два тика (пример)
  
  Balance = AccountInfoDouble ( ACCOUNT_BALANCE );
}

// Запись данных
void SaveData( const string &Str, const MqlTick &Ticks[], const double Balance )
{
   FileWrite (handle, Str);
  
   for ( int i = 0 ; i < ArraySize (Ticks); i++)
     FileWrite (handle, Ticks[i].bid);
    
   FileWrite (handle, Balance);
}

void OnTesterDeinit ()
{
   if (handle != INVALID_HANDLE )  
     FileClose (handle);
    
   ChartClose ();
}

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

double OnTester ()
{
   string Str;
   MqlTick Ticks[];
   double Balance;
  
  GetData(Str, Ticks, Balance); // Подготовка данных для записи

   if ( MQLInfoInteger ( MQL_OPTIMIZATION )) // Оптимизация
  {
    CONTAINER< uchar > Container; // https://www.mql5.com/ru/forum/95447/page4#comment_5464205
    
    Container[ 0 ] = Str;
    Container[ 1 ] = Ticks;
    Container[ 2 ] = Balance;
  
     FrameAdd ( NULL , 0 , 0 , Container.Data); // Отправили данные из Агента на Терминал
  }
   else // Одиночный прогон
  {    
     if (handle != INVALID_HANDLE )
      SaveData(Str, Ticks, Balance); // Данные будут записаны в MQL5\Files-папку Агента (не Терминала)
    
     FileClose (handle);
  }
  
   return ( 0 );
}

void OnTesterPass ()
{    
   if (handle != INVALID_HANDLE )
  {
     ulong Pass;
     string Name;
     long ID;
     double Value;
  
    CONTAINER< uchar > Container; // https://www.mql5.com/ru/forum/95447/page4#comment_5464205
  
     while ( FrameNext (Pass, Name, ID, Value, Container.Data))
    {
       string Str;
       MqlTick Ticks[];
       double Balance;
      
       // Получили данные от Агента
      Container[ 0 ].Get(Str);
      Container[ 1 ].Get(Ticks);
      Container[ 2 ].Get(Balance);
      
//      FileWrite(handle, Pass);     // Если хочется записать номер прохода
      SaveData(Str, Ticks, Balance); // Данные будут записаны в MQL5\Files-папку Терминала (не Агента)
    }
  }
}
 
fxsaber :

Aracı verilerini bir dosyaya yazmak için Çerçeve modunu kullanmanız gerekir.


Teşekkür ederim! Çalışmak gerekir.

"Çerçeve Modu" nedir?

 
Aleksey Vyazmikin :

"Çerçeve Modu" nedir?

https://www.mql5.com/ru/docs/optimization_frames

Документация по MQL5: Работа с результатами оптимизации
Документация по MQL5: Работа с результатами оптимизации
  • www.mql5.com
Работа с результатами оптимизации - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Teşekkürler - rejim için anladım.

Ancak bu çerçevede 100 göstergeyi bir paket halinde aktarmak mümkün mü anlamadım? Neden bir karede - her kare, açıklamadan anladığım gibi ayrı bir geçiş olarak kabul edildiğinden, yoksa yanlış mı anladım?

Ve *.mqd dosya biçiminin açıklamasını nerede bulabilirsiniz?

 
Aleksey Vyazmikin :

Ancak bu çerçevede 100 göstergeyi bir paket halinde aktarmak mümkün mü anlamadım?

Yukarıdaki örneğe bakın. Keyfi veriler oraya herhangi bir miktarda aktarılır.

 
fxsaber :

Yukarıdaki örneğe bakın. Keyfi veriler orada herhangi bir miktarda iletilir.


Bir sürü soru, sana sorabilir miyim?

İşte koddaki fonksiyon

 // Подготовка данных
void GetData( string &Str, MqlTick &Ticks[], double &Balance )
{
  Str = "Hello World!" ;
  
   CopyTicks ( _Symbol , Ticks, COPY_TICKS_ALL , 0 , 2 ); // Последние два тика (пример)
  
  Balance = AccountInfoDouble ( ACCOUNT_BALANCE );
}

Anlamı açıktır - daha sonra kaydedeceğimiz verileri topluyoruz.

Değişkenleri neden parantez içinde belirttiğimizi tam olarak anlamıyorum ve bir değişkenin önündeki "&" işareti ne anlama geliyor?

 
Aleksey Vyazmikin :

Bir sürü soru, sana sorabilir miyim?

İşte koddaki fonksiyon

Anlamı açıktır - daha sonra kaydedeceğimiz verileri topluyoruz.

Değişkenleri neden parantez içinde belirttiğimizi tam olarak anlamıyorum ve bir değişkenin önündeki "&" işareti ne anlama geliyor?

Bunlar temel bilgiler. Resmi fonksiyon parametreleri ve referansa göre parametre geçişi hakkındaki yardımı okuyun.
 
Aleksey Vyazmikin :

Bir sürü soru, sana sorabilir miyim?

İşte koddaki fonksiyon

Anlamı açıktır - daha sonra kaydedeceğimiz verileri topluyoruz.

Değişkenleri neden parantez içinde belirttiğimizi tam olarak anlamıyorum ve bir değişkenin önündeki "&" işareti ne anlama geliyor?

Belgelerden


Basit tiplerin referans ve parametreleri ile geçmek mümkündür. Bu durumda, çağrılan fonksiyon içindeki bu tür parametrelerin modifikasyonu, referansla geçirilen karşılık gelen değişkenlere yansıtılacaktır. Bir parametrenin referans olarak iletildiğini belirtmek için & değiştiricisi veri türünden sonra yerleştirilmelidir.

Misal:

 void func( int & x, double & y, double & z[])
  {
   double calculated_tp;
   ...
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       if (i== ArraySize (z))       break ;
       if ( OrderSelect (i)== false ) break ;
      z[i]= OrderOpenPrice ();
     }
   x=i;
   y=calculated_tp;
Документация по MQL5: Основы языка / Переменные / Формальные параметры
Документация по MQL5: Основы языка / Переменные / Формальные параметры
  • www.mql5.com
Основы языка / Переменные / Формальные параметры - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin :
Bunlar temel bilgiler. Resmi fonksiyon parametreleri ve referansa göre parametre geçişi hakkındaki yardımı okuyun.

Belki temel, tartışmıyorum, sadece kodu giremiyorum, başlangıç nerede, son nerede ... bu yüzden sorular. Peki, bu bir bağlantı (?), ama neye?

" Str " değişkeni ilk olarak burada nereden geldi?

     while ( FrameNext (Pass, Name, ID, Value, Container.Data))
    {
       string Str;
       MqlTick Ticks[];
       double Balance;
      
       // Получили данные от Агента
      Container[ 0 ].Get(Str);
      Container[ 1 ].Get(Ticks);
      Container[ 2 ].Get(Balance);
      
//      FileWrite(handle, Pass);     // Если хочется записать номер прохода
      SaveData(Str, Ticks, Balance); // Данные будут записаны в MQL5\Files-папку Терминала (не Агента)
    }