OOP, mql5'te şablonlar ve makrolar, incelikler ve kullanım teknikleri - sayfa 15

 
Vict :

Fazla karmaşıklaştırdığım bir şey)).

Eh, muhtemelen ilk, en uygun olanı kullanmasına izin verin.

Sonuçta birkaç kez TEST yazmak sorun değil.

Bunu yine de beğenebilirsiniz, ancak yalnızca ters sırada her şey çağrılacak.

 #define LINE(dId) EA.AddDealsSettings(InDealType_ ##dId,InVolType_##dId,InVolume_##dId,InPrice_##dId,InVolCoeff_##dId,InClosePips_##dId,Mirror)

#define BLOCK1 LINE( 01 )
#define BLOCK2 LINE( 02 ); BLOCK1
#define BLOCK3 LINE( 03 ); BLOCK2
#define BLOCK4 LINE( 04 ); BLOCK3
#define BLOCK5 LINE( 05 ); BLOCK4
#define BLOCK6 LINE( 06 ); BLOCK5
#define BLOCK7 LINE( 07 ); BLOCK6
#define BLOCK8 LINE( 08 ); BLOCK7
#define BLOCK9 LINE( 09 ); BLOCK8
#define BLOCK10 LINE( 10 ); BLOCK9

#define SEND(dCount) do {BLOCK ##dCount;} while ( false )

void OnStart ()
  {
   SEND( 10 );
  }
 

hmm, klaveyi daha az çalmak için görevimi basitleştirmeyi düşündüm ama şimdi tüm örneklerle ilgilenmem gerekiyor

@Vladimir Simakov harika!

@Vict teşekkür ederim!

Not: Dürüst olmak gerekirse, bir makronun sadece ilk örneğini anlıyorum, gerisini içmedim bile (((

 
Igor Makanu :

hmm, klaveyi daha az çalmak için görevimi basitleştirmeyi düşündüm ama şimdi tüm örneklerle ilgilenmem gerekiyor

@Vladimir Simakov harika!

@Vict teşekkür ederim!

Not: Dürüst olmak gerekirse, bir makronun sadece ilk örneğini anlıyorum, gerisini içmedim bile (((

Önişlemcinin büyüsü denir)))

 
Vladimir Simakov :

Önişlemcinin büyüsü denir)))

Biliyorum, hiç uygulama olmadı ve bu nedenle eğitim yavaş (((

Bu kodu bir makroya sarmak mümkün mü?


 //--- input parameters
input ENUM_DEALTYPE        InDealType_01=BUY;             //1.------------------------------ Order ------------------------------
input int                   InPrice_01        =   000 ;     //Start price
input double                InVolume_01       =   0.01 ;     //Start Volume
input ENUM_VOLUMERATIO     InVolType_01=MultiplyAlways;   //Next operation with volume coefficient
input double                InVolCoeff_01     =   1.5 ;     //Volume coefficient
input ENUM_DISTANCERATIO   InDistType_01     =  NotMove; //Next price type
input double                InDistCoeff_01    =   1.23 ;     //Coefficient next open price
input int                   InDistShift_01    =   150 ;     //Shift next open price
input int                   InClosePips_01    =   200 ;     //TakeProfit>0 or StopLoss<0

input ENUM_DEALTYPE        InDealType_02=BUY;             //2.------------------------------ Order ------------------------------
input int                   InPrice_02        =   000 ;     //Start price
input double                InVolume_02       =   0.01 ;     //Start Volume
input ENUM_VOLUMERATIO     InVolType_02=MultiplyAlways;   //Next operation with volume coefficient
input double                InVolCoeff_02     =   1.5 ;     //Volume coefficient
input ENUM_DISTANCERATIO   InDistType_02     =  NotMove; //Next price type
input double                InDistCoeff_02    =   1.23 ;     //Coefficient next open price
input int                   InDistShift_02    =   150 ;     //Shift next open price
input int                   InClosePips_02    =   200 ;     //TakeProfit>0 or StopLoss<0

ve böylece 10 kez?

daha doğrusu, hala 8 kez kaldı ... ama onu optimize edicide ne zaman çalıştıracağımı bilmiyorum, parametre ekleyebilir veya kaldırabilirim, henüz kodu eklemedim (yorumlar aynı, ancak bir rakam farklıdır - ilk satır)

 
Igor Makanu :

Biliyorum, hiç uygulama olmadı ve bu nedenle eğitim yavaş (((

Bu kodu bir makroya sarmak mümkün mü?


ve böylece 10 kez? ve yorumlar aynı, ancak bir rakam farklı

Evet, sorun yok ama yorum yok. Evet ve bunları /* ... */ ile değiştirmek işe yaramaz, bu durumda derleyici bunu ayarlar tablosu için harici değişkenlerin metinsel açıklaması bağlamında algılamayı bırakır. Kontrol.

 
Vladimir Simakov :

Evet, sorun yok ama yorum yok. Evet ve bunları /* ... */ ile değiştirmek işe yaramaz, bu durumda derleyici bunu ayarlar tablosu için harici değişkenlerin metinsel açıklaması bağlamında algılamayı bırakır. Kontrol.

sonra pusu, yorumlar elle editlenmek zorunda kalacak .... genel olarak, testler için gidecek, bir incir daha hızlı, kodumu seçiyorum, düzenlemek çok zaman alıyor, ulaşamıyorum testçi...

sakıncası yoksa yorumsuz örnek yapınız



Not: belki fikir saçma ama sabahları kafamda zamanı büküyorum, görmek istediğim şey .... siparişler ızgarası optimize edicideyken, ancak nihai hedef farklı (I bazı sabit ızgara adımları yerine polinomu tutturmak istiyorum, böylece optimizer katsayıları çalıştırır, sonra belki de en fazla, ancak Taylor'ın satırları avlanmaya benziyor;)) ama önce ızgarayı optimize edicinin ne göstereceğini görmelisin, I genel olarak bir test poligonu hazırlıyorum )))

 
Igor Makanu :

Biliyorum, hiç uygulama olmadı ve bu nedenle eğitim yavaş (((

Bu kodu bir makroya sarmak mümkün mü?


ve böylece 10 kez?

daha doğrusu, hala 8 kez kaldı ... ama onu optimize edicide ne zaman çalıştıracağımı bilmiyorum, parametre ekleyebilir veya kaldırabilirim, henüz kodu eklemedim (yorumlar aynı, ancak bir rakam farklıdır - ilk satır)

Bu kodu oluşturacak (ve bir dosyaya veya panoya kaydedecek) küçük bir fonksiyon yazabilirsiniz.

 
Andrey Khatimlianskii :

Bu kodu oluşturacak (ve bir dosyaya veya panoya kaydedecek) küçük bir fonksiyon yazabilirsiniz.

iyi, geldi ve tüm şiirsel havayı yok etti, düzyazıda zor değil, şöyle bir şey:

 #property copyright "IgorM"
#property link        "https://www.mql5.com/ru/users/igorm"
#property version    "1.00"
#include <Files\FileTxt.mqh>
CFileTxt FOut;

#define   COUNT 10


const string code0[]=
  {
   "input ENUM_DEALTYPE        InDealType_" , "=BUY;            //" , ".------------------------------ Order ------------------------------"
  };

const string code1[]=
  {
   "input int                  InPrice_" , "        =  000;     //Start price" ,
   "input double               InVolume_" , "       =  0.01;    //Start Volume" ,
   "input ENUM_VOLUMERATIO     InVolType_" , "=MultiplyAlways;  //Next operation with volume coefficient" ,
   "input double               InVolCoeff_" , "     =  1.5;     //Volume coefficient" ,
   "input ENUM_DISTANCERATIO   InDistType_" , "     =  NotMove; //Next price type" ,
   "input double               InDistCoeff_" , "    =  1.23;    //Coefficient next open price" ,
   "input int                  InDistShift_" , "    =  150;     //Shift next open price" ,
   "input int                  InClosePips_" , "    =  200;     //TakeProfit>0 or StopLoss<0"
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {

   if (FOut.Open( __FILE__ + ".txt" , FILE_WRITE | FILE_COMMON )!= INVALID_HANDLE )
     {
       for ( int i= 0 ;i<COUNT;i++)
        {
         string N= IntegerToString (i, 2 , '0' );
         FOut.WriteString(code0[ 0 ]+N+code0[ 1 ]+ IntegerToString (i)+code0[ 2 ]+ "\n" );
         for ( int j= 0 ;j< 8 ;j++)
           {
            FOut.WriteString(code1[j* 2 ]+N+code1[j* 2 + 1 ]+ "\n" );
           }
        }
       printf ( "Write to file %s" ,FOut.FileName());
     }
   else printf ( "Open file error № %i" , GetLastError ());
  }
//+------------------------------------------------------------------+

))))

ama yine de tavsiyen için teşekkürler!

 
Vladimir Simakov :

Evet, sorun yok ama yorum yok. Evet ve bunları /* ... */ ile değiştirmek işe yaramaz, bu durumda derleyici bunu ayarlar tablosu için harici değişkenlerin metinsel açıklaması bağlamında algılamayı bırakır. Kontrol.

Belki yanlış bir şey yaptın? Yoksa makrolarda farklı bir davranış mı var?

 input double d1= 1.02 , /*Первая переменная double*/ d2= 3 ; /*Вторая переменная double*/
input double d3= 3.07 ; /*Третья переменная double*/
input int i1= 5 , /*Первая переменная int*/ i2= 7 ; /*Вторая переменная int*/
 
Alexey Viktorov :

Belki yanlış bir şey yaptın? Yoksa makrolarda farklı bir davranış mı var?

Evet, başka. Bunun nedeni, önişlemcinin ayrıştırıcıdan önce başlaması ve aptalca metni toplaması, makro içindeki açıklamaların ise önişlemci aşamasında atılmasıdır. Aynı zamanda makroda // çıkarsanız, kendi hatanız üzerinden şiddetli bir hata alabilirsiniz.