我的方法。核心是引擎。 - 页 129

 
我将投入我的五分钱。我现在没有时间了。但有这样一个想法,在家里实施类似的面板。因此,我认为不只是做一个十字星来平仓 (虽然这是必要的),还要做一个标记,指定手数,做批发平仓。这将给与职位更灵活的工作,以及他们的部分关闭。
 
Vasiliy Sokolov:

用你所附的引擎的版本进行工作,作为示范。

这是很直接的。如果你的方法和我想的一样,那么我不认为动态表或通过计时器更新位置值有什么问题。彼得,你为什么从一开始就把事情搞得一团糟?)

瓦西里,最主要的是不要急于下结论。既不适合你,也不适合我))。

 
Konstantin Nikitin:
我将投入我的五分钱。我现在没有时间了。但有这样一个想法,在家里实施类似的面板。因此,我认为不只是做一个十字星来平仓 (虽然这是必要的),还要做一个标记,指定手数,做这个批发平仓。这将给与职位更灵活的工作,以及他们的部分关闭。

我可以做到这一点。

 
Vasiliy Sokolov:

彼得,在定时器中做一个for循环,它将穿过未结订单并将订单列表中的变化发送到你的表中。另外,让你表中的订单利润也动态变化。

Vasily,请把这段代码粘贴到测试的EA文件中(用tick和timer功能代替旧的功能)。

//+------------------------------------------------------------------+
//| 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()


它应该工作得很好。看看吧。

 
注意,我对上面的代码稍作了调整(如果你已经放进去了)。
 

呃,这不是典型的做法--将数据(模型)与视图分开,并使用观察者模式将特定的视图订阅到模型变化或特定的模型字段。

但这需要这样一个库的用户,以面向对象的思维,把他们的EA数据塞进建议的对象结构中(是的,是的,你需要学习该库/框架的方法来建立一个接口)。而且很多人对OOP一无所知。

但彼得说你不必学习任何东西!只要去把你的全局变量 塞进现成的处理程序卷轴中,接口就能工作。是的,它是一个天赐良机,伙计们!它不是 "为书架制作木板,按照说明连接它们,然后摆放书籍",而是 "画出你的书架,然后在上面摆放你的书籍"。少写代码多办事((c)/JQuery,如果你是)。


很明显,产品定位有问题。如果是这样呢?嘿,程序员!你想赚点钱吗?你可以卖掉看起来不错的东西!拿出一百多个没有接口的专家顾问系统,然后卖给他们接口,哈哈哈 ))


好吧,界面文件有一个缺点,其中控件的处理程序是 "突出的"--它是静态的。我必须绞尽脑汁,创建一个新的处理程序类型,作为一个模板,通过输入参数接受用户/程序数据。

 
Igor Volodin:

诶,不是要做大典......

没关系,Rehtag会做Konowam。)))

 
Igor Volodin:

呃,这不是典型的做法--将数据(模型)与视图分开,并使用观察者模式将特定的视图订阅到模型变化或特定的模型字段。

但这需要这样一个库的用户,以面向对象的思维,把他们的EA数据塞进建议的对象结构中(是的,是的,你需要学习该库/框架的方法来建立接口)。而且很多人对OOP一无所知。

但彼得说你不必学习任何东西!只要去把你的全局变量 塞进现成的处理程序卷轴中,接口就能工作。是的,它是一个天赐良机,伙计们!它不是 "为书架制作木板,按照说明连接它们,然后摆放书籍",而是 "画出你的书架,然后在上面摆放你的书籍"。少写代码多办事((c)/JQuery,如果你是)。


显然,产品定位存在问题。如果是这样呢?嘿,程序员!你想赚点钱吗?你可以卖掉看起来不错的东西!拿出一百多个没有接口的专家顾问系统,然后卖给他们接口,哈哈哈 ))


好吧,界面文件有一个缺点,其中控件的处理程序是 "突出的"--它是静态的。我必须绞尽脑汁,创建一个新的处理程序类型,作为一个模板,通过输入参数接受用户/程序数据。

起初我以为这又是一批消极的东西,但后来我读得更清楚了,原来不是。只是情绪。

这个构造器是为那些真正热衷于算法交易的人准备的。对他们来说,不把时间浪费在研究图库上而是直接编写这段代码是有意义的。

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

而且它将决定在按钮点击事件上做什么和怎么做。

 
 

下一个动态表将更加有趣。这些单元格将有输入字段、弹出列表、复选框、按钮、单选按钮、进度条,以及带有+/-按钮的输入字段。

棘手的部分是这样一个表格的动态性。毕竟,访问元素和获取它们的值并不与特定的参数相联系,而是取决于行的布局。