Cevap için teşekkürler. Böyle bir sorunun ortaya çıkmasına bile şaşırdım. Yine de, belki de gördüklerimi ve soruya neyin sebep olduğunu yanlış anladım.
Şimdi, belirli algoritmaların hangi yollarla (benimkinden farklı ve belki daha verimli) uygulandığını görmek için başka birinin koduna bakıyorum. Şimdi kötü şöhretli Ilan 1.6 EA'ya bakıyorum (ekli). Farklı parçalardan bir araya getirildiği ve daha sonra yeniden birleştirildiği görülebilir. Ancak burada, 337 satırında, özel bir takip eden durdurma işlevi bildirilir (her ne kadar kullanımı için bayrak en başta sıfıra zorlanmış olsa da). Bu işlev 52. satırda çağrılır.
Sorum, yukarıda bahsedilen takip eden durdurmanın açık emirleri (ve birkaç tane olabilir) zararı durdurarak, orijinal kar almalarını koruyarak değiştirmesi, ANCAK bu emirleri açılış fiyatı (OrderModify işlevinin ikinci parametresi) aynı değer (AveragePrice) olarak ayarlaması nedeniyle ortaya çıktı. , 173 ve 178 satırlarında hesaplanmıştır).
Veya bir açık emri değiştirirken, bu parametre (açık fiyat) sunucu tarafından basitçe dikkate alınmaz ve herhangi bir fiyat ayarlanabilir mi?
artmedia70 : Bir piyasa pozisyonunu değiştirirken, fiyat ayarlanmalı ve pozisyon açılış fiyatına eşit olmalıdır: OrderOpenPrise()
O zaman bu işlev sizce çalışmayacak mı? Test etmedim, ama bana öyle geliyor ki, çalışan bir kodun parçası (bu Ilan, en azından hata ayıklanmış bir şeyden açıkça yeniden oluşturuldu). Yoksa hala sakar kod mu?
void TrailingAlls( int pType, int stop, double AvgPrice) {
int profit;
double stoptrade;
double stopcal;
if (stop != 0 ) {
for ( int trade = OrdersTotal () - 1 ; trade >= 0 ; trade--) {
if ( OrderSelect (trade, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() != Symbol () || OrderMagicNumber() != MagicNumber) continue ;
if (OrderSymbol() == Symbol () || OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) {
profit = NormalizeDouble ((Bid - AvgPrice) / Point , 0 );
if (profit < pType) continue ;
stoptrade = OrderStopLoss();
stopcal = Bid - stop * Point ;
if (stoptrade == 0.0 || (stoptrade != 0.0 && stopcal > stoptrade)) OrderModify(OrderTicket(), AvgPrice, stopcal, OrderTakeProfit(), 0 , Aqua);
}
if (OrderType() == OP_SELL) {
profit = NormalizeDouble ((AvgPrice - Ask) / Point , 0 );
if (profit < pType) continue ;
stoptrade = OrderStopLoss();
stopcal = Ask + stop * Point ;
if (stoptrade == 0.0 || (stoptrade != 0.0 && stopcal < stoptrade)) OrderModify(OrderTicket(), AvgPrice, stopcal, OrderTakeProfit(), 0 , Red);
}
}
Sleep ( 1000 );
}
}
}
}
Merhaba, 3 mum stratejisi için bir danışman yazmanız gerekiyor.Ticaret, piyasa gürültüsünden arındırılmış Renko çizelgelerinde gerçekleştirilir.Bir yönde ardışık üç çubukla, alım veya satım emri açın, zararı durdur ön çubuğun üst kısmı, mumu kapattıktan sonra, stop loss'u önde gelen çubuğa taşıyın
PS Yerinde olsam, bu kodda "verimli algoritmalar" aramazdım - görünüşe göre insanlar kodu orada yazmış, orada ne yaptığını gerçekten anlamamışlar ...
Evet, kod çok fazla fazlalık ve daha fazlasıyla çok spesifik. Ancak ben algoritmalarla pek ilgilenmiyorum, temel fikri uygulama yaklaşımıyla ilgileniyorum. Genel resme veya başka bir şeye bakıyorum. Ayrı işlevlerde ne alınır, benimkinin aksine aynı izlemenin nasıl uygulandığı vb. Kendi kendimi yetiştirdim ve bu sadece benim için faydalı :)
mesela 1200 puanlık yerde zaten bir sipariş var.. ve mesela fiyat düşüyordu ve yıldızlar öyle sıralanmış ki bu yere sipariş vermeniz gerekiyor.. ve sipariş zaten verilmiş ayakta ve bakiyeyi gerekli olanın altına düşürmemek için tek seferde 2 sipariş vermemek için diyelim
O zaman bu işlev sizce çalışmayacak mı? Test etmedim, ama bana öyle geliyor ki, çalışan bir kodun parçası (bu Ilan, en azından hata ayıklanmış bir şeyden açıkça yeniden oluşturuldu). Yoksa hala sakar kod mu?
Sevgili programcılar, birinin birkaç boş dakikası varsa, lütfen yanıt verin. işin püf noktası şu. Standart MACD basit Uzman Danışmanını yeniden yapmak istiyorum, ancak programlamada tam bir 0'ım.
Ve danışman danışmanın tek bir siparişle değil, bir ızgara, durma ve sihirle çalışması için değiştirmek istiyorum.
Eklemek istediğim değişkenler şunlardır:
Stoploss = tüm şebeke için aynı seviyede bulunur, örneğin EUR / USD = 200pp'ye eşittir. ve ızgaradaki tüm siparişler için 1.3450 seviyesinde bulunur
MaxOpenOrder = ızgaradaki maksimum sipariş sayısı, örneğin if=3, ardından ızgarada maks. sipariş sayısı 3 olacak
Dist = siparişler arasındaki mesafe (ertelenmiş)
Lommmultiplicator = sonraki grid sırasının lot artış faktörü.
büyü=sihirli sayı
İşlemden çıkış, kaynak koddaki gibi gerçekleştirilir, yani. tüm ızgara siparişleri, 1. sıranın kapatıldığı anda kapatılır.
aslında hepsi bu
Birisi cevap verirse çok minnettar olacağım!
Belki birisi zaten sahiptir. hayata geçirilen hazır bir Uzman Danışman da işe yarayacaktır.
mesela 1200 puanlık yerde zaten bir sipariş var.. ve mesela fiyat düşüyordu ve yıldızlar öyle sıralanmış ki bu yere sipariş vermeniz gerekiyor.. ve sipariş zaten verilmiş ayakta ve bakiyeyi gerekli olanın altına düşürmemek için tek seferde 2 sipariş vermemek için diyelim
Bunun gibi bir şey:
//+----------------------------------------------------------------------------+bool ExistOrdersByPrice( string sy, int op, int mn, double pp) {
int i, k= OrdersTotal ()- 1 ;
for (i=k; i>= 0 ; i--) {
if ( OrderSelect (i,SELECT_BY_POS)) {
if (OrderMagicNumber()!=mn) continue ;
if (OrderSymbol()!=sy) continue ;
if (OrderType()!=op) continue ;
if ( MathAbs (OrderOpenPrice()-pp)< 0.5 * Point ) return ( true );
}
elsePrint ( "FUNC ExistOrdersByPrice() : ошибка выбора ордера " + GetLastError ());
}
return ( false );
}
//+----------------------------------------------------------------------------+
Magic ile 1.35000 fiyatında mevcut sembol üzerinde BuyStop emri olup olmadığını kontrol etmek için fonksiyonu çağırıyoruz:
//+----------------------------------------------------------------------------+if (!ExistOrdersByPrice( Symbol (), OP_BUYSTOP, Magic, 1.35000 )) {
// тут код, если нет такого ордера
}
else {
// тут код, если есть такой ордер
}
//+----------------------------------------------------------------------------+
Tabii ki teşekkürler, ama soruyu okuyamayacak kadar tembelsen, o zaman cevap vermenin anlamı ne? Göstergedeki seviyelerle çalışmak için mevcut olan iki fonksiyonda bunların değerini, kalınlığını, rengini ve stilini değiştirebilirim. Ama açıklamaya erişimim yok. Yine, cevabı bilen var mı? Belki karşı karşıya?
Neye ihtiyacım olduğunu görebilmeniz için bir resim ekledim.
Cevap için teşekkürler. Böyle bir sorunun ortaya çıkmasına bile şaşırdım. Yine de, belki de gördüklerimi ve soruya neyin sebep olduğunu yanlış anladım.
Şimdi, belirli algoritmaların hangi yollarla (benimkinden farklı ve belki daha verimli) uygulandığını görmek için başka birinin koduna bakıyorum. Şimdi kötü şöhretli Ilan 1.6 EA'ya bakıyorum (ekli). Farklı parçalardan bir araya getirildiği ve daha sonra yeniden birleştirildiği görülebilir. Ancak burada, 337 satırında, özel bir takip eden durdurma işlevi bildirilir (her ne kadar kullanımı için bayrak en başta sıfıra zorlanmış olsa da). Bu işlev 52. satırda çağrılır.
Sorum, yukarıda bahsedilen takip eden durdurmanın açık emirleri (ve birkaç tane olabilir) zararı durdurarak, orijinal kar almalarını koruyarak değiştirmesi, ANCAK bu emirleri açılış fiyatı (OrderModify işlevinin ikinci parametresi) aynı değer (AveragePrice) olarak ayarlaması nedeniyle ortaya çıktı. , 173 ve 178 satırlarında hesaplanmıştır).
Veya bir açık emri değiştirirken, bu parametre (açık fiyat) sunucu tarafından basitçe dikkate alınmaz ve herhangi bir fiyat ayarlanabilir mi?
Bir piyasa pozisyonunu değiştirirken, fiyat ayarlanmalı ve pozisyon açılış fiyatına eşit olmalıdır: OrderOpenPrise()
PS Yerinde olsam, bu kodda "verimli algoritmalar" aramazdım - görünüşe göre insanlar kodu orada yazmış, orada ne yaptığını gerçekten anlamamışlar ...
Bu "aptallığı" bulmak için kibar olun, Pascal tarafından eziyet edilen insanlara acıyın.
Bir piyasa pozisyonunu değiştirirken, fiyat ayarlanmalı ve pozisyon açılış fiyatına eşit olmalıdır: OrderOpenPrise()
O zaman bu işlev sizce çalışmayacak mı? Test etmedim, ama bana öyle geliyor ki, çalışan bir kodun parçası (bu Ilan, en azından hata ayıklanmış bir şeyden açıkça yeniden oluşturuldu). Yoksa hala sakar kod mu?
PS Yerinde olsam, bu kodda "verimli algoritmalar" aramazdım - görünüşe göre insanlar kodu orada yazmış, orada ne yaptığını gerçekten anlamamışlar ...
Doğru yerde - hangisi?
mesela 1200 puanlık yerde zaten bir sipariş var.. ve mesela fiyat düşüyordu ve yıldızlar öyle sıralanmış ki bu yere sipariş vermeniz gerekiyor.. ve sipariş zaten verilmiş ayakta ve bakiyeyi gerekli olanın altına düşürmemek için tek seferde 2 sipariş vermemek için diyelim
O zaman bu işlev sizce çalışmayacak mı? Test etmedim, ama bana öyle geliyor ki, çalışan bir kodun parçası (bu Ilan, en azından hata ayıklanmış bir şeyden açıkça yeniden oluşturuldu). Yoksa hala sakar kod mu?
Şey... kod gerçek değil. En azından.
Lommmultiplicator = sonraki grid sırasının lot artış faktörü.
büyü=sihirli sayı
İşlemden çıkış, kaynak koddaki gibi gerçekleştirilir, yani. tüm ızgara siparişleri, 1. sıranın kapatıldığı anda kapatılır.
mesela 1200 puanlık yerde zaten bir sipariş var.. ve mesela fiyat düşüyordu ve yıldızlar öyle sıralanmış ki bu yere sipariş vermeniz gerekiyor.. ve sipariş zaten verilmiş ayakta ve bakiyeyi gerekli olanın altına düşürmemek için tek seferde 2 sipariş vermemek için diyelim
Bunun gibi bir şey:
Magic ile 1.35000 fiyatında mevcut sembol üzerinde BuyStop emri olup olmadığını kontrol etmek için fonksiyonu çağırıyoruz:
Dokümantasyondan bahsediyorsak, MetEditor'da kelimeyi seçin ve F1'e basın. Veya çevrimiçi, örneğin:
https://docs.mql4.com/en/customind/SetLevelStyle
Tabii ki teşekkürler, ama soruyu okuyamayacak kadar tembelsen, o zaman cevap vermenin anlamı ne? Göstergedeki seviyelerle çalışmak için mevcut olan iki fonksiyonda bunların değerini, kalınlığını, rengini ve stilini değiştirebilirim. Ama açıklamaya erişimim yok. Yine, cevabı bilen var mı? Belki karşı karşıya?
Neye ihtiyacım olduğunu görebilmeniz için bir resim ekledim.