İki gelecek arasında yayılma

 

Herkese iyi günler!

İki gelecek arasında bir fark çizen bir gösterge yazdı . İki sorun var:

1) gösterge çılgınca hatalı, bazen görüntüleniyor, bazen görüntülenmiyor, sonra bir çeşit saçmalık gösteriyor (güncellemeye basmanız gerekiyor ve sonra yerine oturuyor gibi görünüyor);

2) yazarın iki vadeli işlemin fiyatlarını senkronize etme algoritması: vadeli işlemlerde (düşük likidite nedeniyle) genellikle belirli çubuklar bulunmadığından, görev, aralarında gerçek bir spread elde etmek için çubuklarını senkronize etmekti. Forumda arama yaptım ve bu konu ile ilgili bir şey bulamadım. Sonuç olarak, şu yöntemi buldum: 4 kez seri alıyoruz - 1 No'lu enstrümanın çubuklarının zamanı, 1 No'lu enstrümanın çubuklarının kapanış fiyatları, 2 No'lu enstrümanın çubuklarının zamanı, kapanış fiyatları 2 numaralı alet için çubuk sayısı. Bir enstrüman için zaman serilerinde ve kapanış fiyatlarında aynı sayıda çubuk belirtirseniz, bunlar aynı olacaktır, ikinci enstrüman için doğal olarak kendilerine ait olacaktır, ancak aynı zamanda özdeş olacaktır (bağlantı zamanı ve kapanış fiyatları). Sadece bir enstrümanın zamanını diğerine göre senkronize etmek için kalır. Aşağıda, 1 No'lu enstrümanın verilerine dayanarak bir spread oluşturmaya bir örnek verilmiştir: 1 No'lu enstrümanın i-inci kapanış fiyatını alıyoruz ve endeksi şuna eşit olan 2 No'lu enstrümanın böyle bir fiyatını çıkarıyoruz: zaman değeri 1 No'lu alet dizisiyle çakışan 2 No'lu aletin zaman dizisinin indeksi. Bu yöntem sayesinde, gösterge en azından birinci veya ikinci enstrüman üzerine veya genel olarak sol enstrüman üzerine inşa edilebilir (örneğin, Gazprom ve Lukoil arasındaki farkı RTS tablosunda atmak).

   if (Flag==SincForIn1)									// Синхронизируем по первому инструменту.
      {
       while (i>= 0 )                                                			// Цикл перебора для расчета спреда для всех непосчитанных баров, от самого последнего i до нулевого.
         {
          SpreadBuffer[i]=closeIn1[i]-closeIn2[ ArrayBsearch (timeIn2,timeIn1[i])]; 	// Расчет спреда (существуют различия в количесве баров двух инструментов, за основу берутся бары Инструмента №1)
          i--;                                                    			// Снижение индекса бара для перехода расчетов к следующему бару и так до нулевого включительно.
         }

Sonuç olarak, daha iyi bir şey düşünemedim. Önerilerinizi dinlemek istedim, belki iki geleceğin senkronize bir dağılım tablosu oluşturmanın çok daha basit, güzel, anlaşılır ve etkili bir yolu vardır. Belki o zaman dinlemeyi bırakır, ya da belki de göstergeleri bu kadar "cool" yazan benimdir...

Göstergeyi yazıya ekledim.

Şimdiden teşekkürler.

Dosyalar:
Spread.mq5  24 kb
 
iiivasyaiii :

Herkese iyi günler!

İki gelecek arasında bir spread çizen bir gösterge yazdı . İki sorun var:

1) gösterge çılgınca hatalı, bazen görüntüleniyor, bazen görüntülenmiyor, sonra bir çeşit saçmalık gösteriyor (güncellemeye basmanız gerekiyor ve sonra yerine oturuyor gibi görünüyor);

2) yazarın iki vadeli işlemin fiyatlarını senkronize etme algoritması: vadeli işlemlerde (düşük likidite nedeniyle) genellikle belirli çubuklar bulunmadığından, görev, aralarında gerçek bir spread elde etmek için çubuklarını senkronize etmekti. Forumda arama yaptım ve bu konu ile ilgili bir şey bulamadım. Sonuç olarak, şu yöntemi buldum: 4 kez seri alıyoruz - 1 No'lu enstrümanın çubuklarının zamanı, 1 No'lu enstrümanın çubuklarının kapanış fiyatları, 2 No'lu enstrümanın çubuklarının zamanı, kapanış fiyatları 2 numaralı alet için çubuk sayısı. Bir enstrüman için zaman serilerinde ve kapanış fiyatlarında aynı sayıda çubuk belirtirseniz, bunlar aynı olacaktır, ikinci enstrüman için doğal olarak kendilerine ait olacaktır, ancak aynı zamanda özdeş olacaktır (bağlantı zamanı ve kapanış fiyatları). Sadece bir enstrümanın zamanını diğerine göre senkronize etmek için kalır. Aşağıda, 1 No'lu enstrümanın verilerine dayanarak bir spread oluşturmaya bir örnek verilmiştir: 1 No'lu enstrümanın i-inci kapanış fiyatını alıyoruz ve endeksi şuna eşit olan 2 No'lu enstrümanın böyle bir fiyatını çıkarıyoruz: zaman değeri 1 No'lu alet dizisiyle çakışan 2 No'lu aletin zaman dizisinin indeksi. Bu yöntem sayesinde, gösterge en azından birinci veya ikinci enstrüman üzerine veya genel olarak sol enstrüman üzerine inşa edilebilir (örneğin, Gazprom ve Lukoil arasındaki farkı RTS tablosunda atmak).

Sonuç olarak, daha iyi bir şey düşünemedim. Önerilerinizi dinlemek istedim, belki iki geleceğin senkronize bir dağılım tablosu oluşturmanın çok daha basit, güzel, anlaşılır ve etkili bir yolu vardır. Belki o zaman hata vermeyi keser, ya da belki göstergeleri bu kadar "cool" yazan benimdir...

Göstergeyi yazıya ekledim.

Şimdiden teşekkürler.

Yayılımı oluşturmak için teklifi almanız ve fiyat istemeniz gerekir. Grafik son tarafından çizilir, ancak bu doğru olmayacaktır.
 
Maxim Romanov :
Yayılımı oluşturmak için teklifi almanız ve fiyat istemeniz gerekir. Grafik son tarafından çizilir, ancak bu doğru olmayacaktır.

Maxim, sorunumla ilgilendiğin için teşekkür ederim.

Cevabınız hakkında birkaç yorum var:

1) Geçmiş işlemlerin (son) fiyatları çekilmez, bu forex değildir. Başka bir şey demek istediyseniz, lütfen daha ayrıntılı olarak açıklayın.

2) teklif ve talep kesinlikle iyidir, ancak daha karmaşık bir büyüklük sırasıdır. Alış spreadleri ve satış spreadleri gibi ana spread için üzerlerine iki satır daha yazmaya çalıştım. Ve bir kez çalıştı bile (bu arada, uzun süre böyle çizildi), ama sonra kodda bir şeyi değiştirdim ve benden kayboldu ve bir daha görünmedi)) gerekirse, yapabilirim onun kodunu atın. Ve teklif ve baltanın en önemli dezavantajı: eğer hafızam bana hizmet ediyorsa, son 2000 tik için teklif ve talep verileri saklanır, bu nedenle uzun bir geçmişi analiz etmenin bir yolu yoktur.

Bu nedenle, lütfen, kapanış fiyatlarında iki enstrüman arasında bir spread oluşturarak başlayalım . ArrayBsearch() işlevini kullanarak iki enstrümanın fiyatlarını senkronize etme yaklaşımım hala doğru mu, yoksa daha basit bir yöntem var mı?

 
iiivasyaiii :

Maxim, sorunumla ilgilendiğin için teşekkür ederim.

Cevabınız hakkında birkaç yorum var:

1) Geçmiş işlemlerin (son) fiyatları çekilmez, bu forex değildir .

Bu tür bilgilerle, bu tür göstergeler yazmanız için henüz çok erken.

 
iiivasyaiii :

Herkese iyi günler!

İki gelecek arasında bir spread çizen bir gösterge yazdı . İki sorun var:

1) gösterge çılgınca hatalı, bazen görüntüleniyor, bazen görüntülenmiyor, sonra bir çeşit saçmalık gösteriyor (güncellemeye basmanız gerekiyor ve sonra yerine oturuyor gibi görünüyor);

2) yazarın iki vadeli işlemin fiyatlarını senkronize etme algoritması: vadeli işlemlerde (düşük likidite nedeniyle) genellikle belirli çubuklar bulunmadığından, görev, aralarında gerçek bir spread elde etmek için çubuklarını senkronize etmekti. Forumda arama yaptım ve bu konu ile ilgili bir şey bulamadım. Sonuç olarak, şu yöntemi buldum: 4 kez seri alıyoruz - 1 No'lu enstrümanın çubuklarının zamanı, 1 No'lu enstrümanın çubuklarının kapanış fiyatları, 2 No'lu enstrümanın çubuklarının zamanı, kapanış fiyatları 2 numaralı alet için çubuk sayısı. Bir enstrüman için zaman serilerinde ve kapanış fiyatlarında aynı sayıda çubuk belirtirseniz, bunlar aynı olacaktır, ikinci enstrüman için doğal olarak kendilerine ait olacaktır, ancak aynı zamanda özdeş olacaktır (bağlantı zamanı ve kapanış fiyatları). Sadece bir enstrümanın zamanını diğerine göre senkronize etmek için kalır. Aşağıda, 1 No'lu enstrümanın verilerine dayanarak bir spread oluşturmaya bir örnek verilmiştir: 1 No'lu enstrümanın i-inci kapanış fiyatını alıyoruz ve endeksi şuna eşit olan 2 No'lu enstrümanın böyle bir fiyatını çıkarıyoruz: zaman değeri 1 No'lu alet dizisiyle çakışan 2 No'lu aletin zaman dizisinin indeksi. Bu yöntem sayesinde, gösterge en azından birinci veya ikinci enstrüman üzerine veya genel olarak sol enstrüman üzerine inşa edilebilir (örneğin, Gazprom ve Lukoil arasındaki farkı RTS tablosunda atmak).

Sonuç olarak, daha iyi bir şey düşünemedim. Önerilerinizi dinlemek istedim, belki iki geleceğin senkronize bir dağılım tablosu oluşturmanın çok daha basit, güzel, anlaşılır ve etkili bir yolu vardır. Belki o zaman dinlemeyi bırakır, ya da belki de göstergeleri bu kadar "cool" yazan benimdir...

Göstergeyi yazıya ekledim.

Şimdiden teşekkürler.

Tünaydın!

1. "Borsa ticareti" bölümüne yazmanız gerekiyor

2. 2 vadeli işlemi çubuklarla senkronize etmek mümkün olmayacak.

Vadelilerden birinin çubuklarını temel almak gerekir (en likit SBRF 9.20'den daha iyi)

3. Yayılmış resmi tamamlamak için, yakın almak değil, ana gelecekler için seçilen çubuklarla onları kenelemek ve senkronize etmek gerekir.

4. Yeniden hesaplamayı hızlı yapmak için son hesaplanan konumu hatırlamanız gerekir.

Çubuk zaman senkronizasyonu ile spread yeniden hesaplaması için örnek kod

 int pr_pos = 0 ;
             int sec_pos = 0 ;
             bool is_found;
             int pr_mem = 0 ;
             int sec_mem = 0 ;
             for ( int i = 0 ; i < a_bars; i++)
            {
              is_found = false ;
               while (pr_pos < pr_cnt) 
              {
                 if (( ulong (data_time[i].time) <= ulong (pr_ticks[pr_pos].time)) &&
                   ( ulong (data_time[i].time) + 60 > ulong (pr_ticks[pr_pos].time)))
                {
                  pr_mem = pr_pos;
                   while (sec_pos < sec_cnt) 
                  {
                     if (( ulong (data_time[i].time) <= ulong (sec_ticks[sec_pos].time)) &&
                       ( ulong (data_time[i].time) + 60 > ulong (sec_ticks[sec_pos].time)))
                    {
                      is_found = true ;
                      sec_mem = sec_pos;
                       if ((sec_ticks[sec_pos].bid > 0.0 ) && (pr_ticks[pr_pos].ask > 0.0 ) &&
                         (sec_ticks[sec_pos].ask > 0.0 ) && (pr_ticks[pr_pos].bid > 0.0 ))
                      {
                        data_time[i].hi_value = sec_ticks[sec_pos].bid - pr_ticks[pr_pos].ask;
                        data_time[i].low_value = sec_ticks[sec_pos].ask - pr_ticks[pr_pos].bid;
                      }
                       break ;
                    }
                    sec_pos++;
                  }
                   break ;
                }
                pr_pos++;
              }
               if (is_found == false )
              {
                pr_pos = pr_mem;
                sec_pos = sec_mem;
              }
            }
 
Alexey Viktorov :

Bu tür bilgilerle, bu tür göstergeler yazmanız için henüz çok erken.

Madem bu kadar akıllısın, iki fiyat serisini kapanış fiyatlarında nasıl senkronize edeceğimi söyler misin ;)

 
prostotrader :

Tünaydın!

1. "Borsa ticareti" bölümüne yazmanız gerekiyor

2. 2 vadeli işlemi çubuklarla senkronize etmek mümkün olmayacak.

Vadelilerden birinin çubuklarını temel almak gerekir (en likit SBRF 9.20'den daha iyi)

3. Yayılmış resmi tamamlamak için, yakın almak değil, ana gelecekler için seçilen çubuklarla onları kenelemek ve senkronize etmek gerekir.

4. Yeniden hesaplamayı hızlı yapmak için son hesaplanan konumu hatırlamanız gerekir.

Çubuk zaman senkronizasyonu ile spread yeniden hesaplaması için örnek kod

Basit tüccar, tavsiyeniz için çok teşekkür ederim! Çözüm ilginç, şimdi deneyeceğim, sonra abonelikten çıkacağım.

 
iiivasyaiii :

Madem bu kadar akıllısın, iki fiyat serisini kapanış fiyatlarında nasıl senkronize edeceğimi söyler misin ;)

Zaten konunun özüne dair her şeyi yazmışsınız. Anlaşma fiyatlarında (ve hatta kapanış fiyatlarında daha da fazlası!) bir fark oluşturmak mümkün değildir, çünkü uzun bir süre yavaş bacakta anlaşmalar olmayabilir ve olsalar bile, anlaşmalar ile senkronize olmayacaklardır. hızlı bacak anlaşma fiyatları. Onlar. bu tür bilgilerin değeri sıfırdır. Emir defterinde her zaman (veya hemen hemen her zaman) güncel alış ve satış fiyatları vardır ve bunların analiz edilmesi gerekir.

 
iiivasyaiii :

Maxim, sorunumla ilgilendiğin için teşekkür ederim.

Cevabınız hakkında birkaç yorum var:

1) Geçmiş işlemlerin (son) fiyatları çekilmez, bu forex değildir. Başka bir şey demek istediyseniz, lütfen daha ayrıntılı olarak açıklayın.

2) teklif ve talep kesinlikle iyidir, ancak daha karmaşık bir büyüklük sırasıdır. Alış spreadleri ve satış spreadleri gibi ana spread için üzerlerine iki satır daha yazmaya çalıştım. Ve bir kez çalıştı bile (bu arada, uzun süre böyle çizildi), ama sonra kodda bir şeyi değiştirdim ve benden kayboldu ve bir daha görünmedi)) gerekirse, yapabilirim onun kodunu atın. Ve teklif ve baltanın en önemli dezavantajı: eğer hafızam bana hizmet ediyorsa, son 2000 tik için teklif ve talep verileri saklanır, bu nedenle uzun bir geçmişi analiz etmenin bir yolu yoktur.

Bu nedenle, lütfen, kapanış fiyatlarında iki enstrüman arasında bir spread oluşturarak başlayalım . ArrayBsearch() işlevini kullanarak iki enstrümanın fiyatlarını senkronize etme yaklaşımım hala doğru mu, yoksa daha basit bir yöntem var mı?

Ben programcı değilim, koda ihtiyacım yok, kodlar konusunda yardımcı olamam. Ama sana bir ipucu vereceğim. Yani, döviz enstrümanları terminaldeki son fiyatlardan inşa edilir ve prostotrader'ın yazdığı gibi, kapanış fiyatlarında senkronizasyon yapmak doğru değildir, bu yüzden bir spread almayacaksınız, ancak tam bir saçmalık, bu yöntem bile mümkün olmayacak. ne istediğini tahmin et. Ve kenelerde, evet, tam orada olacak. Hemen doğru yolu arayın, neden bir tırmık üzerine basıyorsunuz)
 
prostotrader :

Tünaydın!

1. "Borsa ticareti" bölümüne yazmanız gerekiyor

2. 2 vadeli işlemi çubuklarla senkronize etmek mümkün olmayacak.

Vadelilerden birinin çubuklarını temel almak gerekir (en likit SBRF 9.20'den daha iyi)

3. Yayılmış resmi tamamlamak için, yakın almak değil, ana gelecekler için seçilen çubuklarla onları kenelemek ve senkronize etmek gerekir.

4. Yeniden hesaplamayı hızlı yapmak için son hesaplanan konumu hatırlamanız gerekir.

Çubuk zaman senkronizasyonu ile spread yeniden hesaplaması için örnek kod

Basit tüccar, iyi günler! Lütfen söyle bana, kodunu tam olarak anlamadım:

1) CopyTicksRange veya CopyTicks işlevini kullandınız mı?

2) Bu işlevlerin açıklamasında, 2000'den fazla kene kopyalayamayacakları belirtilir, bu nedenle böyle bir gösterge daha uzak bir geçmişi analiz edemez mi?

 
Dmi3 :

Zaten konunun özüne dair her şeyi yazmışsınız. Anlaşma fiyatlarında (ve hatta kapanış fiyatlarında daha da fazlası!) bir spread oluşturmak mümkün değildir, çünkü yavaş bacakta uzun bir süre anlaşmalar olmayabilir ve yapsalar bile bunlar dışında kalacaklardır. hızlı bacağın anlaşma fiyatları ile senkronize edin. Onlar. bu tür bilgilerin değeri sıfırdır. Emir defterinde her zaman (veya hemen hemen her zaman) güncel alış ve satış fiyatları vardır ve bunların analiz edilmesi gerekir.

Beyler, evet, bunun siparişler için daha doğru olduğunu iddia etmiyorum (kısa bir süre için üç spread gösteren bir göstergem olmasına rağmen: son, teklif al ve teklif sor, çoğu zaman sonuncusu arasında gitti. son ikisi, bu da sıvı araçlara yayılmanın genellikle yeterli olduğu anlamına gelir).

O halde, mümkün olan en az kaynak yoğun ve tercihen derin bir geçmişle talep / teklifin nasıl senkronize edileceğini bulalım.

Örneğin, basit bir tüccar ilginç bir seçenek önerdi (yukarıda).

Neden: