[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 667

 
artmedia70 :

Arkadaşlar neden çalışmıyor anlayamıyorum:

Döngüde magic 5100 ile bir konum bulunursa, döngü yeni bir yinelemeye gitmelidir:

...ama bu olmuyor ve magic 5100 ile seçilen pozisyon en kârsız olan olarak ilerideki hesaplamalara katılmaya başlıyor...

Ve bu sadece bir kilitleme ... Ve buna göre, üzerine başka bir kilitleme takılıyor ...

Köpeğin nerede karıştırdığını anlamaya yardımcı olun ...

Hayır teşekkürler, gerek yok. köpeği buldum...
 

Şimdiye kadar, tek bir çıktı değeriyle sonuçlanan basit fonksiyonlarla çalıştım.

Bir fonksiyon, birden çok değişkenin değerlerini döndürebilir mi? Örneğin: Time_1, High_1, Low_1, Time_2, High_2, Low_2.

Teşekkür ederim!

 
chief2000 :

Bir fonksiyon birden çok değişkenin değerlerini döndürebilir mi?


Bir işlev yalnızca bir parametre döndürebilir, ancak hiç kimse bir işlevin start() işlevinin ( global değişkenler ) dışında bildirilen değişkenlerle çalışmasını yasaklamaz.
 
DDFedor :

Bir işlev yalnızca bir parametre döndürebilir, ancak hiç kimse bir işlevin start() işlevi (global değişkenler) dışında bildirilen değişkenlerle çalışmasını yasaklamaz.


Basit bir örnek verelim - eğer [MA_1>=Ma_2] ise, Time_1, High_1, Low_1 değerlerini döndürmek gerekir

hareketli ortalamaların kesiştiği çubuk için. start() içindeki bu modül

 
chief2000 :


Sağ?


Sağ. ancak fonksiyon tekrar çağrılana kadar bu tür değişkenlerin değerlerinin alakalı olduğunu unutmayın. bu nedenle değişkenler işlev çağrısından hemen sonra kullanılmalıdır. daha sonra değişkenler, BU fonksiyon çağrısı için hesaplanan değerleri içerecektir.
 
DDFedor :

Sağ. ancak fonksiyon tekrar çağrılana kadar bu tür değişkenlerin değerlerinin alakalı olduğunu unutmayın. bu nedenle, işlev çağrısından sonra değişkenler HEMEN kullanılmalıdır. daha sonra değişkenler, BU fonksiyon çağrısı için hesaplanan değerleri içerecektir.

Evet, bu anlaşılabilir. Teşekkür ederim!

 
chief2000 :

Şimdiye kadar, tek bir çıktı değeriyle sonuçlanan basit fonksiyonlarla çalıştım.

Bir fonksiyon birden çok değişkenin değerlerini döndürebilir mi? Örneğin: Time_1, High_1, Low_1, Time_2, High_2, Low_2.

Ve fonksiyon bildiriminde parametreyi değere göre değil referansa göre geçirmenizi engelleyen nedir? Örnek (Dil Temelleri/Değişkenler/Biçimsel Parametreler):

Parametreleri referans olarak geçmek mümkündür. Bu durumda, bu tür parametrelerin modifikasyonu, çağrılan fonksiyondaki karşılık gelen değişkenlere referansla aktarılacaktır. Dizi öğeleri başvuru yoluyla iletilemez. Referansa göre parametreler sadece tek bir modül içinde geçirilebilir; bu olasılık kütüphane fonksiyonları için sağlanmamıştı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[])
  {
   çift hesaplanmış_tp;
   ...
   for(int i=0; i<SiparişToplam(); i++)
     {
      if(i==ArraySize(z)) kesme;
      if(OrderSelect(i)==yanlış) ara;
      z[i]=OrderOpenPrice();
     }
   x=i;
   y=hesaplanmış_tp;
  }

Diziler referans yoluyla da geçirilebilir, tüm değişiklikler orijinal diziye yansıtılacaktır. Basit parametrelerden farklı olarak, diziler referansa ve kütüphane fonksiyonlarına iletilebilir.

func() işlevinin void türünde olduğuna dikkat edin, ancak yürütülmesinin bir sonucu olarak, bunun dışında bildirilen üç parametrenin tümü değişecektir, çünkü üçü de & değiştirici ile sağlanır. Bu arada, z[] dizisi de dahil olmak üzere tamamen değişir.
 
Mathemat :

Ve fonksiyon bildiriminde parametreyi değere göre değil referansa göre geçirmenizi engelleyen nedir? Örnek (Dil Temelleri/Değişkenler/Biçimsel Parametreler):

func() işlevinin void türünde olduğuna dikkat edin, ancak yürütülmesinin bir sonucu olarak, bunun dışında bildirilen üç parametrenin tümü değişecektir, çünkü üçü de & değiştiricisi ile sağlanır. Bu arada, z[] dizisi de dahil olmak üzere tamamen değiştirilir.

Çok teşekkürler!

 
Nasıl yapılır! Son anlaşma kârsızsa, partiyi değiştirmeniz gerekir, değilse hayır)?
 
rovlent :
Nasıl yapılır! Son anlaşma kârsızsa, partiyi değiştirmeniz gerekir, değilse hayır)?


Örneğin bunun gibi

 //=================================================
// Расчет размера позиции
//==================================================
double CalculateLots(){
   double Res=dLots;
   bool bProfit= true ;
   int PrevTime=- 1 ;
   double tmpLots;
   for ( int i= 0 ;i<OrdersHistoryTotal();i++){
       if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue ;
       if (OrderSymbol()!=Symbol())                     continue ;
       if (OrderMagicNumber()!=MAGIC)                   continue ;
       if (OrderCloseTime()<PrevTime)                   continue ;
      PrevTime=OrderCloseTime();
       if (OrderProfit()> 0 ) bProfit= true ; else bProfit= false ;
      tmpLots=OrderLots();
   }
   double Lots_Step=MarketInfo(Symbol(), MODE_LOTSTEP);
   if (!bProfit) Res=tmpLots+Lots_Step;
   return (Res);
}

DC tarafından ayarlanan adımla artar. Seçenekler değişse de

dLots - varsayılan konum boyutu

Neden: