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

 
5 sentimi koyacağım. Şimdi bir şekilde boş zaman değil. Ancak evde benzer bir panel uygulamak için böyle bir fikir var. Bu yüzden sadece pozisyonu kapatmak için (gerekli olsa da) bir çarpı işareti yapmayı değil, aynı zamanda bir işaret koymayı, partiyi belirtmeyi ve bununla toptan bir kapanış yapmayı düşünüyorum. Bu, pozisyonlarla daha esnek çalışmanın yanı sıra kısmi kapanmalarını da sağlayacaktır.
 
Vasiliy Sokolov :

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

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, o halde en başından bir kamburu şekillendirmek neden gerekliydi?;)

Vasily, asıl mesele sonuçlara acele etmemek. Ne sen ne ben.))

 
Konstantin Nikitin :
5 sentimi koyacağım. Şimdi bir şekilde boş zaman değil. Ancak evde benzer bir panel uygulamak için böyle bir fikir var. Bu yüzden sadece pozisyonu kapatmak için (gerekli olsa da) bir çarpı işareti yapmayı değil, aynı zamanda bir işaret koymayı, partiyi belirtmeyi ve bununla toptan bir kapanış yapmayı düşünüyorum. Bu, pozisyonlarla daha esnek çalışmanın yanı sıra kısmi kapanmalarını da sağlayacaktır.

Yapabilir.

 
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.

Vasily, lütfen bu kodu test EA dosyasına yapıştırın (kene ve zamanlayıcı işlevi. Öncekilerin yerine)

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   //---------------------------------------------
   //Количество ордеров не менялось.
   //---------------------------------------------      
   if ( ArraySize (Orders) == OrdersTotal ())
     {
       for ( int a1 = 0 ; a1 < OrdersTotal (); a1++)
        {
         if ( OrderSelect (a1, SELECT_BY_POS ))
           {
            E_Main_form_1__PnL( OrderTicket (), OrderProfit ()); 
           }
        }
     }        
  }
//--------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  { 
   //---------------------------------------------
   //Ордер открылся.
   //---------------------------------------------     
   if ( ArraySize (Orders) < OrdersTotal ())
     { Alert ( "Ордер открылся!" );
       ArrayResize (Orders, OrdersTotal ());
      
       //---------------------------------------
       if ( OrderSelect ( OrdersTotal () - 1 , SELECT_BY_POS ))
        {
         if ( OrderSelect ( OrderTicket (), SELECT_BY_TICKET , MODE_TRADES ))
           {
             //----------------------------------------------------
            E_Main_form_1__Order( OrderTicket (), OrderTicket ());
            E_Main_form_1__Opening_Time( OrderTicket (), TimeToStr ( OrderOpenTime (), TIME_MINUTES | TIME_SECONDS ));
            E_Main_form_1__Volume( OrderTicket (), OrderLots ());
            E_Main_form_1__Symbol( OrderTicket (), OrderSymbol ());
            E_Main_form_1__Price( OrderTicket (), OrderOpenPrice ());
            E_Main_form_1__Comission( OrderTicket (), OrderCommission ());
            E_Main_form_1__Swap( OrderTicket (), OrderSwap ());
            E_Main_form_1__PnL( OrderTicket (), OrderProfit ());
            E_Main_form_1__Type( OrderTicket (), OrderType ()); 
             //----------------------------------------------------
           }
           //--------------------------------------  
           ArrayResize (Orders, OrdersTotal ());
          Orders[ OrdersTotal () - 1 ] = OrderTicket ();   
           //--------------------------------------
        }
       //---------------------------------------  
     }
   //---------------------------------------------
   //Ордер закрылся.
   //---------------------------------------------  
   if ( ArraySize (Orders) > OrdersTotal ())
     {
       for ( int a1 = 0 ; a1 < 100 ; a1++)
        {
         if ( OrderSelect (Orders[a1], SELECT_BY_TICKET ) && OrderCloseTime ())
           { Alert ( "Ордер закрылся!" );
             //--------------------------------------------------
             for ( int a3 = 0 ; a3 < 100 ; a3++)
              { 
               if (Orders[a3] == OrderTicket ())
                 {
                  E_Main_form_1_CLOSE_ROW___Orders_table( OrderTicket ());
                  Orders[a3] = 0 ;
                   //--------------------------------------------------
                   int deleted = 0 ,q = 0 ;
                   //--------------------
                   for ( int a2 = 0 ; a2 < ArraySize (Orders); a2++)
                    {
                     if (deleted)Orders[q] = Orders[q+deleted];
                     if (!Orders[q]){deleted++; q--;}
                     q++;
                    }
                   //--------------------------------------------------  
                   ArrayResize (Orders,q);
                   //--------------------------------------------------                      
                 } 
              } 
          }
      }         
 }

}
      
//---------------------------------------------

Ayrıca, Harici Bağlantı dosyasında 68. satırı ve 114. satırı değiştirmeniz gerekir.

E_Main_form_1__Opening_Time(ticket, TimeToStr ( OrderOpenTime (), TIME_MINUTES | TIME_SECONDS ));
E_Main_form_1__Opening_Time(ticket, TimeToStr ( OrderOpenTime (), TIME_MINUTES | TIME_SECONDS ));

Orada biraz kafam karıştı. OrderOpenTime () yerine OrderOpenPrice () koyun .


İyi çalışmalı. Kontrol etmek.

 
Dikkat edin, yukarıdaki kodu biraz değiştirdim (önceden yüklediyseniz).
 

Eh, hayır, kurallara göre hareket etmek - verileri (modeli) görünümlerden (görünüm) ayırmak ve gözlemci modelini, model değişikliklerine veya belirli model alanlarına belirli görünümlere abone olmak için kullanmak.

Ancak bu, böyle bir kütüphanenin kullanıcısının objektif olarak düşünmesini ve danışmanının verilerini önerilen nesne yapısına koymasını gerektirecektir (evet, bir arayüz oluşturmak için bu kütüphanenin/çerçevenin yöntemlerini incelemeniz gerekir). Ve OOP'deki çoğu patlama patlamaz.

Ama Peter diyor ki, hiçbir şey çalışmana gerek yok! Sadece global değişkenlerinizi alın ve oluşturulmuş işleyicilerden oluşan hazır bir ayak örtüsüne yapıştırın ve arayüz çalışacaktır. Evet, bu bir keşif çocuklar! Bu, "raf için tahtaları iç, talimatlara göre bağla ve kitapları düzenle" değil, "rafını çiz ve kitaplarını üzerine yerleştir". Daha Az Kod Daha Çok Yapın ( (c)/JQuery ise)


Ürün konumlandırma ile ilgili sorunlar olduğu açıktır. Ve öyle olsa bile? Hey programcı! kazanmak istiyor musun? Satılık, ne güzel görünüyor! Arayüzsüz yüzlerce EA'yı alın ve bir arayüzle satın. hahah))


Eh, kontrol işleyicilerinin "çıktığı" bir eşleştirme dosyasının olmaması - statiktir. Biraz kafa dağıtmamız ve şablon görevi görecek ve giriş parametreleri aracılığıyla kullanıcı/program verilerini kabul edecek yeni bir tür işleyici oluşturmamız gerekecek.

 
Igor Volodin :

Eh, hayır, kanunlara göre hareket etmek ...

Evet, her şey yolunda, Reter Konows'a göre yapacak. )))

 
Igor Volodin :

Eh, hayır, kurallara göre hareket etmek - verileri (modeli) görünümlerden (görünüm) ayırmak ve gözlemci modelini, model değişikliklerine veya belirli model alanlarına belirli görünümlere abone olmak için kullanmak.

Ancak bu, böyle bir kütüphanenin kullanıcısının objektif olarak düşünmesini ve danışmanının verilerini önerilen nesne yapısına koymasını gerektirecektir (evet, bir arayüz oluşturmak için bu kütüphanenin/çerçevenin yöntemlerini incelemeniz gerekir). Ve OOP'deki çoğu patlama patlamaz.

Ama Peter diyor ki, hiçbir şey çalışmana gerek yok! Sadece global değişkenlerinizi alın ve oluşturulmuş işleyicilerden oluşan hazır bir ayak örtüsüne yapıştırın ve arayüz çalışacaktır. Evet, bu bir keşif çocuklar! Bu, "raf için tahtaları iç, talimatlara göre bağla ve kitapları düzenle" değil, "rafını çiz ve kitaplarını üzerine yerleştir". Daha Az Kod Daha Çok Yapın ( (c)/JQuery ise)


Ürün konumlandırma ile ilgili sorunlar olduğu açıktır. Ve öyle olsa bile? Hey programcı! kazanmak istiyor musun? Satılık, ne güzel görünüyor! Arayüzsüz yüzlerce EA'yı alın ve bir arayüzle satın. hahah))


Eh, kontrol işleyicilerinin "çıktığı" bir eşleştirme dosyasının olmaması - statiktir. Biraz kafa dağıtmamız ve şablon görevi görecek ve giriş parametreleri aracılığıyla kullanıcı/program verilerini kabul edecek yeni bir tür işleyici oluşturmamız gerekecek.

İlk başta bunun olumsuzun başka bir kısmı olduğunu düşündüm, sonra daha iyi okudum, öyle olmadı. Sadece duygular.

Yapıcı, algoritmik ticaret konusunda gerçekten tutkulu olan kişiler için tasarlanmıştır. Onlar için, grafik kitaplıklarını incelemek için zaman kaybetmemek, sadece aşağıdaki kodu alıp oluşturmak mantıklıdır:

 //====================================================================================================================
NEW_WINDOW,  W_NAME, "Main form 1" ,  W_ICON, 12 ,  W_TYPE, SETTINGS, ALWAYS_ON_TOP,    OOI,
//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
GROUP, A,

__, BUTTON, "BUY" ,text,N_COLOR,( int ) clrBlue , GAP, 50 ,  BUTTON, "SELL" , text,N_COLOR,( int ) clrRed ,

END_GROUP,
//-------------------------- 
i, AT, _X2X, "MF" , 10 , _Y2Y, "MF" , 10 ,

i,BUTTONS, PARAM_TYPE,_BOOL, TEXT_FONT, "Times New Roman" ,  W, 100 , H, 34 , FONT_SIZE, 11 ,   END,

//----------------------------------------------------------------------------------
GROUP, A,

__,V_BOX, "V1" ,W, 860 ,  _,H, 248 ,_,N_FRAME, 1 ,_,NP_FRAME, 1 ,

END_GROUP,
//--------------------------
i, AT, _X2X, "MF" , 10 , _Y2Y, "MF" , 50 ,
//----------------------------------------------------------------------------------

//----------------------------------------------------------------------------------
//Объявляем таблицу:
//----------------------------------------------------------------------------------
GROUP, "Orders table" , IS_TABLE,  

__,     T_HEADER, "#" ,W, 20 ,_,H, 30 , C_HEADER, "Order" ,     C_HEADER, "Opening Time" ,W, 90 , C_HEADER, "Type" , W, 90 ,  C_HEADER, "Volume" , W, 90 ,  C_HEADER, "Symbol" , W, 90 , 
                               C_HEADER, "Price" ,       W, 90 ,    
                               C_HEADER, "Comission" ,   W, 90 , C_HEADER, "Swap" , W, 90 ,  C_HEADER, "PnL" ,    W, 90 ,  C_HEADER, "Close" ,  W, 40 ,

__,     R_HEADER, "1" , CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A,     
__,     R_HEADER, "2" ,CELL, A,   CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "3" ,CELL, A,   CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "4" ,CELL, A,   CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "5" ,CELL, A,   CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "6" ,CELL, A,   CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "7" ,CELL, A,   CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "8" ,CELL, A,   CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "9" ,CELL, A,   CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "10" ,CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "11" ,CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "12" ,CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "13" ,CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "14" ,CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "15" ,CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "16" ,CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "17" ,CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "18" ,CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "19" ,CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "20" ,CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER, "21" ,CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
 
END_GROUP,
//------------------------------------
i,AT, LEFT_TOP, 0 , 0 ,
i, IN, "V1" ,
//-----------
i, Y_GAP,- 1 ,
i, X_GAP,- 1 ,
//-----------
i, IS_ZEBRA_STYLE,
i, DnD_RECIEVER,
i, R_HEADERS,   W, 20 , N_COLOR,( int ) C'0,235,0' , END,
i, C_HEADERS,   H, 30 ,                          END,
i, CELLS,       H, 25 ,                          END,
i, C_HEADERS,   DnD_ON, DnD_FUNCTION, ROTATE_COLOMNS, END,
i, I_BUTTONS, C_FUNCTION, DELETES_ROW,   text,HIDE, 1 , N_FRAME, 1 ,A_FRAME, 1 , NP_FRAME, 1 , AP_FRAME, 1 , N_LABEL, 745 , END,
i, IS_DINAMIC,
//----------------------------------------------------------------------------------
"Order" , H, 30 ,
//----------------------------------------------------------------------------------
END_WINDOW,
//====================================================================================================================

Ve dinamik bir tabloya sahip bir pencere alın.


Eşleştirme dosyasında kullanıcı şu kodu alacaktır:

 //=====================================================================================================================
//WINDOW:   Main form 1 | element: BUTTON  | name: BUY  |  Location: Window's Main Frame
//=====================================================================================================================
case BUTTON3____BUY:
               //------------------------------------------------------------------------------------------------------
               //What to do when button pressed or released?
               //------------------------------------------------------------------------------------------------------
               switch (( int )action)
               {
                 case pressed:     break ;
  
                 case released:     break ;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break ;
  
//=====================================================================================================================
//WINDOW:   Main form 1 | element: BUTTON  | name: SELL  |  Location: Window's Main Frame
//=====================================================================================================================
case BUTTON4____SELL:
               //------------------------------------------------------------------------------------------------------
               //What to do when button pressed or released?
               //------------------------------------------------------------------------------------------------------
               switch (( int )action)
               {
                 case pressed:     break ;
  
                 case released:     break ;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break ;
  
//=====================================================================================================================
//WINDOW:   Main form 1 | element: I_BUTTON  | name: 1_Close  |  Location: Window's Main Frame   | Table: 300000007
//=====================================================================================================================
case I_BUTTON14___Close:
               //------------------------------------------------------------------------------------------------------
               //What to do when button pressed or released?
               //------------------------------------------------------------------------------------------------------
               switch (( int )action)
               {
                 case pressed:     break ;
  
                 case released:     break ;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break ;
  
   }
}
//=================================================================================================================

Ve düğmeye basma olaylarında ne ve nasıl yapılacağını belirleyecektir.

 
 

Bir sonraki dinamik tablo daha da ilginç olacak. Hücrelerde giriş alanları , listeler, onay kutuları, düğmeler, radyo düğmeleri, ilerleme çubukları, +/- düğmeli giriş alanları olacaktır.

En zor şey, tam olarak böyle bir tablonun dinamizmidir. Sonuçta, öğelere erişmek ve değerlerini almak belirli parametrelere bağlı değildir, satırın büyüsüne bağlıdır.