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

 

Bu nasıl bir hata, anladığım kadarıyla, DC'nin kötü çalışması mı?

2017.07.12 12:42:48.493 '1234885286': order #247632722 sell 0.02 EURAUD closing at 1.49721 failed [Trade timeout]
 
Vitaly Muzichenko :

Bu nasıl bir hata, anladığım kadarıyla, DC'nin kötü çalışması mı?

128

ERR_TRADE_TIMEOUT

İşlem zaman aşımı süresi doldu


İşleyiciden bir parça:

     case 128 :
      str= "Истек срок ожидания совершения сделки." ;
       if (detailed) str=:: StringConcatenate (str, "\n" , "Прежде, чем производить повторную" ,
                 " попытку (не менее, чем через 1 минуту), необходимо убедиться," ,
                 " что торговая операция действительно не прошла (новая позиция" ,
                 " не была открыта, либо существующий ордер не был изменён или" ,
                 " удалён, либо существующая позиция не была закрыта)." );
       break ;
 
Artyom Trishkin :

128

ERR_TRADE_TIMEOUT

İşlem zaman aşımı süresi doldu


İşleyiciden bir parça:

Kodda bu hata işlemeleri var, ancak bunlar hiç olmadı, bugün bir şekilde programı popüler bir DC'nin demosunda test etmeye karar verdim ve ilk defa böyle bir saçmalık ile karşılaştım.

Genel olarak, bunun DC'deki ekipmanla ilgili bir sorun olduğunu ve benim tarafımda olmadığını doğru anlıyor muyum?

 

Lütfen işlevin doğru olup olmadığını bana bildirin. Buradaki fikir, belirli sayıda önceki mum sırasında fiyatın ortalamayı geçip geçmediğini hesaplamaktır.

bu işlev hiç yürütülmez, sonuç eksik. sonuç şöyle olmalıdır: delinmemişse returnToMA ==1, delinmişse returnToMA ==0

Belki soruna başka çözümler de vardır?


returnToMA = MAtouch(TRADE_TF2,TRADE_TF2_MA,barscount)

int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_Н4, int ticaret=10, int çubuklar=100)

{

for(i=0;i<=bars;i++)

{

if(iLow( Symbol() ,tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)) {return(0);break;}

if (iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)) {return(0);break;}

başka dönüş(1);

}

 
forexpipsrunner :

Lütfen işlevin doğru olup olmadığını bana bildirin. Buradaki fikir, belirli sayıda önceki mum sırasında fiyatın ortalamayı geçip geçmediğini hesaplamaktır.

bu işlev hiç yürütülmez, sonuç yoktur. sonuç şöyle olmalıdır: delinmemişse returnToMA ==1, delinmişse returnToMA ==0

Belki soruna başka çözümler de vardır?

İşlevde her zaman sıfıra sahip olacaksınız - çünkü maksimum veya minimum her zaman MA'dan büyük/küçük veya MA'ya eşittir.

Sizin durumunuzda mum en az iki parametre ile tanımlanmalıdır:

1. Mumun nerede açıldığını belirleyin - MA'nın üstünde veya altında

2. Madde 1'e bağlı olarak, MA dokunuşu olup olmadığını kontrol edin.

 
-Aleks- :

İşlevde her zaman sıfıra sahip olacaksınız - çünkü maksimum veya minimum her zaman MA'dan büyük/küçük veya MA'ya eşittir.

Sizin durumunuzda mum en az iki parametre ile tanımlanmalıdır:

1. Mumun nerede açıldığını belirleyin - MA'nın üstünde veya altında

2. Madde 1'e bağlı olarak, MA dokunuşu olup olmadığını kontrol edin.

Teşekkürler. bir koşul ekledi, ancak sürekli döndürür 1. parantezleri bir yerde değiştirebilir misiniz? ya ara işlenmez ve işlev 1'in dönüş değerine atanmasını sonlandırır


int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_Н4, int ticaret=10, int çubuklar=100)

{

for(i=0;i<=bars;i++)

{

Eğer( iLow( Symbol() ,tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{dönüş(0);kesin;}

Eğer ( iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{dönüş(0);kesin;}

başka dönüş(1);

}

 
forexpipsrunner :

Teşekkürler. bir koşul ekledi, ancak sürekli döndürür 1. parantezleri bir yerde değiştirebilir misiniz? ya ara işlenmez ve işlev 1'in dönüş değerine atanmasını sonlandırır


int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_Н4, int ticaret=10, int çubuklar=100)

{

for(i=0;i<=bars;i++)

{

Eğer( iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{dönüş (0); ara;}

Eğer ( iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{dönüş (0); ara;}

başka dönüş(1);

}


böyle dene

 int MAtouch( ENUM_TIMEFRAMES tfpricereturnafterbreak= PERIOD_H4 , int tradema= 10 , int bars= 100 )
  {
   int x= 0 ;
   for ( int i= 0 ;i<=bars;i++)
     {
       if ( iLow ( Symbol (),tfpricereturnafterbreak,i)<= iMA ( Symbol (),tfpricereturnafterbreak,tradema, 0 , MODE_EMA , PRICE_WEIGHTED ,i)
         && iOpen ( Symbol (),tfpricereturnafterbreak,i)>= iMA ( Symbol (),tfpricereturnafterbreak,tradema, 0 , MODE_EMA , PRICE_WEIGHTED ,i))
        {x= 1 ; break ;}

       if ( iHigh ( Symbol (),tfpricereturnafterbreak,i)>= iMA ( Symbol (),tfpricereturnafterbreak,tradema, 0 , MODE_EMA , PRICE_WEIGHTED ,i)
         && iOpen ( Symbol (),tfpricereturnafterbreak,i)<= iMA ( Symbol (),tfpricereturnafterbreak,tradema, 0 , MODE_EMA , PRICE_WEIGHTED ,i))
        {x= 1 ; break ;}
     }
   return (x);
  }

Koşul karşılanırsa 1 döndürür - bir kesişme vardı - buna ihtiyacımız var mı?

 
-Aleks- :

böyle dene

Koşul karşılanırsa 1 döndürür - bir kesişme vardı - buna ihtiyacımız var mı?

teşekkürler, kodunuza göre saat gibi çalışır
 
forexpipsrunner :
teşekkürler, kodunuza göre saat gibi çalışır

Memnuniyetle yardım ettim.
 

Tünaydın!

Beyler, söyleyin bana, göstergeyi grafikte programlı olarak görüntülemek mümkün mü? Yoksa sadece manuel olarak mı?

Eğer öyleyse, hangi komut verilir?