내 접근 방식. 코어 - 엔진. - 페이지 129

 
내 5센트를 투자하겠습니다. 이제 여가는 어떻게 든되지 않습니다. 그러나 집에서 유사한 패널을 구현하는 그러한 아이디어가 있습니다. 그래서 십자 표시를 해서 포지션청산하는 것(필요하긴 하지만) 뿐만 아니라, 마크를 만들고, 로트를 표시하고, 이것으로 도매 마감을 한다고 생각합니다. 그러면 위치와 부분적 폐쇄에 대한 보다 유연한 작업이 가능해집니다.
 
Vasiliy Sokolov :

데모로 첨부한 엔진 버전으로 플레이하세요.

모든 것이 간단해 보입니다. 귀하의 접근 방식이 생각대로 작동한다면 동적 테이블이나 타이머를 통해 위치 값을 업데이트하는 데 아무런 문제가 없습니다. 피터, 그럼 처음부터 혹등고래를 조각해야 했던 이유는?;;

Vasily, 가장 중요한 것은 결론을 서두르지 않는 것입니다. 너도 나도 아니야.))

 
Konstantin Nikitin :
내 5센트를 투자하겠습니다. 이제 여가는 어떻게 든되지 않습니다. 그러나 집에서 유사한 패널을 구현하는 그러한 아이디어가 있습니다. 그래서 십자 표시를 해서 포지션청산하는 것(필요하긴 하지만) 뿐만 아니라, 마크를 만들고, 로트를 표시하고, 이것으로 도매 마감을 한다고 생각합니다. 그러면 위치와 부분적 폐쇄에 대한 보다 유연한 작업이 가능해집니다.

할 수 있다.

 
Vasiliy Sokolov :

Peter, 미결 주문을 처리하고 주문 목록의 변경 사항을 테이블로 보내는 타이머에 for 루프를 만드십시오. 또한 테이블의 주문 수익도 동적으로 변경되도록 만드십시오.

Vasily, 이 코드를 테스트 EA 파일에 붙여넣으세요(틱 및 타이머 기능. 이전 코드 대신)

 //+------------------------------------------------------------------+
//| 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);
                   //--------------------------------------------------                      
                 } 
              } 
          }
      }         
 }

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

또한 외부 연결 파일에서 68행과 114행을 바꿔야 합니다.

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 ));

거기에서 약간 혼란스러워졌습니다. OrderOpenTime () 대신 OrderOpenPrice ()를 입력 합니다.


잘 작동해야 합니다. 확인하다.

 
주의하세요. 위의 코드를 약간 수정했습니다(이미 설치한 경우).
 

어, 아니오, 규범에 따라 행동하는 것 - 데이터(모델)를 뷰(뷰)에서 분리하고 관찰자 패턴을 사용하여 모델 변경 또는 특정 모델 필드에 대한 특정 뷰를 구독하는 것입니다.

그러나 이것은 그러한 라이브러리의 사용자가 객관적으로 생각하고 그의 조언자의 데이터를 제안된 객체 구조에 넣어야 한다는 것을 요구할 것입니다(예, 인터페이스를 구축하려면 이 라이브러리/프레임워크의 방법을 연구해야 합니다). 그리고 OOP의 많은 사람들은 호황을 누리지 못합니다.

그러나 베드로는 아무 것도 공부할 필요가 없다고 말합니다! 전역 변수 를 생성된 핸들러의 기성품에 붙이면 인터페이스가 작동합니다. 예, 이것은 찾기입니다! 이것은 "술판을 선반에 놓고 지시에 따라 연결하고 책을 정리"하는 것이 아니라 "선반을 그리고 그 위에 책을 정리하십시오." 더 적은 코드로 더 많은 작업 수행((c)/JQuery if)


제품 포지셔닝에 문제가 있는 것은 분명합니다. 그렇다면? 이봐 프로그래머! 벌고 싶습니까? 판매를 위해, 좋아 보이는 것! 인터페이스가 없는 백 개 또는 다른 EA를 가져와 인터페이스와 함께 판매하십시오. 하하))


음, 컨트롤 핸들러가 "삐져나온" 페어링 파일이 없어서 정적입니다. 우리는 머리를 조금 깨고 템플릿으로 작동하고 입력 매개변수를 통해 사용자/프로그램 데이터를 받아들이는 새로운 유형의 핸들러를 조각해야 합니다.

 
Igor Volodin :

음, 아니, 규범에 따라 행동하기 위해 ...

예, 모든 것이 정상입니다. Konows에 따라 Reter가 할 것입니다. )))

 
Igor Volodin :

어, 아니오, 규범에 따라 행동하는 것 - 데이터(모델)를 뷰(뷰)에서 분리하고 관찰자 패턴을 사용하여 모델 변경 또는 특정 모델 필드에 대한 특정 뷰를 구독하는 것입니다.

그러나 이것은 그러한 라이브러리의 사용자가 객관적으로 생각하고 그의 조언자의 데이터를 제안된 객체 구조에 넣어야 한다는 것을 요구할 것입니다(예, 인터페이스를 구축하려면 이 라이브러리/프레임워크의 방법을 연구해야 합니다). 그리고 OOP의 많은 사람들은 호황을 누리지 않습니다.

그러나 베드로는 아무 것도 공부할 필요가 없다고 말합니다! 전역 변수 를 생성된 핸들러의 기성품에 붙이면 인터페이스가 작동합니다. 예, 이것은 찾기입니다! 이것은 "술판을 선반에 놓고 지시에 따라 연결하고 책을 정리"하는 것이 아니라 "선반을 그리고 그 위에 책을 정리하십시오." 더 적은 코드로 더 많은 작업 수행((c)/JQuery if)


제품 포지셔닝에 문제가 있음이 분명합니다. 그렇다면? 이봐 프로그래머! 벌고 싶습니까? 판매를 위해, 좋아 보이는 것! 인터페이스가 없는 백 개 또는 다른 EA를 가져와 인터페이스와 함께 판매하십시오. 하하))


음, 컨트롤 핸들러가 "삐져나온" 페어링 파일이 없어서 정적입니다. 우리는 머리를 조금 깨고 템플릿으로 작동하고 입력 매개변수를 통해 사용자/프로그램 데이터를 받아들이는 새로운 유형의 핸들러를 조각해야 합니다.

처음에 나는 이것이 부정적인 부분의 또 다른 부분이라고 생각했지만 더 잘 읽었습니다. 그렇지 않은 것으로 나타났습니다. 그냥 감정.

생성자는 알고리즘 거래에 진정으로 열정적인 사람들을 위한 것입니다. 그들에게는 그래프 라이브러리를 연구하는 데 시간을 낭비하지 않고 다음 코드를 가져와서 작성하는 것이 합리적입니다.

 //====================================================================================================================
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,
//====================================================================================================================

그리고 동적 테이블이 있는 창을 가져옵니다.


페어링 파일에서 사용자는 다음 코드를 받게 됩니다.

 //=====================================================================================================================
//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 ;
  
   }
}
//=================================================================================================================

그리고 버튼 클릭 이벤트에서 무엇을 어떻게 할 것인지 결정할 것입니다.

 
 

다음 동적 테이블은 훨씬 더 흥미로울 것입니다. 셀에는 입력 필드 , 목록, 확인란, 버튼, 라디오 버튼, 진행률 표시줄, +/- 버튼이 있는 입력 필드가 있습니다.

가장 어려운 점은 바로 그러한 테이블의 역동성입니다. 결국 요소에 액세스하고 해당 값을 가져오는 것은 특정 매개변수에 묶여 있지 않고 행의 마법에 달려 있습니다.