Kodlama yardımı - sayfa 237

 

Merhaba,

Bazı kısa kodlama sorularım var, MT4'üm MQL5'e taşınmış gibi görünüyor.

Bazı silme kodu blokları artık çalışmıyor:

Altında hata mesajını alıyorum:

'(' Nesne İşaretçisi bekleniyor.

//+------------------------------------------- -----------------------------+//| Kapat ve sil |

//+----------------------------------------------------------------------------+

if(sat)if(kapatın karşısında)kapat(OP_BUY);

if(satın al)if(kapatın karşısında)kapat(OP_SELL);

if(hidetp || hidesl){hideclose(OP_BUY);hideclose(OP_SELL);}

if(usetimeout && onetime){closetime(OP_BUY);closetime(OP_SELL);}

if(onecancelother){if(totalsell>0){delete(OP_BUYSTOP);delete(OP_BUYLIMIT);}if(totalbuy>0){delete(OP_SELLSTOP);delete(OP_SELLLIMIT);}}

Altında şu hata mesajlarını alıyorum: 'delete' - isim bekleniyor ve

'}' - genel kapsamda ifadelere izin verilmez

geçersiz silme(int türü){

if(Sipariş Toplamı()>0){

for(i=OrdersTotal();i>=0;i--){

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(tür!=6){

if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==type){

OrderDelete(OrderTicket());

}

}

if(type==6){

if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP

|| OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT){

OrderDelete(OrderTicket());

}

}

}

}

}

Birisi lütfen yardım edebilir mi?

Şimdiden teşekkür ederim!

 

Merhaba tüccarlar/kodlayıcılar!

Umarım birileri bana burada yardım edebilir.

Etraftaki birkaç EA'yı araştırıp denerken, hala aradığımı bulamadım.

Belki bulması zor bir şey arıyorum ya da elimden gelenin en iyisini yapmıyorum :-)

Çizgilerimi çizerek ve geçici kanallar oluşturarak bir SR sistemi de takas ediyorum. Fiyat sınırlara ulaştığında pozisyonları uygulayabilecek bir şey var mı? Mesele şu ki, fiyat her çizgiye ulaştığında pozisyon açabilmesi gerekiyor. Satmak için kırmızı, satın almak için mavi, SL için sarı ve TP için yeşil çizgiler. Yani tek seferlik anlaşma veya OCO yok.

Şimdiden teşekkürler!!

Dosyalar:
sr.png  34 kb
 
daytrade:
Merhaba tüccarlar/kodlayıcılar!

Umarım birileri bana burada yardım edebilir.

Etraftaki birkaç EA'yı araştırıp denerken, hala aradığımı bulamadım.

Belki bulması zor bir şey arıyorum ya da elimden gelenin en iyisini yapmıyorum :-)

Çizgilerimi çizerek ve geçici kanallar oluşturarak bir SR sistemi de takas ediyorum. Fiyat sınırlara ulaştığında pozisyonları uygulayabilecek bir şey var mı? Mesele şu ki, fiyat her çizgiye ulaştığında pozisyon açabilmesi gerekiyor. Satmak için kırmızı, satın almak için mavi, SL için sarı ve TP için yeşil çizgiler. Yani tek seferlik anlaşma veya OCO yok.

Şimdiden teşekkürler!!

EA'yı şu başlıktan kontrol ettiniz mi: https://www.mql5.com/en/forum/176382 ?

 

Stop Loss'u Değiştir

Hepinize merhaba,

Değişiklik durdurma kaybı emrimin neden düzgün çalışmadığını bilen var mı?

DonchianLowM5, OrderOpenPrice'ın üzerine çıktığında, stop loss, DonchianLowM5 ve OrderOpenPrice arasında çok hızlı bir şekilde hareket eder.

Bu kod (üzgünüm, düzgün bir şekilde nasıl yapıştıracağımı bilmiyorum).

//--- Kaybı durdurma hareketi

if (Sipariş Toplamı() > 0)

{

for (int i = 0; i < OrdersTotal(); i++)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_BUY)

{

if (OrderStopLoss() < OrderOpenPrice())

{

if (DonchianLowM5 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowM5, OrderTakeProfit(), OrderExpiration(), Yeşil);

}

}

if (OrderStopLoss() > OrderOpenPrice())

{

if (DonchianLowH4 <= OrderOpenPrice())

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Yeşil);

}

}

if (OrderStopLoss() >= OrderOpenPrice())

{

if (DonchianLowH4 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowH4, OrderTakeProfit(), OrderExpiration(), Yeşil);

}

}

}

Bazıları ne şaşırttı.

Kodun amacı şudur:

1. M5 Grafiğinde daha düşük Donchian Kanalı'nı OrderOpenPrice'a kadar izlemek için stoploss'u değiştirin. Stop loss, OrderOpenPrice'ın ötesinde M5 tablosundaki Donchian Channel'ı takip etmemek. Hatta kırmak için hareket eder.

2. Bazen büyük bir mum OrderOpenPrice'ın ötesinde kapanır ve bu nedenle kodun ikinci bölümü onu yalnızca başabaş noktasına geri getirmektir.

3. Kaybı durdur, H4 tablosundaki Donchian Kanalı OrderOpenPrice'ı aştığında H4 tablosundaki Donchian Low'u izlemektir.

Donchian Kanalları şu şekilde kodlanmıştır:

DonchianLowM5 = iLow(NULL, TimingChart, iLowest(NULL, TimingChart, MODE_LOW, TimingDNCPperiod, TimingChartShift + 1));

DonchianHighM5 = iHigh(NULL, TimingChart, iHighest(NULL, TimingChart, MODE_HIGH, TimingDNCPperiod, TimingChartShift + 1));

Günlüğü kontrol ettim ve stoploss, TAM OLARAK OrderOpenPrice olarak değişiyor (aşağıda değil, M5 grafiğindeki Donchian Low'u izlemesine neden olacak bir kesir pipiyle bile.

Bunu ne yaptığını bilen var mı?

 
crsnape@btinternet.com:
Hepinize merhaba,

Değişiklik durdurma kaybı emrimin neden düzgün çalışmadığını bilen var mı?

DonchianLowM5, OrderOpenPrice'ın üzerine çıktığında, stop loss, DonchianLowM5 ve OrderOpenPrice arasında çok hızlı bir şekilde hareket eder.

Bu kod (üzgünüm, düzgün bir şekilde nasıl yapıştıracağımı bilmiyorum).

//--- Kaybı durdurma hareketi

if (Sipariş Toplamı() > 0)

{

for (int i = 0; i < OrdersTotal(); i++)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_BUY)

{

if (OrderStopLoss() < OrderOpenPrice())

{

if (DonchianLowM5 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowM5, OrderTakeProfit(), OrderExpiration(), Yeşil);

}

}

if (OrderStopLoss() > OrderOpenPrice())

{

if (DonchianLowH4 <= OrderOpenPrice())

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Yeşil);

}

}

if (OrderStopLoss() >= OrderOpenPrice())

{

if (DonchianLowH4 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowH4, OrderTakeProfit(), OrderExpiration(), Yeşil);

}

}

}

Bazıları ne şaşırdı.

Kodun amacı şudur:

1. M5 Grafiğinde daha düşük Donchian Kanalı'nı OrderOpenPrice'a kadar izlemek için stoploss'u değiştirin. Stop loss, OrderOpenPrice'ın ötesinde M5 tablosundaki Donchian Channel'ı takip etmemek. Hatta kırmak için hareket eder.

2. Bazen büyük bir mum OrderOpenPrice'ın ötesinde kapanır ve bu nedenle kodun ikinci bölümü onu yalnızca başabaş noktasına geri getirmektir.

3. Kaybı durdur, H4 tablosundaki Donchian Kanalı OrderOpenPrice'ı aştığında H4 tablosundaki Donchian Low'u izlemektir.

Donchian Kanalları şu şekilde kodlanmıştır:

DonchianLowM5 = iLow(NULL, TimingChart, iLowest(NULL, TimingChart, MODE_LOW, TimingDNCPperiod, TimingChartShift + 1));

DonchianHighM5 = iHigh(NULL, TimingChart, iHighest(NULL, TimingChart, MODE_HIGH, TimingDNCPperiod, TimingChartShift + 1));

Günlüğü kontrol ettim ve stoploss, TAM OLARAK OrderOpenPrice olarak değişiyor (aşağıda değil, M5 grafiğindeki Donchian Low'u izlemesine neden olacak bir kesir pipiyle bile.

Bunu ne yaptığını bilen var mı?

DonchianLowM5 ve DonchianLowH4 kullanıyorsunuz (bunların farklı değerler olduğunu varsayıyorum). Bu sana sorun çıkarabilir

 

Merhaba Mladen,

Cevabın için teşekkürler.

DonchianLowM5 ve DonchianLowH4 farklı değerlerdir ancak her birinin kendi amacı vardır. DonchianLowM5, SL'yi bir ticaretin ilk aşamalarında bile kırılacak şekilde ayarlamak için kullanılır. DonchianLowH4, SL'yi takip eden bir durdurma mekanizması olarak ayarlar. Bu, yalnızca DonchianLowH4, OrderOpenPrice'ı geçtiğinde yürürlüğe girmelidir.

Bu konuyu biraz daha inceledim ve sorunu bulmuş olabilirim. OrderModify işlevinin SL'yi tam olarak OrderOpenPrice olarak yeniden konumlandırıp konumlandırmadığını belirlemek istedim. Ama değil. Günlüğümde OrderOpenPrice'ın 1.12224, 5 haneli hassasiyette olduğu belirtiliyor ve yine de aşağıdaki Print fonksiyonu OrderOpenPrice'ın sadece 4 haneli olduğunu belirtiyor. Yani SL 5 rakamını değil bu 4 rakamlı rakamı kullanacak. 5 rakamı kullanmak için ona ihtiyacım var.

ordermodify'ın SL'yi TAM OLARAK 5 basamaklı orderopenprice değerine ayarlamasını nasıl sağlayabilirim?

Bu benim kodum:

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Yeşil);

Print("SL, Sipariş Açık Fiyatına değiştirildi", OrderOpenPrice());

}

Bunu denedim ama çalışmıyor:

OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice(), 5), OrderTakeProfit(), OrderExpiration(), Yeşil);

Print("SL, Sipariş Açık Fiyatına değiştirildi", OrderOpenPrice());

Aracımın 5 hanesi var çünkü dergi, 1.12224'te siparişi açtığı fiyatı onaylıyor.

Umarım açıklamam mantıklıdır. Herhangi bir fikir?

 
crsnape@btinternet.com:
Merhaba Mladen,

Cevabın için teşekkürler.

DonchianLowM5 ve DonchianLowH4 farklı değerlerdir ancak her birinin kendi amacı vardır. DonchianLowM5, SL'yi bir ticaretin ilk aşamalarında bile kırılacak şekilde ayarlamak için kullanılır. DonchianLowH4, SL'yi takip eden bir durdurma mekanizması olarak ayarlar. Bu, yalnızca DonchianLowH4, OrderOpenPrice'ı geçtiğinde yürürlüğe girmelidir.

Bu konuyu biraz daha inceledim ve sorunu bulmuş olabilirim. OrderModify işlevinin SL'yi tam olarak OrderOpenPrice olarak yeniden konumlandırıp konumlandırmadığını belirlemek istedim. Ama değil. Günlüğümde OrderOpenPrice'ın 1.12224, 5 haneli hassasiyette olduğu belirtiliyor ve yine de aşağıdaki Print fonksiyonu OrderOpenPrice'ın sadece 4 haneli olduğunu belirtiyor. Yani SL 5 rakamını değil bu 4 rakamlı rakamı kullanacak. 5 rakamı kullanmak için ona ihtiyacım var.

ordermodify'ın SL'yi TAM OLARAK 5 basamaklı orderopenprice değerine ayarlamasını nasıl sağlayabilirim?

Bu benim kodum:

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Yeşil);

Print("SL, Sipariş Açık Fiyatına değiştirildi", OrderOpenPrice());

}

Bunu denedim ama çalışmıyor:

OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice(), 5), OrderTakeProfit(), OrderExpiration(), Yeşil);

Print("SL, Sipariş Açık Fiyatına değiştirildi", OrderOpenPrice());

Aracımın 5 hanesi var çünkü dergi, 1.12224'te siparişi açtığı fiyatı onaylıyor.

Umarım açıklamam mantıklıdır. Herhangi bir fikir?

4 haneli hassasiyetle basılan fiyatı almanız sorun değil : sadece şunu kullanın Print(DoubleToStr(OrderOpenPrice(),Digits)); ve doğru bir çıktı alacaksınız. Sorun başka bir şey ve tamamen farklı iki fiyatı karşılaştırıyorsanız, bu sorunlara neden olabileceğini düşündüm.

 

Ah doğru.

Ne demek istiyorsun? Parantez yapımı yanlış mı anladım?

Kodun duruma bağlı olarak DonchianLowM5 veya DonchianLowH4'ü seçmesi gerekiyor.

Parantez oluşturma olabilir, oluşturma her kod öğesi için yanlıştır.

 

Kodu basitleştirmeyi deneyin. Ekteki gibi bir şey

Not: Aklınızdaki mantığın bu olup olmadığını kontrol edin

Dosyalar:
 

merhaba, burada iki gösterge var, biri RSI'ye dayalı, diğeri güç endeksine dayalı, ancak sorun bana rsi görünümlü eğriler soruyor, bu benim istemediğimi gösteriyor, eğer bir çözümünüz varsa, açıkçası size dosyayı gönderebilirim gerekirse yardımın için teşekkürler ... İngilizce "google traductor" için özür dilerim