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

 
-Aleks- :

Fonksiyonumda göster, nasıl yapabilirsin? Gerçekten anlamakta güçlük çekiyorum.


Fonksiyondan hangi değişkenlere ihtiyacınız olduğuna (ana program için) karar vermeniz ve bunları geçmeniz/almanız gerekir. Herkes gerekliyse, bu değişkenleri programın en başında bildirin ve aynı anda tüm işlevler tarafından görülebilirler.
 
-Aleks- :

Evet, "neden" diye düşünmeyin, "nasıl" diye düşünmek daha iyidir.

Bu özellikle ilgili olmadığını söylemiştim...

Bu tür işlevler kural olarak büyüktür ve bu nedenle farklı değerler elde etmek için bunları birkaç kez yürütmeye çağırmak üzücü, ancak tüm sonuçları bir kerede almak istiyorum.

Örneğin, bir seferde tüm lotların sayısını ve tüm siparişlerin sayısını, sipariş türüne göre ayrılmış olarak almak istiyorum.

 #property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
double n_Lot_BUY;
double n_Lot_SELL;
int n_Order_BUY;
int n_Order_SELL;

int OnInit ()
  {
   return ( INIT_SUCCEEDED );
  }
void OnDeinit ( const int reason)
  {
  }
void OnTick ()
  {
   F();
   Print ( "Лотов BUY:" ,n_Lot_BUY, "   Лотов SELL:" ,n_Lot_SELL, "   Позиций BUY:" ,n_Order_BUY, "   Позиций SELL:" ,n_Order_SELL);
  }
//+------------------------------------------------------------------+
void F()
  {
   n_Lot_BUY= 0 ;
   n_Lot_SELL= 0 ;
   n_Order_BUY= 0 ;
   n_Order_SELL= 0 ;
   for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
     {
       if (! OrderSelect (pos, SELECT_BY_POS , MODE_TRADES )){ break ;}
       if ( OrderType ()== 0 )
        {
         n_Order_BUY++;
         n_Lot_BUY=n_Lot_BUY+ OrderLots ();
        }
       if ( OrderType ()== 1 )
        {
         n_Order_SELL++;
         n_Lot_SELL=n_Lot_SELL+ OrderLots ();
        }
     }
  }
//+------------------------------------------------------------------+
 
Nikolay Gaylis :

Onlar. Buradaki fikir, tüm değişkenleri önceden bildirmek ve ardından bunları bir işlev aracılığıyla değiştirmek - anlıyorum, seçenek için teşekkürler. Ancak, aynı değişken türü için aynı değişken adı kullanılıyorsa, bu her zaman uygun değildir... başka seçenekler var mı?
 

aynı tür bir yapıda birleştirilebilir ve yukarıda önerildiği gibi bir dizi bildirilebilir )

 //структура из переменных
struct OrdStruct
   {
   double tp;
   double sl;
   double open;
   double close;
   double lot;
   datetime time_open; 
   datetime time_close;
   };

//массив структур
OrdStruct ORDERS[];


//обращение к переменным
ORDERS[i].sl= OrderStopLoss ();
ORDERS[i].tp= OrderTakeProfit ();
ORDERS[i].lot= OrderLots ();

//или
ORDERS[i]=ORDERS[i+ 1 ];

ZeroMemory (ORDERS[i]);
 
Taras Slobodyanik :

aynı tür bir yapıda birleştirilebilir ve yukarıda önerildiği gibi bir dizi bildirilebilir )

Zaten anlamak zor... örneğin, i'yi anlayamıyorum - neye eşittir ve ORDERS[i]= dizisinin boyutunu ayarlamamalı mıyım?

 
-Aleks- :

Zaten anlamak zor... örneğin, i'yi anlayamıyorum - neye eşittir ve ORDERS[i]= dizisinin boyutunu ayarlamamalı mıyım?


bu sadece bir örnek, tabi ki sipariş sayısına göre dizinin boyutunu belirtmem ve ayarlamam gerekiyor...

yani, değişkenler olduğu gibi aynı tp / sl / lot ... ama i dizi indeksi değişiyor

 
-Aleks- :

Acınızı görmek canımı yakıyor... Teknik bir forumdasınız, lütfen mantığınızı kullanın.

1. Görevi tanımlayın;

2. Hangi değişkenleri kullandığınızı açıklayın;

3. Çıktı olarak ne elde etmek istediğinizi açıklayın;

Teknik bir forumda düşüncelerinizi teknik dilde ifade etmeyi öğrenin. Aksi takdirde, burada uzun süre tahmin edebilirsiniz.

 
Taras Slobodyanik :


bu sadece bir örnek, tabi ki sipariş sayısına göre dizinin boyutunu belirtmem ve ayarlamam gerekiyor...

yani, değişkenler olduğu gibi aynı tp / sl / lot ... ama i dizi indeksi değişiyor

Evet anladım teşekkür ederim ilerde bir yerde uygulamaya çalışmam gerekecek ama anlamadım ama bu yapı ile dizi gibi çalışmak mümkün mü? Sıralamak ve diğer standart işlemleri gerçekleştirmek?

 
Alexey Kozitsyn :

Acınızı görmek canımı yakıyor... Teknik bir forumdasınız, lütfen mantığınızı kullanın.

1. Görevi tanımlayın;

2. Hangi değişkenleri kullandığınızı açıklayın;

3. Çıktı olarak ne elde etmek istediğinizi açıklayın;

Teknik bir forumda düşüncelerinizi teknik dilde ifade etmeyi öğrenin. Aksi takdirde, burada uzun süre tahmin edebilirsiniz.

Yaz, lütfen, sözlerimde mantık olmayan yere?

Bilgide eziyet - kararda zevk.

Sorunumu atmak istemedim, bu yüzden görevi basitleştirdim - algılama zorluğuna neyin neden olduğunu tahmin etmekte zorlanıyorum ... Size "eziyetimden" rahatsızlık hissi verdiğim için üzgünüm.

 
-Aleks- :

Onlar. Buradaki fikir, tüm değişkenleri önceden bildirmek ve ardından bunları bir işlev aracılığıyla değiştirmek - anlıyorum, seçenek için teşekkürler. Ancak, aynı değişken türü için aynı değişken adı kullanılıyorsa, bu her zaman uygun değildir... başka seçenekler var mı?

Burayı DİKKATLİCE okuyun ve her şeyi anlayacaksınız. Parametreleri referans olarak ileterek önerilen ilk seçeneği açıklar.

Basitçe söylemek gerekirse, bir fonksiyon çağrılırken, parametre ile bir değişken iletilebilir.

 double FirstMethod( int i, int j)

veya değişken adından önce & işareti geliyorsa referans olarak

 double SecondMethod( int &i, int &j)

ikinci varyantta, işleve referansla iletilen değişkenler, başka adlara sahip olan değişkenlerle birlikte değiştirilecektir. Belirli bir durumda, bunlar i ve j değişkenleridir.

Diğer her şey yardım metninden yeterince açıktır.

Передача параметров - Функции - Основы языка - Справочник MQL4
Передача параметров - Функции - Основы языка - Справочник MQL4
  • docs.mql4.com
Передача параметров - Функции - Основы языка - Справочник MQL4