Benim yaklaşımım. Çekirdek - Motor. - sayfa 128

 
Vasiliy Sokolov :

Lanet olsun ahbap, neler olup bittiği hakkında hiçbir fikrin yok mu yoksa bu şekilde köşeleri kesmeye mi çalışıyorsun?

Herhangi bir panel için temel ve en zor an, tutarlı bir durumun gösterilmesidir. Emir açıksa görüntülenmeli, "ticaret" sekmesinde değilse panelde de olmamalıdır. Bu, kavramsal olarak temel ve "çok basit". Ancak bunu "çok basit" hale getirmek için panelin durum modeline dayalı olması gerekir. Böyle bir şeye sahip değilsiniz, ancak kullanıcı nesnelerine doldurulmuş dizelerde bazı yerel tutarsız çarpık veritabanı var:

Ve şimdi bize hiçbir sorun olmadığını, her şeyin parmağınızdan emildiğini kanıtlamaya çalışıyorsunuz. Tablonuzda görünmeyen siparişler normaldir . Masanızda uzun süredir kapalı olan siparişler olması da normaldir. Ve genel olarak, her şey seninle çok normal ve güzel, sadece pozisyon sayısı 20 ile sınırlı.

Sorunun, bir siparişin açılmasını/kapanmasını düzenli yollarla sabitlemenin uygulanmasında olduğunu anlıyorsunuz. Bu, tablonun kendisinin mekanizmasının bir parçası değildir. Bu ÖZEL bir mekanizmadır!

Motoru ve tablonun uygulanmasını eleştirmek yerine, siparişin açılıp kapanmasını sabitlemek için mekanizmayı doğru yazmak daha iyidir.

Ve her şey DOĞRU çalışacak!

 
Реter Konow :

  1. Bunu yapmak için, kullanıcının keneler veya bir zamanlayıcı üzerindeki siparişler arasında bir döngü yazması ve biletlerini dizide yazılı biletlerle karşılaştırması gerekir. Dizide bilet yoksa, sipariş yeni açıldı ve ardından E_Main_form_1__PnL( OrderTicket (), OrderProfit ());

4. Bu döngüleri siparişlere göre doğru yazarsanız tablo doğru çalışacaktır....

Sadece unuttum...

Ancak bu, dinamik tablonun kendisinin çalışmadığı anlamına gelmez.

Kahretsin, kullanıcı muhtemelen belgelere aşinadır, neyi ve hangi diziyi koyacağını ve tüm bunları nasıl güncelleyeceğini biliyor mu? Tam olarak çalışan bir demo yazmanızı istedim ki tam olarak kodunuzdan nasıl ve neyin yapıldığını ve neyin itildiğini anlamanız için ama siz benim TK'm ile kendinizi silip çarpık bir şekilde bana geri verdiniz. çalışma masası!

 
Vasiliy Sokolov :

Sadece sende, kodunda ve yaptığın her şeyde büyük bir ihmal hissediyorum, bir nevi insanlar için ama iş ayrıntılara iner inmez saçmalık başlıyor. Bir şey yapın, küçük ama iyi ve kaliteli. Yani diyorsun ki, söyledikleri her şey basitçe çözüldü, basit. Ama nedense hiçbir şeyin olmadığı bir karar verdim. Tüm bu basit numaraları iki hafta içinde yapmanıza ne engel oldu?

Negatif titreşimler için özür dilerim. Beni hayal kırıklığına uğrattın. Daha fazlasını ve daha iyisini görmeyi umuyordum. Lütfen demonuzu düzeltin. Uygulamaya göre niteliksel olarak ve burada bunlar olmadan iyi yapın: "evet, temel, burada ince ayar yapmanız gerekiyor." Test edilebilecek kutunun dışında bir çözüm önerin.

Vasili, duygulara gerek yok. Herhangi bir küçümseme yaşamadım. Sadece uzun zamandır emirlerle çalışmadım ve nasıl yapılacağını unuttum. Ama bu özel bir görevdir.

Ama yine de yapacağım. Madem bu kadar zor olduğunu düşünüyorsun...

 
Реter Konow :

Vasili, duygulara gerek yok. Herhangi bir küçümseme yaşamadım. Sadece uzun zamandır emirlerle çalışmadım ve nasıl yapılacağını unuttum. Ama bu özel bir görevdir.

Ama yine de yapacağım. Madem bu kadar zor olduğunu düşünüyorsun...

Öyleyse yap. Zor olduğunu düşünmüyorum ama tekrar ediyorum motorunuz için herhangi bir belge yok ve hangi diziyi hangi parametrelerle güncelleyeceğimi bilmiyorum. İhtiyaç duyulan şey, eksiksiz bir çözüm şeklinde bir gösteridir. Ancak bu şekilde neye ve nasıl çağrıldığınızı ve nasıl çalıştığını anlayabilirsiniz. Senden beklediğim tam olarak buydu. Bunu yaptığınızda, teknik çözümleri tartışacağız. Ve genel olarak, üçüncü taraf eleştirisini, hatta böyle etkileyici bir eleştiriyi olumlu olarak kabul edin, çünkü. Olumsuz geribildirim genellikle olumludan daha değerlidir.

 

Dinamik bir tablonun nasıl çalıştığını açıklayacağım:

1. Al/sat butonlarına tıkladığınızda, sinyal butonun kendisinin kasa bloğundaki Harici Bağlantı dosyasına gider.

 case BUTTON3___BUY:
               //------------------------------------------------------------------------------------------------------
               //What to do when button pressed or released?
               //------------------------------------------------------------------------------------------------------
               switch (( int )action)
               {
                 case pressed:     break ;
  
                 case released:  
                               
                               int ticket = OrderSend ( Symbol (), OP_BUY , 0.1 , Ask , 3 , Bid - 30 * Point , Ask + 50 * Point , NULL , 16384 , 0 ,Green);  
                               //--------------------------------------------------------------------------------------- 
                               if (ticket> 0 )
                                {
                                 if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
                                   {
                                     Alert ( "BUY order opened" );
                                     //----------------------------------------------------
                                    E_Main_form_1__Order(ticket,ticket);
                                    E_Main_form_1__Opening_Time(ticket, TimeToStr ( OrderOpenTime (), TIME_MINUTES | TIME_SECONDS ));
                                    E_Main_form_1__Type(ticket, "BUY" );
                                    E_Main_form_1__Volume(ticket, OrderLots ());
                                    E_Main_form_1__Symbol(ticket, OrderSymbol ());
                                    E_Main_form_1__Price(ticket, OrderOpenPrice ());
                                    E_Main_form_1__Comission(ticket, OrderCommission ());
                                    E_Main_form_1__Swap(ticket, OrderSwap ());
                                    E_Main_form_1__PnL(ticket, OrderProfit ()); 
                                     //----------------------------------------------------
                                   }
                                 //--------------------------------------  
                                 ArrayResize (Orders, OrdersTotal ());
                                 Orders[ OrdersTotal () - 1 ] = ticket;   
                                 //--------------------------------------                                    
                                }
                               else Print ( "Error opening BUY order : " , GetLastError ());
                               //---------------------------------------------------------------------------------------
                 break ;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break ;

E_Main_form_1__Price(ticket, OrderOpenPrice ()); işlevi varsa yeni bir satırın otomatik olarak açıldığını bilmeniz gerekir. yeni bir bilet gönderilir.

Bilet zaten mevcutsa, istenen satır OTOMATİK OLARAK seçilecek ve orada yeni bir değer ayarlanacaktır.

Bir tablo satırını kapatmak için E_Main_form_1_CLOSE_ROW___Orders_table(ticket)işlevini çağırın;

bilet - bir satır bileti anlamına gelir.

 
Реter Konow :

Dinamik bir tablonun nasıl çalıştığını açıklayacağım:

1. Al/sat butonlarına tıkladığınızda, sinyal butonun kendisinin kasa bloğundaki Harici Bağlantı dosyasına gider.

E_Main_form_1__Price(ticket, OrderOpenPrice ()); işlevi varsa yeni bir satırın otomatik olarak açıldığını bilmeniz gerekir. yeni bir bilet gönderilir.

Bilet zaten mevcutsa, istenen satır OTOMATİK OLARAK seçilecek ve orada yeni bir değer ayarlanacaktır.

Bir tablo satırını kapatmak için E_Main_form_1_CLOSE_ROW___Orders_table(ticket)işlevini çağırın;

bilet - bir satır bileti anlamına gelir.

Peter, zamanlayıcıda açık siparişlerden geçecek ve siparişler listesindeki değişiklikleri tablona gönderecek bir for döngüsü yap. Ayrıca tablonuzdaki siparişin kârının da dinamik olarak değişmesini sağlayın.

 
Реter Konow :

Dinamik bir tablonun nasıl çalıştığını açıklayacağım:

1. Al/sat butonlarına tıkladığınızda, sinyal butonun kendisinin case bloğundaki Harici Bağlantı dosyasına gider.

E_Main_form_1__Price(ticket, OrderOpenPrice ()); işlevi varsa yeni bir satırın otomatik olarak açıldığını bilmeniz gerekir. yeni bir bilet gönderilir.

Bilet zaten mevcutsa, istenen satır OTOMATİK OLARAK seçilecek ve orada yeni bir değer ayarlanacaktır.

Bir tablo satırını kapatmak için E_Main_form_1_CLOSE_ROW___Orders_table(ticket)işlevini çağırın;

bilet - bir sıra bilet anlamına gelir.

Bu çarpık bir uygulamadır ve işte cevap:

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

Benim yaklaşımım. Çekirdek - Motor.

Vasiliy Sokolov , 2019.01.09 13:33

Peter, üzgünüm ama çalışman kabul edilmiyor çünkü. gönderdiğin şey nadir bir hack. Kusura bakmayın ama görünüşe göre gönderdiğiniz şeyi başlatan tek kişi benim ve benden başka kimse incelemeyi yapmayacak.

Yani, sırayla, görev şuydu:

Bunun yerine ne görüyorum:

İlk olarak, alım/satım butonu tıklanarak sadece panelinizde işlemler açılabilir. Standart bir pencereden bir pozisyon açılırsa, anlaşma görünmez .

....

Yağ başarısız olana kadar . Geliştirmelerinizi bekliyorum. Ve siz anlayana kadar 3D render yok!

 

Diyelim ki birkaç dinamik tablomuz var.

Bu tablolarla çalışmak için sarmalayıcı işlevleri, Bağlantı Özellikleri dosyasında otomatik olarak yazdırılacaktır.

İşte iyi bir örnek. Dinamik bir Orders_table tablosu çizdik.

İşte elimizdeki sarmalayıcı işlevleri:

 void E_Main_form_1__Order( long Magic, string Value)
//----------------------------------------------------------------------------------------------------------------
void E_Main_form_1__Opening_Time( long Magic, string Value)
//----------------------------------------------------------------------------------------------------------------
void E_Main_form_1__Type( long Magic, string Value)
//----------------------------------------------------------------------------------------------------------------
void E_Main_form_1__Volume( long Magic, string Value)
//---------------------------------------------------------------------------------------------------------
void E_Main_form_1__Symbol( long Magic, string Value)
//----------------------------------------------------------------------------------------------------------------
void E_Main_form_1__Price( long Magic, string Value)
//----------------------------------------------------------------------------------------------------------------
void E_Main_form_1__Comission( long Magic, string Value)
//----------------------------------------------------------------------------------------------------------------
void E_Main_form_1__Swap( long Magic, string Value)
//----------------------------------------------------------------------------------------------------------------
void E_Main_form_1__PnL( long Magic, string Value)
//----------------------------------------------------------------------------------------------------------------
void E_Main_form_1__Close( long Magic, string Value)
//----------------------------------------------------------------------------------------------------------------
void E_Main_form_1_CLOSE_ROW___Orders_table( long Magic)
//----------------------------------------------------------------------------------------------------------------

Dikkatinizi çekiyorum: adının sonundaki her sarmalayıcı bir tablo sütununun adına sahiptir.

Belirli öğe belirtilmemiş, yalnızca Magic satırı.

Yani, mevcut bir satırın hücresine yeni bir değer ayarlamak için sihrini ve değerini göndermeniz gerekir.

Var olmayan bir satırın hücresine yeni bir değer ayarlamak için sihrini ve değerini göndermeniz gerekir. Satır otomatik olarak oluşturulacaktır.

Bir tablodaki bir satırı yok etmek için, CLOSE_ROW kelimelerini içeren sarmalayıcıyı çağırmanız gerekir.

Örneğin:

 void E_Main_form_1_CLOSE_ROW___Orders_table( long Magic)

Ve kapatılması gereken sıranın büyüsünü ona aktarın.

Herşey.

 
Vasiliy Sokolov :

Peter, zamanlayıcıda açık siparişlerden geçecek ve siparişler listesindeki değişiklikleri tablona gönderecek bir for döngüsü yap. Ayrıca tablonuzdaki siparişin kârının da dinamik olarak değişmesini sağlayın.

Tamam, siparişlerle çalışmak için döngüleri ve kodu yazacağım, ancak bunu kendiniz koymanızı söyleyeceğim, çünkü zaten kaynaklar aracılığıyla iletişim için motoru yeniden yaptım ve test ediyorum. Şimdi eski bağlantıyı iade edemiyorum, ancak yenisi henüz tamamlanmadı.

 
Реter Konow :

Tamam, siparişlerle çalışmak için döngüleri ve kodu yazacağım, ancak bunu kendiniz koymanızı söyleyeceğim, çünkü zaten kaynaklar aracılığıyla iletişim için motoru yeniden yaptım ve test ediyorum. Şimdi eski bağlantıyı iade edemiyorum, ancak yenisi henüz tamamlanmadı.

Demo olarak eklediğiniz motorun sürümüyle oynayın.

Peter Konow'un fotoğrafı.

Yani, mevcut bir satırın hücresine yeni bir değer ayarlamak için sihrini ve değerini göndermeniz gerekir.

Her şey basit görünüyor. Yaklaşımınız düşündüğüm gibi çalışıyorsa, dinamik tabloda veya zamanlayıcı aracılığıyla konum değerlerinin güncellenmesinde herhangi bir sorun görmüyorum. Peter, neden en başından bir kambur heykel yapmak gerekliydi?;)