Belki önce while döngüsünü anlayarak for döngüsünü daha iyi anlayabilirsiniz. . . for döngüsü, yalnızca başlangıç koşulu ve artışın yerleşik olduğu bir while döngüsüdür. . .
Bunun için belgelere bakın. . .
" for operatörü, aşağıdaki operatör dizisine eşdeğerdir: "
Expression1;
while (Expression2)
{
operator;
Expression3;
};
Özellikle sorunuzla ilgili olarak, " Bu ilk örnek neden ikinci parametre olarak bir "koşul" içerirken ikinci örnek "Expression2" içerir ikinci parametre olarak? " bir ifade bir koşul olabilir, bir koşul doğru veya yanlış bir değerle sonuçlanır, örneğin (a > b) veya (c || d) veya (OrdersTotal() >= 0) , ayrıca belgelerde . . . " Expression2 , döngü sonlandırması için koşullu testtir. "
Simon,
bir ifade bir koşul olabilir
Öyleyse, bir 'for' operatör başlığındaki ikinci parametre bir ifade VEYA koşulu olabilir mi? Expression_1 ve Expression_3'ün ifade olarak kalması ve koşullara doğru değişmemesi gerektiğini varsayıyorum? Neden 1 ve 3 ifadesinin de koşul olamayacağını anlamıyorum. Her iki ifade 1 ve 3 sadece doldurulacak parametrelerdir. (bir koşul olmak, alternatif olarak iki parametre, diğer bir deyişle Expression_2'nin amacı OLABİLİR)
Lütfen düşünceleri onaylayın.
İfadeler aritmetik işlemler (2+2=4), atama vb. olabilir (tümü MetaEditor Sözlüğünde listelenmiştir).
Koşul doğru || false (örnekler: a>b, a>=b, a==b, vb.).
İşlemler MetaEditor sözlüğünde de bulunur (örnekler: Break, Continue, Return, while, for, vb.).
Teşekkür ederim
Simon,
bir ifade bir koşul olabilir
Öyleyse, bir 'for' operatör başlığındaki ikinci parametre bir ifade VEYA koşulu olabilir mi? Expression_1 ve Expression_3'ün ifade olarak kalması ve koşullara doğru değişmemesi gerektiğini varsayıyorum? Neden 1 ve 3 ifadesinin de koşul olamayacağını anlamıyorum. Her iki ifade 1 ve 3 sadece doldurulacak parametrelerdir. (bir koşul olmak, alternatif olarak iki parametre, diğer bir deyişle Expression_2'nin amacı OLABİLİR)
Belgeler - süre
Kitap - süre
Simon, çalışırken kodda kullanma alıştırması yapacağım. kendine bir iyilik yap... Bunun sesini sevdim! :) Teşekkür ederim.
William, Boole değerine dönüştürülen sayı bir koşuldur... (1=true,0=false). Çok teşekkürler.
Teşekkür ederim.
Simon,
;) istediğiniz gibi yapabilmeniz gereken bir EA yazdım.
Bu EA'nın bir kombinasyonunu, Terminal'deki "Uzmanlar" sekmesinden alınan sonucun anlık görüntüsüyle birlikte paylaşıyorum.
EA, USDJPY sırasını seçebilecek ve bilgilerini Uzmanlar sekmesine yazdırabilecek gibi görünüyor. EA neden siparişi kapatmıyor ve siparişin bilgilerini yazdırmıyor?
Teşekkür ederim.
Simon,
;) istediğiniz gibi yapabilmeniz gereken bir EA yazdım.
Bu EA'nın bir kombinasyonunu, Terminal'deki "Uzmanlar" sekmesinden alınan sonucun anlık görüntüsüyle birlikte paylaşıyorum.
EA, USDJPY sırasını seçebilecek ve bilgilerini Uzmanlar sekmesine yazdırabilecek gibi görünüyor. EA neden siparişi kapatmıyor ve siparişin bilgilerini yazdırmıyor?
Teşekkür ederim.
Lütfen kodunuzu ve ne anlama geldiğini açıklayın. . . özellikle bu süre boyunca benimle konuş lütfen.
Simon,
Lütfen kodunuzu ve ne anlama geldiğini açıklayın. . . özellikle bu süre boyunca benimle konuş lütfen.
Kodu ve amacını açıklamak için elimden geleni yapacağım.
Kod Amacı:
1. Üç sipariş havuzundan USDJPY siparişini seçin.
2. USDJPY siparişinin TP ve SL'sini değiştirin.
3. OrderPrint() işlevini yürütün.
4. USDJPY siparişini kapatın.
Kod Açıklaması:
İlk olarak değişkenler tanımlanır.
int i; double bid_ask;
İkinci olarak, 'while' döngüsü yürütülür.
'while' döngü mantığı:
OrderSelect() işlevi , 1,2,3, vb. sayının yerine 'i' değişkenini kullanır. (lütfen bunu aklınızda bulundurun)
Bu nedenle, OrderSelect() işlevi ve OrderSymbol() işlevi içindeki i değişkeni USDJP Y DEĞİLSE , i değişkenini 1 artırın ( i++; )
while(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()!="USDJPY")
i++;
'while' döngüsü, OrderSelect() işlevi uygun sipariş biletini seçene VE OrderSymbol() işlevi bir USDJPY siparişi seçene kadar 'i' değişkenini artırır. Her iki amaç da gerçekleştirildiğinde, while döngüsü yanlış olur ve kontrol i++'ın altına geçer; (while döngüsü gövdesi).
Üçüncü olarak OrderModify() fonksiyonu çalıştırılır.
OrderModify(i,OrderOpenPrice(), 50 * Point , 50 * Point , 0 , CLR_NONE );
Dördüncü olarak OrderPrint() fonksiyonu çalıştırılır.
OrderPrint();
Beşinci olarak, kapatılacak emrin bir alış veya satış emri olup olmadığını anlamak için parametreler dahil edilmiştir.
if (OrderType()==OP_BUY){bid_ask=Bid;} if (OrderType()==OP_SELL){bid_ask=Ask;}
Altıncısı , program emrin alış mı satış mı olduğunu ayırt ettiğinde OrderClose() fonksiyonunu çalıştırır.
OrderClose(i,OrderLots(),bid_ask, 3 , CLR_NONE );
Yedinci (ve son olarak), program, strateji test cihazında görsel testler sırasında bilet numarasının gerçekten USDJPY'deki bilet olduğunu doğrulamak için 'i' değişkenini gösterecek bir yorum içerir.
Comment ( "i = " ,i);
Teşekkür ederim.
Simon,
'while' döngü mantığı:
OrderSelect() işlevi, 1,2,3, vb. sayının yerine 'i' değişkenini kullanır. (lütfen bunu aklınızda bulundurun)
Bu nedenle, OrderSelect() işlevi ve OrderSymbol() işlevi içindeki i değişkeni USDJP Y DEĞİLSE , i değişkenini 1 artırın ( i++; )
'while' döngüsü, OrderSelect() işlevi uygun sipariş biletini seçene VE OrderSymbol() işlevi bir USDJPY siparişi seçene kadar 'i' değişkenini artırır. Her iki amaç da gerçekleştirildiğinde, while döngüsü yanlış olur ve kontrol i++'ın altına geçer; (while döngüsü gövdesi).
Dönüş değerlerinin kontrolünü ve hata raporlamayı dahil etmiş olsaydınız, muhtemelen probleminizi kendiniz görmüş olurdunuz.
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Merhaba MQL4 topluluğu,
İlk referans: https://book.mql4.com/operators/for
İlk referansa göre, 'for' operatörünün bir biçim örneği şu şekilde yazılmıştır:
İkinci referans: https://docs.mql4.com/basis/operators/for
İkinci referansa göre, 'for' operatörünün sağladığı örnek şu şekilde açıklanmıştır:
Neden bu ilk örnek ikinci parametre olarak bir "koşul" içeriyor, ikinci örnek ise ikinci bir parametre olarak "İfade2" içeriyor?
Bu çelişkinin anlamı nedir?
Hatta önemli mi?
Döngü operatörünü 'for' kullanacaksam, tüm parametrelerini keskin bir şekilde anlamam gerektiğine inanıyorum.
Teşekkür ederim.