Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 202

 
Yurij Kozhevnikov :

=

Eğer ikame ilkesini doğru anladıysam öyle görünüyor.

Kıvrımlı parantezlerden sonra fazladan noktalı virgül. Ve şimdi başka ne ifade ettiği açık değil.

Ne olduğunu görmek için makro genişletmeyi otomatikleştirmenin kolay bir yolu olmaması çok kötü. Kendi senaryosunu karıştırmadıkça.

Teşekkür ederim! Makroda bir süre sonra noktalı virgül olmamasına şaşmamalı.

Makrolar iyi bir şeydir, ancak iyi ve kötü arasındaki çizgi, onların durumunda, bir kadından bile daha incedir))) Onlara karşı çok, çok dikkatli olmalısınız. Ve evet, benim örneğimde ';' değil, ;'yi kaldırdıktan sonra makrodaki if ile ilgili olan başka bir şey.

Makroları çok iyi biliyorum, bu yüzden sizinki gibi bir durumda, onları kullanmaya yemin edeli 1.5 yıl oldu, daha uygun:

 inline bool CheckRead(){
   ...
}

if (!CheckRead()) return ;
 

Bu sadece satır içi ile ilgili, burada gerçekten hiçbir şey bulamadım.

C++ bilmiyorum.

 

Tünaydın! Lütfen yardım et!

Bir siparişi açmak ve değiştirmek için oldukça basit bir kod vardır. OrderSend , OrderSelect ve OrderModify işlevlerini denemeler arasında küçük bir gecikmeyle bir döngüye koydum. İletişim hatalarını en aza indirmek vb.

Aşağıdaki yanlış anlaşılma meydana gelir: sipariş normal olarak açılır, ardından StopLoss'un başarılı bir modifikasyonu, TakeProfit'in başarılı bir modifikasyonu olur. Ancak TP ayarlanırken StopLoss sıfırlanır. nedenini anlayamıyorum.

İşte kodun o kısmı:

gönder = 5; // sipariş vermek için maksimum deneme sayısı

tik=0;

sendset=0; //Sayacı dene

while(!tick && sendset<=gönder)

{

tick=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lot,2),Bid,150,0.0,0.0,komm,MagNum,0,Yellow);

sendset++;

uyku(1000); // Bir sonraki denemeden önce 1 saniye geciktir

}

seç = 5; // bir sipariş seçmek için maksimum deneme sayısı

slschet=0; //Sipariş seçme denemelerinin sayısı

while(!OrderSelect(tick,SELECT_BY_TICKET) && slschet<=seç)

{

slschet++;

Uyku(500); // Sonraki denemeden 0,5 saniye önce gecikme

}

if(slschet<select) //maksimum değerden daha az deneme yapıldı, bu, sipariş seçiminin başarılı olduğu anlamına gelir

{

değiştirme = 5;//bir siparişi değiştirmek için maksimum deneme sayısı

mdset=0;

while(!OrderModify(tick,OrderOpenPrice(),NormalizeDouble(SL,Digits),OrderTakeProfit(),0,Sarı)

&& mdschet<=değiştir)

{

mdschet++;

Uyku(500); // Sonraki denemeden 0,5 saniye önce gecikme

}

*Burada her şey harika - SL kurulu

mdset=0; //TP'yi değiştirmeden önce sayacı sıfırla

while(!OrderModify(tick,OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(TP,Rakamlar),0,Sarı)

&& mdschet<=değiştir)

{

mdschet++;

Uyku(500);

}

}

*Burada TP normal olarak ayarlanır, ancak SL zaten 0.0'a eşittir. Yani, OrderStopLoss()'un 0.0'a eşit olduğu ortaya çıktı.

Her ne kadar sipariş seçimi değişmedi.

SL ve TP kurulumu arasına tekrar OrderSelect eklerseniz, her şey çalışıyor gibi görünüyor. Ama mantığa meydan okuyor.

Konuyla ilgili yardımlarınız için şimdiden teşekkürler.

 

Tünaydın!

Lütfen dinamik bir dizinin boyutunu nasıl değiştireceğimi bulmama yardım edin.

Diyelim ki bir dizi ayarladım:

 int DB[][ 8 ];

Ayrıca, döngüdeki ilk alt programda, belki birkaç kez (bunda soru yok - şimdiye kadar amaçlandığı gibi çalışıyor):

 ushort i = 0 ;
ArrayResize (DB,i+ 1 );

Bir sonraki alt programda, bir döngüdeki ilk boyuttaki öğeleri ekleyeceğim. Ne kadarı önceden bilinmiyor. Bunun, boyutu önceden bildirmenizden daha yavaş olduğunu biliyorum. Ancak yılda 500'e kadar eklemenin havayı bozmayacağını düşünüyorum.

Soru şu ki, bu alt programda dizinin mevcut boyutunu nasıl bulacağız? Bunu temel almak ve ona yeni bir değer eklemek.

ArraySize() alın ve 8'e bölünsün mü? Yoksa daha uygun bir işlev var mı?

Şimdiden teşekkürler!

 
Oleg_Ko :

Tünaydın!

Lütfen dinamik bir dizinin boyutunu nasıl değiştireceğimi bulmama yardım edin.

Diyelim ki bir dizi ayarladım:

Ayrıca, döngüdeki ilk alt programda, muhtemelen birkaç kez (bunda soru yok - şimdiye kadar amaçlandığı gibi çalışıyor):

Bir sonraki alt programda, bir döngüdeki ilk boyuttaki öğeleri ekleyeceğim. Ne kadarı önceden bilinmiyor. Bunun, boyutu önceden bildirmenizden daha yavaş olduğunu biliyorum. Ancak yılda 500'e kadar eklemenin havayı değiştirmeyeceğini düşünüyorum.

Soru şu ki, bu alt programda dizinin mevcut boyutunu nasıl bulacağız? Bunu temel almak ve ona yeni bir değer eklemek.

ArraySize() alın ve 8'e bölünsün mü? Yoksa daha uygun bir işlev var mı?

Şimdiden teşekkürler!

DiziAralığı()

Документация по MQL5: Операции с массивами / ArrayRange
Документация по MQL5: Операции с массивами / ArrayRange
  • www.mql5.com
Операции с массивами / ArrayRange - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin :

DiziAralığı()

Artem, teşekkür ederim.
 

Güzel gün.

Çok uzun zamandır MT4'te işlem yapmıyorum, tekrar denemeye karar verdim. Daha önce komut dosyasını kullandım (ekli), ancak şimdi başlamıyor, lütfen neyin yanlış gittiğine bakın.

Dosyalar:
RiskAdvisor.mq4  12 kb
 
Nauris Zukas :

Merhaba!
Herhangi bir zaman dilimindeki dizi öğelerinin sayısını CopyHigh'ı hemen bilmenin bir yolu var mı?

Kendime cevap vereceğim, belki arama motorundan birileri soruya rastlar.

 SeriesInfoInteger (symbol_name,timeframe, SERIES_BARS_COUNT );
 
Nauris Zukas :

Kendime cevap vereceğim, belki arama motorundan birileri soruya rastlar.

Daha Fazla Bar(), iBars()
 
Artyom Trishkin :
Daha Fazla Bar(), iBars()

Bars() ile, herhangi bir zaman periyodundaki dizi elemanlarının sayısını bulamazsınız, sadece mevcut grafikte bulabilirsiniz.