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

 
Vitaly Muzichenko :
Evet, haklısın, sadece kod öyle bir tarzda yazılmış ki, önceki konuşmacı onu yanlış yorumlamış.

Kontrol etmeye ne dersin?

//+------------------------------------------------------------------+
//|                                                   TestLogics.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link        "https://login.mql5.com/ru/users/artmedia70"
#property version    "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int       Value= 0 ;     // Количество имеющихся ордеров
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   if (Value> 0 ) Alert ( "1. Количество ордеров=" ,Value);
   else Alert ( "2. Это код после else" );
      {
       Alert ( "3. Ордера отсутствуют" );
      }
  }
//+------------------------------------------------------------------+
Kıvrımlı parantez içindeki kod, if-else koşuluna uygulanmaz ve Value içindeki değerden bağımsız olarak her zaman yürütülür.
 
Artyom Trishkin :

Kontrol etmeye ne dersin?


Kıvrımlı parantez içindeki kod, if-else koşuluna uygulanmaz ve Value içindeki değerden bağımsız olarak her zaman yürütülür.

pancake, gerçekten de, şimdi orijinal kodu tekrar gözden geçirdi ve yanlıştı. Bir tür eğri yazma tarzı - kafamı karıştırdı.

 

Yeniden kontrol edildi, "ekstra" kaldırıldı

sıfıra bölme gitti

Dosyalar:
zero.mq4  5 kb
 
trader781 :

Yeniden kontrol edildi, "ekstra" kaldırıldı

sıfıra bölme gitti

 
trader781 :

Yeniden kontrol edildi, "ekstra" kaldırıldı

sıfıra bölme gitti

Çünkü bölenin 0'dan farklı olup olmadığına dair bir kontrol yoktur. Sipariş ve lot 0 olmadığında aşağıdaki kodu çalıştırmanın anlamı nedir?

 

bir çek koy

void ModifyOrders()
  {
   double avg_price= 0 ;
   price= 0 ;
   bool z= true ;
   double orderlots= 0 ;

   for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) && ( OrderSymbol ()== Symbol ())
      && ( OrderMagicNumber ()==Magic) && ( OrderType ()==FindLastOType()))
        {
         price+= OrderOpenPrice ()* OrderLots ();
         orderlots+= OrderLots ();
        }
     }
    
   if (orderlots== 0 ) { return ; } // если ничего нет - выходим
   avg_price= NormalizeDouble (price / orderlots, Digits );
  
   if (FindLastOType()== OP_BUY )     tp= NormalizeDouble (avg_price+TakeProfit* Point (), Digits );
   if (FindLastOType()== OP_SELL )    tp= NormalizeDouble (avg_price-TakeProfit* Point (), Digits );


   for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) && ( OrderSymbol ()== Symbol ())
      && ( OrderMagicNumber ()==Magic) &&( OrderType ()==FindLastOType()))

         z= OrderModify ( OrderTicket (), OrderOpenPrice (), 0 ,tp, 0 );
         if (!z)
         Print ( "Ошибка функции модифицирования" );
     }
  }
 
Vitaly Muzichenko :

bir çek koy


Vitalie Postolache :


Ama çok şey kaçırdım, teşekkürler.
 
trader781 :
Ama çok şey kaçırdım, teşekkürler.
Evet atladıkları normal, dergi okumaması normal değil, hepsi orada yazıyor, hatanın hangi satırda olduğu yazıyor.
 
Vitaly Muzichenko :
Evet atladıkları normal, dergi okumamaları normal değil, hepsi orada yazıyor.

Okumak niyetinde değildim. "Piyasada doğrulama için" yazıyor. Ürünlerim asla piyasada olmayacak.

sıfıra bölme hakkında

peki ya yukarıdaki? Oradan sipariş almalı

{
fiyat+= OrderOpenPrice ()* OrderLots ();
sipariş lotları+= sipariş lotları ();
}
}
     
    if (orderlots== 0 ) { dönüş ; } // hiçbir şey yoksa - çıkış
avg_price= NormalizeDouble (fiyat / sipariş lotları, Rakamlar );
   
    if (FindLastOType()== OP_BUY ) tp= NormalizeDouble (ort_price+TakeProfit* Point (), Digits );
    if (FindLastOType()== OP_SELL ) tp= NormalizeDouble (avg_price-TakeProfit* Point (), Digits );

 
trader781 :
Okumak niyetinde değildim. "Piyasada doğrulama için" yazıyor. Ürünlerim asla piyasada olmayacak.

Test cihazındaki günlükten bahsediyorum

Eklendi: Kodu normal bir duruma getirin, inceleyin, ardından test cihazında çalıştırın ve hata günlüğünü okuyun. Burada kod parçacıkları yayınlıyorsunuz.