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

 

Merhaba!

Gecenin yarısını geçirdim, neden basit bir koşulun karşılanmadığını anlayamıyorum, lütfen çözmeme yardım edin:

      macd1 = iMACD ( _Symbol , PERIOD_CURRENT , 5 , 34 , 5 , 0 , 1 , 0 );
      macd2 = iMACD ( _Symbol , PERIOD_CURRENT , 5 , 34 , 5 , 0 , 1 , 1 );
      highprice1 = High [ 0 ];
      highprice2 = High [ 1 ];
      lowprice1 = Low [ 0 ];
      lowprice2 = Low [ 1 ];
               if (macd1 > 0 && macd1 > macd2 && highprice1 > highprice2) 
                 {
                 maxprice1 = highprice1;
                 macdMAXSell = macd1;
                 Print ( "maxprice1 = highprice1" ,maxprice1);
                 }
               if (macd1 < 0 && macd1 < macd2 && lowprice1 < lowprice2)
                 {
                 minprice1 = lowprice1;
                 macdMAXBuy = macd1;
                 Print ( "minprice1 = lowprice1" ,minprice1);
          	 } 

Tarihsel veriler üzerinde çalıştırıyorum, macd1,2, lowprice, highprice değişkenlerine değerler atanıyor ama koşul yerine getirilmek istemiyor, bütün kafam dağıldı, nereye kazacağımı anlayamıyorum... ((((

 
Nikolay Gaylis :

belki 1 ve 1 ?/yani doğru ve hata kodu 1

ERR_NO_RESULT 1 Hata yok ama sonuç bilinmiyor

Yaptığınız şeyin tam bir karmaşası ve yanlış anlaşılması ...

 bool takelimit;   // Здесь переменная равна false

//--- Здесь вот что: сначала выбирается ордер по тикету (MODE_TRADES здесь не нужно от слова "совсем", что говорит о том, что вы не представляете что вы делаете), 
//--- далее переменной takelimit присваивается результат работы функции выбора ордера, 
//--- и если ордер есть с таким тикетом, или был когда-то, то функция вернёт true, и takelimit будет присвоено true, соответственно, будет выведен код последней ошибки,
//--- что вовсе не говорит, что ошибка здесь была при выборе ордера по тикету - вы же переменную, хранящую код последней ошибки, не сбросили при помощи ResetLastError()
//--- И далее вообще не понятно к чему у вас фигурные скобки - они висят в пустоте, а это составной оператор, который должен после условия идти.

if (takelimit= OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
   Print ( string (takelimit)+ "   :" , GetLastError ()); //здесь возвращает число 11, получается ошибка код 11, но не нашел расшифровку нигде?
  {
   if ( iBarShift ( Symbol (), 0 , OrderOpenTime ())== 1 )
      deletelimit= OrderDelete (ticket);
   if (!deletelimit)
       Comment ( GetLastError ());
  }
//+------------------------------------------------------------------+
//--- А нужно примерно так (фигурные скобки специально оставил для понимания где какой блок кода):
   ResetLastError ();
   if ( OrderSelect (ticket, SELECT_BY_TICKET ) && OrderCloseTime ()== 0 )
     {
       if ( iBarShift ( Symbol (), PERIOD_CURRENT , OrderOpenTime ())== 1 )
        {
         if (! OrderDelete (ticket))
             Print ( "Ошибка удаления ордера #" ,( string )ticket, ": " , GetLastError ());
        }
     }
   else
     {
       Print ( "Ошибка выбора ордера #" ,( string )ticket, ": " , GetLastError ());
     }
[Silindi]  
Вадим Мотеюнас :

1. değişken bool türünde olduğundan ve GetLastError'a ihtiyaç duymadığından Print (takelimit, GetLastError ()) ifadesinin iki değer döndürdüğü ortaya çıkıyor ve virgül var mı, GetLastError çağrıldığında GetLastError koddaki son hatayı veriyor mu?

Evet .. iki değer var baskı .....

Yazdıklarının hemen hemen aynısı.

 int ticket;

void Fn()
  {
   ResetLastError (); //Сбрасываем код предыдущей ошибки
   if (! OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES )){ Print ( GetLastError ());} //Если не выбран ордер по указанному тикету-принтим код ошибки
   else //иначе(если ордер нашёлся)
     {
       if ( iBarShift ( Symbol (), 0 , OrderOpenTime ())== 1 && ! OrderDelete (ticket)){ Comment ( GetLastError ());} //Если выбранный ордер открылся на предыдущем баре и не удалось его удалить(надеюсь Вы работаете с отложенниками)-тогда выводим комент ошибки
     }
  }
 
Nikolay Gaylis :

Evet .. iki değer var baskı .....

Yazdıklarının hemen hemen aynısı.

Ve sen oradasın...
Ve sipariş zaten silindiyse, ne olacak?
[Silindi]  
Artyom Trishkin :

Yaptığınız şeyin tam bir karmaşası ve yanlış anlaşılması ...

Aslında hiçbir şey yapmıyorum ama bir kişinin 11 değil 1 ve 1) yazdırdığını varsaydım)

ve sadece bir şey...

[Silindi]  
Artyom Trishkin :

Yaptığınız şeyin tam bir karmaşası ve yanlış anlaşılması ...

Ah .. yani yanlış şeye cevap veriyorsun ... açıkça)

 
Nikolay Gaylis :

Aslında hiçbir şey yapmıyorum ama bir kişinin 11 değil 1 ve 1) yazdırdığını varsaydım)

Bu satır gibi:

 Print ( string (takelimit)+ "   :" , GetLastError ());

"11" yazdırabilir mi?

Daha sonra "1:1" yazdıracak

Bu durumda, hata kodu 1 hata değildir, ancak sonuç bilinmemektedir.

[Silindi]  
Artyom Trishkin :

Bu satır gibi:

"11" yazdırabilir mi?

Daha sonra "1:1" yazdıracak

Bu durumda hata kodu 1 hata değildir, ancak sonuç bilinmemektedir.

Evet, zaten yeniden yaptım! - Yukarıyı okuyun ...

 
Nikolay Gaylis :

Ah .. yani yanlış şeye cevap veriyorsun ... açıkça)

Evet, sizin de cevapladığınız kişiye orada cevap verdim. Ama ona her şeyi doğru da söylemedin - MODE_TRADES'e ihtiyacın olduğunda ve ihtiyacın olmadığında oku. Ve bilete göre sipariş nasıl seçilir.

[Silindi]  
Artyom Trishkin :

Evet, sizin de cevapladığınız kişiye orada cevap verdim. Ama ona her şeyi doğru da söylemedin - MODE_TRADES'e ihtiyacın olduğunda ve ihtiyacın olmadığında oku. Ve bilete göresipariş nasıl seçilir.

MODE_TRADES henüz ona bakmadı, sadece 11'in bastığı parçaya...