Sonsuza kadar harika ve korkunç MT4 (veya bir geçiş stratejisinin nasıl doğru bir şekilde geliştirileceği) - sayfa 25

 
Igor Makanu :

LAN'da bırakılan sunucu

Bu sunucu (daha doğrusu aracının yazılımında) istenmeyen postalardan korunmaktadır. Önümüzdeki hafta güncellemeyi planlıyorlar, o zaman frenler ortadan kalkacak.

 
fxsaber :

Bu sunucuyu kontrol etmem gerekecek. Burada önerilen koltuk değneği , kimin için önemli görünüyor, kontrol etmek güzel olurdu.

Bir süre sonra bu konuya dönmek istemiyorum. Varsa, hataları hemen belirtmek daha iyidir.

MT4 stilinde henüz bir seçenek yok mu?

Sadece farklı sunucularda 100 pozisyon açan bir komut dosyası mı çalıştırıyorsunuz?

 
Andrey Khatimlianskii :

MT4 stilinde henüz bir seçenek yok mu?

Henüz başlamadım. Büyük olasılıkla, kullanıcı koddaki hiçbir şeyi değiştirmeyecektir. Ek etkileşimde bulunun işlevsellik bir makro aracılığıyla olacaktır.

Sadece farklı sunucularda 100 pozisyon açan bir komut dosyası mı çalıştırıyorsunuz?

Evet, farklı sunucularda, ancak yalnızca farklı bir komut dosyası . Çalışma dakikaları içinde iki katına çıkma olmazsa, test başarıyla geçmiştir. Aksi takdirde - başarısızlık.

Библиотеки: TradesID
Библиотеки: TradesID
  • 2021.03.29
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: TradesID
 
fxsaber :

Henüz başlamadım. Büyük olasılıkla, kullanıcı koddaki hiçbir şeyi değiştirmeyecektir. Ek etkileşimde bulunun işlevsellik bir makro aracılığıyla olacaktır.

Yapılmış.

Библиотеки: MT4Orders
Библиотеки: MT4Orders
  • 2021.02.09
  • www.mql5.com
MT4Orders: Автор: fxsaber...
 

Öyleydi.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Sonsuza kadar harika ve korkunç MT4 (veya bir geçiş stratejisinin nasıl doğru bir şekilde geliştirileceği)

fxsaber , 2021.05.11 09:05

Bir pozisyon beklemeden - sonuç hemen.

 #include <fxsaber\TradesID\ByPass.mqh>
#include <MT4Orders.mqh>

#define Ask SymbolInfoDouble ( _Symbol , SYMBOL_ASK )

void OnStart ()
{
  BYPASS ByPass;
  
  MT4ORDERS::OrderSend_MaxPause = 0 ; // Запрет на ожидание позиции после OrderSend
  
   while ( OrdersTotal () < 30 )
     if (ByPass.Is())
      ByPass += OrderSend ( _Symbol , OP_BUY, 0.1 , Ask, 0 , 0 , 0 );      
    
   Print ( OrdersTotal ());
}

hale gelmiştir.

 #define MT4ORDERS_BYPASS_MAXTIME 1000000 // Максимальное время (в мкс.) на ожидание синхронизации торгового окружения
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define Ask SymbolInfoDouble ( _Symbol , SYMBOL_ASK )

void OnStart ()
{
  MT4ORDERS::OrderSend_MaxPause = 0 ; // Запрет на ожидание позиции после OrderSend
  
   while ( OrdersTotal () < 30 )
     OrderSend ( _Symbol , OP_BUY, 0.1 , Ask, 0 , 0 , 0 );       
    
   Print ( OrdersTotal ());
}


Artık güvenilirlik de dahil olmak üzere MT4 versiyonundan farklı değil.

MT5'te yazması çok zor olan örneklerin uygulanması, olması gerektiği gibi kolaylaştı.

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Sonsuza kadar harika ve korkunç MT4 (veya bir geçiş stratejisinin nasıl doğru bir şekilde geliştirileceği)

İgor Makanu , 2021.05.10 10:28

şu şekilde çalışıyor gibi görünüyor:

 #include <Trade\Trade.mqh>
void OnStart ()
{
   CTrade Trade;
   while ( PositionsTotal () < 10 )
   {
       if ( OrdersTotal () > 0 ) continue ;
       if (!Trade.Buy( 0.01 )) continue ;
       if ( OrdersTotal () == 0 && PositionsTotal () >= 10 ) return ;
   }
}

ama çok yavaş ve çözüm şöyle böyle

10. pozisyonu açmak için bir emir verdikten sonra, bir sonraki iterasyonda koşul karşılanırsa ne olacak?

 while ( PositionsTotal () < 10 )

PositionTotal henüz güncellenmedi (=9) ve sipariş zaten geçmişe gitti ve OrdersTotal()==0.

1. Sonra başka bir Trade.Buy() yürütülecek mi?

2. Teorik olarak, bu arka arkaya birkaç yineleme olabilir mi?

Yoksa bir şey mi kaçırdım?

 
mktr8591 :

10. pozisyonu açmak için bir emir verdikten sonra, bir sonraki iterasyonda koşul karşılanırsa ne olacak?

PositionTotal henüz güncellenmedi (=9) ve sipariş zaten geçmişe gitti ve OrdersTotal()==0.

1. Sonra başka bir Trade.Buy() yürütülecek mi?

2. Teorik olarak, bu arka arkaya birkaç yineleme olabilir mi?

Yoksa bir şey mi kaçırdım?

bunlar onun yüksek frekanslı ilgi alanları, geri kalanların yeterli zaman aşımı var ve ikinci çalıştırmada sorun yok

MT4'te bu şekilde inşa edildiğinden eminim, beklenti geldi
 
mktr8591 :

10. pozisyonu açmak için bir emir verdikten sonra, bir sonraki iterasyonda koşul karşılanırsa ne olacak?

PositionTotal henüz güncellenmedi (=9) ve sipariş zaten geçmişe gitti ve OrdersTotal()==0.

1. Sonra başka bir Trade.Buy() yürütülecek mi?

Elbette olacak. Sonuçta koddaki mantık tamamen aynı.

2. Teorik olarak, bu arka arkaya birkaç yineleme olabilir mi?

Buy doğruysa, bir sonraki yinelemede OrdersTotal() == 0 olma olasılığı neredeyse sıfırdır. Yani, 12 pozisyon açmak pratikte mümkün değil.


Burada çok ilkel bir durum gösterilmektedir. Örtüşme genellikle şöyle görünür:

  1. EmirToplam = 1, PozisyonToplam = 0 limit emri var
  2. Sınır yerine getiriliyor. Sipariş Toplamı = 0, Pozisyon Toplamı = 0.
  3. Bir pozisyon açılır. Sipariş Toplamı = 0, Pozisyon Toplamı = 1.

Yani ikinci adımda danışman hiçbir şey olmadığını görür ve bir sınır koyar. Sonuç olarak, iki açık pozisyon.

İkinci nokta, MT5'in senkronize olmamasıdır. Ve şimdi koltuk değneği onu atlıyor.

 

Teşekkür ederim.

Bununla ilgili olarak:

fxsaber :

Çiftler MT5 zorlukları değil, Total()-fonksiyonları false gösterdiğinde mimari bir hatadır.

Bunun bir hata olduğunu söyleyebilirsiniz, ancak farklı şekilde sunabilirsiniz :-)

PositionsTotal() açık pozisyonların sayısı değil, açık pozisyonlar Tablosunun boyutudur. Konum tablosu aslında bir önbellektir, anlaşma geçmişi önbelleğine benzer, yalnızca talep üzerine değil, otomatik olarak, ancak anında değil, hafif bir gecikmeyle güncellenir. Bu nedenle, halihazırda açık pozisyonları içermeyebilir veya zaten kapalı olanları içerebilir.

OrdersTotal() ile aynı.

Sertifika bu şekilde yazılırsa çok daha az soru, şikayet ve yanlış anlama olacaktır.

Ve "MetaTrader 5'teki Emirler, pozisyonlar ve fırsatlar" makalesinde buna dikkat edebilirsiniz (şimdi orada belirsizdir - " PositionsTotal() işlevinin yürütülmesinin sonucu, pozisyon önbelleğinin doldurulmasına bağlı değildir - her zaman tüm semboller için terminal veritabanındaki gerçek açık pozisyon sayısını döndürür .")


PS Ama sonra doğal bir soru ortaya çıkıyor - neden koltuk değneği üretmemek için canlı emirler, pozisyonlar, anlaşmalar ve yürütülen emir tablolarının senkronizasyon durumunu belirlemek için bir sistem işlevi/bayrağı yapmıyorsunuz?
 
mktr8591 :

PS Ama sonra doğal bir soru ortaya çıkıyor - neden koltuk değneği üretmemek için canlı emirler, pozisyonlar, anlaşmalar ve yürütülen emir tablolarının senkronizasyon durumunu belirlemek için bir sistem işlevi/bayrağı yapmıyorsunuz?

Büyük olasılıkla, içeride böyle bir bayrak yok.

Neden: