Build 600+ için göstergeler nasıl yükseltilir? - sayfa 2

 
çünkü bir nedenden dolayı (muhtemelen bir hata) diziler başlatılmadı
 
qjol :
çünkü bazı resion için (muhtemelen bir hata) diziler başlatılmaz


Şimdiye kadar 'T3MA' ve 'HMA' için değer almıyorum.

Muhtemelen bu, bu EA'nın her ikisi de içinde kullanıldığı için herhangi bir sipariş açmamasının nedeni budur.

Yoksa EA'da herhangi bir hata mı yaptım?

Dosyalar:
xxp.mq4  5 kb
 
Arav007 :


Şimdiye kadar 'T3MA' ve 'HMA' için değer almıyorum.

sana söylemiştim

qjol :
çünkü bazı nedenlerden dolayı (muhtemelen bir hata) diziler başlatılmamış

Muhtemelen bu, bu EA'nın her ikisi de içinde kullanıldığı için herhangi bir sipariş açmamasının nedeni budur.

bilmiyorum belki, muhtemelen, belki, mümkün, muhtemel, makul

Yoksa EA'da herhangi bir hata mı yaptım?

Öyle düşünmüyorum

 
Arav007 :


Evet haklısın. Ama neden?

Bunları SDC'nin dediği gibi derledim ve '0' Hata veya Uyarı buldum.

O zaman onları B-600+'a yükseltmek için ne yapabilirim?

HMA.mq4'te bir hata var, init() içindeki bu satırı değiştirin:

   if (! SetIndexBuffer ( 0 ,ind_buffer0) && ! SetIndexBuffer ( 1 ,ind_buffer1))

ile
   if (! SetIndexBuffer ( 0 ,ind_buffer0) || ! SetIndexBuffer ( 1 ,ind_buffer1))
 
qjol :



Bu EA, hem 'T3MA' hem de 'HMA'nın iyi çalıştığı Yapı 509'da bile herhangi bir Ticaret açmıyor.

O zaman sebep ne olabilir?

 

T3MA.mq4'teki benzer hata şu şekilde değiştirin:

   if (
      ! SetIndexBuffer ( 0 ,e7) ||
      ! SetIndexBuffer ( 1 ,e2) ||
      ! SetIndexBuffer ( 2 ,e3) ||
      ! SetIndexBuffer ( 3 ,e4) ||
      ! SetIndexBuffer ( 4 ,e5) ||
      ! SetIndexBuffer ( 5 ,e6) ||
      ! SetIndexBuffer ( 6 ,e1)
      )

Bunlar derleyicinin yakalayamadığı mantıksal hatalardır.

Bu hatalar yapı 509'da zaten mevcuttur, ancak SetIndexBuffer'ın yanlış olma şansı çok az olduğundan bir soruna yol açmaz. Şimdi bu değişiklik nedeniyle bir sorun:

Shortened conditions check is now used in logical operations, unlike the old MQL4 version where all expressions have been calculated and the check has been performed afterwards. Suppose there is a check of two conditions with the use of logical AND

   if (condition1 && condition2)
    {
     // some block of operations
    }

koşul1 ifadesi false ise, false && true sonucu hala false değerine eşit olduğundan, koşul2 ifadesinin hesaplanması gerçekleştirilmez.


 
angevoyageur :

T3MA.mq4'teki benzer hata şu şekilde değiştirin:

Bunlar derleyicinin yakalayamadığı mantıksal hatalardır.

Çok teşekkürler efendim.

Evet, bunlar Hatalardı ve şimdi çalışıyorlar. :)

Bu göstergelerin çalışmasına rağmen EA'nın neden herhangi bir sipariş açmadığına bir bakabilir misiniz?

Saygılarımızla

 
Arav007 :


Bu göstergelerin çalışmasına rağmen EA'nın neden herhangi bir sipariş açmadığına bir bakabilir misiniz?



EA kodunuzu gösterin
 
qjol :

EA kodunuzu gösterin


İşte burada:

extern double     LotSize= 0.01 ;
extern double     StopLoss= 15.0 ;
extern double     TakeProfit= 20.0 ;
extern int        iMaxOrders= 10 ;
extern int        Slippage= 5 ;
extern int        MagicNumber= 814 ;


extern int        iOrderType_Buy= 0 ;
extern int        iOrderType_Sell= 1 ;


int BuyOrder;
int SellOrder;

int iOpenOrders_Sell;
int iOpenOrders_Buy;

int iLastError;


double dPip;
double dStopLossPrice, dTakeProfitPrice;


//+------------------------------------------------------------------+
#define MODE_DEMA     4
#define MODE_TEMA     5
#define MODE_T3MA     6
#define MODE_JMA     7
#define MODE_HMA     8
#define MODE_DECEMA   9
#define MODE_SALT     10
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
extern    int       MA_Period               = 34 ;
extern    int       MA_Type                 = MODE_HMA;
extern    int       MA_Applied              = PRICE_CLOSE ;
extern    double    T3MA_VolumeFactor       = 0.8 ;
extern    double    JMA_Phase               = 0.0 ;
extern    int       Step_Period             = 3 ;
extern    int       BarsCount               = 100 ;
extern    bool      DebugMode               = false ;
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{

if ( Digits == 3 ){
        dPip = 0.01 ;
} else {
        dPip = 0.0001 ;
}

return ( 0 );

}

int deinit()
{

Comment ( "" );
return ( 0 );

}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+



int start()
{

   double   signal = iCustom ( NULL , 0 , "xpMA" ,MA_Period,MA_Type,MA_Applied ,T3MA_VolumeFactor,JMA_Phase,Step_Period,DebugMode, 3 , 0 );
   
   bool BuyCondition = false , SellCondition = false , CloseBuyCondition = false , CloseSellCondition = false ; 
   
   if (signal== 1 )
       BuyCondition = true ;
       
   if (signal==- 1 )
      SellCondition = true ;

///////////////////////////// Checking Buying Condition
if (BuyCondition)
{               
                 double OpenPrice= Ask ;

                
                dStopLossPrice = NormalizeDouble (OpenPrice - StopLoss * dPip, Digits );
                dTakeProfitPrice = NormalizeDouble (OpenPrice + TakeProfit * dPip, Digits );
                

                BuyOrder= OrderSend ( Symbol () , iOrderType_Buy , LotSize,OpenPrice,Slippage ,dStopLossPrice ,dTakeProfitPrice , "Buy Order" ,MagicNumber , 0 ,Blue);
                
                
                 if (BuyOrder> 0 ) {
                                 Print ( "Buy Order was Opened" );
                                iLastError = 0 ;
                        }
                         else
                        {                       
                                iLastError = GetLastError();                    
                        
                        }
        
}
        

if (SellCondition)
{       
                OpenPrice= Bid ;
                
                dStopLossPrice = NormalizeDouble (OpenPrice + StopLoss * dPip, Digits );
                dTakeProfitPrice = NormalizeDouble (OpenPrice - TakeProfit * dPip, Digits );

                SellOrder= OrderSend ( Symbol () , iOrderType_Sell , LotSize,OpenPrice,Slippage ,dStopLossPrice ,dTakeProfitPrice , "Sell Order" ,MagicNumber , 0 ,Red);
                
                
                 if (SellOrder> 0 ) {
                                 Print ( "Sell Order was opened" );
                                iLastError = 0 ;
                        } else {
                                iLastError = GetLastError();
                        
                        }               
        }
                


return ( 0 );

}
 

iÖzel

Belirtilen özel göstergeyi hesaplar ve değerini döndürür.

çift iCustom (
sicim sembol , // sembol
int zaman aralığı , // zaman aralığı
sicim name , // özel gösterge derlenmiş programın yolu/adı
... // özel gösterge giriş parametreleri (gerekirse)
int mod , // satır dizini
int vardiya // vardiya
);

parametreler

sembol

[içinde] Göstergenin hesaplanacağı verilerdeki sembol adı. NULL, geçerli sembol anlamına gelir.

zaman aralığı

[içinde] Zaman Çerçevesi. ENUM_TIMEFRAMES numaralandırma değerlerinden herhangi biri olabilir. 0, geçerli grafik zaman çerçevesi anlamına gelir.

isim

[içinde] Kök göstergeler dizinine (MQL4/Indicators/) göre özel gösterge derlenmiş program adı. Gösterge alt dizinde bulunuyorsa, örneğin MQL4/Göstergeler/ Örnekler içinde, adı " Örnekler\\ gösterge_adı" olarak belirtilmelidir (ayırıcı olarak tek bir tane yerine çift ters eğik çizgi "\\" belirtilmelidir).

...

[içinde] Virgülle ayrılmış özel gösterge giriş parametreleri.

Geçirilen parametreler ve bunların sırası, bildirim sırasına ve özel göstergenin harici değişkenlerinin türüne uygun olmalıdır. Giriş parametrelerinin değerleri belirtilmezse, varsayılan değerler kullanılacaktır.

Neden: