Birçokları için ilginç bir konu: MetaTrader 4 ve MQL4'te neler olacak - büyük değişiklikler yolda - sayfa 66

 
MetaDriver :

Yayılma, tüccarın komisyonundan daha yüksekse (bu tam olarak küçüklerde durum), tüccarların spread içinde limitlerle pip yapması (yaklaşan maçın koşulları altında) karlı hale gelir. Bu da otomatik olarak daha düşük spreadlere yol açar ve cross'ları ticaret için daha çekici hale getirir....vb.

Kısacası - git derslerini öğren .. :)

Peki olmayacak
 
Mischek :
Peki olmayacak

Tam olarak ne olmayacak? Eşleştirme mi yoksa otomatik sonuçları mı?

Daha spesifik olarak, lütfen.. ;)

 
MetaDriver :

Tam olarak ne olmayacak? Eşleştirme mi yoksa otomatik sonuçları mı?

Daha spesifik olarak, lütfen.. ;)

ders yapılmayacak, olan bu. :)
 
MetaDriver :

Tam olarak ne olmayacak? Eşleştirme mi yoksa otomatik sonuçları mı?

Daha spesifik olarak, lütfen.. ;)

abarttığın sonuçlar
 
MetaDriver :

Tam olarak ne olmayacak?

Hiçbir şey olmayacak . Büyük bir meta tüccarı. ve sessizlik)
 
MetaDriver :

Ne kadar bir araya geldiğinizi bile bilmiyorsunuz. Eşleştirmenin MT5 platformlarında yaygın olarak tanıtılması, bir anlamda bir pazar "bombası" haline gelebilir. Çünkü teorik olarak çok yakın bir gelecekte forex piyasasında "piyasa karşıtı bir devrime" yol açabilir. Belki "devrim" terimi abartı, belki de değil. Çünkü herhangi bir tüccar, piyasa yapıcıyı (fiyatları etkileme) yapabilecektir. Dünya pazarının önemli kesimlerini kapsayan yerel toplayıcıların kitlesel dağılımı ile... likidite sağlayıcılarının para birimi fiyatlandırması üzerindeki tekel (neredeyse) gücü dönemi sonsuza kadar sona erebilir (bitebilir).

Bu arka plana karşı, "çağ açan" bir soru ortaya çıkıyor: Tüccarlar "yeni çağa" hazır mı? "Geniş tüccarlar", yayılma oluşturma algoritmalarını test etmek, optimize etmek ve hata ayıklamak için hangi düzenli araçlara sahiptir?

Ama hiçbiri.

Tik geçmişi yoktur. Test cihazında hata ayıklama uygulanmadı. Teklif tabanının formatı, limit emirleri kullanarak HFT stratejilerini test etmek ve optimize etmek için herhangi bir şans bırakmaz ( yani, tüm yayılma oluşturan algoritmalar böyledir ).

katılıyorum. Sadece bir karşı ifade: Mevcut teklif formatı, geri dönüş stratejileri için olduğu kadar koparma stratejileri için de aptaldır. Ancak önerildiği gibi basit bir yöntemle tedavi edilemez. Önümüzdeki durumda "dramatik ana hatlar" (yukarıya bakınız) edinmesine rağmen, en az bir strateji sınıfını iyileştirmek mümkündür. Ayrıca, diğer stratejiler zarar görmez! Mağdurları görürseniz, yayılmanın önerilen şekilde değiştirilmesinin test/optimizasyon gerçekçiliğini kötüleştireceği bir strateji sınıfı örneği verin.

Burada tamamen katılıyorum. Aslında, test cihazı hala bir kenedir. Yani aslında sadece düzenli tarihin formatından bahsediyoruz. Gerektiğinde "standart dışı alıntılar" kullanma olasılığının yanı sıra.
MetaSürücü :

Biraz daha "köşeye bakmaya" çalışıyorum. // Yazdığınız her şey doğru.

"Kitlesel piyasa yapıcı", tam olarak tanımladığınız senaryoların işleyişi nedeniyle, sonunda "evrensel eşanjör" pozisyonunun dolar tarafından kaybedilmesine yol açabilir. Bu, "reşit olmayanlar" üzerindeki spreadlerdeki büyük düşüşün basit bir sonucudur. Döviz piyasası daha dinamik ve verimli hale gelecek. Ve kazanacak olan, tahmine dayalı (fiyatları manipüle etmeye değil) ticaret sistemleri olacaktır. Bana göre, döviz kurlarının piyasa dışı herhangi bir düzenlemesi büyük suistimallerle doludur. Aynı zamanda, ne kadar asil hedefler ilan edilirse edilsin - doğrulama için içeriden birinden para kazanma olasılığı her zaman vardır ve herhangi bir yasal mekanizmanın buna direnebileceğini varsaymak aptalcadır.

Kısacası - "adil forex" ile ilgileniyorum, belki kişisel olarak böyle bir geri dönüşten finansal olarak fayda sağlayamayacağım (ve belki de yapacağım). Ama eğer birleşirsem, en azından birleştiğimi bileceğim çünkü aptal bir algoritma geliştirdiğim için aptalca "ayakkabılı" olduğum için değil.

Şimdiye kadar yorum yok. Daha fazla düşüneceğim. Sadece duraklarda sabit bir lot ticareti yapan tek bir karlı strateji görmedim. Hiçbiri. Teorik olarak, bu çok anlaşılabilir. (Var olduklarını söylemek, H-volatilitesinin sürekli olarak 2.0'dan büyük olduğu bazı ticaret ufukları olduğunu söylemektir) Gördüğüm tüm çalışma trendi stratejileri ya piyasa emirleriyle tamamlanıyor ya da limit emirleriyle geri çekilmelere giriyor / çıkıyor. (veya pazarlar). Piyasalar için HighAsk/LowBid geçmişi, LowAsk/HighBid'den daha değerli değildir. Onlar için OHLC çubuğunun tüm noktalarında yayılma hakkında bilgi daha önemlidir.

Son olarak, HighBid+LowAsk gibi yarım ölçülerin test cihazını yeterli kılmak için yeterli olmadığı anlaşılır.

 
Urain :

Son olarak, HighBid+LowAsk gibi yarım ölçülerin test cihazını yeterli kılmak için yeterli olmadığı anlaşılır.

Yazılanlardan böyle bir sonuç çıkarırsanız ... o zaman hiçbir şey anlamadınız)
 
TheXpert :
Yazılanlardan böyle bir sonuç çıkarırsanız ... o zaman hiçbir şey anlamadınız)

Peki, ne yapacaksın?! Gelecek, birkaç kelime söyleyecek - ve hepsi bu, birkaç uykusuz gece garantili. )

Gönderi benim için değildi, ama şimdi ben de uyumayacağım.

 
MetaDriver :

(Var olduklarını söylemek, H-volatilitesinin sürekli olarak 2.0'dan büyük olduğu bazı ticaret ufukları olduğunu söylemektir)

Eh, bu genellikle modaya uygun bir kâsedir . Ayrıca sürekli olarak 2x'ten daha az. Sıra boyunca H-ox'un sürekli olarak 2'den az veya daha fazla olması için böyle araçlar yoktur. Belirli alanlarda / belirli anlarda. Trendi ne zaman ticaret yapacağınızı, ne zaman geri döneceğinizi bilin. Pazarı filtreleyin
 
hrenfx :

Yeni bir ticaret için test cihazımı geliştirmem gerekiyordu. Eskisinin kodunu anlamak, yeni bir tane yazmaktan çok (birkaç hafta öldürdüm - zaman zaman yaklaşımlar) kaybetmek için daha fazla zaman.

Bu yüzden sıfırdan yeni bir test cihazı yazmak 5 saatimi aldı (hata ayıklama ile). Özellikleri (Başlangıç olarak memnunum):

  • M1 HighBid + çubuk başına LowAsk modeliyle çalışır (sonuçlar MT5 test cihazından daha doğrudur).
  • Bir karakter.
  • TS testinde saniyede yaklaşık 100.000.000 bar (saniyede 277 FOREX yılı) hızı (i7 2700K) boş değil, birçok şey hesaplanıyor. Sürekli piyasada.  
  • Eksik MM - lot yok.
  • Sadece pip olarak kar edin.
  • Ortalama kayma ve komisyonu ayarlayabilme.
  • Kendi optimizasyon kriterlerine sahip bir optimize edici - her biri için, sıralanmış çalışma satırlarıyla ayrı bir dosya oluşturulur (gigabayt alabilir).
  • Test cihazında hata kontrolü yok - Test cihazımın tüm nüanslarını biliyorum, bu yüzden buna izin vermiyorum.
  • TS, biraz kısaltılmış bir MQL4 ile yazılmıştır - gereksiz olanlar atılmıştır. Ancak C++'ın tüm gücünü kullanabilirsiniz.
  • Test cihazı OOP olmadan yazılmıştır - nasıl doğru yapılacağını bilmiyorum. Onlar. neredeyse saf C dili.
  • Kaynaklar ücretsiz C++ ~ 20Kb.
  • Duraklar ve marketler atılır (OrderClose kaldı) - gerekli değil.
  • Her koşu (isteğe bağlı - koşu numarasını belirtin) matta görselleştirilebilir ve incelenebilir. paket - dosya, Eşitlik ve Bakiyeyi değiştirir, basitçe yazar.
  • Genetik yok.
  • OpenCL eksik - yapamam.
  • Tek dişli. Tüm çekirdekleri yüklemek aptalcadır - birkaç optimize ediciyi manuel olarak çalıştırın.
  • Konsol uygulaması.
  • TS giriş parametreleri, test cihazı ayarları ve optimizasyon aralıkları dosyada belirtilmiştir.
  • TS, test cihazıyla birlikte tek bir EXE dosyasında derlenir.
  • Başlamadan önce yalnızca üç dosya vardır: EXE, geçmiş, ayarlar.
  • Optimize edici, çalışmanın mevcut durumu koşulları karşılamıyorsa (örneğin, düşüş çok yüksekse) çalışmayı durdurur.
  • Test cihazının geçmişi, uzun zaman önce yazılmış bir MQL4 komut dosyasıyla hazırlanmıştır.
  • Sipariş tablosu için dinamik bellek ayırma yok - belleği bir kez ayırın ve unutun.
  • Günlük yok - bakmıyorum.
  • Sipariş geçmişi yok - benzer şekilde.
  • Gösterge kavramı ve onunla bağlantılı her şey yoktur - TS için gerekli değildir.
  • Fiyatlar tamsayıdır (uzun int).

Aynı saçmalığı MQL5'te dosyalarsanız, Cloud'u mate modunda kullanabilirsiniz. optimizasyon. Her seferinde yalnızca geçmişi göndermeniz gerekecek - burada bu tür bilgilerin düzenli olarak sıkıştırılmasına ihtiyacınız var.

Toplamda, teorik olarak saniyede ~ 100 milyar barlık bir hıza ulaşmak mümkündür (bir test TS'sinde). Merak ediyorum, aynı papağanlarda MT5 test cihazının tüm bulut üzerindeki performansı nedir?

Saniyede 100 milyar bar, çeşitli araştırma türleri için iyi bir hızdır . Diğer birimlere çevrilirse, bu hız, FOREX dakika geçmişinin, saniyede bir sembol olan yılın ~ 300.000 kez geçtiğini gösterir.

Çoğu zaman dilin sözdizimini öğrenmeye harcandı - sadece googled. Programcı değil .

Mütevazı ihtiyaçlarınız için evrensel bir çerçeve yazmanın büyük bir zaman kaybı olduğunu hemen söylemeliyim. Daha iyi keşfedin. Bir şeyin dikkate alınması gerekiyorsa - sadece ekleyin.

Bu sadece çekirdek, şimdi optimize edici için zor bir araç setine ihtiyacımız var. Burada çok daha fazla zaman alacak - düşünmek zorundasın.

Bütün bunları okudum ve bir insan ya kendi bilincinin akışında tamamen kaybolmuş ya da yazdıklarının en az yarısının basit ve sıradan bir yalan olduğu aklıma geliyor.

Dil konusunda derin bilgisi olmayan kendi kendini yetiştirmiş bir programcı, birkaç saat içinde saniyede 100.000.000 çubuk performansa sahip tek iş parçacıklı bir test cihazı mı yazdı? Buna karşılık: en üst düzeyde profesyonelliğe sahip insanlar, yıllarını yetkin, yüksek performanslı bir HFT test cihazı oluşturmak, onunla çalışmak ve stratejileri doldurmak için tüm ekipler oluşturmak için harcıyorlar, ancak burada bir kişi dizinde bir test cihazı kurmaya karar verdi ve hemen bir test cihazı aldı. Önde gelen (kapalı) HFT platformlarının performansından çok daha yüksek performans.

Saniyede 100.000.000 çubuğu çalıştırabilmek için belleğin hangi bant genişliğine sahip olması gerektiğini hesaplayalım. Her çubuk 4 fiyat + AskLow HighBid'dir ve her biri 64 bit uzunluğunda 6 tamsayı türüyle sonuçlanır ( Tamsayı fiyatları (uzun int) ). Saniyede 100.000.000 bar için,

64 bit * 6 fiyat * 100.000.000 çubuk = 38.400.000.000 bit = 4.800.000.000 bayt = saniyede 4.577 MB .


Bu, böyle bir performansın temelde ve teorik olarak DDR2 533 ve daha yüksek bellek modüllerinde elde edilebileceği anlamına gelir. En azından beyan edilen performans, modern ekipmanın fiziksel sınırıyla karşılaştırılabilir.

Ancak program süresi maliyetleri daha da önemli kısıtlamalar getirir. Onlar göz ardı edilemez. Bu yüzden hızlı bir 64-bit C derleyicisi Win-Lcc 64 aldım ve ağır matematiksel hesaplamalar yapmadan bir dizi barın doğrudan yinelemesinin performansını ölçtüm. Lütfen dikkat: doğrudan bahsediyoruz, yani. en hızlı yineleme. Çevre ve diğer genel masraflarla çalışmadan. Hellfix'in aksine, herkesin derleyebilmesi ve favori derleyicisinde performansı ölçebilmesi için "strateji test cihazımın" tam kaynak kodunu veriyorum:

 #include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define LAPS 10000               //Количество серий
#define ELEMENTS 10000            //Количество баров в одной серии
#define INVOKE                   //Определено, если требуется эмулировать
                                / /вызов функции

//Представление бара
struct bar
{
         long long Open;
         long long High;
         long long Low;
         long long Close;
         long long AskLow;
         long long BidHigh;
};

int main( void )
{
         struct bar bar_array[ELEMENTS];
         //Общее время выполнения стратегии
        clock_t eleps_time = 0 ;
         //Общее время выполения
        clock_t total_time = 0 ;
         //К сожалению заявленный объем памяти (100 000 000 баров) выделить не удалось,
     //поэтому выделяем память порциями, 1000 раз, по 100 000 баров за раз.
        clock_t ttime = clock();
         for ( int lap = 0 ; lap < LAPS; lap++)
        {
                 //Заполняем бары случайными числами
                 for ( int i = 0 ; i < ELEMENTS; i++)
                {
                        bar_array[i].Open = ( long long ) rand ();
                        bar_array[i].High = ( long long ) rand ();
                        bar_array[i].Low = ( long long ) rand ();
                        bar_array[i].Close = ( long long ) rand ();
                        bar_array[i].AskLow = ( long long ) rand ();
                        bar_array[i].BidHigh = ( long long ) rand ();
                         //if(i < 5)
                         //      printf("%i\n", bar_array[i].High);
                }
                 //Эмулируем работу ТС c массивом котировок
                 //Рассчитываем время на выполнение этого блока и суммируем его, получая общее время
                 //выполнения
                clock_t btime = clock();
                 //Наша стратегия будет проверять простое соответствие проверяемого бара настоящему.
                 //Настоящий бар, это бар чей high > open, low, close а low < high, open, close
                 int signal = 0 ;

                 for ( int i = 0 ; i < ELEMENTS; i++)
                {
                         #ifndef INVOKE
                         if ( bar_array[i].High > bar_array[i].Low &&
                            bar_array[i].High > bar_array[i].Open &&
                                bar_array[i].High > bar_array[i].Close)
                                signal++;
                         #endif
                         #ifdef INVOKE
                        signal += TradeSystem(&bar_array[i]);
                         #endif
                 }
                eleps_time += clock() - btime;
        }
         printf ( "Bars was worked: %i\n" , LAPS*ELEMENTS);
         //Печатаем общее время выполнения
     double timedif = (( double )clock() / ( double )CLOCKS_PER_SEC);
     printf ( "Bars %f seconds\n" , timedif);
         //Печатаем время выполнения торговой системы
         double eleps_diff = ( double )eleps_time / ( double )CLOCKS_PER_SEC;
         printf ( "The TradeSystem time is %f seconds\n" , eleps_diff);
         printf ( "The Eleps tik is %i tiks\n" , eleps_time);
         return 0 ;
}
//
// Функция торговой системы. Принимает на вход бар,
// обрабатывает его и возвращает целочисленный результат
int TradeSystem( struct bar &cbar)
{
         if ( cbar.High > cbar.Low &&
                cbar.High > cbar.Open &&
                cbar.High > cbar.Close)
                                 return 1 ;
         return 0 ;
}

Bu kodun, Invoke yönergesine bağlı olarak, dizi üzerinde yinelendiği ve basit bir karşılaştırma yaptığı (çok hızlı bir işlem) veya aynı karşılaştırmayı gerçekleştiren bir işlevi çağırdığı görülebilir.

Şimdi, bu kodun 100.000.000 çubuğu yinelemesinin ve karşılaştırmasının ne kadar sürdüğünü görelim:

100.000.000 barın doğrudan sayımının 1.28 saniye sürdüğü ve bu, beyan edilen performanstan neredeyse üçte bir oranında daha kötü olduğu görülebilir.

Her bir çubukta hesaplanan fonksiyonun çağrısı ile 100.000.000 çubuğun sayılmasının, beyan edilen performanstan 1.5 kat daha kötü olan 1.79 saniye sürdüğü görülebilir.

Tüm testler donanım i7 870, DDR3 3200 8 Gb üzerinde gerçekleştirilmiştir.

Çoğu zaman, verilerin fiili olarak hazırlanmasıyla geçti (yaklaşık 9 saniye). Optimize edicinin tasarımındaki en ufak bir optimal olmayan durum, büyük genel masraflara yol açacaktır. Ama bu sefer hesaba katmadım çünkü. sadece stratejiyi yürütmekle ilgiliydi.

Kendi sonuçlarınızı çizin. Umarım rakamlar, en hafif tabirle açıklanan sonucun gerçeğe uymadığını göstermiştir. Optimize ediciyi açıklayan kodun teorik performansı bile beyan edilenle uyuşmuyor. Bildirilen işlevselliğe yaklaşan gerçek bir test cihazı uygularsanız, performans daha da düşecektir, çünkü herhangi bir işlev çağrısı, az ya da çok yararlı matematiksel hesaplamalar, çıplak numaralandırma süresini hemen azaltacaktır.

Neden: