[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 54

 

Ne tür sabitler: MA_TALKING_LONG, MA_TALKING_SHORT?

bunları nasıl beyan ediyorsunuz?

 
Vinin :

Değişkenlerin ve dizilerin görünürlüğünü düşünün


Globalde soruldu... aynı hata.

SSS :

Ne tür sabitler: MA_TALKING_LONG, MA_TALKING_SHORT?

bunları nasıl beyan ediyorsunuz?

 #define MA_TALKING_LONG                         0                              // Машки расположены к покупке
#define MA_TALKING_SHORT                         1                              // Машки расположены к продаже
#define MA_TALKING_FLAT                        - 1                              // Машки указывают на флет
 

bu GetStateMa() işlevinin başlığını (bildirimi) göster - sorun orada

GetStateMa(int signal){} üzerindeki düzeltme izin vermelidir

 
FAQ :

bu GetStateMa() işlevinin başlığını (bildirimi) göster - sorun orada

GetStateMa(int sinyali){} üzerindeki düzeltme izin vermelidir

Genel olarak, özü budur. Burada bir profesyonelim var. açıkça benim için çalıştı uzman tarafından düzeltildi. 4 farklı sinyal için sadece 1 siparişin açılması ve her sinyalin ayrı ayrı üretilmesi ve ayrı ayrı hesaplanması gibi bir görev vardı. Uzman tarafından beni düzeltti ama mantığı karıştırdı.

Bu yüzden kodunu incelemeye başladım ... Baktığım ikinci gün sadece acımasızca yazıyor.

Ondan önce şöyleydi:

başlangıçta:

   int signal[ 4 ];
   CalcSignals(signal);

   if (!Trade(signal))
       return ( 0 );

Ancak neyin ne olduğu netleşecek olan işlevler:

 //+-------------------------------------------------------------------------------------+
//| Получение значений МА на двух соседних барах                                        |
//+-------------------------------------------------------------------------------------+
double GetCurAndPrevMA( int maPeriod, double & prevMA)
{
   prevMA = iMA ( NULL , i_trading_TF, maPeriod, 0 , MODE_EMA , MODE_CLOSE, 1 );
   return ( iMA ( NULL , i_trading_TF, maPeriod, 0 , MODE_EMA , MODE_CLOSE, 0 ));
}
//+-------------------------------------------------------------------------------------+
//| Получение положения машек между собой                                               |
//+-------------------------------------------------------------------------------------+
void CalcSignals( int & signal[])
{
   double ema365_1;
   double ema365_0 = GetCurAndPrevMA( 365 , ema365_1);

   for ( int i = 0 ; i < 4 ; i++)
   {
       double ema1;
       double ema0 = GetCurAndPrevMA(g_maPeriod[i], ema1);
      signal[i] = SIGNAL_NO;

       if (ema1 < ema365_1 && ema0 > ema365_0)
         signal[i] = SIGNAL_BUY;
       if (ema1 > ema365_1 && ema0 < ema365_0)
         signal[i] = SIGNAL_SELL;
   }
}

Genel olarak, işlevin nedeni olduğunu görmek çılgınca. void'in tanım gereği hiçbir şey döndürmemesi gerekir, ancak yine de sinyal[i] dizi öğesinin değerini döndürür.

Merak ediyorum, bu genellikle deneyimli programcılar tarafından mı kullanılıyor? Yoksa zaten çok mu fazla?

Şu anda o Expert Advisor'da bulunan hileleri görerek ihtiyacım olanı yazmaya çalışıyorum. Çünkü diziler olmadan yapamazsınız.

 
Тhoz :

Genel olarak, özü budur. Burada bir profesyonelim var. açıkça benim için çalıştı uzman tarafından düzeltildi. 4 farklı sinyal için sadece 1 siparişin açılması ve her sinyalin ayrı ayrı üretilmesi ve ayrı ayrı hesaplanması gibi bir görev vardı. Uzman tarafından beni düzeltti ama mantığı karıştırdı.

Bu yüzden kodunu incelemeye başladım ... Baktığım ikinci gün sadece acımasızca yazıyor.

Ondan önce şöyleydi:

başlangıçta:

Ancak neyin ne olduğu netleşecek olan işlevler:

Genel olarak, işlevin nedeni olduğunu görmek çılgınca. void'in tanım gereği hiçbir şey döndürmemesi gerekir, ancak yine de sinyal[i] dizi öğesinin değerini döndürür.

Merak ediyorum, bu genellikle deneyimli programcılar tarafından mı kullanılıyor? Yoksa zaten çok mu fazla?

Şu anda o Expert Advisor'da bulunan hileleri görerek ihtiyacım olanı yazmaya çalışıyorum. Çünkü diziler olmadan yapamazsınız.

Sıklıkla kullanılır, int & , double & 'da secret
 
Mislaid :
Sıklıkla kullanılır, int & , double & 'da secret

Bunu zaten anladım, ama bence bu zaten bir sapkınlık. O zaman neden bir void işlevi yapsın? Bu mantıklı değil. Bir şey döndürmeniz gerekiyor .. int , double türünde bir işlev aracılığıyla geri dönün ...

 
Hata ayıklama sırasında bir hata oluştu:
 2013.01 . 06 21 : 06 : 32      2011.11 . 28 00 : 20   Base150 EURUSD,M5: not enough stack for parameter

Nasıl olunur?

 
hoz :

Bunu zaten anladım, ama bence bu zaten bir sapkınlık. O zaman neden bir void işlevi yapsın? Bu mantıklı değil.

Bu mantıklı.

Bu fonksiyon hiçbir şey döndürmez, kendisine iletilen dizinin elemanları üzerinde işlem yapar.

 
hoz :

İşte bekleyen sipariş değiştirme fonksiyonum. Değişiklik yaparken, yeni bir fiyat ve yeni bir stop loss belirledim. İşlev kısmen çalışıyor, ancak bazı nedenlerden dolayı test cihazında hatalar 1 görünüyor.

İşlevim doğru yazılmış mı?

if((b_mod) && (priceB > Sor)) OrderModify(b_ticket,priceB,priceS,0,0,Brown);
if((s_mod) && (priceS < Bid)) OrderModify(s_ticket,priceS,priceB,0,0,Brown);


Burada MarketInfo( Symbol() ,MODE_STOPLEVEL) durma seviyesini, yani.

fiyatB >= Sor+ MarketInfo(Symbol(),MODE_STOPLEVEL)*Puan

fiyatS <=Teklif- MarketInfo(Symbol(),MODE_STOPLEVEL)*Puan

 
PapaYozh :

Bu mantıklı.

Bu fonksiyon hiçbir şey döndürmez, kendisine iletilen dizinin elemanları üzerinde işlem yapar.


Öğeler double veya int türünde bir işleve geçirilirse, aynı işlemleri saptırma olmadan da gerçekleştirebilir. Neden hayatı karmaşıklaştırıyorsun?