Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 589

 
admoon :



Göstergeyi adım adım kontrol ederken, if {}'nin arkasındaki ve W'nin olmadığı altyordamda bir işlem sıçraması buldum. Sorunun özünü açıklığa kavuşturmak için basitleştirilmiş bir kod veriyorum:

//--- giriş parametreleri

girdi int w=10;

//---

{

int i;

//---

int co=0;

for(i=0;i<=w;i++)if(w==10){co++; Uyarı(co);}

//--- sonraki çağrı için prev_hesaplananın dönüş değeri

dönüş(oranlar_toplam);

}

Sonuç (arletler):

2016.05.30 00:45:14.064 1 (EURUSD,H1) 11

2016.05.30 01:10:35.972 1 (EURUSD,H1) 10

........... vb. 1'e kadar

2016.05.30 00:45:14.064 1 (EURUSD,H1) 1

Kural: Parantez içindeki ifade doğruysa, ifade1 yürütülür.

Kodda: deyim1 DAİMA yürütülür.

Benim düşünceme göre if(), parantez içindeki koşul doğru olduğunda yalnızca bir kez çalışmalıdır. Ve aslında, koşul her kontrol edildiğinde çalışır ve {} içindeki tüm ifadeler her adımda yürütülür ve makine zamanında çiğnenir.

Sorular: CO değişkeni döngü boyunca NEDEN 0'dan 11'e yükseldi? Alert neden her adımda tetikleniyor?

Peki, sana bir şeyi ne kadar tekrar edebilirsin?

Bakın: w'niz 10'a eşit,
w'yi 10'a eşit olarak kontrol edin: "if(w==10){co++; Alert (co);}" Bu ifadenin doğru olduğunu düşünüyor musunuz?
O zaman neden bir sorunuz var?

 
admoon :



Göstergeyi adım adım kontrol ederken, if {}'nin arkasındaki ve W'nin olmadığı altyordamda bir işlem sıçraması buldum. Sorunun özünü açıklığa kavuşturmak için basitleştirilmiş bir kod veriyorum:

//--- giriş parametreleri

girdi int w=10;

//---

{

int i;

//---

intco=0;

for(i=0;i<=w;i++)if(w==10){co++; Uyarı(co);}

//--- sonraki çağrı için prev_hesaplananın dönüş değeri

dönüş(oranlar_toplam);

}

Sonuç (arletler):

2016.05.30 00:45:14.064 1 (EURUSD,H1) 11

2016.05.30 01:10:35.972 1 (EURUSD,H1) 10

........... vb. 1'e kadar

2016.05.30 00:45:14.064 1 (EURUSD,H1) 1

Kural: Parantez içindeki ifade doğruysa, ifade1 yürütülür.

Kodda: deyim1 DAİMA yürütülür.

Benim düşünceme göre if(), parantez içindeki koşul doğru olduğunda yalnızca bir kez çalışmalıdır. Ve aslında, koşul her kontrol edildiğinde çalışır ve {} içindeki tüm ifadeler her adımda yürütülür ve makine zamanında çiğnenir.

Sorular: CO değişkeni döngü boyunca NEDEN 0'dan 11'e yükseldi? Alert neden her adımda tetikleniyor?

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

Andrey Barinov , 2016.05.30 10:38

Görünüşe göre kodda bir yazım hatası var ve şöyle yazmak istedin:

 int i;
//---
   int co= 0 ;
   for (i= 0 ;i<=w;i++)
     {
       if (i== 10 )
        {
         co++; 
         Alert (co);
        }
     }
//--- return value of prev_calculated for next call
   return (rates_total);

 
Merhaba Lord! Bir danışman yazarken küçük bir sorun yaşadım ((danışman bekleyen emirleri açar çoğu durumda her şey yolundadır, ancak bazen mevcut fiyata çok yakın emirler açmanız gerekir, bu yüzden mümkün olduğunca yakın açılacak bekleyen emirler nasıl yazılır?
 
barudkinarseniy :
Merhaba Lord! Bir danışman yazarken küçük bir sorun yaşadım ((danışman bekleyen emirleri açar çoğu durumda her şey yolundadır, ancak bazen mevcut fiyata çok yakın emirler açmanız gerekir, bu yüzden mümkün olduğunca yakın açılacak bekleyen emirler nasıl yazılır?
Çözmüş gibi) İlgilenen varsa böyle çıktı
 double ilow = iLow ( Symbol (),TimeFrames_3, 1 );
 double ihigh = iHigh ( Symbol (),TimeFrames_3, 1 );
 
 double OpenPriceBuy = NormalizeDouble ( MathMax (ihigh, Ask + Point * SymbolInfoInteger ( Symbol (), SYMBOL_TRADE_STOPS_LEVEL )), Digits );
 double OpenPriceSell = NormalizeDouble ( MathMin (ilow, Bid - Point * SymbolInfoInteger ( Symbol (), SYMBOL_TRADE_STOPS_LEVEL )), Digits );
 
 int StepST = ( int ) MathMax (OpenPriceBuy - OpenPriceSell, SymbolInfoInteger ( Symbol (), SYMBOL_TRADE_STOPS_LEVEL ));
 double lots = LotsByRisk(StepST);
 
Artyom Trishkin :

Peki, sana bir şeyi ne kadar tekrar edebilirsin?

Bakın: w'niz 10'a eşit,
w'yi 10'a eşit olarak kontrol edin: "if(w==10){co++; Alert(co);}" Bu ifadenin doğru olduğunu düşünüyor musunuz?
O zaman neden bir sorunuz var?

Aptalca soru için özür diler, sabrınız ve anlayışınız için teşekkür ederim. Probun mekanik transferini özetledi if(w==10){ Alert (I,"/",F); adım adım hataları arayan program aracılığıyla. Bu, kendi sebebini anlama eksikliğinizin duvarına çarptığınızda olur, ancak sorundan kısa bir süreliğine geri adım atarsanız, sorun kendi kendine çözülür. Ve "sıçrama" olarak algılanan şey, aslında programın başka bir bölümünden gelen açıklanmayan bir istek olarak ortaya çıkıyor. Minnettarlıkla, Vladimir.

 

Merhaba, lütfen matematikte bana yardım edin.

İlk pozisyonun lotu biliniyorsa beşinci pozisyonun lotunun ne olacağı ve her yeni pozisyonun lotunun aritmetik ilerlemede arttığı nasıl öğrenilir.

İkinci seçenek, parti katlanarak artar.

 
mila.com :

Merhaba, lütfen matematikte bana yardım edin.

İlk pozisyonun lotu biliniyorsa beşinci pozisyonun lotunun ne olacağı ve her yeni pozisyonun lotunun aritmetik ilerlemede arttığı nasıl öğrenilir.

İkinci seçenek, parti katlanarak artar.

Google'da yasak mı? Anlıyorum, neden bu kadar acımasızsın? ))

aritmetik ilerleme formül tarafından verilir

geometrik ilerleme formül tarafından verilir

 

Teoride anlamıyorum, ilk seçenek için, parti başlangıçta artarsa, ilk partiyi 5 ile çarpmak yeterli

İkinci seçenek için: birinci pozisyonun lotu* katsayısı*5 …ama

 
mila.com :

Anlamadım, teorik olarak ilk seçenek için ilk partiyi 5 ile çarpmak yeterli

İkinci seçenek için, birinci konumun lotu* katsayısı*5 …ama

Hiçbir şey, matematiği okuldan kendim unuttum)) Matematik üzerine bir kitap çıkardım, arif'in tanımını yeniden basıyorum. ilerleme, burada daha açık bir şekilde yazılmıştır.

-------------

Her biri ikinciden başlayarak, fark aritmi adı verilen sabit bir d sayısı eklenerek bir öncekinden elde edilen bir sayı dizisi. prog.

İlk terim a1 ise aritmetik olur. prog. uzunluk n ile şu şekildedir:

a1, a1+d, a1+2*d, ...., a1 + n*d

MQL kodu şöyle, basit bir örnek attım

 #define LEN 5 // задали длину последовательности

int start()
{
     int d = 4 ;     // это разность, любое значение
     int a[LEN];   // тут храним ариф. посл.
    a[ 0 ] = 3 ;     // любое стартовое значение, задаете сами
     Print ( 0 , "  " , a[ 0 ]);

     for ( int n = 1 ; n < 4 ; n++)
    {
       a[n] = a[ 0 ] + (n*d);
       Print (n, "  " , a[n]);
    }
}

2016.05 . 31 23 : 08 : 52.433 ChangeTimeFrame EURUSD.e,M1: 3    15
2016.05 . 31 23 : 08 : 52.433 ChangeTimeFrame EURUSD.e,M1: 2    11
2016.05 . 31 23 : 08 : 52.433 ChangeTimeFrame EURUSD.e,M1: 1    7
2016.05 . 31 23 : 08 : 52.433 ChangeTimeFrame EURUSD.e,M1: 0    3
 
Alexey Volchanskiy :

Hiçbir şey, okuldan matematiği unuttum))

Yürüyüşe çıkacağım, sonra geometrik programın kodu. yazmak