Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
CB'ye:
Hey yüksek uçan! Tim'in görevleriyle yapabileceğim her şeyi yaptım ve böylece kodunuza daha ayrıntılı bakmaya karar verdim.
Kodunuzu inceledim, içindeki hataları anlamaya ve düzeltmeye çalıştım. fnGenerateSignal() dizesi için hataları yalnızca 'dengesiz parantez'e indirmeyi başardım. Bu durumda neden dengesizlik diyor bilmiyorum.
Her zaman olduğu gibi, kodunuzla ilerlemem hakkındaki düşüncelerinizi takdir ediyorum! En basit şeyleri bile anlamadığım birçok küçük nokta olduğunu unutmayın.
Ek açıklamalara bakın.
Aşağıdakileri fark etti:
- kendilerine parametre olarak aktarılan değişkenleri beklemek için işlevler bildiriyordunuz, ancak daha sonra bunları işlev çağrısında gerçekten iletmiyorsunuz - bu yüzden sizden değişkenleri tüm işlevlerinizde kullanılabilir olacak şekilde en üst bloğa taşımanızı istedim. şimdi - şimdilik bunu olabildiğince basit tutalım
- işlevinizin adını da bir değişken olarak bildirmeniz gerektiğini düşündünüz. İşlevleri nasıl kullanacağınız, değişkenleri bunlara nasıl girip çıkaracağınız aşağıda açıklanmıştır:
İlan etmek:
int abcdef(int x, string s) //anlamı abcdef isimli fonksiyon bir tamsayı ve bir dizge girişini kabul eder ve çıktı olarak bir tamsayı döndürür (bu durumda ya 0 ya da 9)
{
fonksiyon x ve s ile bir şeyler yapar
if (bir koşul)
dönüş(9);
başka
dönüş(0);
}
Ve aramak için:
...
myResponse = abcdef(myInteger, myString);
if (myResponse == 9)
{
falan
Hey CB,
Teşekkür ederim. Anlayamadığım kısım burası, bana çok net ifade ettin. Sanırım şu anda doğru yoldayım.
CB, soru1:
bool fnOrderDuplicate()
{
iDuplicateOrders=0 // CB, iDuplicateOrders olarak int veya double olarak bildirilmemeli mi?
iOrders = OrdersTotal()-1 //Şimdi yardımınızla anlıyorum, bu OrdersTotal işlevini çağırıyor. ama yine de iOrders bir değişken olarak bildirilmemeli mi?
CB,soru2:
int fnTrade() // Fonksiyonda sSignal kullandığımız için bu neden "int fnTrade(string sSignal)" değil. ?
{ if(sSignal=="OP_BUY")
...
CB,soru3:
Kodun sonunda return(0) ve } öğelerini kaldırmamı istediniz. ancak bu, Start()'ın tipik bir 'return(0) ile kapanmadığı ve parantezlerin kapatılmadığı anlamına gelir, çünkü tüm önceki parantezler (kontrol ettiğim kadarıyla) tasarladığımız belirli işlevlerin açılıp kapanmasına özeldir. ?
Hey CB,
Teşekkür ederim. Anlayamadığım kısım burası, bana çok net ifade ettin. Sanırım şu anda doğru yoldayım.
CB, soru1:
bool fnOrderDuplicate()
{
iDuplicateOrders=0 // CB, iDuplicateOrders int veya double olarak bildirilmemeli mi?
iOrders = OrdersTotal()-1 //Şimdi yardımınızla anlıyorum, bu OrdersTotal işlevini çağırıyor. ama yine de iOrders bir değişken olarak bildirilmemeli mi?
CB,soru2:
int fnTrade() // Fonksiyonda sSignal kullandığımız için bu neden "int fnTrade(string sSignal)" değil. ?
{ if(sSignal=="OP_BUY")
...
CB,soru3:
Kodun sonunda return(0) ve } öğelerini kaldırmamı istediniz. ancak bu, Start()'ın tipik bir 'return(0) ile kapanmadığı ve parantezlerin kapatılmadığı anlamına gelir, çünkü tüm önceki parantezler (kontrol ettiğim kadarıyla) tasarladığımız belirli işlevlerin açılıp kapanmasına özeldir. ?
S1: Bu değişkenlerin her ikisi de tanımlıdır. Dış karakterlerinizi tanımladığınız bölüme geçmenizi önerdiğim değişkenlere bakın. Bu, bunları otomatik olarak tüm işlevler için kullanılabilir hale getirecektir.
S2: sSignal değişkeni, tüm işlevlerin dışında bildirilirse, işlev çağrısında açıkça iletilmesi gerekmeden tüm işlevler için kullanılabilir.
S3: Ah - şimdi yanlış anladığınızı görüyorum. Neden bu return ifadesini ve küme parantezini oraya koyduğunu merak ettim. fnTrade() ifadesi hakkındaki yorumum tarafından karşılandı. Senden oraya bir geri arama ve kapanış parantez eklemeni istediğimi fark edeceksin. Bunun nedeni, (yanlış) tüm işlevlerinizi start() işlev kod bloğu içinde bildirmiş olmanızdır.
CB
Merhaba Tim,
Kod için yapmamı istediğin şeyi yaptım. Sorularıma ayrıntılı cevaplar verdiğiniz ve bu konuda kafamı toplamama yardımcı olacak kod boyunca çok sayıda yorum yazdığınız için teşekkür ederim. İşlerin nasıl bir araya geldiğini, dizilerin nasıl düzgün kullanılacağını ve belirli işlevlerin (ve küresel ve yerel değişkenlerin rolünün) nasıl çağrılacağını görmeye başlıyorum.
Kodumuzun en son sürümünü ekledim.
Bir soru, EntryRules işlevini bize bir satın alma/short koşulu sağlamak için her şeyi (bayraklar dahil) içerecek şekilde yapmamamızın, ancak bunun yerine giriş kararını vermek için daha sonra bayraklarla çağırmamızın herhangi bir nedeni var mı?
merhaba Nick
Kodda birkaç şey düzenledim ve umarım sorularınızı yanıtladım. EntryFunction şimdi tamamlandı. Kodda belirttiğim gibi başlangıç (ana) işlevinden çağırmanız ve gösterildiği gibi gerekli parametreleri iletmeniz yeterlidir. Umarım sadece birkaç dakika çalışır ve sonra derleme ve test etmeye başlayabilirsiniz. Uğraşmanız gereken birkaç küçük hatanız olacağını umuyorum ama umarım önemli bir şey yoktur.
Derlendiğinde, test cihazında EA'yı çalıştırmayı deneyin ve bu aşamada beklediğiniz şeyi yapıp yapmadığını görmek için günlük dosyasına bakın. Her bir döviz çifti için AL ve SATIŞ sinyallerini görebilmeniz gerekir.
Bu noktada kodunuzun yaklaşık %75'inin tamamlandığını söyleyebilirim.
Bundan sonraki adım, belirli bir döviz çifti ve ticaret yönü için açık emirleri kontrol etmek için başka bir fonksiyon yazmaktır.
Ticaret fonksiyonları altındaki MT4 belgelerine bir göz atmanızı öneririm. OrdersTotal(), OrderSelect(), Order Symbol() ve OrderType() bu görev için olası adaylar gibi görünüyor.
EntryRules işlevinin bayraklar dahil her şeyi içermesine ilişkin sorunuza gelince, neden olmaması için bir neden göremiyorum. Neden EntryRules işlevini değiştirmeye çalışmıyorsunuz?
Bunu daha önce yaptıklarınızı derledikten, çalıştırdıktan ve test ettikten sonra yapmanızı öneririm.
Saygılarımızla
Tim
CB: Teşekkürler dostum, bu benim için bazı şeyleri daha da netleştirmeye yardımcı oluyor. Nedense her şeyin start fonksiyonu içinde olması gerektiğini düşündüm.
Soru: ema'ları her tik ile hesaplanmasını/güncellenmesini istediğimiz için start fonksiyonu içinde bildirmemiz gerekmez mi?
Hey Tim: Yardımın için bir kez daha teşekkür ederim. Bu akşam işten çıkar çıkmaz elimdeki işlemlere devam edeceğim. sizinle ve CB'yle çalışırken, artık işleri nasıl bir araya getireceğim konusunda daha fazla fikrim var ve her şey hakkında daha esnek düşünmeye başlıyorum.
CB: Teşekkürler dostum, bu benim için bazı şeyleri daha da netleştirmeye yardımcı oluyor. Nedense her şeyin start fonksiyonu içinde olması gerektiğini düşündüm.
Soru: Her tikte hesaplanmasını/güncellenmesini istediğimiz için ema'ları start fonksiyonu içinde bildirmemiz gerekmez mi?
Hayır. Bir işlev içinde bir değişken bildirirseniz, yalnızca o işlev içinde kullanılabilir. Tüm işlevlerin dışında bildirirseniz, tüm işlevler için kullanılabilir. Bu nedenle, ema değişkenlerini en üstte bildirebilir ve ardından start işlevinde bunlar üzerinde matematik yapabilirsiniz.
CB
Hayır. Bir işlev içinde bir değişken bildirirseniz, yalnızca o işlev içinde kullanılabilir. Tüm işlevlerin dışında bildirirseniz, tüm işlevler için kullanılabilir. Bu nedenle, ema değişkenlerini en üstte bildirebilir ve ardından start işlevinde bunlar üzerinde matematik yapabilirsiniz.
CB
Teşekkürler CB, şimdi anladım!
Merhaba Tim,
Şimdi Türkiye'den döndüm. Kuşadası'nda harika zaman geçirdim ve gerçekten ayrılmak istemedim. Türkler İngilizlerden çok daha arkadaş canlısı. Daha önce hiç gitmemiş olmama rağmen orada kendimi evimde gibi hissettim.
Son 5 saatimi tasarladığımız kodu yükseltmek için harcadım. bağlıyım.
Önemli değişiklikler şunlardı:
1. Bir Order Count fonksiyonu oluşturdum ve onu start fonksiyonu içinde çağırdım. Hâlâ alamadığım bitler olduğu için bunun hatalarla dolu olmasını bekliyorum (örneğin: [c] döngüsünü takip etmesinin yalnızca döviz çifti başına çalışması için nasıl sağlanacağı)
2. İsmi yarı yolda değiştirdiğimiz için para birimiSymbol ve para birimiSym adı ile ilgili kodu düzeltmeye çalıştım. Ama bu iş karışabilirdi.
3. Start işlevi içinde EntryRules işlevini çağırdım
Büyük ve küçük hataları düzeltirseniz çok sevinirim //eski kodun neden yanlış olduğunu açıklamaya devam ederseniz, yorumlar mantıklı düşüncemi düzeltmeme yardımcı oluyor.
Her zaman olduğu gibi, değişikliklerinizi sabırsızlıkla bekleyin!
Hey CB,
Sanırım birkaç gündür ondan haber alamadığım için Tim tatilde. Bu nedenle, ticaret yapmama yardımcı olacağı için kodunuzla devam ediyorum (şu anda stratejiyi manuel olarak ticaret yapıyorum ve bu, erken saatlerde uyanmak anlamına geliyor, vb.). Tüm kodu istediğiniz gibi değiştirdim, ancak nedense hala bir hata veriyor (bu sefer "==" ile yapılacak, çok garip).
Başka bir şey de, başlatma işlevinin kapatılmadığını fark ettim. Bu yüzden start () içindeki ilk işlevden sonra "}" ekledim, bunu yapmazsak kod, sonraki işlev dizesi fnGenerateSignal() ile bir hata oluşturur (bunun için işlev tanımının beklenmediğini söylüyor).
Her zamanki gibi teşekkürler. Yorumlarınızı/değişikliklerinizi bekliyorum!
Nick